/ Hex Artifact Content
Login

Artifact b6fadd91f509fbcb9108f1d1a5e0985735fb315d:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 76 64 62  ..**.** $Id: vdb
0840: 65 2e 63 2c 76 20 31 2e 38 37 32 20 32 30 30 39  e.c,v 1.872 2009
0850: 2f 30 37 2f 31 34 20 31 38 3a 33 35 3a 34 35 20  /07/14 18:35:45 
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 22 76 64  .h".#include "vd
0890: 62 65 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  beInt.h"../*.** 
08a0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6c  The following gl
08b0: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73  obal variable is
08c0: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 76 65   incremented eve
08d0: 72 79 20 74 69 6d 65 20 61 20 63 75 72 73 6f 72  ry time a cursor
08e0: 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69 74 68 65  .** moves, eithe
08f0: 72 20 62 79 20 74 68 65 20 4f 50 5f 53 65 65 6b  r by the OP_Seek
0900: 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20 6f 72 20  XX, OP_Next, or 
0910: 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64 65 73 2e  OP_Prev opcodes.
0920: 20 20 54 68 65 20 74 65 73 74 0a 2a 2a 20 70 72    The test.** pr
0930: 6f 63 65 64 75 72 65 73 20 75 73 65 20 74 68 69  ocedures use thi
0940: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f  s information to
0950: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
0960: 69 6e 64 69 63 65 73 20 61 72 65 0a 2a 2a 20 77  indices are.** w
0970: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0980: 2e 20 20 54 68 69 73 20 76 61 72 69 61 62 6c 65  .  This variable
0990: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
09a0: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a 2a   other than to.*
09b0: 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74 68  * help verify th
09c0: 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74  e correct operat
09d0: 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61  ion of the libra
09e0: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
09f0: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0a00: 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
0a10: 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a  nt = 0;.#endif..
0a20: 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69 73 20  /*.** When this 
0a30: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0a40: 69 73 20 70 6f 73 69 74 69 76 65 2c 20 69 74 20  is positive, it 
0a50: 67 65 74 73 20 64 65 63 72 65 6d 65 6e 74 65 64  gets decremented
0a60: 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a 2a 2a 20   once before.** 
0a70: 65 61 63 68 20 69 6e 73 74 72 75 63 74 69 6f 6e  each instruction
0a80: 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20 20 57   in the VDBE.  W
0a90: 68 65 6e 20 72 65 61 63 68 65 73 20 7a 65 72 6f  hen reaches zero
0aa0: 2c 20 74 68 65 20 75 31 2e 69 73 49 6e 74 65 72  , the u1.isInter
0ab0: 72 75 70 74 65 64 0a 2a 2a 20 66 69 65 6c 64 20  rupted.** field 
0ac0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 20 73  of the sqlite3 s
0ad0: 74 72 75 63 74 75 72 65 20 69 73 20 73 65 74 20  tructure is set 
0ae0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 69 6d 75  in order to simu
0af0: 6c 61 74 65 20 61 6e 64 20 69 6e 74 65 72 72 75  late and interru
0b00: 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  pt..**.** This f
0b10: 61 63 69 6c 69 74 79 20 69 73 20 75 73 65 64 20  acility is used 
0b20: 66 6f 72 20 74 65 73 74 69 6e 67 20 70 75 72 70  for testing purp
0b30: 6f 73 65 73 20 6f 6e 6c 79 2e 20 20 49 74 20 64  oses only.  It d
0b40: 6f 65 73 20 6e 6f 74 20 66 75 6e 63 74 69 6f 6e  oes not function
0b50: 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72 64 69 6e 61  .** in an ordina
0b60: 72 79 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  ry build..*/.#if
0b70: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0b80: 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  int sqlite3_inte
0b90: 72 72 75 70 74 5f 63 6f 75 6e 74 20 3d 20 30 3b  rrupt_count = 0;
0ba0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0bb0: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0bc0: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0bd0: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65  mented each type
0be0: 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
0bf0: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
0c00: 65 64 2e 20 20 54 68 65 20 74 65 73 74 20 70 72  ed.  The test pr
0c10: 6f 63 65 64 75 72 65 73 20 75 73 65 20 74 68 69  ocedures use thi
0c20: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f  s information to
0c30: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 0a   make sure that.
0c40: 2a 2a 20 73 6f 72 74 69 6e 67 20 69 73 20 6f 63  ** sorting is oc
0c50: 63 75 72 72 69 6e 67 20 6f 72 20 6e 6f 74 20 6f  curring or not o
0c60: 63 63 75 72 72 69 6e 67 20 61 74 20 61 70 70 72  ccurring at appr
0c70: 6f 70 72 69 61 74 65 20 74 69 6d 65 73 2e 20 20  opriate times.  
0c80: 20 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a   This variable.*
0c90: 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  * has no functio
0ca0: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20  n other than to 
0cb0: 68 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20  help verify the 
0cc0: 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f  correct operatio
0cd0: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72  n of the.** libr
0ce0: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0cf0: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0d00: 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
0d10: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0d20: 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c  *.** The next gl
0d30: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 72 65  obal variable re
0d40: 63 6f 72 64 73 20 74 68 65 20 73 69 7a 65 20 6f  cords the size o
0d50: 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 4d 45  f the largest ME
0d60: 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72 20 4d 45 4d  M_Blob.** or MEM
0d70: 5f 53 74 72 20 74 68 61 74 20 68 61 73 20 62 65  _Str that has be
0d80: 65 6e 20 75 73 65 64 20 62 79 20 61 20 56 44 42  en used by a VDB
0d90: 45 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 74  E opcode.  The t
0da0: 65 73 74 20 70 72 6f 63 65 64 75 72 65 73 0a 2a  est procedures.*
0db0: 2a 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72  * use this infor
0dc0: 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73  mation to make s
0dd0: 75 72 65 20 74 68 61 74 20 74 68 65 20 7a 65 72  ure that the zer
0de0: 6f 2d 62 6c 6f 62 20 66 75 6e 63 74 69 6f 6e 61  o-blob functiona
0df0: 6c 69 74 79 0a 2a 2a 20 69 73 20 77 6f 72 6b 69  lity.** is worki
0e00: 6e 67 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 20  ng correctly.   
0e10: 54 68 69 73 20 76 61 72 69 61 62 6c 65 20 68 61  This variable ha
0e20: 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 6f 74  s no function ot
0e30: 68 65 72 20 74 68 61 6e 20 74 6f 0a 2a 2a 20 68  her than to.** h
0e40: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0e50: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0e60: 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e   of the library.
0e70: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
0e80: 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74  E_TEST.int sqlit
0e90: 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20  e3_max_blobsize 
0ea0: 3d 20 30 3b 0a 73 74 61 74 69 63 20 76 6f 69 64  = 0;.static void
0eb0: 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69   updateMaxBlobsi
0ec0: 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66  ze(Mem *p){.  if
0ed0: 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d  ( (p->flags & (M
0ee0: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
0ef0: 29 21 3d 30 20 26 26 20 70 2d 3e 6e 3e 73 71 6c  )!=0 && p->n>sql
0f00: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
0f10: 65 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  e ){.    sqlite3
0f20: 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20 3d 20  _max_blobsize = 
0f30: 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64  p->n;.  }.}.#end
0f40: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61  if../*.** Test a
0f50: 20 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65   register to see
0f60: 20 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74   if it exceeds t
0f70: 68 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d  he current maxim
0f80: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a  um blob size..**
0f90: 20 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63   If it does, rec
0fa0: 6f 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69  ord the new maxi
0fb0: 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a  mum blob size..*
0fc0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
0fd0: 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64  LITE_TEST) && !d
0fe0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
0ff0: 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29  IT_BUILTIN_TEST)
1000: 0a 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45  .# define UPDATE
1010: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29  _MAX_BLOBSIZE(P)
1020: 20 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73    updateMaxBlobs
1030: 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  ize(P).#else.# d
1040: 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58  efine UPDATE_MAX
1050: 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e  _BLOBSIZE(P).#en
1060: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65  dif../*.** Conve
1070: 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65 67  rt the given reg
1080: 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72  ister into a str
1090: 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74 20  ing if it isn't 
10a0: 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20  one.** already. 
10b0: 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  Return non-zero 
10c0: 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  if a malloc() fa
10d0: 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ils..*/.#define 
10e0: 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63  Stringify(P, enc
10f0: 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e  ) \.   if(((P)->
1100: 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d  flags&(MEM_Str|M
1110: 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20  EM_Blob))==0 && 
1120: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
1130: 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 29 29 20  ringify(P,enc)) 
1140: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1150: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1160: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1170: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1180: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1190: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
11a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
11b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
11c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
11d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
11e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
11f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1200: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1210: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1220: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1230: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1240: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1250: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1260: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1270: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1280: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1290: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
12a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
12b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
12c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
12d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
12e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
12f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1300: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1310: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1320: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1330: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 6e 20 4d  string into an M
1340: 45 4d 5f 44 79 6e 20 73 74 72 69 6e 67 2e 0a 2a  EM_Dyn string..*
1350: 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70 68 65  /.#define Deephe
1360: 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20  meralize(P) \.  
1370: 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73   if( ((P)->flags
1380: 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c  &MEM_Ephem)!=0 \
1390: 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74  .       && sqlit
13a0: 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69  e3VdbeMemMakeWri
13b0: 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74  teable(P) ){ got
13c0: 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 0a 2a  o no_mem;}../*.*
13d0: 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 56 64  * Call sqlite3Vd
13e0: 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
13f0: 29 20 6f 6e 20 74 68 65 20 73 75 70 70 6c 69 65  ) on the supplie
1400: 64 20 76 61 6c 75 65 20 28 74 79 70 65 20 4d 65  d value (type Me
1410: 6d 2a 29 0a 2a 2a 20 50 20 69 66 20 72 65 71 75  m*).** P if requ
1420: 69 72 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ired..*/.#define
1430: 20 45 78 70 61 6e 64 42 6c 6f 62 28 50 29 20 28   ExpandBlob(P) (
1440: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1450: 5a 65 72 6f 29 3f 73 71 6c 69 74 65 33 56 64 62  Zero)?sqlite3Vdb
1460: 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 50  eMemExpandBlob(P
1470: 29 3a 30 29 0a 0a 2f 2a 0a 2a 2a 20 41 72 67 75  ):0)../*.** Argu
1480: 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69 6e 74 73  ment pMem points
1490: 20 61 74 20 61 20 72 65 67 69 73 74 65 72 20 74   at a register t
14a0: 68 61 74 20 77 69 6c 6c 20 62 65 20 70 61 73 73  hat will be pass
14b0: 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73 65 72 2d  ed to a.** user-
14c0: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
14d0: 20 6f 72 20 72 65 74 75 72 6e 65 64 20 74 6f 20   or returned to 
14e0: 74 68 65 20 75 73 65 72 20 61 73 20 74 68 65 20  the user as the 
14f0: 72 65 73 75 6c 74 20 6f 66 20 61 20 71 75 65 72  result of a quer
1500: 79 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  y..** The second
1510: 20 61 72 67 75 6d 65 6e 74 2c 20 27 64 62 5f 65   argument, 'db_e
1520: 6e 63 27 20 69 73 20 74 68 65 20 74 65 78 74 20  nc' is the text 
1530: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
1540: 20 74 68 65 20 76 64 62 65 20 66 6f 72 0a 2a 2a   the vdbe for.**
1550: 20 72 65 67 69 73 74 65 72 20 76 61 72 69 61 62   register variab
1560: 6c 65 73 2e 20 20 54 68 69 73 20 72 6f 75 74 69  les.  This routi
1570: 6e 65 20 73 65 74 73 20 74 68 65 20 70 4d 65 6d  ne sets the pMem
1580: 2d 3e 65 6e 63 20 61 6e 64 20 70 4d 65 6d 2d 3e  ->enc and pMem->
1590: 74 79 70 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65  type.** variable
15a0: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  s used by the sq
15b0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29 20  lite3_value_*() 
15c0: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 64 65  routines..*/.#de
15d0: 66 69 6e 65 20 73 74 6f 72 65 54 79 70 65 49 6e  fine storeTypeIn
15e0: 66 6f 28 41 2c 42 29 20 5f 73 74 6f 72 65 54 79  fo(A,B) _storeTy
15f0: 70 65 49 6e 66 6f 28 41 29 0a 73 74 61 74 69 63  peInfo(A).static
1600: 20 76 6f 69 64 20 5f 73 74 6f 72 65 54 79 70 65   void _storeType
1610: 49 6e 66 6f 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  Info(Mem *pMem){
1620: 0a 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20 70  .  int flags = p
1630: 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  Mem->flags;.  if
1640: 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ( flags & MEM_Nu
1650: 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  ll ){.    pMem->
1660: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 4e 55  type = SQLITE_NU
1670: 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  LL;.  }.  else i
1680: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  f( flags & MEM_I
1690: 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  nt ){.    pMem->
16a0: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 49 4e  type = SQLITE_IN
16b0: 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20 65 6c 73  TEGER;.  }.  els
16c0: 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45  e if( flags & ME
16d0: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 4d  M_Real ){.    pM
16e0: 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54  em->type = SQLIT
16f0: 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20 65  E_FLOAT;.  }.  e
1700: 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20  lse if( flags & 
1710: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 70  MEM_Str ){.    p
1720: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
1730: 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65 6c 73 65  TE_TEXT;.  }else
1740: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
1750: 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b 0a   = SQLITE_BLOB;.
1760: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f    }.}../*.** Pro
1770: 70 65 72 74 69 65 73 20 6f 66 20 6f 70 63 6f 64  perties of opcod
1780: 65 73 2e 20 20 54 68 65 20 4f 50 46 4c 47 5f 49  es.  The OPFLG_I
1790: 4e 49 54 49 41 4c 49 5a 45 52 20 6d 61 63 72 6f  NITIALIZER macro
17a0: 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 62   is.** created b
17b0: 79 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  y mkopcodeh.awk 
17c0: 64 75 72 69 6e 67 20 63 6f 6d 70 69 6c 61 74 69  during compilati
17d0: 6f 6e 2e 20 20 44 61 74 61 20 69 73 20 6f 62 74  on.  Data is obt
17e0: 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 74 68  ained.** from th
17f0: 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 6c 6c 6f  e comments follo
1800: 77 69 6e 67 20 74 68 65 20 22 63 61 73 65 20 4f  wing the "case O
1810: 50 5f 78 78 78 78 3a 22 20 73 74 61 74 65 6d 65  P_xxxx:" stateme
1820: 6e 74 73 20 69 6e 0a 2a 2a 20 74 68 69 73 20 66  nts in.** this f
1830: 69 6c 65 2e 20 20 0a 2a 2f 0a 73 74 61 74 69 63  ile.  .*/.static
1840: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
1850: 63 68 61 72 20 6f 70 63 6f 64 65 50 72 6f 70 65  char opcodePrope
1860: 72 74 79 5b 5d 20 3d 20 4f 50 46 4c 47 5f 49 4e  rty[] = OPFLG_IN
1870: 49 54 49 41 4c 49 5a 45 52 3b 0a 0a 2f 2a 0a 2a  ITIALIZER;../*.*
1880: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
1890: 20 61 6e 20 6f 70 63 6f 64 65 20 68 61 73 20 61   an opcode has a
18a0: 6e 79 20 6f 66 20 74 68 65 20 4f 50 46 4c 47 5f  ny of the OPFLG_
18b0: 78 78 78 20 70 72 6f 70 65 72 74 69 65 73 0a 2a  xxx properties.*
18c0: 2a 20 73 70 65 63 69 66 69 65 64 20 62 79 20 6d  * specified by m
18d0: 61 73 6b 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ask..*/.int sqli
18e0: 74 65 33 56 64 62 65 4f 70 63 6f 64 65 48 61 73  te3VdbeOpcodeHas
18f0: 50 72 6f 70 65 72 74 79 28 69 6e 74 20 6f 70 63  Property(int opc
1900: 6f 64 65 2c 20 69 6e 74 20 6d 61 73 6b 29 7b 0a  ode, int mask){.
1910: 20 20 61 73 73 65 72 74 28 20 6f 70 63 6f 64 65    assert( opcode
1920: 3e 30 20 26 26 20 6f 70 63 6f 64 65 3c 28 69 6e  >0 && opcode<(in
1930: 74 29 73 69 7a 65 6f 66 28 6f 70 63 6f 64 65 50  t)sizeof(opcodeP
1940: 72 6f 70 65 72 74 79 29 20 29 3b 0a 20 20 72 65  roperty) );.  re
1950: 74 75 72 6e 20 28 6f 70 63 6f 64 65 50 72 6f 70  turn (opcodeProp
1960: 65 72 74 79 5b 6f 70 63 6f 64 65 5d 26 6d 61 73  erty[opcode]&mas
1970: 6b 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  k)!=0;.}../*.** 
1980: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
1990: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
19a0: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
19b0: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
19c0: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
19d0: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
19e0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
19f0: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
1a00: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
1a10: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
1a20: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
1a30: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
1a40: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
1a50: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1a60: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
1a70: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1a80: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
1a90: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
1aa0: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
1ab0: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1ac0: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1ad0: 20 20 2f 2a 20 57 68 65 6e 20 64 61 74 61 62 61    /* When databa
1ae0: 73 65 20 74 68 65 20 63 75 72 73 6f 72 20 62 65  se the cursor be
1af0: 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20  longs to, or -1 
1b00: 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72 65 65  */.  int isBtree
1b10: 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20 54 72  Cursor     /* Tr
1b20: 75 65 20 66 6f 72 20 42 2d 54 72 65 65 20 76 73  ue for B-Tree vs
1b30: 2e 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 6f  . pseudo-table o
1b40: 72 20 76 74 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f  r vtab */.){.  /
1b50: 2a 20 46 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72  * Find the memor
1b60: 79 20 63 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c  y cell that will
1b70: 20 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72   be used to stor
1b80: 65 20 74 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65  e the blob of me
1b90: 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75 69 72  mory.  ** requir
1ba0: 65 64 20 66 6f 72 20 74 68 69 73 20 56 64 62 65  ed for this Vdbe
1bb0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1bc0: 2e 20 49 74 20 69 73 20 63 6f 6e 76 65 6e 69 65  . It is convenie
1bd0: 6e 74 20 74 6f 20 75 73 65 20 61 20 0a 20 20 2a  nt to use a .  *
1be0: 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79 20 63 65  * vdbe memory ce
1bf0: 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20 74 68 65  ll to manage the
1c00: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1c10: 6f 6e 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  on required for 
1c20: 61 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f  a.  ** VdbeCurso
1c30: 72 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  r structure for 
1c40: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65  the following re
1c50: 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a  asons:.  **.  **
1c60: 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63     * Sometimes c
1c70: 75 72 73 6f 72 20 6e 75 6d 62 65 72 73 20 61 72  ursor numbers ar
1c80: 65 20 75 73 65 64 20 66 6f 72 20 61 20 63 6f 75  e used for a cou
1c90: 70 6c 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  ple of different
1ca0: 0a 20 20 2a 2a 20 20 20 20 20 70 75 72 70 6f 73  .  **     purpos
1cb0: 65 73 20 69 6e 20 61 20 76 64 62 65 20 70 72 6f  es in a vdbe pro
1cc0: 67 72 61 6d 2e 20 54 68 65 20 64 69 66 66 65 72  gram. The differ
1cd0: 65 6e 74 20 75 73 65 73 20 6d 69 67 68 74 20 72  ent uses might r
1ce0: 65 71 75 69 72 65 0a 20 20 2a 2a 20 20 20 20 20  equire.  **     
1cf0: 64 69 66 66 65 72 65 6e 74 20 73 69 7a 65 64 20  different sized 
1d00: 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d  allocations. Mem
1d10: 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f 76 69 64  ory cells provid
1d20: 65 20 67 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20  e growable.  ** 
1d30: 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e      allocations.
1d40: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57  .  **.  **   * W
1d50: 68 65 6e 20 75 73 69 6e 67 20 45 4e 41 42 4c 45  hen using ENABLE
1d60: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
1d70: 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  NT, memory cell 
1d80: 62 75 66 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a  buffers can.  **
1d90: 20 20 20 20 20 62 65 20 66 72 65 65 64 20 6c 61       be freed la
1da0: 7a 69 6c 79 20 76 69 61 20 74 68 65 20 73 71 6c  zily via the sql
1db0: 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  ite3_release_mem
1dc0: 6f 72 79 28 29 20 41 50 49 2e 20 54 68 69 73 0a  ory() API. This.
1dd0: 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a    **     minimiz
1de0: 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  es the number of
1df0: 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61   malloc calls ma
1e00: 64 65 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  de by the system
1e10: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f  ..  **.  ** Memo
1e20: 72 79 20 63 65 6c 6c 73 20 66 6f 72 20 63 75 72  ry cells for cur
1e30: 73 6f 72 73 20 61 72 65 20 61 6c 6c 6f 63 61 74  sors are allocat
1e40: 65 64 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66  ed at the top of
1e50: 20 74 68 65 20 61 64 64 72 65 73 73 0a 20 20 2a   the address.  *
1e60: 2a 20 73 70 61 63 65 2e 20 4d 65 6d 6f 72 79 20  * space. Memory 
1e70: 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 29 20 63  cell (p->nMem) c
1e80: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 63 75  orresponds to cu
1e90: 72 73 6f 72 20 30 2e 20 53 70 61 63 65 20 66 6f  rsor 0. Space fo
1ea0: 72 0a 20 20 2a 2a 20 63 75 72 73 6f 72 20 31 20  r.  ** cursor 1 
1eb0: 69 73 20 6d 61 6e 61 67 65 64 20 62 79 20 6d 65  is managed by me
1ec0: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1ed0: 65 6d 2d 31 29 2c 20 65 74 63 2e 0a 20 20 2a 2f  em-1), etc..  */
1ee0: 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 26  .  Mem *pMem = &
1ef0: 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d  p->aMem[p->nMem-
1f00: 69 43 75 72 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42  iCur];..  int nB
1f10: 79 74 65 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  yte;.  VdbeCurso
1f20: 72 20 2a 70 43 78 20 3d 20 30 3b 0a 20 20 6e 42  r *pCx = 0;.  nB
1f30: 79 74 65 20 3d 20 0a 20 20 20 20 20 20 73 69 7a  yte = .      siz
1f40: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 20  eof(VdbeCursor) 
1f50: 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74 72 65  + .      (isBtre
1f60: 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42  eCursor?sqlite3B
1f70: 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29  treeCursorSize()
1f80: 3a 30 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e  :0) + .      2*n
1f90: 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32  Field*sizeof(u32
1fa0: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43  );..  assert( iC
1fb0: 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  ur<p->nCursor );
1fc0: 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b  .  if( p->apCsr[
1fd0: 69 43 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c  iCur] ){.    sql
1fe0: 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
1ff0: 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69  or(p, p->apCsr[i
2000: 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70  Cur]);.    p->ap
2010: 43 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20  Csr[iCur] = 0;. 
2020: 20 7d 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f   }.  if( SQLITE_
2030: 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d  OK==sqlite3VdbeM
2040: 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79  emGrow(pMem, nBy
2050: 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d  te, 0) ){.    p-
2060: 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70  >apCsr[iCur] = p
2070: 43 78 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72  Cx = (VdbeCursor
2080: 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d  *)pMem->z;.    m
2090: 65 6d 73 65 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30  emset(pMem->z, 0
20a0: 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 70 43  , nByte);.    pC
20b0: 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20  x->iDb = iDb;.  
20c0: 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20    pCx->nField = 
20d0: 6e 46 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20  nField;.    if( 
20e0: 6e 46 69 65 6c 64 20 29 7b 0a 20 20 20 20 20 20  nField ){.      
20f0: 70 43 78 2d 3e 61 54 79 70 65 20 3d 20 28 75 33  pCx->aType = (u3
2100: 32 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a  2 *)&pMem->z[siz
2110: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 5d  eof(VdbeCursor)]
2120: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
2130: 69 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b  isBtreeCursor ){
2140: 0a 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72  .      pCx->pCur
2150: 73 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a  sor = (BtCursor*
2160: 29 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65  ).          &pMe
2170: 6d 2d 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65  m->z[sizeof(Vdbe
2180: 43 75 72 73 6f 72 29 2b 32 2a 6e 46 69 65 6c 64  Cursor)+2*nField
2190: 2a 73 69 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20  *sizeof(u32)];. 
21a0: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
21b0: 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  n pCx;.}../*.** 
21c0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61  Try to convert a
21d0: 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75   value into a nu
21e0: 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61  meric representa
21f0: 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a  tion if we can.*
2200: 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20  * do so without 
2210: 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
2220: 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
2230: 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73 74 72  ords, if the str
2240: 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b  ing.** looks lik
2250: 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76  e a number, conv
2260: 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75  ert it into a nu
2270: 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65  mber.  If it doe
2280: 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69  s not.** look li
2290: 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61  ke a number, lea
22a0: 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a  ve it alone..*/.
22b0: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
22c0: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
22d0: 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20 69  (Mem *pRec){.  i
22e0: 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20  f( (pRec->flags 
22f0: 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  & (MEM_Real|MEM_
2300: 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Int))==0 ){.    
2310: 69 6e 74 20 72 65 61 6c 6e 75 6d 3b 0a 20 20 20  int realnum;.   
2320: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
2330: 75 6c 54 65 72 6d 69 6e 61 74 65 28 70 52 65 63  ulTerminate(pRec
2340: 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63  );.    if( (pRec
2350: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29  ->flags&MEM_Str)
2360: 0a 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c  .         && sql
2370: 69 74 65 33 49 73 4e 75 6d 62 65 72 28 70 52 65  ite3IsNumber(pRe
2380: 63 2d 3e 7a 2c 20 26 72 65 61 6c 6e 75 6d 2c 20  c->z, &realnum, 
2390: 70 52 65 63 2d 3e 65 6e 63 29 20 29 7b 0a 20 20  pRec->enc) ){.  
23a0: 20 20 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20      i64 value;. 
23b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
23c0: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
23d0: 52 65 63 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Rec, SQLITE_UTF8
23e0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 21 72 65  );.      if( !re
23f0: 61 6c 6e 75 6d 20 26 26 20 73 71 6c 69 74 65 33  alnum && sqlite3
2400: 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20  Atoi64(pRec->z, 
2410: 26 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 20  &value) ){.     
2420: 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 76     pRec->u.i = v
2430: 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 4d 65  alue;.        Me
2440: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 52 65  mSetTypeFlag(pRe
2450: 63 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  c, MEM_Int);.   
2460: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2470: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2480: 52 65 61 6c 69 66 79 28 70 52 65 63 29 3b 0a 20  Realify(pRec);. 
2490: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
24a0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73  .}../*.** Proces
24b0: 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e  sing is determin
24c0: 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74  e by the affinit
24d0: 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a  y parameter:.**.
24e0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ** SQLITE_AFF_IN
24f0: 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45  TEGER:.** SQLITE
2500: 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51  _AFF_REAL:.** SQ
2510: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
2520: 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63  :.**    Try to c
2530: 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61  onvert pRec to a
2540: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2550: 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a  entation or a .*
2560: 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  *    floating-po
2570: 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  int representati
2580: 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72  on if an integer
2590: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a   representation.
25a0: 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73  **    is not pos
25b0: 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61  sible.  Note tha
25c0: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65  t the integer re
25d0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a  presentation is.
25e0: 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65  **    always pre
25f0: 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20  ferred, even if 
2600: 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20  the affinity is 
2610: 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a  REAL, because.**
2620: 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72      an integer r
2630: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2640: 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69   more space effi
2650: 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a  cient on disk..*
2660: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
2670: 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76  TEXT:.**    Conv
2680: 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65  ert pRec to a te
2690: 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  xt representatio
26a0: 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  n..**.** SQLITE_
26b0: 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20  AFF_NONE:.**    
26c0: 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20  No-op.  pRec is 
26d0: 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74  unchanged..*/.st
26e0: 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41  atic void applyA
26f0: 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a  ffinity(.  Mem *
2700: 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f  pRec,          /
2710: 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61  * The value to a
2720: 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f  pply affinity to
2730: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
2740: 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65  ity,      /* The
2750: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
2760: 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20  applied */.  u8 
2770: 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20  enc             
2780: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78   /* Use this tex
2790: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b  t encoding */.){
27a0: 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  .  if( affinity=
27b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
27c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
27d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
27e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
27f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2800: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2810: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2820: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2830: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2840: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2850: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2860: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2870: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2880: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2890: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
28a0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
28b0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
28c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
28d0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
28e0: 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20   enc);.    }.   
28f0: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20   pRec->flags &= 
2900: 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  ~(MEM_Real|MEM_I
2910: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  nt);.  }else if(
2920: 20 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49 54   affinity!=SQLIT
2930: 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20  E_AFF_NONE ){.  
2940: 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69    assert( affini
2950: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  ty==SQLITE_AFF_I
2960: 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69  NTEGER || affini
2970: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  ty==SQLITE_AFF_R
2980: 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  EAL.            
2990: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
29a0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
29b0: 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d   );.    applyNum
29c0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
29d0: 63 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63  c);.    if( pRec
29e0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
29f0: 61 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  al ){.      sqli
2a00: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
2a10: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
2a20: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
2a30: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2a40: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2a50: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2a60: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2a70: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2a80: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2a90: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2aa0: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2ab0: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2ac0: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2ad0: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2ae0: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2af0: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2b00: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2b10: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2b20: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2b30: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2b40: 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  gument..**.** Th
2b50: 69 73 20 69 73 20 61 6e 20 45 58 50 45 52 49 4d  is is an EXPERIM
2b60: 45 4e 54 41 4c 20 61 70 69 20 61 6e 64 20 69 73  ENTAL api and is
2b70: 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e   subject to chan
2b80: 67 65 20 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a 2a  ge or removal..*
2b90: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61  /.int sqlite3_va
2ba0: 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65  lue_numeric_type
2bb0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
2bc0: 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d  pVal){.  Mem *pM
2bd0: 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b  em = (Mem*)pVal;
2be0: 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  .  applyNumericA
2bf0: 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a 20  ffinity(pMem);. 
2c00: 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70   storeTypeInfo(p
2c10: 4d 65 6d 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  Mem, 0);.  retur
2c20: 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a  n pMem->type;.}.
2c30: 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20  ./*.** Exported 
2c40: 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79  version of apply
2c50: 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73  Affinity(). This
2c60: 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71   one works on sq
2c70: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a  lite3_value*, .*
2c80: 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e  * not the intern
2c90: 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f  al Mem* type..*/
2ca0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2cb0: 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
2cc0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
2cd0: 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66   *pVal, .  u8 af
2ce0: 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e  finity, .  u8 en
2cf0: 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69  c.){.  applyAffi
2d00: 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c  nity((Mem *)pVal
2d10: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29  , affinity, enc)
2d20: 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
2d30: 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57  TE_DEBUG./*.** W
2d40: 72 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69  rite a nice stri
2d50: 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
2d60: 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  n of the content
2d70: 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a  s of cell pMem.*
2d80: 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42  * into buffer zB
2d90: 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e  uf, length nBuf.
2da0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2db0: 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69  VdbeMemPrettyPri
2dc0: 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68  nt(Mem *pMem, ch
2dd0: 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61  ar *zBuf){.  cha
2de0: 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a  r *zCsr = zBuf;.
2df0: 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e    int f = pMem->
2e00: 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63  flags;..  static
2e10: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e   const char *con
2e20: 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20  st encnames[] = 
2e30: 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22  {"(X)", "(8)", "
2e40: 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29  (16LE)", "(16BE)
2e50: 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d  "};..  if( f&MEM
2e60: 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74  _Blob ){.    int
2e70: 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a   i;.    char c;.
2e80: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
2e90: 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  Dyn ){.      c =
2ea0: 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'z';.      asse
2eb0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
2ec0: 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  atic|MEM_Ephem))
2ed0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
2ee0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61   if( f & MEM_Sta
2ef0: 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  tic ){.      c =
2f00: 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65   't';.      asse
2f10: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79  rt( (f & (MEM_Dy
2f20: 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30  n|MEM_Ephem))==0
2f30: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   );.    }else if
2f40: 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20  ( f & MEM_Ephem 
2f50: 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27  ){.      c = 'e'
2f60: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2f70: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
2f80: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
2f90: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2fa0: 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d    c = 's';.    }
2fb0: 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ..    sqlite3_sn
2fc0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
2fd0: 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20  , "%c", c);.    
2fe0: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
2ff0: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3000: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3010: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
3020: 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a  %d[", pMem->n);.
3030: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3040: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3050: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  );.    for(i=0; 
3060: 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e  i<16 && i<pMem->
3070: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73  n; i++){.      s
3080: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3090: 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58  100, zCsr, "%02X
30a0: 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a  ", ((int)pMem->z
30b0: 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20  [i] & 0xFF));.  
30c0: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
30d0: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
30e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72  );.    }.    for
30f0: 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c  (i=0; i<16 && i<
3100: 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20  pMem->n; i++){. 
3110: 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d       char z = pM
3120: 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20  em->z[i];.      
3130: 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32  if( z<32 || z>12
3140: 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e  6 ) *zCsr++ = '.
3150: 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a  ';.      else *z
3160: 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d  Csr++ = z;.    }
3170: 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ..    sqlite3_sn
3180: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3190: 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65  , "]%s", encname
31a0: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
31b0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
31c0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
31d0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
31e0: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
31f0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3200: 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a  (100, zCsr,"+%dz
3210: 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29  ",pMem->u.nZero)
3220: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3230: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3240: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3250: 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20   *zCsr = '\0';. 
3260: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3270: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e  EM_Str ){.    in
3280: 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66  t j, k;.    zBuf
3290: 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69  [0] = ' ';.    i
32a0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
32b0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
32c0: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
32d0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
32e0: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
32f0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3300: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3310: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42  atic ){.      zB
3320: 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20  uf[1] = 't';.   
3330: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3340: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3350: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3360: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3370: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
3380: 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20  zBuf[1] = 'e';. 
3390: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
33a0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
33b0: 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Dyn))==0 );.  
33c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
33d0: 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20  Buf[1] = 's';.  
33e0: 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20    }.    k = 2;. 
33f0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3400: 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b  ntf(100, &zBuf[k
3410: 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e  ], "%d", pMem->n
3420: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3430: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3440: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3450: 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20  k++] = '[';.    
3460: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26  for(j=0; j<15 &&
3470: 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29   j<pMem->n; j++)
3480: 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70  {.      u8 c = p
3490: 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20  Mem->z[j];.     
34a0: 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20   if( c>=0x20 && 
34b0: 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20  c<0x7f ){.      
34c0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b    zBuf[k++] = c;
34d0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
34e0: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
34f0: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20  = '.';.      }. 
3500: 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b     }.    zBuf[k+
3510: 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71  +] = ']';.    sq
3520: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3530: 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63  00,&zBuf[k], enc
3540: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3550: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3560: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3570: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3580: 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a  k++] = 0;.  }.}.
3590: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
35a0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
35b0: 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75  * Print the valu
35c0: 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20  e of a register 
35d0: 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70  for tracing purp
35e0: 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20  oses:.*/.static 
35f0: 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69  void memTracePri
3600: 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65  nt(FILE *out, Me
3610: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  m *p){.  if( p->
3620: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
3630: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
3640: 6f 75 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20  out, " NULL");. 
3650: 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66   }else if( (p->f
3660: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
3670: 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f  MEM_Str))==(MEM_
3680: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a  Int|MEM_Str) ){.
3690: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
36a0: 20 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e   " si:%lld", p->
36b0: 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  u.i);.  }else if
36c0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
36d0: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69  _Int ){.    fpri
36e0: 6e 74 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c  ntf(out, " i:%ll
36f0: 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66  d", p->u.i);.#if
3700: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3710: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
3720: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3730: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
3740: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3750: 75 74 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ut, " r:%g", p->
3760: 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c  r);.#endif.  }el
3770: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3780: 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a  & MEM_RowSet ){.
3790: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
37a0: 20 22 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20   " (rowset)");. 
37b0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72   }else{.    char
37c0: 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20   zBuf[200];.    
37d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
37e0: 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75  ettyPrint(p, zBu
37f0: 66 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28  f);.    fprintf(
3800: 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66  out, " ");.    f
3810: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22  printf(out, "%s"
3820: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73  , zBuf);.  }.}.s
3830: 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69 73  tatic void regis
3840: 74 65 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f  terTrace(FILE *o
3850: 75 74 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65  ut, int iReg, Me
3860: 6d 20 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66  m *p){.  fprintf
3870: 28 6f 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d  (out, "REG[%d] =
3880: 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d   ", iReg);.  mem
3890: 54 72 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20  TracePrint(out, 
38a0: 70 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75  p);.  fprintf(ou
38b0: 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64  t, "\n");.}.#end
38c0: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
38d0: 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e  E_DEBUG.#  defin
38e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
38f0: 28 52 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63  (R,M) if(p->trac
3900: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
3910: 70 2d 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65  p->trace,R,M).#e
3920: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45  lse.#  define RE
3930: 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d  GISTER_TRACE(R,M
3940: 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65  ).#endif...#ifde
3950: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a  f VDBE_PROFILE..
3960: 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20  /* .** hwtime.h 
3970: 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20  contains inline 
3980: 61 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66  assembler code f
3990: 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  or implementing 
39a0: 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d  .** high-perform
39b0: 61 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74  ance timing rout
39c0: 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  ines..*/.#includ
39d0: 65 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65  e "hwtime.h"..#e
39e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
39f0: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3a00: 55 50 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65  UPT macro define
3a10: 64 20 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20  d here looks to 
3a20: 73 65 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71  see if the.** sq
3a30: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
3a40: 29 20 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65  ) routine has be
3a50: 65 6e 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69  en called.  If i
3a60: 74 20 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e  t has been, then
3a70: 0a 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f  .** processing o
3a80: 66 20 74 68 65 20 56 44 42 45 20 70 72 6f 67 72  f the VDBE progr
3a90: 61 6d 20 69 73 20 69 6e 74 65 72 72 75 70 74 65  am is interrupte
3aa0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  d..**.** This ma
3ab0: 63 72 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65  cro added to eve
3ac0: 72 79 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ry instruction t
3ad0: 68 61 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20  hat does a jump 
3ae0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69  in order to.** i
3af0: 6d 70 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e  mplement a loop.
3b00: 20 20 54 68 69 73 20 74 65 73 74 20 75 73 65 64    This test used
3b10: 20 74 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20   to be on every 
3b20: 73 69 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69  single instructi
3b30: 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20  on,.** but that 
3b40: 6d 65 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65  meant we more te
3b50: 73 74 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65  sting that we ne
3b60: 65 64 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74  eded.  By only t
3b70: 65 73 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c  esting the.** fl
3b80: 61 67 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72  ag on jump instr
3b90: 75 63 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20  uctions, we get 
3ba0: 61 20 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20  a (small) speed 
3bb0: 69 6d 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a  improvement..*/.
3bc0: 23 64 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f  #define CHECK_FO
3bd0: 52 5f 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20  R_INTERRUPT \.  
3be0: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
3bf0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
3c00: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
3c10: 74 65 72 72 75 70 74 3b 0a 0a 23 69 66 64 65 66  terrupt;..#ifdef
3c20: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 73 74   SQLITE_DEBUG.st
3c30: 61 74 69 63 20 69 6e 74 20 66 69 6c 65 45 78 69  atic int fileExi
3c40: 73 74 73 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  sts(sqlite3 *db,
3c50: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
3c60: 6c 65 29 7b 0a 20 20 69 6e 74 20 72 65 73 20 3d  le){.  int res =
3c70: 20 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   0;.  int rc = S
3c80: 51 4c 49 54 45 5f 4f 4b 3b 0a 23 69 66 64 65 66  QLITE_OK;.#ifdef
3c90: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 2f   SQLITE_TEST.  /
3ca0: 2a 20 49 66 20 77 65 20 61 72 65 20 63 75 72 72  * If we are curr
3cb0: 65 6e 74 6c 79 20 74 65 73 74 69 6e 67 20 49 4f  ently testing IO
3cc0: 20 65 72 72 6f 72 73 2c 20 74 68 65 6e 20 64 6f   errors, then do
3cd0: 20 6e 6f 74 20 63 61 6c 6c 20 4f 73 41 63 63 65   not call OsAcce
3ce0: 73 73 28 29 20 74 6f 0a 20 20 2a 2a 20 74 65 73  ss() to.  ** tes
3cf0: 74 20 66 6f 72 20 74 68 65 20 70 72 65 73 65 6e  t for the presen
3d00: 63 65 20 6f 66 20 7a 46 69 6c 65 2e 20 54 68 69  ce of zFile. Thi
3d10: 73 20 69 73 20 62 65 63 61 75 73 65 20 61 6e 79  s is because any
3d20: 20 49 4f 20 65 72 72 6f 72 20 74 68 61 74 0a 20   IO error that. 
3d30: 20 2a 2a 20 6f 63 63 75 72 73 20 68 65 72 65 20   ** occurs here 
3d40: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 70 6f  will not be repo
3d50: 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68  rted, causing th
3d60: 65 20 74 65 73 74 20 74 6f 20 66 61 69 6c 2e 0a  e test to fail..
3d70: 20 20 2a 2f 0a 20 20 65 78 74 65 72 6e 20 69 6e    */.  extern in
3d80: 74 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72  t sqlite3_io_err
3d90: 6f 72 5f 70 65 6e 64 69 6e 67 3b 0a 20 20 69 66  or_pending;.  if
3da0: 28 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72  ( sqlite3_io_err
3db0: 6f 72 5f 70 65 6e 64 69 6e 67 3c 3d 30 20 29 0a  or_pending<=0 ).
3dc0: 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20  #endif.    rc = 
3dd0: 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28  sqlite3OsAccess(
3de0: 64 62 2d 3e 70 56 66 73 2c 20 7a 46 69 6c 65 2c  db->pVfs, zFile,
3df0: 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 45   SQLITE_ACCESS_E
3e00: 58 49 53 54 53 2c 20 26 72 65 73 29 3b 0a 20 20  XISTS, &res);.  
3e10: 72 65 74 75 72 6e 20 28 72 65 73 20 26 26 20 72  return (res && r
3e20: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d  c==SQLITE_OK);.}
3e30: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
3e40: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
3e50: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
3e60: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
3e70: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
3e80: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
3e90: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
3ea0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
3eb0: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
3ec0: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
3ed0: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
3ee0: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
3ef0: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
3f00: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
3f10: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
3f20: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
3f30: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
3f40: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
3f50: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
3f60: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
3f70: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
3f80: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
3f90: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
3fa0: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
3fb0: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
3fc0: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
3fd0: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
3fe0: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
3ff0: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
4000: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
4010: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
4020: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
4030: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
4040: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
4050: 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63  * Execute as muc
4060: 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67  h of a VDBE prog
4070: 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68  ram as we can th
4080: 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a  en return..**.**
4090: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
40a0: 52 65 61 64 79 28 29 20 6d 75 73 74 20 62 65 20  Ready() must be 
40b0: 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68  called before th
40c0: 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  is routine in or
40d0: 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20  der to.** close 
40e0: 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68  the program with
40f0: 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74   a final OP_Halt
4100: 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74   and to set up t
4110: 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20  he callbacks.** 
4120: 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65  and the error me
4130: 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a  ssage pointer..*
4140: 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20  *.** Whenever a 
4150: 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61  row or result da
4160: 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  ta is available,
4170: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
4180: 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76  ll either.** inv
4190: 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20 63  oke the result c
41a0: 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72  allback (if ther
41b0: 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74  e is one) or ret
41c0: 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  urn with.** SQLI
41d0: 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66  TE_ROW..**.** If
41e0: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
41f0: 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f  ade to open a lo
4200: 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20 74  cked database, t
4210: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
4220: 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20  .** will either 
4230: 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20  invoke the busy 
4240: 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65  callback (if the
4250: 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74  re is one) or it
4260: 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20   will.** return 
4270: 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a  SQLITE_BUSY..**.
4280: 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f  ** If an error o
4290: 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20  ccurs, an error 
42a0: 6d 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74  message is writt
42b0: 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74  en to memory obt
42c0: 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71  ained.** from sq
42d0: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61  lite3_malloc() a
42e0: 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73  nd p->zErrMsg is
42f0: 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74   made to point t
4300: 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a  o that memory..*
4310: 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65  * The error code
4320: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d   is stored in p-
4330: 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75  >rc and this rou
4340: 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c  tine returns SQL
4350: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
4360: 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b   If the callback
4370: 20 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f   ever returns no
4380: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
4390: 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a   program exits.*
43a0: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  * immediately.  
43b0: 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f  There will be no
43c0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62   error message b
43d0: 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65  ut the p->rc fie
43e0: 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  ld is.** set to 
43f0: 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64  SQLITE_ABORT and
4400: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
4410: 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ll return SQLITE
4420: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20  _ERROR..**.** A 
4430: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
4440: 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73 20 70  n error causes p
4450: 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20 74  ->rc to be set t
4460: 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61  o SQLITE_NOMEM a
4470: 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69  nd this.** routi
4480: 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c  ne to return SQL
4490: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
44a0: 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72 72   Other fatal err
44b0: 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ors return SQLIT
44c0: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41  E_ERROR..**.** A
44d0: 66 74 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e  fter this routin
44e0: 65 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  e has finished, 
44f0: 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c  sqlite3VdbeFinal
4500: 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a  ize() should be.
4510: 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e  ** used to clean
4520: 20 75 70 20 74 68 65 20 6d 65 73 73 20 74 68 61   up the mess tha
4530: 74 20 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e  t was left behin
4540: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
4550: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
4560: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
4570: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
4580: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  DBE */.){.  int 
4590: 70 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pc;             
45a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72         /* The pr
45b0: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f  ogram counter */
45c0: 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20  .  Op *pOp;     
45d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
45e0: 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69   Current operati
45f0: 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d  on */.  int rc =
4600: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4610: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4620: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4630: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4640: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4650: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 65 6e  abase */.  u8 en
4660: 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29  coding = ENC(db)
4670: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  ;     /* The dat
4680: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a  abase encoding *
4690: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
46a0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
46b0: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
46c0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
46d0: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
46e0: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
46f0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4700: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4710: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4720: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4730: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4740: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4750: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4760: 2a 2f 0a 20 20 75 38 20 6f 70 50 72 6f 70 65 72  */.  u8 opProper
4770: 74 79 3b 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61  ty;.  int iCompa
4780: 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  re = 0;         
4790: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61   /* Result of la
47a0: 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  st OP_Compare op
47b0: 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  eration */.  int
47c0: 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20   *aPermute = 0; 
47d0: 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75          /* Permu
47e0: 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e  tation of column
47f0: 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65  s for OP_Compare
4800: 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f   */.#ifdef VDBE_
4810: 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74  PROFILE.  u64 st
4820: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
4830: 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63       /* CPU cloc
4840: 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74  k count at start
4850: 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20   of opcode */.  
4860: 69 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20  int origPc;     
4870: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72             /* Pr
4880: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74  ogram counter at
4890: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
48a0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
48b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
48c0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
48d0: 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73  .  int nProgress
48e0: 4f 70 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  Ops = 0;      /*
48f0: 20 4f 70 63 6f 64 65 73 20 65 78 65 63 75 74 65   Opcodes execute
4900: 64 20 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73  d since progress
4910: 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65   callback. */.#e
4920: 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45  ndif.  /*** INSE
4930: 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48  RT STACK UNION H
4940: 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65  ERE ***/..  asse
4950: 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44  rt( p->magic==VD
4960: 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20  BE_MAGIC_RUN ); 
4970: 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70   /* sqlite3_step
4980: 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73  () verifies this
4990: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
49a0: 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f  ->magic==SQLITE_
49b0: 4d 41 47 49 43 5f 42 55 53 59 20 29 3b 0a 20 20  MAGIC_BUSY );.  
49c0: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 74 65 78  sqlite3VdbeMutex
49d0: 41 72 72 61 79 45 6e 74 65 72 28 70 29 3b 0a 20  ArrayEnter(p);. 
49e0: 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
49f0: 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
4a00: 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
4a10: 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e  if a malloc() in
4a20: 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73  side a call to s
4a30: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4a40: 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73  xt() or.    ** s
4a50: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4a60: 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20  xt16() failed.  
4a70: 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  */.    goto no_m
4a80: 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  em;.  }.  assert
4a90: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4aa0: 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c  OK || p->rc==SQL
4ab0: 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 70 2d  ITE_BUSY );.  p-
4ac0: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  >rc = SQLITE_OK;
4ad0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
4ae0: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
4af0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
4b00: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
4b10: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
4b20: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
4b30: 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  UPT;.  sqlite3Vd
4b40: 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b  beIOTraceSql(p);
4b50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4b60: 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65  EBUG.  sqlite3Be
4b70: 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
4b80: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d  );.  if( p->pc==
4b90: 30 20 0a 20 20 20 26 26 20 28 28 70 2d 3e 64 62  0 .   && ((p->db
4ba0: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4bb0: 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 20 7c 7c  _VdbeListing) ||
4bc0: 20 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c 20   fileExists(db, 
4bd0: 22 76 64 62 65 5f 65 78 70 6c 61 69 6e 22 29 29  "vdbe_explain"))
4be0: 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  .  ){.    int i;
4bf0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42  .    printf("VDB
4c00: 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e  E Program Listin
4c10: 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69  g:\n");.    sqli
4c20: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4c30: 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  p);.    for(i=0;
4c40: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4c50: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4c60: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
4c70: 2c 20 69 2c 20 26 70 2d 3e 61 4f 70 5b 69 5d 29  , i, &p->aOp[i])
4c80: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
4c90: 28 20 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c  ( fileExists(db,
4ca0: 20 22 76 64 62 65 5f 74 72 61 63 65 22 29 20 29   "vdbe_trace") )
4cb0: 7b 0a 20 20 20 20 70 2d 3e 74 72 61 63 65 20 3d  {.    p->trace =
4cc0: 20 73 74 64 6f 75 74 3b 0a 20 20 7d 0a 20 20 73   stdout;.  }.  s
4cd0: 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
4ce0: 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a  alloc();.#endif.
4cf0: 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20    for(pc=p->pc; 
4d00: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70  rc==SQLITE_OK; p
4d10: 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  c++){.    assert
4d20: 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d  ( pc>=0 && pc<p-
4d30: 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28 20  >nOp );.    if( 
4d40: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
4d50: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
4d60: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
4d70: 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63 20 3d  ILE.    origPc =
4d80: 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74 20 3d   pc;.    start =
4d90: 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
4da0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 4f 70  ;.#endif.    pOp
4db0: 20 3d 20 26 70 2d 3e 61 4f 70 5b 70 63 5d 3b 0a   = &p->aOp[pc];.
4dc0: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c  .    /* Only all
4dd0: 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51  ow tracing if SQ
4de0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65  LITE_DEBUG is de
4df0: 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
4e00: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4e10: 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61  G.    if( p->tra
4e20: 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ce ){.      if( 
4e30: 70 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  pc==0 ){.       
4e40: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 45 78   printf("VDBE Ex
4e50: 65 63 75 74 69 6f 6e 20 54 72 61 63 65 3a 5c 6e  ecution Trace:\n
4e60: 22 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  ");.        sqli
4e70: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4e80: 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p);.      }.    
4e90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4ea0: 6e 74 4f 70 28 70 2d 3e 74 72 61 63 65 2c 20 70  ntOp(p->trace, p
4eb0: 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 20  c, pOp);.    }. 
4ec0: 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 3d     if( p->trace=
4ed0: 3d 30 20 26 26 20 70 63 3d 3d 30 20 29 7b 0a 20  =0 && pc==0 ){. 
4ee0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69       sqlite3Begi
4ef0: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
4f00: 0a 20 20 20 20 20 20 69 66 28 20 66 69 6c 65 45  .      if( fileE
4f10: 78 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f  xists(db, "vdbe_
4f20: 73 71 6c 74 72 61 63 65 22 29 20 29 7b 0a 20 20  sqltrace") ){.  
4f30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4f40: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4f50: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
4f60: 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
4f70: 6f 63 28 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  oc();.    }.#end
4f80: 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f  if.      ..    /
4f90: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4fa0: 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d  f we need to sim
4fb0: 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75  ulate an interru
4fc0: 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68  pt.  This only h
4fd0: 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66  appens.    ** if
4fe0: 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69   we have a speci
4ff0: 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20  al test build.. 
5000: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
5010: 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28  ITE_TEST.    if(
5020: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5030: 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20  pt_count>0 ){.  
5040: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
5050: 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20  rrupt_count--;. 
5060: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
5070: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
5080: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
5090: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
50a0: 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (db);.      }.  
50b0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e    }.#endif..#ifn
50c0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
50d0: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
50e0: 4b 0a 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68  K.    /* Call th
50f0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
5100: 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
5110: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
5120: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
5130: 20 20 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f      ** of VDBE o
5140: 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65  ps have been exe
5150: 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69  cuted (either si
5160: 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74  nce this invocat
5170: 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 73 71  ion of.    ** sq
5180: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
5190: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
51a0: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
51b0: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
51c0: 6c 65 64 29 2e 0a 20 20 20 20 2a 2a 20 49 66 20  led)..    ** If 
51d0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
51e0: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
51f0: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
5200: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
5210: 20 77 69 74 68 0a 20 20 20 20 2a 2a 20 61 20 72   with.    ** a r
5220: 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54  eturn code SQLIT
5230: 45 5f 41 42 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a  E_ABORT..    */.
5240: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
5250: 67 72 65 73 73 20 29 7b 0a 20 20 20 20 20 20 69  gress ){.      i
5260: 66 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  f( db->nProgress
5270: 4f 70 73 3d 3d 6e 50 72 6f 67 72 65 73 73 4f 70  Ops==nProgressOp
5280: 73 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  s ){.        int
5290: 20 70 72 63 3b 0a 20 20 20 20 20 20 20 20 69 66   prc;.        if
52a0: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
52b0: 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
52c0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
52d0: 65 3b 0a 20 20 20 20 20 20 20 20 70 72 63 20 3d  e;.        prc =
52e0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
52f0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b  ->pProgressArg);
5300: 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
5310: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
5320: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
5330: 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20  e_to_misuse;.   
5340: 20 20 20 20 20 69 66 28 20 70 72 63 21 3d 30 20       if( prc!=0 
5350: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
5360: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
5370: 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  PT;.          go
5380: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
5390: 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  lt;.        }.  
53a0: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f        nProgressO
53b0: 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ps = 0;.      }.
53c0: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f        nProgressO
53d0: 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ps++;.    }.#end
53e0: 69 66 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 63 6f  if..    /* Do co
53f0: 6d 6d 6f 6e 20 73 65 74 75 70 20 70 72 6f 63 65  mmon setup proce
5400: 73 73 69 6e 67 20 66 6f 72 20 61 6e 79 20 6f 70  ssing for any op
5410: 63 6f 64 65 20 74 68 61 74 20 69 73 20 6d 61 72  code that is mar
5420: 6b 65 64 0a 20 20 20 20 2a 2a 20 77 69 74 68 20  ked.    ** with 
5430: 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c  the "out2-prerel
5440: 65 61 73 65 22 20 74 61 67 2e 20 20 53 75 63 68  ease" tag.  Such
5450: 20 6f 70 63 6f 64 65 73 20 68 61 76 65 20 61 20   opcodes have a 
5460: 73 69 6e 67 6c 65 0a 20 20 20 20 2a 2a 20 6f 75  single.    ** ou
5470: 74 70 75 74 20 77 68 69 63 68 20 69 73 20 73 70  tput which is sp
5480: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 50  ecified by the P
5490: 32 20 70 61 72 61 6d 65 74 65 72 2e 20 20 54 68  2 parameter.  Th
54a0: 65 20 50 32 20 72 65 67 69 73 74 65 72 0a 20 20  e P2 register.  
54b0: 20 20 2a 2a 20 69 73 20 69 6e 69 74 69 61 6c 69    ** is initiali
54c0: 7a 65 64 20 74 6f 20 61 20 4e 55 4c 4c 2e 0a 20  zed to a NULL.. 
54d0: 20 20 20 2a 2f 0a 20 20 20 20 6f 70 50 72 6f 70     */.    opProp
54e0: 65 72 74 79 20 3d 20 6f 70 63 6f 64 65 50 72 6f  erty = opcodePro
54f0: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
5500: 65 5d 3b 0a 20 20 20 20 69 66 28 20 28 6f 70 50  e];.    if( (opP
5510: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5520: 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 29  OUT2_PRERELEASE)
5530: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5540: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5550: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5560: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
5570: 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d   );.      pOut =
5580: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
5590: 32 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  2];.      sqlite
55a0: 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45  3VdbeMemReleaseE
55b0: 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20  xternal(pOut);. 
55c0: 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
55d0: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
55e0: 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a     pOut->n = 0;.
55f0: 20 20 20 20 7d 65 6c 73 65 0a 20 0a 20 20 20 20      }else. .    
5600: 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74  /* Do common set
5610: 75 70 20 66 6f 72 20 6f 70 63 6f 64 65 73 20 6d  up for opcodes m
5620: 61 72 6b 65 64 20 77 69 74 68 20 6f 6e 65 20 6f  arked with one o
5630: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
5640: 20 20 20 20 2a 2a 20 63 6f 6d 62 69 6e 61 74 69      ** combinati
5650: 6f 6e 73 20 6f 66 20 70 72 6f 70 65 72 74 69 65  ons of propertie
5660: 73 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  s..    **.    **
5670: 20 20 20 20 20 20 20 20 20 20 20 69 6e 31 0a 20             in1. 
5680: 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20     **           
5690: 69 6e 31 20 69 6e 32 0a 20 20 20 20 2a 2a 20 20  in1 in2.    **  
56a0: 20 20 20 20 20 20 20 20 20 69 6e 31 20 69 6e 32           in1 in2
56b0: 20 6f 75 74 33 0a 20 20 20 20 2a 2a 20 20 20 20   out3.    **    
56c0: 20 20 20 20 20 20 20 69 6e 31 20 69 6e 33 0a 20         in1 in3. 
56d0: 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 56 61 72     **.    ** Var
56e0: 69 61 62 6c 65 73 20 70 49 6e 31 2c 20 70 49 6e  iables pIn1, pIn
56f0: 32 2c 20 61 6e 64 20 70 49 6e 33 20 61 72 65 20  2, and pIn3 are 
5700: 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f  made to point to
5710: 20 61 70 70 72 6f 70 72 69 61 74 65 0a 20 20 20   appropriate.   
5720: 20 2a 2a 20 72 65 67 69 73 74 65 72 73 20 66 6f   ** registers fo
5730: 72 20 69 6e 70 75 74 73 2e 20 20 56 61 72 69 61  r inputs.  Varia
5740: 62 6c 65 20 70 4f 75 74 20 70 6f 69 6e 74 73 20  ble pOut points 
5750: 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  to the output re
5760: 67 69 73 74 65 72 2e 0a 20 20 20 20 2a 2f 0a 20  gister..    */. 
5770: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
5780: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21  ty & OPFLG_IN1)!
5790: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
57a0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
57b0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
57c0: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p1<=p->nMem 
57d0: 29 3b 0a 20 20 20 20 20 20 70 49 6e 31 20 3d 20  );.      pIn1 = 
57e0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
57f0: 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ];.      REGISTE
5800: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
5810: 20 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 69 66   pIn1);.      if
5820: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5830: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5840: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5850: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
5860: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5870: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p2<=p->nMem )
5880: 3b 0a 20 20 20 20 20 20 20 20 70 49 6e 32 20 3d  ;.        pIn2 =
5890: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
58a0: 32 5d 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  2];.        REGI
58b0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
58c0: 70 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 20  p2, pIn2);.     
58d0: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
58e0: 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29  ty & OPFLG_OUT3)
58f0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
5900: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5910: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  >0 );.          
5920: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
5930: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5940: 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d        pOut = &p-
5950: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
5960: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5970: 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f  }else if( (opPro
5980: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
5990: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  3)!=0 ){.       
59a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
59b0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
59c0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
59d0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
59e0: 20 20 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65    pIn3 = &p->aMe
59f0: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
5a00: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5a10: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 49 6e 33  CE(pOp->p3, pIn3
5a20: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5a30: 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70  else if( (opProp
5a40: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32  erty & OPFLG_IN2
5a50: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5a60: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5a70: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5a80: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5a90: 6d 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 32 20  m );.      pIn2 
5aa0: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
5ab0: 70 32 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53  p2];.      REGIS
5ac0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5ad0: 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65  2, pIn2);.    }e
5ae0: 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65  lse if( (opPrope
5af0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  rty & OPFLG_IN3)
5b00: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5b10: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
5b20: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5b30: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
5b40: 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 33 20 3d   );.      pIn3 =
5b50: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
5b60: 33 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54  3];.      REGIST
5b70: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
5b80: 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 7d 0a 0a  , pIn3);.    }..
5b90: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
5ba0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
5bb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5be0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bf0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
5c00: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
5c10: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
5c20: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
5c30: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
5c40: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
5c50: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
5c60: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
5c70: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
5c80: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5c90: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5ca0: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
5cb0: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
5cc0: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
5cd0: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
5ce0: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
5cf0: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
5d00: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
5d10: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
5d20: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
5d30: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
5d40: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
5d50: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
5d60: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
5d70: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5d80: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5d90: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5da0: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
5db0: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
5dc0: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
5dd0: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
5de0: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
5df0: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
5e00: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
5e10: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5e20: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
5e30: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
5e40: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
5e50: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5e60: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5e70: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5e80: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5e90: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5ea0: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5eb0: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5ec0: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5ed0: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5ee0: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5ef0: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5f00: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5f10: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5f20: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
5f30: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
5f40: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
5f50: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
5f60: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
5f70: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
5f80: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5f90: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5fa0: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5fb0: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5fc0: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5fd0: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5fe0: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5ff0: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
6000: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
6010: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
6020: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
6030: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
6040: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
6050: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
6060: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
6070: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
6080: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
6090: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
60a0: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
60b0: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
60c0: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
60d0: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
60e0: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72  n2, in3, out2_pr
60f0: 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20  erelease, out2, 
6100: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
6110: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
6120: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
6130: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
6140: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
6150: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
6160: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
6170: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
6180: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
6190: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
61a0: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
61b0: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
61c0: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
61d0: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
61e0: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
61f0: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
6200: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
6210: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
6220: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
6230: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
6240: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
6250: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
6260: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
6270: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
6280: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
6290: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
62a0: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
62b0: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
62c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6300: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
6310: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
6320: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
6330: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
6340: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
6350: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
6360: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
6370: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
6380: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
6390: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
63a0: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
63b0: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
63c0: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
63e0: 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46  ump */.  CHECK_F
63f0: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
6400: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
6410: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6420: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20   Opcode:  Gosub 
6430: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
6440: 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
6450: 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f  ent address onto
6460: 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
6470: 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  and then jump to
6480: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a   address P2..*/.
6490: 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b  case OP_Gosub: {
64a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
64b0: 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
64c0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
64d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
64e0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49  =p->nMem );.  pI
64f0: 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  n1 = &p->aMem[pO
6500: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6510: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
6520: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
6530: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6540: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d  MEM_Int;.  pIn1-
6550: 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47  >u.i = pc;.  REG
6560: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
6570: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63  >p1, pIn1);.  pc
6580: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
6590: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
65a0: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
65b0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
65c0: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
65d0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
65e0: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
65f0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
6600: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e  /.case OP_Return
6610: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
6620: 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
6630: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
6640: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20  MEM_Int );.  pc 
6650: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
6660: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6670: 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20   Opcode:  Yield 
6680: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
6690: 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61   Swap the progra
66a0: 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74  m counter with t
66b0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
66c0: 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  ster P1..*/.case
66d0: 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20   OP_Yield: {    
66e0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
66f0: 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a  /.  int pcDest;.
6700: 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d    assert( (pIn1-
6710: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
6720: 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  )==0 );.  pIn1->
6730: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6740: 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74  .  pcDest = (int
6750: 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49  )pIn1->u.i;.  pI
6760: 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20  n1->u.i = pc;.  
6770: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
6780: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
6790: 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20   pc = pcDest;.  
67a0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
67b0: 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c  ode:  HaltIfNull
67c0: 20 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a    P1 P2 P3 P4 *.
67d0: 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
67e0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
67f0: 72 20 50 33 2e 20 20 49 66 20 69 73 20 69 73 20  r P3.  If is is 
6800: 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75  NULL then Halt u
6810: 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65  sing.** paramete
6820: 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34  r P1, P2, and P4
6830: 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65   as if this were
6840: 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74   a Halt instruct
6850: 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ion.  If the.** 
6860: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
6870: 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P3 is not NULL
6880: 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74  , then this rout
6890: 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ine is a no-op..
68a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49  */.case OP_HaltI
68b0: 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a  fNull: {      /*
68c0: 20 69 6e 33 20 2a 2f 0a 20 20 69 66 28 20 28 70   in3 */.  if( (p
68d0: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
68e0: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61  _Null)==0 ) brea
68f0: 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
6900: 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c  ough into OP_Hal
6910: 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  t */.}../* Opcod
6920: 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a  e:  Halt P1 P2 *
6930: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74   P4 *.**.** Exit
6940: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41   immediately.  A
6950: 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c  ll open cursors,
6960: 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a   etc are closed.
6970: 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
6980: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
6990: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  e result code re
69a0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
69b0: 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65  3_exec(), sqlite
69c0: 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72  3_reset(),.** or
69d0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
69e0: 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d  e().  For a norm
69f0: 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68  al halt, this sh
6a00: 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f  ould be SQLITE_O
6a10: 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72  K (0)..** For er
6a20: 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20  rors, it can be 
6a30: 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65  some other value
6a40: 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e  .  If P1!=0 then
6a50: 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69   P2 will determi
6a60: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72  ne.** whether or
6a70: 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b   not to rollback
6a80: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
6a90: 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f  nsaction.  Do no
6aa0: 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66  t rollback.** if
6ab0: 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f   P2==OE_Fail. Do
6ac0: 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66   the rollback if
6ad0: 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b   P2==OE_Rollback
6ae0: 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f  .  If P2==OE_Abo
6af0: 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b  rt,.** then back
6b00: 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73   out all changes
6b10: 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72   that have occur
6b20: 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20  red during this 
6b30: 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65  execution of the
6b40: 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f  .** VDBE, but do
6b50: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68   not rollback th
6b60: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a  e transaction. .
6b70: 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
6b80: 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20  ot null then it 
6b90: 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  is an error mess
6ba0: 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a  age string..**.*
6bb0: 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d  * There is an im
6bc0: 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20  plied "Halt 0 0 
6bd0: 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  0" instruction i
6be0: 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76  nserted at the v
6bf0: 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76  ery end of.** ev
6c00: 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f  ery program.  So
6c10: 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65   a jump past the
6c20: 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f   last instructio
6c30: 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  n of the program
6c40: 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20  .** is the same 
6c50: 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c  as executing Hal
6c60: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  t..*/.case OP_Ha
6c70: 6c 74 3a 20 7b 0a 20 20 70 2d 3e 72 63 20 3d 20  lt: {.  p->rc = 
6c80: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 70 63  pOp->p1;.  p->pc
6c90: 20 3d 20 70 63 3b 0a 20 20 70 2d 3e 65 72 72 6f   = pc;.  p->erro
6ca0: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
6cb0: 70 2d 3e 70 32 3b 0a 20 20 69 66 28 20 70 4f 70  p->p2;.  if( pOp
6cc0: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 73 71  ->p4.z ){.    sq
6cd0: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
6ce0: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
6cf0: 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  "%s", pOp->p4.z)
6d00: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
6d10: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
6d20: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
6d30: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
6d40: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
6d50: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
6d60: 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72  BUSY ){.    p->r
6d70: 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
6d80: 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  BUSY;.  }else{. 
6d90: 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20     rc = p->rc ? 
6da0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53  SQLITE_ERROR : S
6db0: 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a  QLITE_DONE;.  }.
6dc0: 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
6dd0: 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  rn;.}../* Opcode
6de0: 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20  : Integer P1 P2 
6df0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
6e00: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  32-bit integer v
6e10: 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74  alue P1 is writt
6e20: 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  en into register
6e30: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
6e40: 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20  Integer: {      
6e50: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
6e60: 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
6e70: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6e80: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
6e90: 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b  pOp->p1;.  break
6ea0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6eb0: 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20  Int64 * P2 * P4 
6ec0: 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
6ed0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d  pointer to a 64-
6ee0: 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
6ef0: 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74  e..** Write that
6f00: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
6f10: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
6f20: 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20   OP_Int64: {    
6f30: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
6f40: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
6f50: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70  ssert( pOp->p4.p
6f60: 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  I64!=0 );.  pOut
6f70: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
6f80: 74 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  t;.  pOut->u.i =
6f90: 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a   *pOp->p4.pI64;.
6fa0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6fb0: 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32  pcode: Real * P2
6fc0: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
6fd0: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6fe0: 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69   a 64-bit floati
6ff0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
7000: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
7010: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
7020: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7030: 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Real: {        
7040: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
7050: 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72  K_FLOAT, out2-pr
7060: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
7070: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
7080: 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20  Real;.  assert( 
7090: 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70  !sqlite3IsNaN(*p
70a0: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b  Op->p4.pReal) );
70b0: 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f  .  pOut->r = *pO
70c0: 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62  p->p4.pReal;.  b
70d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
70e0: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
70f0: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
7100: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c   points to a nul
7110: 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d   terminated UTF-
7120: 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f  8 string. This o
7130: 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f  pcode is transfo
7140: 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e  rmed .** into an
7150: 20 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72   OP_String befor
7160: 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64  e it is executed
7170: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74   for the first t
7180: 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ime..*/.case OP_
7190: 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20  String8: {      
71a0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
71b0: 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72  _STRING, out2-pr
71c0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
71d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21  sert( pOp->p4.z!
71e0: 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63  =0 );.  pOp->opc
71f0: 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b  ode = OP_String;
7200: 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c  .  pOp->p1 = sql
7210: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70  ite3Strlen30(pOp
7220: 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65  ->p4.z);..#ifnde
7230: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
7240: 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69  F16.  if( encodi
7250: 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  ng!=SQLITE_UTF8 
7260: 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
7270: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
7280: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
7290: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
72a0: 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  8, SQLITE_STATIC
72b0: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
72c0: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20 67  QLITE_TOOBIG ) g
72d0: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
72e0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
72f0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
7300: 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20  eEncoding(pOut, 
7310: 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f  encoding) ) goto
7320: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73   no_mem;.    ass
7330: 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  ert( pOut->zMall
7340: 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20  oc==pOut->z );. 
7350: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d     assert( pOut-
7360: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
7370: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d   );.    pOut->zM
7380: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70  alloc = 0;.    p
7390: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
73a0: 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70 4f  M_Static;.    pO
73b0: 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  ut->flags &= ~ME
73c0: 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20 70  M_Dyn;.    if( p
73d0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44  Op->p4type==P4_D
73e0: 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20  YNAMIC ){.      
73f0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
7400: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
7410: 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74    }.    pOp->p4t
7420: 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43  ype = P4_DYNAMIC
7430: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20  ;.    pOp->p4.z 
7440: 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70  = pOut->z;.    p
7450: 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e  Op->p1 = pOut->n
7460: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69  ;.  }.#endif.  i
7470: 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61  f( pOp->p1>db->a
7480: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
7490: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
74a0: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
74b0: 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68    }.  /* Fall th
74c0: 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
74d0: 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e  t case, OP_Strin
74e0: 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63  g */.}.  ./* Opc
74f0: 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50  ode: String P1 P
7500: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 * P4 *.**.** T
7510: 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  he string value 
7520: 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20  P4 of length P1 
7530: 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65  (bytes) is store
7540: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
7550: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ..*/.case OP_Str
7560: 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ing: {          
7570: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
7580: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
7590: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
75a0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
75b0: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74  MEM_Str|MEM_Stat
75c0: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  ic|MEM_Term;.  p
75d0: 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34  Out->z = pOp->p4
75e0: 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  .z;.  pOut->n = 
75f0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d  pOp->p1;.  pOut-
7600: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
7610: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
7620: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
7630: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7640: 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20 50 32 20 2a  ode: Null * P2 *
7650: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
7660: 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67   a NULL into reg
7670: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7680: 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20  e OP_Null: {    
7690: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
76a0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 62  rerelease */.  b
76b0: 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
76c0: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
76d0: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  * P4.**.** P4 po
76e0: 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f  ints to a blob o
76f0: 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20  f data P1 bytes 
7700: 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69  long.  Store thi
7710: 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67  s.** blob in reg
7720: 69 73 74 65 72 20 50 32 2e 20 54 68 69 73 20 69  ister P2. This i
7730: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6e 6f  nstruction is no
7740: 74 20 63 6f 64 65 64 20 64 69 72 65 63 74 6c 79  t coded directly
7750: 0a 2a 2a 20 62 79 20 74 68 65 20 63 6f 6d 70 69  .** by the compi
7760: 6c 65 72 2e 20 49 6e 73 74 65 61 64 2c 20 74 68  ler. Instead, th
7770: 65 20 63 6f 6d 70 69 6c 65 72 20 6c 61 79 65 72  e compiler layer
7780: 20 73 70 65 63 69 66 69 65 73 0a 2a 2a 20 61 6e   specifies.** an
7790: 20 4f 50 5f 48 65 78 42 6c 6f 62 20 6f 70 63 6f   OP_HexBlob opco
77a0: 64 65 2c 20 77 69 74 68 20 74 68 65 20 68 65 78  de, with the hex
77b0: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
77c0: 74 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  tation of.** the
77d0: 20 62 6c 6f 62 20 61 73 20 50 34 2e 20 54 68 69   blob as P4. Thi
77e0: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
77f0: 73 66 6f 72 6d 65 64 20 74 6f 20 61 6e 20 4f 50  sformed to an OP
7800: 5f 42 6c 6f 62 0a 2a 2a 20 74 68 65 20 66 69 72  _Blob.** the fir
7810: 73 74 20 74 69 6d 65 20 69 74 20 69 73 20 65 78  st time it is ex
7820: 65 63 75 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  ecuted..*/.case 
7830: 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  OP_Blob: {      
7840: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7850: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7860: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7870: 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f  1 <= SQLITE_MAX_
7880: 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69  LENGTH );.  sqli
7890: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
78a0: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
78b0: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
78c0: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
78d0: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
78e0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
78f0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
7900: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  }../* Opcode: Va
7910: 72 69 61 62 6c 65 20 50 31 20 50 32 20 50 33 20  riable P1 P2 P3 
7920: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  P4 *.**.** Trans
7930: 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f  fer the values o
7940: 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65  f bound paramete
7950: 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 69  rs P1..P1+P3-1 i
7960: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a  nto registers.**
7970: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 0a 2a 2a   P2..P2+P3-1..**
7980: 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d  .** If the param
7990: 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74  eter is named, t
79a0: 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70  hen its name app
79b0: 65 61 72 73 20 69 6e 20 50 34 20 61 6e 64 20 50  ears in P4 and P
79c0: 33 3d 3d 31 2e 0a 2a 2a 20 54 68 65 20 50 34 20  3==1..** The P4 
79d0: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79  value is used by
79e0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
79f0: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a  rameter_name()..
7a00: 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61  */.case OP_Varia
7a10: 62 6c 65 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b  ble: {.  int p1;
7a20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
7a30: 69 61 62 6c 65 20 74 6f 20 63 6f 70 79 20 66 72  iable to copy fr
7a40: 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  om */.  int p2; 
7a50: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
7a60: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20  ster to copy to 
7a70: 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
7a80: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7a90: 6f 66 20 76 61 6c 75 65 73 20 6c 65 66 74 20 74  of values left t
7aa0: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 4d 65 6d 20  o copy */.  Mem 
7ab0: 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20  *pVar;       /* 
7ac0: 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e  Value being tran
7ad0: 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 70 31  sferred */..  p1
7ae0: 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a   = pOp->p1 - 1;.
7af0: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
7b00: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
7b10: 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26   assert( p1>=0 &
7b20: 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 56 61 72 20  & p1+n<=p->nVar 
7b30: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3e  );.  assert( p2>
7b40: 3d 31 20 26 26 20 70 32 2b 6e 2d 31 3c 3d 70 2d  =1 && p2+n-1<=p-
7b50: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65 72  >nMem );.  asser
7b60: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20  t( pOp->p4.z==0 
7b70: 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 31 20 29 3b  || pOp->p3==1 );
7b80: 0a 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20 3e  ..  while( n-- >
7b90: 20 30 20 29 7b 0a 20 20 20 20 70 56 61 72 20 3d   0 ){.    pVar =
7ba0: 20 26 70 2d 3e 61 56 61 72 5b 70 31 2b 2b 5d 3b   &p->aVar[p1++];
7bb0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
7bc0: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56  VdbeMemTooBig(pV
7bd0: 61 72 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  ar) ){.      got
7be0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
7bf0: 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  .    pOut = &p->
7c00: 61 4d 65 6d 5b 70 32 2b 2b 5d 3b 0a 20 20 20 20  aMem[p2++];.    
7c10: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
7c20: 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70 4f  leaseExternal(pO
7c30: 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ut);.    pOut->f
7c40: 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
7c50: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7c60: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
7c70: 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53  Out, pVar, MEM_S
7c80: 74 61 74 69 63 29 3b 0a 20 20 20 20 55 50 44 41  tatic);.    UPDA
7c90: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
7ca0: 70 4f 75 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pOut);.  }.  bre
7cb0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7cc0: 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20  : Move P1 P2 P3 
7cd0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
7ce0: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
7cf0: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d  ister P1..P1+P3-
7d00: 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72  1 over into.** r
7d10: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
7d20: 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73  P3-1.  Registers
7d30: 20 50 31 2e 2e 50 31 2b 50 31 2d 31 20 61 72 65   P1..P1+P1-1 are
7d40: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
7d50: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
7d60: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
7d70: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
7d80: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20  P1..P1+P3-1 and 
7d90: 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f  P2..P2+P3-1 to o
7da0: 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20  verlap..*/.case 
7db0: 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61  OP_Move: {.  cha
7dc0: 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a  r *zMalloc;   /*
7dd0: 20 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62 6c   Holding variabl
7de0: 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20  e for allocated 
7df0: 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
7e00: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
7e10: 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
7e20: 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79  ers left to copy
7e30: 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20   */.  int p1;   
7e40: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
7e50: 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20  er to copy from 
7e60: 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
7e70: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
7e80: 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a  r to copy to */.
7e90: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
7ea0: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
7eb0: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
7ec0: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26    assert( n>0 &&
7ed0: 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b   p1>0 && p2>0 );
7ee0: 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c  .  assert( p1+n<
7ef0: 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20  =p2 || p2+n<=p1 
7f00: 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d  );..  pIn1 = &p-
7f10: 3e 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75  >aMem[p1];.  pOu
7f20: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 5d  t = &p->aMem[p2]
7f30: 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20 29  ;.  while( n-- )
7f40: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
7f50: 75 74 3c 3d 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  ut<=&p->aMem[p->
7f60: 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73 73  nMem] );.    ass
7f70: 65 72 74 28 20 70 49 6e 31 3c 3d 26 70 2d 3e 61  ert( pIn1<=&p->a
7f80: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a  Mem[p->nMem] );.
7f90: 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f      zMalloc = pO
7fa0: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20  ut->zMalloc;.   
7fb0: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d   pOut->zMalloc =
7fc0: 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   0;.    sqlite3V
7fd0: 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c  dbeMemMove(pOut,
7fe0: 20 70 49 6e 31 29 3b 0a 20 20 20 20 70 49 6e 31   pIn1);.    pIn1
7ff0: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c  ->zMalloc = zMal
8000: 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49 53 54 45  loc;.    REGISTE
8010: 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f  R_TRACE(p2++, pO
8020: 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ut);.    pIn1++;
8030: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d  .    pOut++;.  }
8040: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8050: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
8060: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d  P2 * * *.**.** M
8070: 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65  ake a copy of re
8080: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
8090: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
80a0: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
80b0: 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20  on makes a deep 
80c0: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
80d0: 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a  e.  A duplicate.
80e0: 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e  ** is made of an
80f0: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
8100: 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20   constant.  See 
8110: 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a  also OP_SCopy..*
8120: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20  /.case OP_Copy: 
8130: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
8140: 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
8150: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
8160: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
8170: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
8180: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
8190: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
81a0: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
81b0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
81c0: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
81d0: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
81e0: 65 6d 29 3b 0a 20 20 44 65 65 70 68 65 6d 65 72  em);.  Deephemer
81f0: 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 52  alize(pOut);.  R
8200: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
8210: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
8220: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8230: 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32  ode: SCopy P1 P2
8240: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b   * * *.**.** Mak
8250: 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  e a shallow copy
8260: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
8270: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
8280: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
8290: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
82a0: 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66   shallow copy of
82b0: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20   the value.  If 
82c0: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  the value.** is 
82d0: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
82e0: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20  , then the copy 
82f0: 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65  is only a pointe
8300: 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67  r to the.** orig
8310: 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69  inal and hence i
8320: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63  f the original c
8330: 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74  hanges so will t
8340: 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73  he copy..** Wors
8350: 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  e, if the origin
8360: 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65  al is deallocate
8370: 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f  d, the copy beco
8380: 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20  mes invalid..** 
8390: 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d  Thus the program
83a0: 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65 20   must guarantee 
83b0: 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61  that the origina
83c0: 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67  l will not chang
83d0: 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20  e.** during the 
83e0: 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20  lifetime of the 
83f0: 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f  copy.  Use OP_Co
8400: 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d  py to make a com
8410: 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a  plete.** copy..*
8420: 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a  /.case OP_SCopy:
8430: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
8440: 20 69 6e 31 20 2a 2f 0a 20 20 52 45 47 49 53 54   in1 */.  REGIST
8450: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
8460: 2c 20 70 49 6e 31 29 3b 0a 20 20 61 73 73 65 72  , pIn1);.  asser
8470: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
8480: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8490: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
84a0: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
84b0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
84c0: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
84d0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
84e0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
84f0: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
8500: 68 65 6d 29 3b 0a 20 20 52 45 47 49 53 54 45 52  hem);.  REGISTER
8510: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
8520: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
8530: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
8540: 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20  sultRow P1 P2 * 
8550: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  * *.**.** The re
8560: 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75  gisters P1 throu
8570: 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61  gh P1+P2-1 conta
8580: 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  in a single row 
8590: 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54  of.** results. T
85a0: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65  his opcode cause
85b0: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  s the sqlite3_st
85c0: 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72  ep() call to ter
85d0: 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61  minate.** with a
85e0: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74  n SQLITE_ROW ret
85f0: 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20  urn code and it 
8600: 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69  sets up the sqli
8610: 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75  te3_stmt.** stru
8620: 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65  cture to provide
8630: 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 74   access to the t
8640: 6f 70 20 50 31 20 76 61 6c 75 65 73 20 61 73 20  op P1 values as 
8650: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f  the result.** ro
8660: 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  w..*/.case OP_Re
8670: 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d  sultRow: {.  Mem
8680: 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b   *pMem;.  int i;
8690: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52  .  assert( p->nR
86a0: 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70  esColumn==pOp->p
86b0: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
86c0: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
86d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f  sert( pOp->p1+pO
86e0: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  p->p2<=p->nMem+1
86f0: 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   );..  /* If the
8700: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
8710: 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  s flag is set in
8720: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d   sqlite3.flags m
8730: 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20  ask, then .  ** 
8740: 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  DML statements i
8750: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
8760: 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20  e to return the 
8770: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a  number of rows .
8780: 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f    ** modified to
8790: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
87a0: 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
87b0: 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20  that a VM that. 
87c0: 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74   ** opens a stat
87d0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
87e0: 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69  n may invoke thi
87f0: 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20  s opcode..  **. 
8800: 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73   ** In case this
8810: 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74 65   is such a state
8820: 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20  ment, close any 
8830: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
8840: 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65  ction.  ** opene
8850: 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65 66  d by this VM bef
8860: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f  ore returning co
8870: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65  ntrol to the use
8880: 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20  r. This is to.  
8890: 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20 73  ** ensure that s
88a0: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
88b0: 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73  tions are always
88c0: 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65   nested, not ove
88d0: 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49  rlapping..  ** I
88e0: 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65  f the open state
88f0: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
8900: 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68   is not closed h
8910: 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73  ere, then the us
8920: 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70  er.  ** may step
8930: 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74   another VM that
8940: 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73   opens its own s
8950: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
8960: 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20  tion. This.  ** 
8970: 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72  may lead to over
8980: 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e  lapping statemen
8990: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a  t transactions..
89a0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74    **.  ** The st
89b0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
89c0: 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74  ion is never a t
89d0: 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63  op-level transac
89e0: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a  tion.  Hence.  *
89f0: 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 61  * the RELEASE ca
8a00: 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76  ll below can nev
8a10: 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20  er fail..  */.  
8a20: 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74  assert( p->iStat
8a30: 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ement==0 || db->
8a40: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
8a50: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d  ntRows );.  rc =
8a60: 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73   sqlite3VdbeClos
8a70: 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41  eStatement(p, SA
8a80: 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29  VEPOINT_RELEASE)
8a90: 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
8aa0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a  !=SQLITE_OK) ){.
8ab0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
8ac0: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
8ad0: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
8ae0: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
8af0: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
8b00: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
8b10: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
8b20: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
8b30: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
8b40: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
8b50: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
8b60: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
8b70: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
8b80: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
8b90: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
8ba0: 20 20 2a 2a 20 61 73 20 73 69 64 65 20 65 66 66    ** as side eff
8bb0: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
8bc0: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
8bd0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
8be0: 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p1];.  for(i=0;
8bf0: 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29   i<pOp->p2; i++)
8c00: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
8c10: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
8c20: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
8c30: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 26 70  storeTypeInfo(&p
8c40: 4d 65 6d 5b 69 5d 2c 20 65 6e 63 6f 64 69 6e 67  Mem[i], encoding
8c50: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
8c60: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c  TRACE(pOp->p1+i,
8c70: 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a   &pMem[i]);.  }.
8c80: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
8c90: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
8ca0: 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75  _mem;..  /* Retu
8cb0: 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20  rn SQLITE_ROW.  
8cc0: 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20  */.  p->pc = pc 
8cd0: 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  + 1;.  rc = SQLI
8ce0: 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76  TE_ROW;.  goto v
8cf0: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
8d00: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74  * Opcode: Concat
8d10: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8d20: 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74  .** Add the text
8d30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
8d40: 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  onto the end of 
8d50: 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72  the text in.** r
8d60: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73  egister P2 and s
8d70: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
8d80: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
8d90: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65  ** If either the
8da0: 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61   P1 or P2 text a
8db0: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f  re NULL then sto
8dc0: 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a  re NULL in P3..*
8dd0: 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c  *.**   P3 = P2 |
8de0: 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  | P1.**.** It is
8df0: 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20   illegal for P1 
8e00: 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65  and P3 to be the
8e10: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20   same register. 
8e20: 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66  Sometimes,.** if
8e30: 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20   P3 is the same 
8e40: 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20  register as P2, 
8e50: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
8e60: 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f  on is able.** to
8e70: 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28   avoid a memcpy(
8e80: 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
8e90: 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ncat: {         
8ea0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
8eb0: 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32  CONCAT, in1, in2
8ec0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
8ed0: 6e 42 79 74 65 3b 0a 0a 20 20 61 73 73 65 72 74  nByte;..  assert
8ee0: 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a  ( pIn1!=pOut );.
8ef0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
8f00: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
8f10: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
8f20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8f30: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
8f40: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
8f50: 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62    if( ExpandBlob
8f60: 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64  (pIn1) || Expand
8f70: 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74  Blob(pIn2) ) got
8f80: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69  o no_mem;.  Stri
8f90: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
8fa0: 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69  ding);.  Stringi
8fb0: 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e  fy(pIn2, encodin
8fc0: 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49  g);.  nByte = pI
8fd0: 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b  n1->n + pIn2->n;
8fe0: 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
8ff0: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
9000: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
9010: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
9020: 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  ;.  }.  MemSetTy
9030: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
9040: 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 73 71 6c  _Str);.  if( sql
9050: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
9060: 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
9070: 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20  +2, pOut==pIn2) 
9080: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
9090: 65 6d 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  em;.  }.  if( pO
90a0: 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20  ut!=pIn2 ){.    
90b0: 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20  memcpy(pOut->z, 
90c0: 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e  pIn2->z, pIn2->n
90d0: 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28  );.  }.  memcpy(
90e0: 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e  &pOut->z[pIn2->n
90f0: 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31  ], pIn1->z, pIn1
9100: 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b  ->n);.  pOut->z[
9110: 6e 42 79 74 65 5d 20 3d 20 30 3b 0a 20 20 70 4f  nByte] = 0;.  pO
9120: 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d  ut->z[nByte+1] =
9130: 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   0;.  pOut->flag
9140: 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20  s |= MEM_Term;. 
9150: 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
9160: 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65  nByte;.  pOut->e
9170: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
9180: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
9190: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
91a0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
91b0: 65 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20  e: Add P1 P2 P3 
91c0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  * *.**.** Add th
91d0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
91e0: 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61  ter P1 to the va
91f0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9200: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
9210: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
9220: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
9230: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
9240: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
9250: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
9260: 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c   Opcode: Multipl
9270: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
9280: 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79  *.**.** Multiply
9290: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
92a0: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
92b0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
92c0: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
92d0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
92e0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
92f0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
9300: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
9310: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
9320: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74  ./* Opcode: Subt
9330: 72 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20  ract P1 P2 P3 * 
9340: 2a 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74  *.**.** Subtract
9350: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
9360: 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74  gister P1 from t
9370: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9380: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
9390: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
93a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
93b0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
93c0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
93d0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
93e0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69  */./* Opcode: Di
93f0: 76 69 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  vide P1 P2 P3 * 
9400: 2a 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74  *.**.** Divide t
9410: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9420: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
9430: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9440: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
9450: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
9460: 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66 20  egister P3.  If 
9470: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9480: 69 73 74 65 72 20 50 32 0a 2a 2a 20 69 73 20 7a  ister P2.** is z
9490: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ero, then the re
94a0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  sult is NULL..**
94b0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
94c0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
94d0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
94e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61  ./* Opcode: Rema
94f0: 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a  inder P1 P2 P3 *
9500: 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65   *.**.** Compute
9510: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61   the remainder a
9520: 66 74 65 72 20 69 6e 74 65 67 65 72 20 64 69 76  fter integer div
9530: 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 76 61 6c  ision of the val
9540: 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  ue in.** registe
9550: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
9560: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9570: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
9580: 65 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a 2a  esult in P3. .**
9590: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
95a0: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20   register P2 is 
95b0: 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20  zero the result 
95c0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65  is NULL..** If e
95d0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
95e0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
95f0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  t is NULL..*/.ca
9600: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
9610: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9620: 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c  same as TK_PLUS,
9630: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
9640: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72  */.case OP_Subtr
9650: 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  act:            
9660: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9670: 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  MINUS, in1, in2,
9680: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
9690: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20  _Multiply:      
96a0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
96b0: 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c  as TK_STAR, in1,
96c0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
96d0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20  se OP_Divide:   
96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
96f0: 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48  same as TK_SLASH
9700: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9710: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61   */.case OP_Rema
9720: 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20  inder: {        
9730: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9740: 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  _REM, in1, in2, 
9750: 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c  out3 */.  int fl
9760: 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  ags;      /* Com
9770: 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67  bined MEM_* flag
9780: 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75  s from both inpu
9790: 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20  ts */.  i64 iA; 
97a0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
97b0: 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  er value of left
97c0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
97d0: 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iB;         /*
97e0: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
97f0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
9800: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20  */.  double rA; 
9810: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
9820: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
9830: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
9840: 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  B;      /* Real 
9850: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
9860: 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 61 70 70  perand */..  app
9870: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
9880: 79 28 70 49 6e 31 29 3b 0a 20 20 61 70 70 6c 79  y(pIn1);.  apply
9890: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
98a0: 70 49 6e 32 29 3b 0a 20 20 66 6c 61 67 73 20 3d  pIn2);.  flags =
98b0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
98c0: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
98d0: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  ( (flags & MEM_N
98e0: 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61  ull)!=0 ) goto a
98f0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
9900: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20  _is_null;.  if( 
9910: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
9920: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
9930: 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29  _Int)==MEM_Int )
9940: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
9950: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
9960: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77  In2->u.i;.    sw
9970: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
9980: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
9990: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
99a0: 69 42 20 2b 3d 20 69 41 3b 20 20 20 20 20 20 20  iB += iA;       
99b0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
99c0: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
99d0: 20 20 69 42 20 2d 3d 20 69 41 3b 20 20 20 20 20    iB -= iA;     
99e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
99f0: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
9a00: 20 20 20 20 69 42 20 2a 3d 20 69 41 3b 20 20 20      iB *= iA;   
9a10: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9a20: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
9a30: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
9a40: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
9a50: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9a60: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 2f  _null;.        /
9a70: 2a 20 44 69 76 69 64 69 6e 67 20 74 68 65 20 6c  * Dividing the l
9a80: 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  argest possible 
9a90: 6e 65 67 61 74 69 76 65 20 36 34 2d 62 69 74 20  negative 64-bit 
9aa0: 69 6e 74 65 67 65 72 20 28 31 3c 3c 36 33 29 20  integer (1<<63) 
9ab0: 62 79 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 2d  by .        ** -
9ac0: 31 20 72 65 74 75 72 6e 73 20 61 6e 20 69 6e 74  1 returns an int
9ad0: 65 67 65 72 20 74 6f 6f 20 6c 61 72 67 65 20 74  eger too large t
9ae0: 6f 20 73 74 6f 72 65 20 69 6e 20 61 20 36 34 2d  o store in a 64-
9af0: 62 69 74 20 64 61 74 61 2d 74 79 70 65 2e 20 4f  bit data-type. O
9b00: 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 6d  n.        ** som
9b10: 65 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2c  e architectures,
9b20: 20 74 68 65 20 76 61 6c 75 65 20 6f 76 65 72 66   the value overf
9b30: 6c 6f 77 73 20 74 6f 20 28 31 3c 3c 36 33 29 2e  lows to (1<<63).
9b40: 20 4f 6e 20 6f 74 68 65 72 73 2c 0a 20 20 20 20   On others,.    
9b50: 20 20 20 20 2a 2a 20 61 20 53 49 47 46 50 45 20      ** a SIGFPE 
9b60: 69 73 20 69 73 73 75 65 64 2e 20 54 68 65 20 66  is issued. The f
9b70: 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
9b80: 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65 73 20 74 68  nt normalizes th
9b90: 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 62 65  is.        ** be
9ba0: 68 61 76 69 6f 72 20 73 6f 20 74 68 61 74 20 61  havior so that a
9bb0: 6c 6c 20 61 72 63 68 69 74 65 63 74 75 72 65 73  ll architectures
9bc0: 20 62 65 68 61 76 65 20 61 73 20 69 66 20 69 6e   behave as if in
9bd0: 74 65 67 65 72 20 0a 20 20 20 20 20 20 20 20 2a  teger .        *
9be0: 2a 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72  * overflow occur
9bf0: 72 65 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  red..        */.
9c00: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
9c10: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
9c20: 53 54 5f 49 4e 54 36 34 20 29 20 69 41 20 3d 20  ST_INT64 ) iA = 
9c30: 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d  1;.        iB /=
9c40: 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   iA;.        bre
9c50: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
9c60: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
9c70: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
9c80: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
9c90: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
9ca0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
9cb0: 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20  =-1 ) iA = 1;.  
9cc0: 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a        iB %= iA;.
9cd0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
9ce0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
9cf0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b   pOut->u.i = iB;
9d00: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
9d10: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
9d20: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
9d30: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
9d40: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
9d50: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
9d60: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
9d70: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
9d80: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
9d90: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
9da0: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
9db0: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
9dc0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
9dd0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
9de0: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
9df0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
9e00: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
9e10: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
9e20: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
9e30: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
9e40: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
9e50: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
9e60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
9e70: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
9e80: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
9e90: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
9ea0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
9eb0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
9ec0: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
9ed0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
9ee0: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
9ef0: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
9f00: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
9f10: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
9f20: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
9f30: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
9f40: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9f50: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
9f60: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
9f70: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
9f80: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
9f90: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
9fa0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
9fb0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
9fc0: 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20  IsNaN(rB) ){.   
9fd0: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
9fe0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9ff0: 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  l;.    }.    pOu
a000: 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d  t->r = rB;.    M
a010: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a020: 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20  ut, MEM_Real);. 
a030: 20 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20     if( (flags & 
a040: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
a050: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a060: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
a070: 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 20 20  (pOut);.    }.  
a080: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74  }.  break;..arit
a090: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
a0a0: 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33  _null:.  sqlite3
a0b0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
a0c0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
a0d0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
a0e0: 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a  lSeq * * P4.**.*
a0f0: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
a100: 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73  r to a CollSeq s
a110: 74 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65  truct. If the ne
a120: 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65  xt call to a use
a130: 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72  r function.** or
a140: 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73   aggregate calls
a150: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
a160: 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63  ollSeq(), this c
a170: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
a180: 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74  e will.** be ret
a190: 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75  urned. This is u
a1a0: 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 74  sed by the built
a1b0: 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29  -in min(), max()
a1c0: 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a   and nullif().**
a1d0: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
a1e0: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
a1f0: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
a200: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
a210: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
a220: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
a230: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
a240: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
a250: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
a260: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
a270: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
a280: 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66  , only to user f
a290: 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64  unctions defined
a2a0: 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63   in func.c..*/.c
a2b0: 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20  ase OP_CollSeq: 
a2c0: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
a2d0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  >p4type==P4_COLL
a2e0: 53 45 51 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  SEQ );.  break;.
a2f0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75  }../* Opcode: Fu
a300: 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20  nction P1 P2 P3 
a310: 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  P4 P5.**.** Invo
a320: 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  ke a user functi
a330: 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e  on (P4 is a poin
a340: 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74 69 6f  ter to a Functio
a350: 6e 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  n structure that
a360: 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20  .** defines the 
a370: 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50  function) with P
a380: 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65  5 arguments take
a390: 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
a3a0: 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73  P2 and.** succes
a3b0: 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c  sors.  The resul
a3c0: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
a3d0: 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  n is stored in r
a3e0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52  egister P3..** R
a3f0: 65 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20  egister P3 must 
a400: 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  not be one of th
a410: 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74  e function input
a420: 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  s..**.** P1 is a
a430: 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20   32-bit bitmask 
a440: 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68  indicating wheth
a450: 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61  er or not each a
a460: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a  rgument to the .
a470: 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ** function was 
a480: 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65  determined to be
a490: 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d   constant at com
a4a0: 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68  pile time. If th
a4b0: 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
a4c0: 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74  ent was constant
a4d0: 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50   then bit 0 of P
a4e0: 31 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69  1 is set. This i
a4f0: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
a500: 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d  ine.** whether m
a510: 65 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61  eta data associa
a520: 74 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20  ted with a user 
a530: 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
a540: 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73  t using the.** s
a550: 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61  qlite3_set_auxda
a560: 74 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20  ta() API may be 
a570: 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20  safely retained 
a580: 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a  until the next.*
a590: 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  * invocation of 
a5a0: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  this opcode..**.
a5b0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41 67 67  ** See also: Agg
a5c0: 53 74 65 70 20 61 6e 64 20 41 67 67 46 69 6e 61  Step and AggFina
a5d0: 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e  l.*/.case OP_Fun
a5e0: 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69  ction: {.  int i
a5f0: 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20  ;.  Mem *pArg;. 
a600: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
a610: 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f   ctx;.  sqlite3_
a620: 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20  value **apVal;. 
a630: 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70   int n;..  n = p
a640: 4f 70 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20  Op->p5;.  apVal 
a650: 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73  = p->apArg;.  as
a660: 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e  sert( apVal || n
a670: 3d 3d 30 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  ==0 );..  assert
a680: 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e  ( n==0 || (pOp->
a690: 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
a6a0: 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b  n<=p->nMem+1) );
a6b0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
a6c0: 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
a6d0: 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
a6e0: 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26 70 2d   );.  pArg = &p-
a6f0: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
a700: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
a710: 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20  i++, pArg++){.  
a720: 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72    apVal[i] = pAr
a730: 67 3b 0a 20 20 20 20 73 74 6f 72 65 54 79 70 65  g;.    storeType
a740: 49 6e 66 6f 28 70 41 72 67 2c 20 65 6e 63 6f 64  Info(pArg, encod
a750: 69 6e 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ing);.    REGIST
a760: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
a770: 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20  , pArg);.  }..  
a780: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
a790: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
a7a0: 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  || pOp->p4type==
a7b0: 50 34 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a 20  P4_VDBEFUNC );. 
a7c0: 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
a7d0: 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 7b 0a  ==P4_FUNCDEF ){.
a7e0: 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20      ctx.pFunc = 
a7f0: 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
a800: 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63     ctx.pVdbeFunc
a810: 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
a820: 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63     ctx.pVdbeFunc
a830: 20 3d 20 28 56 64 62 65 46 75 6e 63 2a 29 70 4f   = (VdbeFunc*)pO
a840: 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 3b  p->p4.pVdbeFunc;
a850: 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  .    ctx.pFunc =
a860: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2d 3e   ctx.pVdbeFunc->
a870: 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 61 73  pFunc;.  }..  as
a880: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
a890: 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
a8a0: 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  Mem );.  pOut = 
a8b0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
a8c0: 5d 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73  ];.  ctx.s.flags
a8d0: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63   = MEM_Null;.  c
a8e0: 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20  tx.s.db = db;.  
a8f0: 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a  ctx.s.xDel = 0;.
a900: 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20    ctx.s.zMalloc 
a910: 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f  = 0;..  /* The o
a920: 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61  utput cell may a
a930: 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 62 75  lready have a bu
a940: 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ffer allocated. 
a950: 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f  Move.  ** the po
a960: 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73 20 73  inter to ctx.s s
a970: 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
a980: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20  er-function can 
a990: 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72  use.  ** the alr
a9a0: 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62  eady allocated b
a9b0: 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66  uffer instead of
a9c0: 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65   allocating a ne
a9d0: 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71  w one..  */.  sq
a9e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
a9f0: 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a  (&ctx.s, pOut);.
aa00: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
aa10: 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c  (&ctx.s, MEM_Nul
aa20: 6c 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45 72 72  l);..  ctx.isErr
aa30: 6f 72 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74  or = 0;.  if( ct
aa40: 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26  x.pFunc->flags &
aa50: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
aa60: 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73  DCOLL ){.    ass
aa70: 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20  ert( pOp>p->aOp 
aa80: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
aa90: 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50  Op[-1].p4type==P
aaa0: 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20  4_COLLSEQ );.   
aab0: 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
aac0: 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c  .opcode==OP_Coll
aad0: 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70  Seq );.    ctx.p
aae0: 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70  Coll = pOp[-1].p
aaf0: 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 69  4.pColl;.  }.  i
ab00: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
ab10: 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
ab20: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
ab30: 73 65 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e  se;.  (*ctx.pFun
ab40: 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20  c->xFunc)(&ctx, 
ab50: 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69 66 28  n, apVal);.  if(
ab60: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
ab70: 28 64 62 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  (db) ){.    sqli
ab80: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
ab90: 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67  e(&ctx.s);.    g
aba0: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
abb0: 5f 6d 69 73 75 73 65 3b 0a 20 20 7d 0a 20 20 69  _misuse;.  }.  i
abc0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
abd0: 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76  led ){.    /* Ev
abe0: 65 6e 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c  en though a mall
abf0: 6f 63 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c  oc() has failed,
ac00: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
ac10: 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  ion of the.    *
ac20: 2a 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  * user function 
ac30: 6d 61 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20  may have called 
ac40: 61 6e 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  an sqlite3_resul
ac50: 74 5f 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e  t_XXX() function
ac60: 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72  .    ** to retur
ac70: 6e 20 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66  n a value. The f
ac80: 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65  ollowing call re
ac90: 6c 65 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75  leases any resou
aca0: 72 63 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f  rces.    ** asso
acb0: 63 69 61 74 65 64 20 77 69 74 68 20 73 75 63 68  ciated with such
acc0: 20 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2a   a value..    **
acd0: 0a 20 20 20 20 2a 2a 20 4e 6f 74 65 3a 20 4d 61  .    ** Note: Ma
ace0: 79 62 65 20 4d 65 6d 52 65 6c 65 61 73 65 28 29  ybe MemRelease()
acf0: 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65   should be calle
ad00: 64 20 69 66 20 73 71 6c 69 74 65 33 53 61 66 65  d if sqlite3Safe
ad10: 74 79 4f 6e 28 29 0a 20 20 20 20 2a 2a 20 66 61  tyOn().    ** fa
ad20: 69 6c 73 20 61 6c 73 6f 20 28 74 68 65 20 69 66  ils also (the if
ad30: 28 2e 2e 2e 29 20 73 74 61 74 65 6d 65 6e 74 20  (...) statement 
ad40: 61 62 6f 76 65 29 2e 20 42 75 74 20 69 66 20 70  above). But if p
ad50: 65 6f 70 6c 65 20 61 72 65 0a 20 20 20 20 2a 2a  eople are.    **
ad60: 20 6d 69 73 75 73 69 6e 67 20 73 71 6c 69 74 65   misusing sqlite
ad70: 2c 20 74 68 65 79 20 68 61 76 65 20 62 69 67 67  , they have bigg
ad80: 65 72 20 70 72 6f 62 6c 65 6d 73 20 74 68 61 6e  er problems than
ad90: 20 61 20 6c 65 61 6b 65 64 20 76 61 6c 75 65 2e   a leaked value.
ada0: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
adb0: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
adc0: 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67  e(&ctx.s);.    g
add0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
ade0: 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75 78  .  /* If any aux
adf0: 69 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e 63  iliary data func
ae00: 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20  tions have been 
ae10: 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20 75  called by this u
ae20: 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20  ser function,.  
ae30: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63  ** immediately c
ae40: 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63 74  all the destruct
ae50: 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73  or for any non-s
ae60: 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20 20  tatic values..  
ae70: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56 64  */.  if( ctx.pVd
ae80: 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73 71  beFunc ){.    sq
ae90: 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41  lite3VdbeDeleteA
aea0: 75 78 44 61 74 61 28 63 74 78 2e 70 56 64 62 65  uxData(ctx.pVdbe
aeb0: 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  Func, pOp->p1);.
aec0: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62      pOp->p4.pVdb
aed0: 65 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62  eFunc = ctx.pVdb
aee0: 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e  eFunc;.    pOp->
aef0: 70 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42 45  p4type = P4_VDBE
af00: 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  FUNC;.  }..  /* 
af10: 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  If the function 
af20: 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f  returned an erro
af30: 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65  r, throw an exce
af40: 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63  ption */.  if( c
af50: 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  tx.isError ){.  
af60: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
af70: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
af80: 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
af90: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74  3_value_text(&ct
afa0: 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20  x.s));.    rc = 
afb0: 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ctx.isError;.  }
afc0: 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
afd0: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
afe0: 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69  nction into regi
aff0: 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c  ster P3 */.  sql
b000: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
b010: 63 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65  coding(&ctx.s, e
b020: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69  ncoding);.  sqli
b030: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
b040: 4f 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20  Out, &ctx.s);.  
b050: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
b060: 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29  emTooBig(pOut) )
b070: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
b080: 69 67 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54  ig;.  }.  REGIST
b090: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
b0a0: 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
b0b0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
b0c0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
b0d0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
b0e0: 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
b0f0: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
b100: 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20  bit-wise AND of 
b110: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
b120: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
b130: 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
b140: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b150: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b160: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b170: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b180: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b190: 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20  pcode: BitOr P1 
b1a0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
b1b0: 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73  Take the bit-wis
b1c0: 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75  e OR of the valu
b1d0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
b1e0: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
b1f0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b200: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b210: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b220: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b230: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b240: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
b250: 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50  hiftLeft P1 P2 P
b260: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66  3 * *.**.** Shif
b270: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
b280: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b290: 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62  P2 to the left b
b2a0: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
b2b0: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
b2c0: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
b2d0: 20 69 6e 20 72 65 67 69 73 65 72 20 50 31 2e 0a   in regiser P1..
b2e0: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
b2f0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b300: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b310: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b320: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b330: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b340: 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20  : ShiftRight P1 
b350: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
b360: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
b370: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
b380: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69  ter P2 to the ri
b390: 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  ght by the.** nu
b3a0: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
b3b0: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
b3c0: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
b3d0: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
b3e0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b3f0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b400: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b410: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b420: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
b430: 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20  e OP_BitAnd:    
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b450: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e  same as TK_BITAN
b460: 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
b470: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  3 */.case OP_Bit
b480: 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Or:             
b490: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b4a0: 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69  TK_BITOR, in1, i
b4b0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b4c0: 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20   OP_ShiftLeft:  
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b4e0: 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54  ame as TK_LSHIFT
b4f0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b500: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
b510: 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20  tRight: {       
b520: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b530: 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_RSHIFT, in1, i
b540: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
b550: 34 20 61 3b 0a 20 20 69 36 34 20 62 3b 0a 0a 20  4 a;.  i64 b;.. 
b560: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
b570: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
b580: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
b590: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b5a0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
b5b0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
b5c0: 20 61 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   a = sqlite3Vdbe
b5d0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
b5e0: 20 20 62 20 3d 20 73 71 6c 69 74 65 33 56 64 62    b = sqlite3Vdb
b5f0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
b600: 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e  .  switch( pOp->
b610: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61  opcode ){.    ca
b620: 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20  se OP_BitAnd:   
b630: 20 20 20 61 20 26 3d 20 62 3b 20 20 20 20 20 62     a &= b;     b
b640: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
b650: 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 61  P_BitOr:       a
b660: 20 7c 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b   |= b;     break
b670: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 53 68  ;.    case OP_Sh
b680: 69 66 74 4c 65 66 74 3a 20 20 20 61 20 3c 3c 3d  iftLeft:   a <<=
b690: 20 62 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   b;    break;.  
b6a0: 20 20 64 65 66 61 75 6c 74 3a 20 20 61 73 73 65    default:  asse
b6b0: 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
b6c0: 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 29  =OP_ShiftRight )
b6d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
b6e0: 20 20 20 20 20 20 20 20 20 20 20 61 20 3e 3e 3d             a >>=
b6f0: 20 62 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   b;    break;.  
b700: 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
b710: 61 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  a;.  MemSetTypeF
b720: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
b730: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
b740: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
b750: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
b760: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
b770: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
b780: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b790: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
b7a0: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
b7b0: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
b7c0: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
b7d0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
b7e0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
b7f0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
b800: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
b810: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
b820: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
b830: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
b840: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
b850: 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b  pOp->p2;.  break
b860: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
b870: 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20  MustBeInt P1 P2 
b880: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72  * * *.** .** For
b890: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
b8a0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
b8b0: 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  e an integer.  I
b8c0: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
b8d0: 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69  n P1 is not an i
b8e0: 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f  nteger and canno
b8f0: 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
b900: 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  nto an integer.*
b910: 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c  * without data l
b920: 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  oss, then jump i
b930: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
b940: 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a  , or if P2==0.**
b950: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
b960: 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74  _MISMATCH except
b970: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
b980: 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20  MustBeInt: {    
b990: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
b9a0: 20 69 6e 31 20 2a 2f 0a 20 20 61 70 70 6c 79 41   in1 */.  applyA
b9b0: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
b9c0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
b9d0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69  , encoding);.  i
b9e0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
b9f0: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
ba00: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
ba10: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
ba20: 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  = SQLITE_MISMATC
ba30: 48 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  H;.      goto ab
ba40: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
ba50: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
ba60: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
ba70: 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  - 1;.    }.  }el
ba80: 73 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  se{.    MemSetTy
ba90: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
baa0: 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
bab0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
bac0: 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50  : RealAffinity P
bad0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
bae0: 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68  If register P1 h
baf0: 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
bb00: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
bb10: 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a  real value..**.*
bb20: 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
bb30: 20 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61   used when extra
bb40: 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  cting informatio
bb50: 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20  n from a column 
bb60: 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c  that.** has REAL
bb70: 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68   affinity.  Such
bb80: 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d   column values m
bb90: 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72  ay still be stor
bba0: 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72  ed as.** integer
bbb0: 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66  s, for space eff
bbc0: 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74  iciency, but aft
bbd0: 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65  er extraction we
bbe0: 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f   want them.** to
bbf0: 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61   have only a rea
bc00: 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65  l value..*/.case
bc10: 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79   OP_RealAffinity
bc20: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
bc30: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
bc40: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
bc50: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
bc60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
bc70: 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20  Realify(pIn1);. 
bc80: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
bc90: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
bca0: 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64  IT_CAST./* Opcod
bcb0: 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a  e: ToText P1 * *
bcc0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
bcd0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
bce0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
bcf0: 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20  text..** If the 
bd00: 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63  value is numeric
bd10: 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  , convert it to 
bd20: 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74  a string using t
bd30: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
bd40: 20 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42   of printf().  B
bd50: 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75  lob values are u
bd60: 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20  nchanged and.** 
bd70: 61 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73  are afterwards s
bd80: 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65  imply interprete
bd90: 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a  d as text..**.**
bda0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
bdb0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
bdc0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
bdd0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
bde0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78  */.case OP_ToTex
bdf0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
be00: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
be10: 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31   TK_TO_TEXT, in1
be20: 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   */.  if( pIn1->
be30: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
be40: 20 29 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65   ) break;.  asse
be50: 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45  rt( MEM_Str==(ME
be60: 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20  M_Blob>>3) );.  
be70: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28  pIn1->flags |= (
be80: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
be90: 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c  Blob)>>3;.  appl
bea0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
beb0: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
bec0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63   encoding);.  rc
bed0: 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
bee0: 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  n1);.  assert( p
bef0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
bf00: 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  _Str || db->mall
bf10: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49  ocFailed );.  pI
bf20: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
bf30: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
bf40: 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72  MEM_Blob|MEM_Zer
bf50: 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  o);.  UPDATE_MAX
bf60: 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
bf70: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
bf80: 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50  Opcode: ToBlob P
bf90: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
bfa0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
bfb0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
bfc0: 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20  o be a BLOB..** 
bfd0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
bfe0: 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74  numeric, convert
bff0: 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20   it to a string 
c000: 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67  first..** String
c010: 73 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69  s are simply rei
c020: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 62 6c  nterpreted as bl
c030: 6f 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e  obs with no chan
c040: 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64  ge.** to the und
c050: 65 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a  erlying data..**
c060: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
c070: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
c080: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
c090: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
c0a0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
c0b0: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
c0c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c0d0: 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20   as TK_TO_BLOB, 
c0e0: 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e  in1 */.  if( pIn
c0f0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
c100: 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69  ull ) break;.  i
c110: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c120: 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29  & MEM_Blob)==0 )
c130: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
c140: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
c150: 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64  _AFF_TEXT, encod
c160: 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ing);.    assert
c170: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c180: 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d  MEM_Str || db->m
c190: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
c1a0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
c1b0: 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pIn1, MEM_Blob
c1c0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
c1d0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pIn1->flags &= ~
c1e0: 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d  (MEM_TypeMask&~M
c1f0: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20  EM_Blob);.  }.  
c200: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
c210: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  IZE(pIn1);.  bre
c220: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c230: 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a  : ToNumeric P1 *
c240: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c250: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c260: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c270: 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65  e numeric (eithe
c280: 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20  r an.** integer 
c290: 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  or a floating-po
c2a0: 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20  int number.).** 
c2b0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
c2c0: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
c2d0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
c2e0: 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a  to an using the.
c2f0: 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66  ** equivalent of
c300: 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28   atoi() or atof(
c310: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
c320: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
c330: 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69  ion .** is possi
c340: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ble..**.** A NUL
c350: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
c360: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
c370: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
c380: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
c390: 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20  e OP_ToNumeric: 
c3a0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
c3b0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c3c0: 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31  _TO_NUMERIC, in1
c3d0: 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   */.  if( (pIn1-
c3e0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 4e 75  >flags & (MEM_Nu
c3f0: 6c 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  ll|MEM_Int|MEM_R
c400: 65 61 6c 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20  eal))==0 ){.    
c410: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
c420: 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  merify(pIn1);.  
c430: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
c440: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
c450: 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f  IT_CAST */../* O
c460: 70 63 6f 64 65 3a 20 54 6f 49 6e 74 20 50 31 20  pcode: ToInt P1 
c470: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
c480: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
c490: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65 20   register P1 be 
c4a0: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a  an integer.  If.
c4b0: 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  ** The value is 
c4c0: 63 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c  currently a real
c4d0: 20 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74   number, drop it
c4e0: 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72  s fractional par
c4f0: 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  t..** If the val
c500: 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c  ue is text or bl
c510: 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65  ob, try to conve
c520: 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65  rt it to an inte
c530: 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ger using the.**
c540: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
c550: 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20  toi() and store 
c560: 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e  0 if no such con
c570: 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69  version is possi
c580: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ble..**.** A NUL
c590: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
c5a0: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
c5b0: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
c5c0: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
c5d0: 65 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20  e OP_ToInt: {   
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c5f0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
c600: 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66  INT, in1 */.  if
c610: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
c620: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
c630: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c640: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
c650: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
c660: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
c670: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a  ITE_OMIT_CAST./*
c680: 20 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20   Opcode: ToReal 
c690: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
c6a0: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
c6b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
c6c0: 74 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67  to be a floating
c6d0: 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a   point number..*
c6e0: 2a 20 49 66 20 54 68 65 20 76 61 6c 75 65 20 69  * If The value i
c6f0: 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69  s currently an i
c700: 6e 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20  nteger, convert 
c710: 69 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  it..** If the va
c720: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
c730: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
c740: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74  ert it to an int
c750: 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a  eger using the.*
c760: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
c770: 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65  atoi() and store
c780: 20 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20   0.0 if no such 
c790: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f  conversion is po
c7a0: 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ssible..**.** A 
c7b0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
c7c0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
c7d0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
c7e0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
c7f0: 63 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20  case OP_ToReal: 
c800: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
c810: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c820: 5f 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f  _TO_REAL, in1 */
c830: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
c840: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
c850: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
c860: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
c870: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
c880: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
c890: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
c8a0: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
c8b0: 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Lt P1 P2 P3 P4 P
c8c0: 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  5.**.** Compare 
c8d0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
c8e0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33  gister P1 and P3
c8f0: 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65  .  If reg(P3)<re
c900: 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75  g(P1) then.** ju
c910: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
c920: 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  .  .**.** If the
c930: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
c940: 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  LL bit of P5 is 
c950: 73 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72  set and either r
c960: 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67  eg(P1) or.** reg
c970: 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65  (P3) is NULL the
c980: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  n take the jump.
c990: 20 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f    If the SQLITE_
c9a0: 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62  JUMPIFNULL .** b
c9b0: 69 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e  it is clear then
c9c0: 20 66 61 6c 6c 20 74 68 72 75 20 69 66 20 65 69   fall thru if ei
c9d0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
c9e0: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
c9f0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
ca00: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
ca10: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
ca20: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
ca30: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
ca40: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
ca50: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
ca60: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
ca70: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
ca80: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
ca90: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
caa0: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
cab0: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
cac0: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
cad0: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
cae0: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
caf0: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
cb00: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
cb10: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
cb20: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
cb30: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
cb40: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
cb50: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
cb60: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
cb70: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
cb80: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
cb90: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
cba0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
cbb0: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
cbc0: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
cbd0: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
cbe0: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
cbf0: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
cc00: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
cc10: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
cc20: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
cc30: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
cc40: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
cc50: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
cc60: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
cc70: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
cc80: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
cc90: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
cca0: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
ccb0: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
ccc0: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
ccd0: 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20   used to do the 
cce0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
ccf0: 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  P4 is not specif
cd00: 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63  ied then.** memc
cd10: 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  mp() is used to 
cd20: 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72  compare text str
cd30: 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61  ing.  If both va
cd40: 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65  lues are.** nume
cd50: 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65  ric, then a nume
cd60: 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  ric comparison i
cd70: 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74  s used. If the t
cd80: 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  wo values.** are
cd90: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79   of different ty
cda0: 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72  pes, then number
cdb0: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
cdc0: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74   less than.** st
cdd0: 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67  rings and string
cde0: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
cdf0: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
ce00: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
ce10: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69  QLITE_STOREP2 bi
ce20: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  t of P5 is set, 
ce30: 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70  then do not jump
ce40: 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73  .  Instead,.** s
ce50: 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72  tore a boolean r
ce60: 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c  esult (either 0,
ce70: 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20   or 1, or NULL) 
ce80: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
ce90: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  */./* Opcode: Ne
cea0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
ceb0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
cec0: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
ced0: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
cee0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
cef0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
cf00: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
cf10: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
cf20: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20   are not equal. 
cf30: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
cf40: 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69  de for.** additi
cf50: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
cf60: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
cf70: 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Eq P1 P2 P3 P4 P
cf80: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
cf90: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
cfa0: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
cfb0: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
cfc0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
cfd0: 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72  he operands in r
cfe0: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
cff0: 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a  P3 are equal..**
d000: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
d010: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
d020: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
d030: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20  /./* Opcode: Le 
d040: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
d050: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
d060: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
d070: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
d080: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
d090: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
d0a0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
d0b0: 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74  ter P3 is less t
d0c0: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
d0d0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
d0e0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
d0f0: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
d100: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
d110: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
d120: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50  ./* Opcode: Gt P
d130: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
d140: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
d150: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
d160: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
d170: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
d180: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
d190: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
d1a0: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
d1b0: 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e   than the conten
d1c0: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
d1d0: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
d1e0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
d1f0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
d200: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
d210: 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ge P1 P2 P3 P4
d220: 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
d230: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
d240: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
d250: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
d260: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
d270: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
d280: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
d290: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
d2a0: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
d2b0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
d2c0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
d2d0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
d2e0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
d2f0: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
d300: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
d310: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d320: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
d330: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
d340: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
d350: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
d360: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
d370: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d390: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
d3a0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
d3b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d3d0: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
d3e0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
d3f0: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
d400: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d410: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
d420: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
d430: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
d440: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d450: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
d460: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
d470: 6e 74 20 66 6c 61 67 73 3b 0a 20 20 69 6e 74 20  nt flags;.  int 
d480: 72 65 73 3b 0a 20 20 63 68 61 72 20 61 66 66 69  res;.  char affi
d490: 6e 69 74 79 3b 0a 0a 20 20 66 6c 61 67 73 20 3d  nity;..  flags =
d4a0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 7c 70 49 6e   pIn1->flags|pIn
d4b0: 33 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 69 66 28  3->flags;..  if(
d4c0: 20 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20   flags&MEM_Null 
d4d0: 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 65 69 74  ){.    /* If eit
d4e0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
d4f0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
d500: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55  ult is always NU
d510: 4c 4c 2e 0a 20 20 20 20 2a 2a 20 54 68 65 20 6a  LL..    ** The j
d520: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
d530: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
d540: 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74  FNULL bit is set
d550: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
d560: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
d570: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
d580: 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d     pOut = &p->aM
d590: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
d5a0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
d5b0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
d5c0: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
d5d0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
d5e0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73   pOut);.    }els
d5f0: 65 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20  e if( pOp->p5 & 
d600: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
d610: 4c 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  L ){.      pc = 
d620: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 7d  pOp->p2-1;.    }
d630: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
d640: 0a 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f  .  affinity = pO
d650: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41  p->p5 & SQLITE_A
d660: 46 46 5f 4d 41 53 4b 3b 0a 20 20 69 66 28 20 61  FF_MASK;.  if( a
d670: 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 61  ffinity ){.    a
d680: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
d690: 31 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63  1, affinity, enc
d6a0: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61 70 70 6c  oding);.    appl
d6b0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  yAffinity(pIn3, 
d6c0: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69  affinity, encodi
d6d0: 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  ng);.    if( db-
d6e0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
d6f0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
d700: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
d710: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  >p4type==P4_COLL
d720: 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70  SEQ || pOp->p4.p
d730: 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 45 78 70  Coll==0 );.  Exp
d740: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
d750: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33   ExpandBlob(pIn3
d760: 29 3b 0a 20 20 72 65 73 20 3d 20 73 71 6c 69 74  );.  res = sqlit
d770: 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e  e3MemCompare(pIn
d780: 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34  3, pIn1, pOp->p4
d790: 2e 70 43 6f 6c 6c 29 3b 0a 20 20 73 77 69 74 63  .pColl);.  switc
d7a0: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
d7b0: 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71  {.    case OP_Eq
d7c0: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d  :    res = res==
d7d0: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
d7e0: 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20    case OP_Ne:   
d7f0: 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20   res = res!=0;  
d800: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
d810: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73  se OP_Lt:    res
d820: 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62   = res<0;      b
d830: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
d840: 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Le:    res = r
d850: 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es<=0;     break
d860: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74  ;.    case OP_Gt
d870: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30  :    res = res>0
d880: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
d890: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
d8a0: 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20   res = res>=0;  
d8b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
d8c0: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
d8d0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
d8e0: 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  .    pOut = &p->
d8f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
d900: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
d910: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
d920: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
d930: 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53  = res;.    REGIS
d940: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
d950: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  2, pOut);.  }els
d960: 65 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20  e if( res ){.   
d970: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
d980: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
d990: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d  ./* Opcode: Perm
d9a0: 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34  utation * * * P4
d9b0: 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
d9c0: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65   permutation use
d9d0: 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70  d by the OP_Comp
d9e0: 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20  are operator to 
d9f0: 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20  be the array.** 
da00: 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50  of integers in P
da10: 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72  4..**.** The per
da20: 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  mutation is only
da30: 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65   valid until the
da40: 20 6e 65 78 74 20 4f 50 5f 50 65 72 6d 75 74 61   next OP_Permuta
da50: 74 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65  tion, OP_Compare
da60: 2c 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72  ,.** OP_Halt, or
da70: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20   OP_ResultRow.  
da80: 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50  Typically the OP
da90: 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f  _Permutation sho
daa0: 75 6c 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d  uld occur.** imm
dab0: 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74  ediately prior t
dac0: 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  o the OP_Compare
dad0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72  ..*/.case OP_Per
dae0: 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73  mutation: {.  as
daf0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
db00: 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29  e==P4_INTARRAY )
db10: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
db20: 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72  >p4.ai );.  aPer
db30: 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  mute = pOp->p4.a
db40: 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  i;.  break;.}../
db50: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
db60: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
db70: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 6f  **.** Compare to
db80: 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
db90: 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
dba0: 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
dbb0: 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20  all this.** one 
dbc0: 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28  "A") and in reg(
dbd0: 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31  P2)..reg(P2+P3-1
dbe0: 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20 74  ) ("B").  Save t
dbf0: 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20  he result of.** 
dc00: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  the comparison f
dc10: 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e 65  or use by the ne
dc20: 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  xt OP_Jump instr
dc30: 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  uct..**.** P4 is
dc40: 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
dc50: 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65  ture that define
dc60: 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
dc70: 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a  ences and sort.*
dc80: 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65  * orders for the
dc90: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
dca0: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70  e permutation ap
dcb0: 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65  plies to registe
dcc0: 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65  rs.** only.  The
dcd0: 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74   KeyInfo element
dce0: 73 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65  s are used seque
dcf0: 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54  ntially..**.** T
dd00: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
dd10: 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73   a sort comparis
dd20: 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d  on, so NULLs com
dd30: 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e  pare equal,.** N
dd40: 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68  ULLs are less th
dd50: 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62  an numbers, numb
dd60: 65 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ers are less tha
dd70: 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e  n strings,.** an
dd80: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65  d strings are le
dd90: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
dda0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72  /.case OP_Compar
ddb0: 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  e: {.  int n;.  
ddc0: 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b  int i;.  int p1;
ddd0: 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e  .  int p2;.  con
dde0: 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  st KeyInfo *pKey
ddf0: 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b  Info;.  int idx;
de00: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  .  CollSeq *pCol
de10: 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  l;    /* Collati
de20: 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75  ng sequence to u
de30: 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20  se on this term 
de40: 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20  */.  int bRev;  
de50: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
de60: 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73  for DESCENDING s
de70: 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20  ort order */..  
de80: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
de90: 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
dea0: 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
deb0: 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61  sert( n>0 );.  a
dec0: 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21  ssert( pKeyInfo!
ded0: 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70  =0 );.  p1 = pOp
dee0: 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
def0: 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d  p1>0 && p1+n<=p-
df00: 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 32 20  >nMem+1 );.  p2 
df10: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
df20: 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
df30: 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  n<=p->nMem+1 );.
df40: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
df50: 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20  i++){.    idx = 
df60: 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d  aPermute ? aPerm
df70: 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ute[i] : i;.    
df80: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
df90: 31 2b 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b  1+idx, &p->aMem[
dfa0: 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
dfb0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
dfc0: 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 32  idx, &p->aMem[p2
dfd0: 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65  +idx]);.    asse
dfe0: 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e  rt( i<pKeyInfo->
dff0: 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  nField );.    pC
e000: 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
e010: 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
e020: 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ev = pKeyInfo->a
e030: 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20  SortOrder[i];.  
e040: 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c    iCompare = sql
e050: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26  ite3MemCompare(&
e060: 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c  p->aMem[p1+idx],
e070: 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78   &p->aMem[p2+idx
e080: 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
e090: 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
e0a0: 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
e0b0: 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
e0c0: 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
e0d0: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
e0e0: 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
e0f0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
e100: 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
e110: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
e120: 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
e130: 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
e140: 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
e150: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
e160: 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
e170: 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
e180: 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
e190: 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
e1a0: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
e1b0: 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
e1c0: 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
e1d0: 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
e1e0: 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
e1f0: 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
e200: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
e210: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
e220: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
e230: 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p1 - 1;.  }else
e240: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
e250: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
e260: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
e270: 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  e{.    pc = pOp-
e280: 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p3 - 1;.  }.  b
e290: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
e2a0: 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
e2b0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
e2c0: 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
e2d0: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
e2e0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
e2f0: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
e300: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
e310: 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
e320: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
e330: 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
e340: 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
e350: 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
e360: 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
e370: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
e380: 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
e390: 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
e3a0: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
e3b0: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
e3c0: 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
e3d0: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
e3e0: 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
e3f0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
e400: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
e410: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
e420: 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
e430: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
e440: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
e450: 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
e460: 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
e470: 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
e480: 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
e490: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
e4a0: 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
e4b0: 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
e4c0: 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
e4d0: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
e4e0: 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
e4f0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
e500: 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
e510: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
e520: 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
e530: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e540: 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
e550: 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
e560: 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65  ;    /* Left ope
e570: 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c  rand:  0==FALSE,
e580: 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
e590: 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
e5a0: 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20    int v2;    /* 
e5b0: 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30  Right operand: 0
e5c0: 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
e5d0: 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
e5e0: 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 70  NULL */..  if( p
e5f0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e600: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20  _Null ){.    v1 
e610: 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
e620: 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64    v1 = sqlite3Vd
e630: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
e640: 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  !=0;.  }.  if( p
e650: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
e660: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20  _Null ){.    v2 
e670: 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
e680: 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64    v2 = sqlite3Vd
e690: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
e6a0: 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  !=0;.  }.  if( p
e6b0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41  Op->opcode==OP_A
e6c0: 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  nd ){.    static
e6d0: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
e6e0: 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d  char and_logic[]
e6f0: 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c   = { 0, 0, 0, 0,
e700: 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d   1, 2, 0, 2, 2 }
e710: 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c  ;.    v1 = and_l
e720: 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
e730: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74   }else{.    stat
e740: 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
e750: 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b  d char or_logic[
e760: 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31  ] = { 0, 1, 2, 1
e770: 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20  , 1, 1, 2, 1, 2 
e780: 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c  };.    v1 = or_l
e790: 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
e7a0: 20 7d 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29   }.  if( v1==2 )
e7b0: 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
e7c0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
e7d0: 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ull);.  }else{. 
e7e0: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76     pOut->u.i = v
e7f0: 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  1;.    MemSetTyp
e800: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
e810: 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
e820: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
e830: 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a   Not P1 P2 * * *
e840: 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
e850: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e860: 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62  gister P1 as a b
e870: 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53  oolean value.  S
e880: 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c  tore the.** bool
e890: 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  ean complement i
e8a0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
e8b0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
e8c0: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a  register P1 is .
e8d0: 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20  ** NULL, then a 
e8e0: 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69  NULL is stored i
e8f0: 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
e900: 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  _Not: {         
e910: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
e920: 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 20 2a 2f  s TK_NOT, in1 */
e930: 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
e940: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
e950: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
e960: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
e970: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
e980: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
e990: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
e9a0: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
e9b0: 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33  4(pOut, !sqlite3
e9c0: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
e9d0: 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1));.  }.  break
e9e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e9f0: 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  BitNot P1 P2 * *
ea00: 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72   *.**.** Interpr
ea10: 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  et the content o
ea20: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  f register P1 as
ea30: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74   an integer.  St
ea40: 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d  ore the.** ones-
ea50: 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68  complement of th
ea60: 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20  e P1 value into 
ea70: 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
ea80: 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e   P1 holds.** a N
ea90: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61  ULL then store a
eaa0: 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a   NULL in P2..*/.
eab0: 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20  case OP_BitNot: 
eac0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
ead0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e   same as TK_BITN
eae0: 4f 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 4f 75  OT, in1 */.  pOu
eaf0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
eb00: 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
eb10: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
eb20: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
eb30: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
eb40: 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pOut);.  }else{
eb50: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
eb60: 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
eb70: 2c 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e  , ~sqlite3VdbeIn
eb80: 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20  tValue(pIn1));. 
eb90: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
eba0: 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20  * Opcode: If P1 
ebb0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
ebc0: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
ebd0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
ebe0: 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20  ter P1 is true. 
ebf0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a   The value is.**
ec00: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
ec10: 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
ec20: 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
ec30: 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
ec40: 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
ec50: 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
ec60: 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 74 72  jump if P3 is tr
ec70: 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ue..*/./* Opcode
ec80: 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
ec90: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
eca0: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
ecb0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ecc0: 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
ecd0: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20   value is.** is 
ece0: 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
ecf0: 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65  if it has a nume
ed00: 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72  ric value of zer
ed10: 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
ed20: 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
ed30: 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
ed40: 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 74 72  jump if P3 is tr
ed50: 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ue..*/.case OP_I
ed60: 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f:              
ed70: 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
ed80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
ed90: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
eda0: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
edb0: 20 69 6e 74 20 63 3b 0a 20 20 69 66 28 20 70 49   int c;.  if( pI
edc0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
edd0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20  Null ){.    c = 
ede0: 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65  pOp->p3;.  }else
edf0: 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
ee00: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
ee10: 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  INT.    c = sqli
ee20: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
ee30: 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a  pIn1)!=0;.#else.
ee40: 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
ee50: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
ee60: 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a  1)!=0.0;.#endif.
ee70: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
ee80: 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20  ode==OP_IfNot ) 
ee90: 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 69 66  c = !c;.  }.  if
eea0: 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ( c ){.    pc = 
eeb0: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
eec0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
eed0: 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20  code: IsNull P1 
eee0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  P2 * * *.**.** J
eef0: 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
ef00: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ef10: 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a  er P1 is NULL..*
ef20: 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c  /.case OP_IsNull
ef30: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
ef40: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e  * same as TK_ISN
ef50: 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
ef60: 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
ef70: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
ef80: 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  !=0 ){.    pc = 
ef90: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
efa0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
efb0: 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20  Opcode: NotNull 
efc0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
efd0: 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
efe0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
eff0: 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20  ister P1 is not 
f000: 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  NULL.  .*/.case 
f010: 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20  OP_NotNull: {   
f020: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f030: 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20   as TK_NOTNULL, 
f040: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
f050: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
f060: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
f070: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
f080: 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
f090: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
f0a0: 65 3a 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  e: SetNumColumns
f0b0: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
f0c0: 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 73 65  * This opcode se
f0d0: 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
f0e0: 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68 65   columns for the
f0f0: 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 62   cursor opened b
f100: 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  y the.** followi
f110: 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ng instruction t
f120: 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 4f  o P2..**.** An O
f130: 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20  P_SetNumColumns 
f140: 69 73 20 6f 6e 6c 79 20 75 73 65 66 75 6c 20 69  is only useful i
f150: 66 20 69 74 20 6f 63 63 75 72 73 20 69 6d 6d 65  f it occurs imme
f160: 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20 0a  diately before .
f170: 2a 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  ** one of the fo
f180: 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73 3a  llowing opcodes:
f190: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 52  .**.**     OpenR
f1a0: 65 61 64 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 57  ead.**     OpenW
f1b0: 72 69 74 65 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  rite.**     Open
f1c0: 50 73 65 75 64 6f 0a 2a 2a 0a 2a 2a 20 49 66 20  Pseudo.**.** If 
f1d0: 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
f1e0: 63 6f 64 65 20 69 73 20 74 6f 20 62 65 20 65 78  code is to be ex
f1f0: 65 63 75 74 65 64 20 6f 6e 20 61 20 63 75 72 73  ecuted on a curs
f200: 6f 72 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73  or, then.** this
f210: 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20   opcode must be 
f220: 70 72 65 73 65 6e 74 20 69 6d 6d 65 64 69 61 74  present immediat
f230: 65 6c 79 20 62 65 66 6f 72 65 20 74 68 65 20 6f  ely before the o
f240: 70 63 6f 64 65 20 74 68 61 74 0a 2a 2a 20 6f 70  pcode that.** op
f250: 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 2e 0a  ens the cursor..
f260: 2a 2f 0a 23 69 66 20 30 0a 63 61 73 65 20 4f 50  */.#if 0.case OP
f270: 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 3a 20  _SetNumColumns: 
f280: 7b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  {.  break;.}.#en
f290: 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
f2a0: 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
f2b0: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  P4 *.**.** Inter
f2c0: 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68  pret the data th
f2d0: 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
f2e0: 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75  nts to as a stru
f2f0: 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e  cture built usin
f300: 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63  g.** the MakeRec
f310: 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ord instruction.
f320: 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52    (See the MakeR
f330: 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72  ecord opcode for
f340: 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69   additional.** i
f350: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
f360: 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
f370: 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61  he data.)  Extra
f380: 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  ct the P2-th col
f390: 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73  umn.** from this
f3a0: 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65   record.  If the
f3b0: 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74  re are less that
f3c0: 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75   (P2+1) .** valu
f3d0: 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
f3e0: 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  , extract a NULL
f3f0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  ..**.** The valu
f400: 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73  e extracted is s
f410: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
f420: 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P3..**.** If t
f430: 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  he column contai
f440: 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32  ns fewer than P2
f450: 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78   fields, then ex
f460: 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f  tract a NULL.  O
f470: 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20  r,.** if the P4 
f480: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34  argument is a P4
f490: 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c  _MEM use the val
f4a0: 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67  ue of the P4 arg
f4b0: 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20  ument as.** the 
f4c0: 72 65 73 75 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  result..*/.case 
f4d0: 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75  OP_Column: {.  u
f4e0: 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20  32 payloadSize; 
f4f0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
f500: 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
f510: 72 64 20 2a 2f 0a 20 20 69 36 34 20 70 61 79 6c  rd */.  i64 payl
f520: 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75  oadSize64; /* Nu
f530: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
f540: 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
f550: 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
f560: 20 20 20 20 2f 2a 20 50 31 20 76 61 6c 75 65 20      /* P1 value 
f570: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f  of the opcode */
f580: 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
f590: 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20        /* column 
f5a0: 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65  number to retrie
f5b0: 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ve */.  VdbeCurs
f5c0: 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
f5d0: 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
f5e0: 0a 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20 20  .  char *zRec;  
f5f0: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
f600: 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65 63   to complete rec
f610: 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74  ord-data */.  Bt
f620: 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
f630: 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
f640: 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
f650: 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Type;        /* 
f660: 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74  aType[i] holds t
f670: 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
f680: 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75  of the i-th colu
f690: 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  mn */.  u32 *aOf
f6a0: 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
f6b0: 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
f6c0: 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
f6d0: 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
f6e0: 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  umn */.  int nFi
f6f0: 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e  eld;        /* n
f700: 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
f710: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
f720: 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20  .  int len;     
f730: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e        /* The len
f740: 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61  gth of the seria
f750: 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74  lized data for t
f760: 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  he column */.  i
f770: 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
f780: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
f790: 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61  r */.  char *zDa
f7a0: 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72  ta;       /* Par
f7b0: 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
f7c0: 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
f7d0: 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20  .  Mem *pDest;  
f7e0: 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74        /* Where t
f7f0: 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72  o write the extr
f800: 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20  acted value */. 
f810: 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
f820: 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
f830: 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
f840: 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
f850: 20 75 38 20 2a 7a 49 64 78 3b 20 20 20 20 20 20   u8 *zIdx;      
f860: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
f870: 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 38  o header */.  u8
f880: 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20 20 20   *zEndHdr;      
f890: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66   /* Pointer to f
f8a0: 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20  irst byte after 
f8b0: 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
f8c0: 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20  u32 offset;     
f8d0: 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74     /* Offset int
f8e0: 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20  o the data */.  
f8f0: 75 36 34 20 6f 66 66 73 65 74 36 34 3b 20 20 20  u64 offset64;   
f900: 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 66 66     /* 64-bit off
f910: 73 65 74 2e 20 20 36 34 20 62 69 74 73 20 6e 65  set.  64 bits ne
f920: 65 64 65 64 20 74 6f 20 63 61 74 63 68 20 6f 76  eded to catch ov
f930: 65 72 66 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74 20  erflow */.  int 
f940: 73 7a 48 64 72 3b 20 20 20 20 20 20 20 20 20 2f  szHdr;         /
f950: 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65  * Size of the he
f960: 61 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20  ader size field 
f970: 61 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f  at start of reco
f980: 72 64 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69  rd */.  int avai
f990: 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
f9a0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
f9b0: 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20   available data 
f9c0: 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  */...  p1 = pOp-
f9d0: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
f9e0: 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b 0a 20  >p2;.  pC = 0;. 
f9f0: 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
fa00: 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
fa10: 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c 70 2d  .  assert( p1<p-
fa20: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
fa30: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
fa40: 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
fa50: 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  Mem );.  pDest =
fa60: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
fa70: 33 5d 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  3];.  MemSetType
fa80: 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
fa90: 4e 75 6c 6c 29 3b 0a 20 20 7a 52 65 63 20 3d 20  Null);.  zRec = 
faa0: 30 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c  0;..  /* This bl
fab0: 6f 63 6b 20 73 65 74 73 20 74 68 65 20 76 61 72  ock sets the var
fac0: 69 61 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a  iable payloadSiz
fad0: 65 20 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61  e to be the tota
fae0: 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  l number of.  **
faf0: 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
fb00: 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  cord..  **.  ** 
fb10: 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 62  zRec is set to b
fb20: 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74  e the complete t
fb30: 65 78 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ext of the recor
fb40: 64 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c  d if it is avail
fb50: 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63  able..  ** The c
fb60: 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74  omplete record t
fb70: 65 78 74 20 69 73 20 61 6c 77 61 79 73 20 61 76  ext is always av
fb80: 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75  ailable for pseu
fb90: 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49  do-tables.  ** I
fba0: 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 20  f the record is 
fbb0: 73 74 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73  stored in a curs
fbc0: 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  or, the complete
fbd0: 20 72 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a   record text.  *
fbe0: 2a 20 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c  * might be avail
fbf0: 61 62 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d  able in the  pC-
fc00: 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72  >aRow cache.  Or
fc10: 20 69 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65   it might not be
fc20: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61  ..  ** If the da
fc30: 74 61 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  ta is unavailabl
fc40: 65 2c 20 20 7a 52 65 63 20 69 73 20 73 65 74 20  e,  zRec is set 
fc50: 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20  to NULL..  **.  
fc60: 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75  ** We also compu
fc70: 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
fc80: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
fc90: 72 65 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72  record.  For cur
fca0: 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e  sors,.  ** the n
fcb0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
fcc0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
fcd0: 65 20 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69  e VdbeCursor.nFi
fce0: 65 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a  eld element..  *
fcf0: 2f 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  /.  pC = p->apCs
fd00: 72 5b 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  r[p1];.  assert(
fd10: 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65   pC!=0 );.#ifnde
fd20: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
fd30: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73  RTUALTABLE.  ass
fd40: 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75  ert( pC->pVtabCu
fd50: 72 73 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69  rsor==0 );.#endi
fd60: 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  f.  pCrsr = pC->
fd70: 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
fd80: 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f  Crsr!=0 ){.    /
fd90: 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20  * The record is 
fda0: 73 74 6f 72 65 64 20 69 6e 20 61 20 42 2d 54 72  stored in a B-Tr
fdb0: 65 65 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  ee */.    rc = s
fdc0: 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
fdd0: 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20  Moveto(pC);.    
fde0: 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
fdf0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
fe00: 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  ;.    if( pC->nu
fe10: 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70  llRow ){.      p
fe20: 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a  ayloadSize = 0;.
fe30: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43      }else if( pC
fe40: 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70  ->cacheStatus==p
fe50: 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20  ->cacheCtr ){.  
fe60: 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
fe70: 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  = pC->payloadSiz
fe80: 65 3b 0a 20 20 20 20 20 20 7a 52 65 63 20 3d 20  e;.      zRec = 
fe90: 28 63 68 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b  (char*)pC->aRow;
fea0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70  .    }else if( p
feb0: 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
fec0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
fed0: 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
fee0: 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
fef0: 36 34 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  64);.      asser
ff00: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
ff10: 20 29 3b 20 20 20 2f 2a 20 54 72 75 65 20 62 65   );   /* True be
ff20: 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
ff30: 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f  oveto() call abo
ff40: 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 73  ve */.      /* s
ff50: 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65  qlite3BtreeParse
ff60: 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67  CellPtr() uses g
ff70: 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20  etVarint32() to 
ff80: 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20  extract the.    
ff90: 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a    ** payload siz
ffa0: 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f  e, so it is impo
ffb0: 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f  ssible for paylo
ffc0: 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20  adSize64 to be. 
ffd0: 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74       ** larger t
ffe0: 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a  han 32 bits. */.
fff0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
10000 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53  ayloadSize64 & S
10010 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d  QLITE_MAX_U32)==
10020 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u64)payloadSize
10030 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61 79 6c  64 );.      payl
10040 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70  oadSize = (u32)p
10050 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20  ayloadSize64;.  
10060 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
10070 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
10080 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
10090 26 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20  &payloadSize);. 
100a0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
100b0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
100c0 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
100d0 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
100e0 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
100f0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66      }.  }else if
10100 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
10110 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  e ){.    /* The 
10120 72 65 63 6f 72 64 20 69 73 20 74 68 65 20 73 6f  record is the so
10130 6c 65 20 65 6e 74 72 79 20 6f 66 20 61 20 70 73  le entry of a ps
10140 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
10150 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
10160 70 43 2d 3e 6e 44 61 74 61 3b 0a 20 20 20 20 7a  pC->nData;.    z
10170 52 65 63 20 3d 20 70 43 2d 3e 70 44 61 74 61 3b  Rec = pC->pData;
10180 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
10190 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
101a0 4c 45 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  LE;.    assert( 
101b0 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c  payloadSize==0 |
101c0 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 7d  | zRec!=0 );.  }
101d0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f 6e  else{.    /* Con
101e0 73 69 64 65 72 20 74 68 65 20 72 6f 77 20 74 6f  sider the row to
101f0 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20   be NULL */.    
10200 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b  payloadSize = 0;
10210 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61  .  }..  /* If pa
10220 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20  yloadSize is 0, 
10230 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20  then just store 
10240 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20  a NULL */.  if( 
10250 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29  payloadSize==0 )
10260 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
10270 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  est->flags&MEM_N
10280 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ull );.    goto 
10290 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
102a0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d   }.  assert( db-
102b0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
102c0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20  IMIT_LENGTH]>=0 
102d0 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64  );.  if( payload
102e0 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
102f0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
10300 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
10310 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
10320 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
10330 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 61   pC->nField;.  a
10340 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65 6c 64  ssert( p2<nField
10350 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61   );..  /* Read a
10360 6e 64 20 70 61 72 73 65 20 74 68 65 20 74 61 62  nd parse the tab
10370 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74 6f 72  le header.  Stor
10380 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
10390 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a 2a 20   the parse.  ** 
103a0 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
103b0 68 65 61 64 65 72 20 63 61 63 68 65 20 66 69 65  header cache fie
103c0 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72 73 6f  lds of the curso
103d0 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65 20  r..  */.  aType 
103e0 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69  = pC->aType;.  i
103f0 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
10400 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us==p->cacheCtr 
10410 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74 20 3d  ){.    aOffset =
10420 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20   pC->aOffset;.  
10430 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
10440 74 28 61 54 79 70 65 29 3b 0a 20 20 20 20 61 76  t(aType);.    av
10450 61 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  ail = 0;.    pC-
10460 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73  >aOffset = aOffs
10470 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65  et = &aType[nFie
10480 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79  ld];.    pC->pay
10490 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f  loadSize = paylo
104a0 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e  adSize;.    pC->
104b0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
104c0 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20  >cacheCtr;..    
104d0 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f  /* Figure out ho
104e0 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65  w many bytes are
104f0 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a   in the header *
10500 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29  /.    if( zRec )
10510 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  {.      zData = 
10520 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  zRec;.    }else{
10530 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69  .      if( pC->i
10540 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20  sIndex ){.      
10550 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a    zData = (char*
10560 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79  )sqlite3BtreeKey
10570 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
10580 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ail);.      }els
10590 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  e{.        zData
105a0 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
105b0 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28  3BtreeDataFetch(
105c0 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
105d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a        }.      /*
105e0 20 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44   If KeyFetch()/D
105f0 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67  ataFetch() manag
10600 65 64 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e  ed to get the en
10610 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20  tire payload,.  
10620 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20      ** save the 
10630 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70  payload in the p
10640 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20  C->aRow cache.  
10650 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75  That will save u
10660 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20  s from.      ** 
10670 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61  having to make a
10680 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20  dditional calls 
10690 74 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e  to fetch the con
106a0 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a  tent portion of.
106b0 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63        ** the rec
106c0 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ord..      */.  
106d0 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69      assert( avai
106e0 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  l>=0 );.      if
106f0 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d  ( payloadSize <=
10700 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20   (u32)avail ){. 
10710 20 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a 44         zRec = zD
10720 61 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ata;.        pC-
10730 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61  >aRow = (u8*)zDa
10740 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ta;.      }else{
10750 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
10760 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  w = 0;.      }. 
10770 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20     }.    /* The 
10780 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74  following assert
10790 20 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c 20   is true in all 
107a0 63 61 73 65 73 20 61 63 63 65 70 74 20 77 68 65  cases accept whe
107b0 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74  n.    ** the dat
107c0 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 62  abase file has b
107d0 65 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65 78  een corrupted ex
107e0 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a  ternally..    **
107f0 20 20 20 20 61 73 73 65 72 74 28 20 7a 52 65 63      assert( zRec
10800 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61  !=0 || avail>=pa
10810 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76 61  yloadSize || ava
10820 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20  il>=9 ); */.    
10830 73 7a 48 64 72 20 3d 20 67 65 74 56 61 72 69 6e  szHdr = getVarin
10840 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20  t32((u8*)zData, 
10850 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a  offset);..    /*
10860 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72   Make sure a cor
10870 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61  rupt database ha
10880 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61  s not given us a
10890 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65  n oversize heade
108a0 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  r..    ** Do thi
108b0 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
108c0 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
108d0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
108e0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65    **.    ** Type
108f0 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20   entries can be 
10900 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20  between 1 and 5 
10910 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74  bytes each.  But
10920 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20   4 and 5 byte.  
10930 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
10940 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
10950 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
10960 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
10970 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74  d 32 of.    ** t
10980 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
10990 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
109a0 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
109b0 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
109c0 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
109d0 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
109e0 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
109f0 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
10a00 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78   three.    ** ex
10a10 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68  tra bytes for th
10a20 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  e header length 
10a30 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33  itself.  32768*3
10a40 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20   + 3 = 98307..  
10a50 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66    */.    if( off
10a60 73 65 74 20 3e 20 39 38 33 30 37 20 29 7b 0a 20  set > 98307 ){. 
10a70 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
10a80 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
10a90 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
10aa0 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a  umn_out;.    }..
10ab0 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20 69      /* Compute i
10ac0 6e 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65 72  n len the number
10ad0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
10ae0 61 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65 61  a we need to rea
10af0 64 20 69 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a  d in order.    *
10b00 2a 20 74 6f 20 67 65 74 20 6e 46 69 65 6c 64 20  * to get nField 
10b10 74 79 70 65 20 76 61 6c 75 65 73 2e 20 20 6f 66  type values.  of
10b20 66 73 65 74 20 69 73 20 61 6e 20 75 70 70 65 72  fset is an upper
10b30 20 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e 20   bound on this. 
10b40 20 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69 65   But.    ** nFie
10b50 6c 64 20 6d 69 67 68 74 20 62 65 20 73 69 67 6e  ld might be sign
10b60 69 66 69 63 61 6e 74 6c 79 20 6c 65 73 73 20 74  ificantly less t
10b70 68 61 6e 20 74 68 65 20 74 72 75 65 20 6e 75 6d  han the true num
10b80 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20  ber of columns. 
10b90 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 74 61 62     ** in the tab
10ba0 6c 65 2c 20 61 6e 64 20 69 6e 20 74 68 61 74 20  le, and in that 
10bb0 63 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b 33  case, 5*nField+3
10bc0 20 6d 69 67 68 74 20 62 65 20 73 6d 61 6c 6c 65   might be smalle
10bd0 72 20 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a 20  r than offset.. 
10be0 20 20 20 2a 2a 20 57 65 20 77 61 6e 74 20 74 6f     ** We want to
10bf0 20 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69 6e   minimize len in
10c00 20 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69 74 20   order to limit 
10c10 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
10c20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61 6c  memory.    ** al
10c30 6c 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65 63 69  location, especi
10c40 61 6c 6c 79 20 69 66 20 61 20 63 6f 72 72 75 70  ally if a corrup
10c50 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  t database file 
10c60 68 61 73 20 63 61 75 73 65 64 20 6f 66 66 73 65  has caused offse
10c70 74 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 6f  t.    ** to be o
10c80 76 65 72 73 69 7a 65 64 2e 20 4f 66 66 73 65 74  versized. Offset
10c90 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 39   is limited to 9
10ca0 38 33 30 37 20 61 62 6f 76 65 2e 20 20 42 75 74  8307 above.  But
10cb0 20 39 38 33 30 37 20 6d 69 67 68 74 0a 20 20 20   98307 might.   
10cc0 20 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65 65 64   ** still exceed
10cd0 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61   Robson memory a
10ce0 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73  llocation limits
10cf0 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67 75   on some configu
10d00 72 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20  rations..    ** 
10d10 4f 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74 20  On systems that 
10d20 63 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65 20  cannot tolerate 
10d30 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  large memory all
10d40 6f 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c 64  ocations, nField
10d50 2a 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c 6c  *5+3.    ** will
10d60 20 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63 68 20   likely be much 
10d70 73 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e 46  smaller since nF
10d80 69 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79  ield will likely
10d90 20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a 20 20   be less than.  
10da0 20 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20 20    ** 20 or so.  
10db0 54 68 69 73 20 69 6e 73 75 72 65 73 20 74 68 61  This insures tha
10dc0 74 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20  t Robson memory 
10dd0 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74  allocation limit
10de0 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f 74  s are.    ** not
10df0 20 65 78 63 65 65 64 65 64 20 65 76 65 6e 20 66   exceeded even f
10e00 6f 72 20 63 6f 72 72 75 70 74 20 64 61 74 61 62  or corrupt datab
10e10 61 73 65 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a  ase files..    *
10e20 2f 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69 65  /.    len = nFie
10e30 6c 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69 66  ld*5 + 3;.    if
10e40 28 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66 66  ( len > (int)off
10e50 73 65 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e 74  set ) len = (int
10e60 29 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a  )offset;..    /*
10e70 20 54 68 65 20 4b 65 79 46 65 74 63 68 28 29 20   The KeyFetch() 
10e80 6f 72 20 44 61 74 61 46 65 74 63 68 28 29 20 61  or DataFetch() a
10e90 62 6f 76 65 20 61 72 65 20 66 61 73 74 20 61 6e  bove are fast an
10ea0 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65  d will get the e
10eb0 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63  ntire.    ** rec
10ec0 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f  ord header in mo
10ed0 73 74 20 63 61 73 65 73 2e 20 20 42 75 74 20 74  st cases.  But t
10ee0 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f  hey will fail to
10ef0 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74   get the complet
10f00 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20  e.    ** record 
10f10 68 65 61 64 65 72 20 69 66 20 74 68 65 20 72 65  header if the re
10f20 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65 73  cord header does
10f30 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69   not fit on a si
10f40 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a  ngle page.    **
10f50 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20   in the B-Tree. 
10f60 20 57 68 65 6e 20 74 68 61 74 20 68 61 70 70 65   When that happe
10f70 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56  ns, use sqlite3V
10f80 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
10f90 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75  ) to.    ** acqu
10fa0 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  ire the complete
10fb0 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20   header text..  
10fc0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52    */.    if( !zR
10fd0 65 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20  ec && avail<len 
10fe0 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c  ){.      sMem.fl
10ff0 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73  ags = 0;.      s
11000 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20  Mem.db = 0;.    
11010 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
11020 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
11030 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43  Crsr, 0, len, pC
11040 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d  ->isIndex, &sMem
11050 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
11060 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
11070 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
11080 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20  lumn_out;.      
11090 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  }.      zData = 
110a0 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20  sMem.z;.    }.  
110b0 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38 20    zEndHdr = (u8 
110c0 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20  *)&zData[len];. 
110d0 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a 29     zIdx = (u8 *)
110e0 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a  &zData[szHdr];..
110f0 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65 20      /* Scan the 
11100 68 65 61 64 65 72 20 61 6e 64 20 75 73 65 20 69  header and use i
11110 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65  t to fill in the
11120 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66   aType[] and aOf
11130 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72  fset[].    ** ar
11140 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d 20  rays.  aType[i] 
11150 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65  will contain the
11160 20 74 79 70 65 20 69 6e 74 65 67 65 72 20 66 6f   type integer fo
11170 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20 2a  r the i-th.    *
11180 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66  * column and aOf
11190 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e  fset[i] will con
111a0 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74 20  tain the offset 
111b0 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
111c0 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ng.    ** of the
111d0 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20 73   record to the s
111e0 74 61 72 74 20 6f 66 20 74 68 65 20 64 61 74 61  tart of the data
111f0 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63 6f   for the i-th co
11200 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lumn.    */.    
11210 6f 66 66 73 65 74 36 34 20 3d 20 6f 66 66 73 65  offset64 = offse
11220 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  t;.    for(i=0; 
11230 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a  i<nField; i++){.
11240 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a        if( zIdx<z
11250 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20  EndHdr ){.      
11260 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28    aOffset[i] = (
11270 75 33 32 29 6f 66 66 73 65 74 36 34 3b 0a 20 20  u32)offset64;.  
11280 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 67 65        zIdx += ge
11290 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c 20  tVarint32(zIdx, 
112a0 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20  aType[i]);.     
112b0 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73     offset64 += s
112c0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
112d0 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 69 5d  TypeLen(aType[i]
112e0 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
112f0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69 20          /* If i 
11300 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46 69  is less that nFi
11310 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  eld, then there 
11320 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64 73 20  are less fields 
11330 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20 20  in this.        
11340 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20 53  ** record than S
11350 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64  etNumColumns ind
11360 69 63 61 74 65 64 20 74 68 65 72 65 20 61 72 65  icated there are
11370 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a   columns in the.
11380 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65          ** table
11390 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73 65 74  . Set the offset
113a0 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20 63   for any extra c
113b0 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65  olumns not prese
113c0 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a  nt in.        **
113d0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 30   the record to 0
113e0 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f 64  . This tells cod
113f0 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65  e below to store
11400 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20   a NULL.        
11410 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65  ** instead of de
11420 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61  serializing a va
11430 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  lue from the rec
11440 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ord..        */.
11450 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b          aOffset[
11460 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  i] = 0;.      }.
11470 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
11480 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
11490 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d  &sMem);.    sMem
114a0 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
114b0 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65  l;..    /* If we
114c0 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20   have read more 
114d0 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61 6e  header data than
114e0 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69   was contained i
114f0 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20  n the header,.  
11500 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65    ** or if the e
11510 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66  nd of the last f
11520 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20  ield appears to 
11530 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  be past the end 
11540 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65  of the.    ** re
11550 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20  cord, or if the 
11560 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
11570 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
11580 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20 65   be before the e
11590 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  nd.    ** of the
115a0 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c   record (when al
115b0 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74  l fields present
115c0 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20  ), then we must 
115d0 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20  be dealing .    
115e0 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75 70  ** with a corrup
115f0 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20  t database..    
11600 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64 78  */.    if( (zIdx
11610 20 3e 20 7a 45 6e 64 48 64 72 29 7c 7c 20 28 6f   > zEndHdr)|| (o
11620 66 66 73 65 74 36 34 20 3e 20 70 61 79 6c 6f 61  ffset64 > payloa
11630 64 53 69 7a 65 29 0a 20 20 20 20 20 7c 7c 20 28  dSize).     || (
11640 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26  zIdx==zEndHdr &&
11650 20 6f 66 66 73 65 74 36 34 21 3d 28 75 36 34 29   offset64!=(u64)
11660 70 61 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a  payloadSize) ){.
11670 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
11680 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
11690 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
116a0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
116b0 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68    }..  /* Get th
116c0 65 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61  e column informa
116d0 74 69 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74  tion. If aOffset
116e0 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  [p2] is non-zero
116f0 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73  , then .  ** des
11700 65 72 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c  erialize the val
11710 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  ue from the reco
11720 72 64 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70  rd. If aOffset[p
11730 32 5d 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a  2] is zero,.  **
11740 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20   then there are 
11750 6e 6f 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64  not enough field
11760 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
11770 74 6f 20 73 61 74 69 73 66 79 20 74 68 65 0a 20  to satisfy the. 
11780 20 2a 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e   ** request.  In
11790 20 74 68 69 73 20 63 61 73 65 2c 20 73 65 74 20   this case, set 
117a0 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f  the value NULL o
117b0 72 20 74 6f 20 50 34 20 69 66 20 50 34 20 69 73  r to P4 if P4 is
117c0 0a 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20  .  ** a pointer 
117d0 74 6f 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e  to a Mem object.
117e0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66  .  */.  if( aOff
117f0 73 65 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61  set[p2] ){.    a
11800 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
11810 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20  E_OK );.    if( 
11820 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 73 71  zRec ){.      sq
11830 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
11840 61 73 65 45 78 74 65 72 6e 61 6c 28 70 44 65 73  aseExternal(pDes
11850 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
11860 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
11870 75 38 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73  u8 *)&zRec[aOffs
11880 65 74 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70  et[p2]], aType[p
11890 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  2], pDest);.    
118a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e  }else{.      len
118b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
118c0 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70  rialTypeLen(aTyp
118d0 65 5b 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71  e[p2]);.      sq
118e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
118f0 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a  (&sMem, pDest);.
11900 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
11910 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
11920 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65  ee(pCrsr, aOffse
11930 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e  t[p2], len, pC->
11940 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b  isIndex, &sMem);
11950 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
11960 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
11970 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
11980 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
11990 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d        zData = sM
119a0 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69  em.z;.      sqli
119b0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
119c0 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79  ((u8*)zData, aTy
119d0 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
119e0 20 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d      }.    pDest-
119f0 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
11a00 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66  .  }else{.    if
11a10 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
11a20 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73  4_MEM ){.      s
11a30 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
11a40 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
11a50 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
11a60 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d  M_Static);.    }
11a70 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
11a80 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  rt( pDest->flags
11a90 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20  &MEM_Null );.   
11aa0 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20   }.  }..  /* If 
11ab0 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  we dynamically a
11ac0 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74  llocated space t
11ad0 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20  o hold the data 
11ae0 28 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c  (in the.  ** sql
11af0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
11b00 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76  tree() call abov
11b10 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72  e) then transfer
11b20 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74   control of that
11b30 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c  .  ** dynamicall
11b40 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  y allocated spac
11b50 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44  e over to the pD
11b60 65 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20  est structure.. 
11b70 20 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74   ** This prevent
11b80 73 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e  s a memory copy.
11b90 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d  .  */.  if( sMem
11ba0 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  .zMalloc ){.    
11bb0 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d  assert( sMem.z==
11bc0 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a  sMem.zMalloc );.
11bd0 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44      assert( !(pD
11be0 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  est->flags & MEM
11bf0 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73  _Dyn) );.    ass
11c00 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c  ert( !(pDest->fl
11c10 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
11c20 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65  MEM_Str)) || pDe
11c30 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b  st->z==sMem.z );
11c40 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67  .    pDest->flag
11c50 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d  s &= ~(MEM_Ephem
11c60 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20  |MEM_Static);.  
11c70 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c    pDest->flags |
11c80 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20  = MEM_Term;.    
11c90 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e  pDest->z = sMem.
11ca0 7a 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d  z;.    pDest->zM
11cb0 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61  alloc = sMem.zMa
11cc0 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20  lloc;.  }..  rc 
11cd0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
11ce0 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44  MakeWriteable(pD
11cf0 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  est);..op_column
11d00 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d  _out:.  UPDATE_M
11d10 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
11d20 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
11d30 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
11d40 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est);.  break;.}
11d50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66  ../* Opcode: Aff
11d60 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34  inity P1 P2 * P4
11d70 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61   *.**.** Apply a
11d80 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72  ffinities to a r
11d90 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73  ange of P2 regis
11da0 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69  ters starting wi
11db0 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  th P1..**.** P4 
11dc0 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  is a string that
11dd0 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
11de0 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20  s long. The nth 
11df0 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
11e00 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
11e10 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
11e20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
11e30 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
11e40 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f   the nth.** memo
11e50 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72  ry cell in the r
11e60 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ange..*/.case OP
11e70 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63  _Affinity: {.  c
11e80 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
11e90 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
11ea0 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
11eb0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30  */.  Mem *pData0
11ec0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
11ed0 20 72 65 67 69 73 74 65 72 20 74 6f 20 77 68 69   register to whi
11ee0 63 68 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69  ch to apply affi
11ef0 6e 69 74 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  nity */.  Mem *p
11f00 4c 61 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Last;        /* 
11f10 4c 61 73 74 20 72 65 67 69 73 74 65 72 20 74 6f  Last register to
11f20 20 77 68 69 63 68 20 74 6f 20 61 70 70 6c 79 20   which to apply 
11f30 61 66 66 69 6e 69 74 79 20 2a 2f 0a 20 20 4d 65  affinity */.  Me
11f40 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20  m *pRec;        
11f50 20 2f 2a 20 43 75 72 72 65 6e 74 20 72 65 67 69   /* Current regi
11f60 73 74 65 72 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  ster */..  zAffi
11f70 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
11f80 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 70 2d  ;.  pData0 = &p-
11f90 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
11fa0 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61    pLast = &pData
11fb0 30 5b 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20  0[pOp->p2-1];.  
11fc0 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
11fd0 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
11fe0 65 63 2b 2b 29 7b 0a 20 20 20 20 45 78 70 61 6e  ec++){.    Expan
11ff0 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20  dBlob(pRec);.   
12000 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
12010 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70  Rec, zAffinity[p
12020 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63  Rec-pData0], enc
12030 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 62 72  oding);.  }.  br
12040 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
12050 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31  e: MakeRecord P1
12060 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
12070 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67  * Convert P2 reg
12080 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67  isters beginning
12090 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 61 20   with P1 into a 
120a0 73 69 6e 67 6c 65 20 65 6e 74 72 79 0a 2a 2a 20  single entry.** 
120b0 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65  suitable for use
120c0 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72   as a data recor
120d0 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  d in a database 
120e0 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65  table or as a ke
120f0 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78  y.** in an index
12100 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f  .  The details o
12110 66 20 74 68 65 20 66 6f 72 6d 61 74 20 61 72 65  f the format are
12120 20 69 72 72 65 6c 65 76 61 6e 74 20 61 73 20 6c   irrelevant as l
12130 6f 6e 67 20 61 73 0a 2a 2a 20 74 68 65 20 4f 50  ong as.** the OP
12140 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
12150 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
12160 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 20 52  cord later..** R
12170 65 66 65 72 20 74 6f 20 73 6f 75 72 63 65 20 63  efer to source c
12180 6f 64 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72  ode comments for
12190 20 74 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20   the details of 
121a0 74 68 65 20 72 65 63 6f 72 64 0a 2a 2a 20 66 6f  the record.** fo
121b0 72 6d 61 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  rmat..**.** P4 m
121c0 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74  ay be a string t
121d0 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
121e0 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20  ters long.  The 
121f0 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
12200 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
12210 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
12220 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
12230 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
12240 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
12250 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64  field of the ind
12260 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ex key..**.** Th
12270 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63  e mapping from c
12280 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69  haracter to affi
12290 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79  nity is given by
122a0 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
122b0 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  .** macros defin
122c0 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e  ed in sqliteInt.
122d0 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  h..**.** If P4 i
122e0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20  s NULL then all 
122f0 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76  index fields hav
12300 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e  e the affinity N
12310 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ONE..*/.case OP_
12320 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20  MakeRecord: {.  
12330 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20  u8 *zNewRecord; 
12340 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66         /* A buff
12350 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  er to hold the d
12360 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20  ata for the new 
12370 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
12380 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20  *pRec;          
12390 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65     /* The new re
123a0 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44  cord */.  u64 nD
123b0 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
123c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
123d0 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
123e0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b  e */.  int nHdr;
123f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12400 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
12410 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
12420 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
12430 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12440 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
12450 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
12460 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ord */.  int nZe
12470 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ro;             
12480 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
12490 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
124a0 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
124b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e   */.  int nVarin
124c0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
124d0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
124e0 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20  in a varint */. 
124f0 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65   u32 serial_type
12500 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  ;       /* Type 
12510 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  field */.  Mem *
12520 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20  pData0;         
12530 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64    /* First field
12540 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20   to be combined 
12550 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
12560 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b  */.  Mem *pLast;
12570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
12580 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ast field of the
12590 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
125a0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
125b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
125c0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
125d0 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20  ecord */.  char 
125e0 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20  *zAffinity;     
125f0 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
12600 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  y string for the
12610 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
12620 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
12630 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d      /* File form
12640 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e  at to use for en
12650 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
12660 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
12670 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
12680 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
12690 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
126a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
126b0 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c  Length of a fiel
126c0 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d  d */..  /* Assum
126d0 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63  ing the record c
126e0 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73  ontains N fields
126f0 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72  , the record for
12700 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c  mat looks.  ** l
12710 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20  ike this:.  **. 
12720 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
12730 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12740 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12750 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12760 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
12770 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74  * | hdr-size | t
12780 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c  ype 0 | type 1 |
12790 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20   ... | type N-1 
127a0 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20  | data0 | ... | 
127b0 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a  data N-1 | .  **
127c0 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
127d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
127e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
127f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12800 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20  ---------.  **. 
12810 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74   ** Data(0) is t
12820 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
12830 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20  er P1.  Data(1) 
12840 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73  comes from regis
12850 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e  ter P1+1.  ** an
12860 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a  d so froth..  **
12870 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20  .  ** Each type 
12880 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e  field is a varin
12890 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  t representing t
128a0 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f  he serial type o
128b0 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72  f the .  ** corr
128c0 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65  esponding data e
128d0 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69  lement (see sqli
128e0 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
128f0 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68  e()). The.  ** h
12900 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73  dr-size field is
12910 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77   also a varint w
12920 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73  hich is the offs
12930 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  et from the begi
12940 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68  nning.  ** of th
12950 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61  e record to data
12960 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20  0..  */.  nData 
12970 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
12980 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
12990 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
129a0 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20  .  nHdr = 0;    
129b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
129c0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
129d0 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 42  er space */.  nB
129e0 79 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  yte = 0;        
129f0 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
12a00 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
12a10 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 5a 65   record */.  nZe
12a20 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ro = 0;         
12a30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
12a40 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
12a50 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
12a60 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
12a70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e  Op->p1;.  zAffin
12a80 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
12a90 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
12aa0 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30  d>0 && pOp->p2>0
12ab0 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65   && pOp->p2+nFie
12ac0 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  ld<=p->nMem+1 );
12ad0 0a 20 20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e  .  pData0 = &p->
12ae0 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
12af0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
12b00 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
12b10 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
12b20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
12b30 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
12b40 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70  rmat;..  /* Loop
12b50 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65   through the ele
12b60 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20  ments that will 
12b70 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f  make up the reco
12b80 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a  rd to figure.  *
12b90 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73  * out how much s
12ba0 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64  pace is required
12bb0 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
12bc0 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28  ord..  */.  for(
12bd0 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
12be0 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
12bf0 29 7b 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69  ){.    if( zAffi
12c00 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70  nity ){.      ap
12c10 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63  plyAffinity(pRec
12c20 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63  , zAffinity[pRec
12c30 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69  -pData0], encodi
12c40 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ng);.    }.    i
12c50 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  f( pRec->flags&M
12c60 45 4d 5f 5a 65 72 6f 20 26 26 20 70 52 65 63 2d  EM_Zero && pRec-
12c70 3e 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  >n>0 ){.      sq
12c80 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
12c90 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20  ndBlob(pRec);.  
12ca0 20 20 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f 74    }.    serial_t
12cb0 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
12cc0 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
12cd0 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  , file_format);.
12ce0 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65      len = sqlite
12cf0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
12d00 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
12d10 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
12d20 6e 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73  n;.    nHdr += s
12d30 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
12d40 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20  serial_type);.  
12d50 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
12d60 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
12d70 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75        /* Only pu
12d80 72 65 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42  re zero-filled B
12d90 4c 4f 42 73 20 63 61 6e 20 62 65 20 69 6e 70 75  LOBs can be inpu
12da0 74 20 74 6f 20 74 68 69 73 20 4f 70 63 6f 64 65  t to this Opcode
12db0 2e 0a 20 20 20 20 20 20 2a 2a 20 57 65 20 64 6f  ..      ** We do
12dc0 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62 73   not allow blobs
12dd0 20 77 69 74 68 20 61 20 70 72 65 66 69 78 20 61   with a prefix a
12de0 6e 64 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65 64  nd a zero-filled
12df0 20 74 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   tail. */.      
12e00 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75  nZero += pRec->u
12e10 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73  .nZero;.    }els
12e20 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20 20  e if( len ){.   
12e30 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20     nZero = 0;.  
12e40 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64    }.  }..  /* Ad
12e50 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65  d the initial he
12e60 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20  ader varint and 
12e70 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a  total the size *
12e80 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72  /.  nHdr += nVar
12e90 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72  int = sqlite3Var
12ea0 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20  intLen(nHdr);.  
12eb0 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69  if( nVarint<sqli
12ec0 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
12ed0 72 29 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b 2b  r) ){.    nHdr++
12ee0 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20  ;.  }.  nByte = 
12ef0 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f  nHdr+nData-nZero
12f00 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
12f10 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
12f20 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
12f30 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
12f40 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b  g;.  }..  /* Mak
12f50 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75  e sure the outpu
12f60 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61  t register has a
12f70 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e   buffer large en
12f80 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20  ough to store . 
12f90 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f   ** the new reco
12fa0 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72  rd. The output r
12fb0 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33  egister (pOp->p3
12fc0 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ) is not allowed
12fd0 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20   to.  ** be one 
12fe0 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  of the input reg
12ff0 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20  isters (because 
13000 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  the following ca
13010 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
13020 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20  e3VdbeMemGrow() 
13030 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
13040 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
13050 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
13060 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
13070 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
13080 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
13090 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
130a0 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
130b0 3e 70 33 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  >p3];.  if( sqli
130c0 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
130d0 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c  Out, (int)nByte,
130e0 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
130f0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
13100 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
13110 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
13120 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
13130 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
13140 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
13150 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70  , nHdr);.  for(p
13160 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
13170 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
13180 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
13190 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
131a0 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
131b0 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
131c0 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
131d0 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
131e0 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
131f0 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
13200 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f  type */.  }.  fo
13210 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
13220 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
13230 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20  ++){  /* serial 
13240 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d  data */.    i +=
13250 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
13260 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
13270 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74  d[i], (int)(nByt
13280 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f  e-i), pRec,file_
13290 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61  format);.  }.  a
132a0 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20  ssert( i==nByte 
132b0 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
132c0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
132d0 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
132e0 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
132f0 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
13300 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20  lags = MEM_Blob 
13310 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75  | MEM_Dyn;.  pOu
13320 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69  t->xDel = 0;.  i
13330 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
13340 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
13350 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
13360 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
13370 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ro;.  }.  pOut->
13380 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
13390 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
133a0 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
133b0 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
133c0 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  t */.  REGISTER_
133d0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
133e0 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
133f0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
13400 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
13410 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
13420 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
13430 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
13440 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
13450 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
13460 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
13470 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
13480 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
13490 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
134a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
134b0 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
134c0 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
134d0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
134e0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
134f0 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
13500 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
13510 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70  .  pCrsr = p->ap
13520 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43  Csr[pOp->p1]->pC
13530 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72  ursor;.  if( pCr
13540 73 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  sr ){.    rc = s
13550 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74  qlite3BtreeCount
13560 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29  (pCrsr, &nEntry)
13570 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
13580 45 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20  Entry = 0;.  }. 
13590 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
135a0 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e  EM_Int;.  pOut->
135b0 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
135c0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
135d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 61 74  ./* Opcode: Stat
135e0 65 6d 65 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a  ement P1 * * * *
135f0 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 6e 20  .**.** Begin an 
13600 69 6e 64 69 76 69 64 75 61 6c 20 73 74 61 74 65  individual state
13610 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
13620 20 77 68 69 63 68 20 69 73 20 70 61 72 74 20 6f   which is part o
13630 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 74 72  f a larger.** tr
13640 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 69 73  ansaction.  This
13650 20 69 73 20 6e 65 65 64 65 64 20 73 6f 20 74 68   is needed so th
13660 61 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  at the statement
13670 0a 2a 2a 20 63 61 6e 20 62 65 20 72 6f 6c 6c 65  .** can be rolle
13680 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
13690 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
136a0 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
136b0 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
136c0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68  transaction.  Th
136d0 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
136e0 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 75 74  saction will aut
136f0 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 63 6f  omatically.** co
13700 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44  mmit when the VD
13710 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20  BE halts..**.** 
13720 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
13730 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75  connection is cu
13740 72 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f 63  rrently in autoc
13750 6f 6d 6d 69 74 20 6d 6f 64 65 20 28 74 68 61 74  ommit mode (that
13760 20 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 2c 20   .** is to say, 
13770 69 66 20 69 74 20 69 73 20 69 6e 20 62 65 74 77  if it is in betw
13780 65 65 6e 20 42 45 47 49 4e 20 61 6e 64 20 43 4f  een BEGIN and CO
13790 4d 4d 49 54 29 0a 2a 2a 20 61 6e 64 20 69 66 20  MMIT).** and if 
137a0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74 68  there are no oth
137b0 65 72 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  er active statem
137c0 65 6e 74 73 20 6f 6e 20 74 68 65 20 73 61 6d 65  ents on the same
137d0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
137e0 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  nection, then th
137f0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
13800 61 20 6e 6f 2d 6f 70 2e 20 20 4e 6f 20 73 74 61  a no-op.  No sta
13810 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
13820 6f 6e 0a 2a 2a 20 69 73 20 6e 65 65 64 65 64 20  on.** is needed 
13830 73 69 6e 63 65 20 61 6e 79 20 65 72 72 6f 72 20  since any error 
13840 63 61 6e 20 75 73 65 20 74 68 65 20 6e 6f 72 6d  can use the norm
13850 61 6c 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63  al ROLLBACK proc
13860 65 73 73 20 74 6f 0a 2a 2a 20 75 6e 64 6f 20 63  ess to.** undo c
13870 68 61 6e 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  hanges..**.** If
13880 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
13890 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
138a0 74 65 64 2c 20 74 68 65 6e 20 61 20 73 74 61 74  ted, then a stat
138b0 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 66 69  ement journal fi
138c0 6c 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 61 6c  le.** will be al
138d0 6c 6f 63 61 74 65 64 20 61 6e 64 20 69 6e 69 74  located and init
138e0 69 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  ialized..**.** T
138f0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  he statement is 
13900 62 65 67 75 6e 20 6f 6e 20 74 68 65 20 64 61 74  begun on the dat
13910 61 62 61 73 65 20 66 69 6c 65 20 77 69 74 68 20  abase file with 
13920 69 6e 64 65 78 20 50 31 2e 20 20 54 68 65 20 6d  index P1.  The m
13930 61 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  ain.** database 
13940 66 69 6c 65 20 68 61 73 20 61 6e 20 69 6e 64 65  file has an inde
13950 78 20 6f 66 20 30 20 61 6e 64 20 74 68 65 20 66  x of 0 and the f
13960 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
13970 70 6f 72 61 72 79 20 74 61 62 6c 65 73 0a 2a 2a  porary tables.**
13980 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
13990 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53   1..*/.case OP_S
139a0 74 61 74 65 6d 65 6e 74 3a 20 7b 0a 20 20 42 74  tatement: {.  Bt
139b0 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 66 28 20  ree *pBt;.  if( 
139c0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
139d0 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56  0 || db->activeV
139e0 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20  dbeCnt>1 ){.    
139f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
13a00 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
13a10 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73  ->nDb );.    ass
13a20 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70  ert( db->aDb[pOp
13a30 2d 3e 70 31 5d 2e 70 42 74 21 3d 30 20 29 3b 0a  ->p1].pBt!=0 );.
13a40 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44      pBt = db->aD
13a50 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
13a60 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
13a70 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
13a80 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 61 73  s(pBt) );.    as
13a90 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
13aa0 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
13ab0 31 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 69 66  1))!=0 );.    if
13ac0 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
13ad0 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
13ae0 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
13af0 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
13b00 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
13b10 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
13b20 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 70 2d 3e  nt++; .      p->
13b30 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d  iStatement = db-
13b40 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
13b50 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20  ->nStatement;.  
13b60 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
13b70 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74  ite3BtreeBeginSt
13b80 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74  mt(pBt, p->iStat
13b90 65 6d 65 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72  ement);.  }.  br
13ba0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13bb0 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20  e: Savepoint P1 
13bc0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  * * P4 *.**.** O
13bd0 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20  pen, release or 
13be0 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76  rollback the sav
13bf0 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20  epoint named by 
13c00 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65  parameter P4, de
13c10 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68  pending.** on th
13c20 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54  e value of P1. T
13c30 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76  o open a new sav
13c40 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54  epoint, P1==0. T
13c50 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
13c60 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e  t) an.** existin
13c70 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  g savepoint, P1=
13c80 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61  =1, or to rollba
13c90 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73  ck an existing s
13ca0 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a  avepoint P1==2..
13cb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70  */.case OP_Savep
13cc0 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31  oint: {.  int p1
13cd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13ce0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
13cf0 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64  ue of P1 operand
13d00 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
13d10 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
13d20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
13d30 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20   savepoint */.  
13d40 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76  int nName;.  Sav
13d50 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20  epoint *pNew;.  
13d60 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
13d70 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69  point;.  Savepoi
13d80 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20  nt *pTmp;.  int 
13d90 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e  iSavepoint;.  in
13da0 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f  t ii;..  p1 = pO
13db0 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d  p->p1;.  zName =
13dc0 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f   pOp->p4.z;..  /
13dd0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
13de0 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69  e p1 parameter i
13df0 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68  s valid. Also th
13e00 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  at if there is n
13e10 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e  o open.  ** tran
13e20 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  saction, then th
13e30 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e  ere cannot be an
13e40 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20  y savepoints. . 
13e50 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
13e60 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ->pSavepoint==0 
13e70 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  || db->autoCommi
13e80 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
13e90 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
13ea0 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50  BEGIN||p1==SAVEP
13eb0 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31  OINT_RELEASE||p1
13ec0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
13ed0 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  BACK );.  assert
13ee0 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
13ef0 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   || db->isTransa
13f00 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d  ctionSavepoint==
13f10 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63  0 );.  assert( c
13f20 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
13f30 6e 74 28 64 62 29 20 29 3b 0a 0a 20 20 69 66 28  nt(db) );..  if(
13f40 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
13f50 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20  EGIN ){.    if( 
13f60 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74  db->writeVdbeCnt
13f70 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  >0 ){.      /* A
13f80 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63   new savepoint c
13f90 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64  annot be created
13fa0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63   if there are ac
13fb0 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20  tive write .    
13fc0 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20    ** statements 
13fd0 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f  (i.e. open read/
13fe0 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61  write incrementa
13ff0 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e  l blob handles).
14000 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
14010 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
14020 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
14030 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73  , "cannot open s
14040 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20  avepoint - ".   
14050 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
14060 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
14070 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
14080 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
14090 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61  }else{.      nNa
140a0 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  me = sqlite3Strl
140b0 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 20 20  en30(zName);..  
140c0 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20      /* Create a 
140d0 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74  new savepoint st
140e0 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20  ructure. */.    
140f0 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    pNew = sqlite3
14100 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20  DbMallocRaw(db, 
14110 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74  sizeof(Savepoint
14120 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  )+nName+1);.    
14130 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20    if( pNew ){.  
14140 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d        pNew->zNam
14150 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65  e = (char *)&pNe
14160 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  w[1];.        me
14170 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65  mcpy(pNew->zName
14180 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31  , zName, nName+1
14190 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20  );.    .        
141a0 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  /* If there is n
141b0 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  o open transacti
141c0 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68  on, then mark th
141d0 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a  is as a special.
141e0 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e          ** "tran
141f0 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
14200 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  t". */.        i
14210 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
14220 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  t ){.          d
14230 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
14240 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  0;.          db-
14250 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
14260 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20  vepoint = 1;.   
14270 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14280 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
14290 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20  oint++;.        
142a0 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  }.    .        /
142b0 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73  * Link the new s
142c0 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68  avepoint into th
142d0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
142e0 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20  e's list. */.   
142f0 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74       pNew->pNext
14300 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
14310 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
14320 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77  Savepoint = pNew
14330 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
14340 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61    }else{.    iSa
14350 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20  vepoint = 0;..  
14360 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61    /* Find the na
14370 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49  med savepoint. I
14380 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75  f there is no su
14390 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68  ch savepoint, th
143a0 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20  en an.    ** an 
143b0 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65  error is returne
143c0 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20  d to the user.  
143d0 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20  */.    for(.    
143e0 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    pSavepoint = d
143f0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a  b->pSavepoint; .
14400 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
14410 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49 43   && sqlite3StrIC
14420 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a  mp(pSavepoint->z
14430 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20  Name, zName);.  
14440 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
14450 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
14460 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  xt.    ){.      
14470 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  iSavepoint++;.  
14480 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61    }.    if( !pSa
14490 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
144a0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
144b0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
144c0 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65  b, "no such save
144d0 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d  point: %s", zNam
144e0 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  e);.      rc = S
144f0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
14500 20 7d 65 6c 73 65 20 69 66 28 20 0a 20 20 20 20   }else if( .    
14510 20 20 20 20 64 62 2d 3e 77 72 69 74 65 56 64 62      db->writeVdb
14520 65 43 6e 74 3e 30 20 7c 7c 20 28 70 31 3d 3d 53  eCnt>0 || (p1==S
14530 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
14540 4b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56  K && db->activeV
14550 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29  dbeCnt>1) .    )
14560 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73  {.      /* It is
14570 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
14580 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
14590 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66  ) a savepoint if
145a0 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20   there are .    
145b0 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74    ** active writ
145c0 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 74  e statements. It
145d0 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
145e0 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20 73   to rollback a s
145f0 61 76 65 70 6f 69 6e 74 0a 20 20 20 20 20 20 2a  avepoint.      *
14600 2a 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  * if there are a
14610 6e 79 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  ny active statem
14620 65 6e 74 73 20 61 74 20 61 6c 6c 2e 0a 20 20 20  ents at all..   
14630 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
14640 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
14650 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20  >zErrMsg, db, . 
14660 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 25         "cannot %
14670 73 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51  s savepoint - SQ
14680 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
14690 70 72 6f 67 72 65 73 73 22 2c 0a 20 20 20 20 20  progress",.     
146a0 20 20 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e     (p1==SAVEPOIN
146b0 54 5f 52 4f 4c 4c 42 41 43 4b 20 3f 20 22 72 6f  T_ROLLBACK ? "ro
146c0 6c 6c 62 61 63 6b 22 3a 20 22 72 65 6c 65 61 73  llback": "releas
146d0 65 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  e").      );.   
146e0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
146f0 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
14700 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d  .      /* Determ
14710 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
14720 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61  ot this is a tra
14730 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
14740 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20  nt. If so,.     
14750 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20   ** and this is 
14760 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  a RELEASE comman
14770 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72  d, then the curr
14780 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
14790 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d  .      ** is com
147a0 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a  mitted. .      *
147b0 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72  /.      int isTr
147c0 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76  ansaction = pSav
147d0 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30  epoint->pNext==0
147e0 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   && db->isTransa
147f0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a  ctionSavepoint;.
14800 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e        if( isTran
14810 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53  saction && p1==S
14820 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
14830 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   ){.        db->
14840 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
14850 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
14860 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
14870 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
14880 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d           p->pc =
14890 20 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64   pc;.          d
148a0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
148b0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  0;.          p->
148c0 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
148d0 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20  _BUSY;.         
148e0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
148f0 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
14900 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
14910 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
14920 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20  = 0;.        rc 
14930 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d  = p->rc;.      }
14940 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53  else{.        iS
14950 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e  avepoint = db->n
14960 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76  Savepoint - iSav
14970 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20  epoint - 1;.    
14980 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
14990 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
149a0 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
149b0 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65  sqlite3BtreeSave
149c0 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69  point(db->aDb[ii
149d0 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65  ].pBt, p1, iSave
149e0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
149f0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
14a00 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
14a10 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
14a20 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
14a30 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
14a40 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31  }.        if( p1
14a50 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
14a60 42 41 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61  BACK && (db->fla
14a70 67 73 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  gs&SQLITE_Intern
14a80 43 68 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20  Changes)!=0 ){. 
14a90 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
14aa0 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
14ab0 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
14ac0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52          sqlite3R
14ad0 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65  esetInternalSche
14ae0 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 20  ma(db, 0);.     
14af0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a     }.      }.  .
14b00 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c        /* Regardl
14b10 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74  ess of whether t
14b20 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
14b30 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65   or ROLLBACK, de
14b40 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20  stroy all .     
14b50 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e   ** savepoints n
14b60 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20  ested inside of 
14b70 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
14b80 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e  ing operated on.
14b90 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28   */.      while(
14ba0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21   db->pSavepoint!
14bb0 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  =pSavepoint ){. 
14bc0 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62         pTmp = db
14bd0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
14be0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
14bf0 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65  oint = pTmp->pNe
14c00 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
14c10 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54  te3DbFree(db, pT
14c20 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  mp);.        db-
14c30 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
14c40 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
14c50 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45   If it is a RELE
14c60 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f  ASE, then destro
14c70 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  y the savepoint 
14c80 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
14c90 6e 20 74 6f 6f 20 2a 2f 0a 20 20 20 20 20 20 69  n too */.      i
14ca0 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
14cb0 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
14cc0 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76      assert( pSav
14cd0 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76  epoint==db->pSav
14ce0 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20  epoint );.      
14cf0 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
14d00 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
14d10 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
14d20 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
14d30 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  pSavepoint);.   
14d40 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e       if( !isTran
14d50 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20  saction ){.     
14d60 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
14d70 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d  int--;.        }
14d80 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
14d90 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   }..  break;.}..
14da0 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43  /* Opcode: AutoC
14db0 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20  ommit P1 P2 * * 
14dc0 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
14dd0 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f  database auto-co
14de0 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20  mmit flag to P1 
14df0 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20  (1 or 0). If P2 
14e00 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a  is true, roll.**
14e10 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e   back any curren
14e20 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65  tly active btree
14e30 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49   transactions. I
14e40 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20  f there are any 
14e50 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61  active.** VMs (a
14e60 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f  part from this o
14e70 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c  ne), then a ROLL
14e80 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43  BACK fails.  A C
14e90 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a  OMMIT fails if.*
14ea0 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  * there are acti
14eb0 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f  ve writing VMs o
14ec0 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61  r active VMs tha
14ed0 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63  t use shared cac
14ee0 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  he..**.** This i
14ef0 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65  nstruction cause
14f00 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74  s the VM to halt
14f10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74  ..*/.case OP_Aut
14f20 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74  oCommit: {.  int
14f30 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
14f40 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62  it;.  int iRollb
14f50 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f  ack;.  int turnO
14f60 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64 41  nAC;..  desiredA
14f70 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d  utoCommit = pOp-
14f80 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b  >p1;.  iRollback
14f90 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75   = pOp->p2;.  tu
14fa0 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64  rnOnAC = desired
14fb0 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64  AutoCommit && !d
14fc0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  b->autoCommit;. 
14fd0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
14fe0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
14ff0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
15000 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
15010 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
15020 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c  mmit==1 || iRoll
15030 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73  back==0 );.  ass
15040 65 72 74 28 20 64 62 2d 3e 61 63 74 69 76 65 56  ert( db->activeV
15050 64 62 65 43 6e 74 3e 30 20 29 3b 20 20 2f 2a 20  dbeCnt>0 );  /* 
15060 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e  At least this on
15070 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a  e VM is active *
15080 2f 0a 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41  /..  if( turnOnA
15090 43 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26  C && iRollback &
150a0 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  & db->activeVdbe
150b0 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20  Cnt>1 ){.    /* 
150c0 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
150d0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
150e0 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74   ROLLBACK and ot
150f0 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20  her VMs are.    
15100 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67  ** still running
15110 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74  , and a transact
15120 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72  ion is active, r
15130 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
15140 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a  ndicating.    **
15150 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20   that the other 
15160 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
15170 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f  e first. .    */
15180 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
15190 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
151a0 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72  g, db, "cannot r
151b0 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
151c0 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20  ion - ".        
151d0 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
151e0 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
151f0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
15200 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  USY;.  }else if(
15210 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52   turnOnAC && !iR
15220 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 77  ollback && db->w
15230 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 29 7b  riteVdbeCnt>0 ){
15240 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20  .    /* If this 
15250 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
15260 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20  ements a COMMIT 
15270 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
15280 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a  e writing.    **
15290 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
152a0 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74   indicating that
152b0 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
152c0 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
152d0 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  st. .    */.    
152e0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
152f0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
15300 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74  , "cannot commit
15310 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
15320 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
15330 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
15340 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d  ress");.    rc =
15350 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
15360 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65  }else if( desire
15370 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d  dAutoCommit!=db-
15380 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
15390 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b     if( iRollback
153a0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
153b0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
153c0 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  mit==1 );.      
153d0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
153e0 6c 6c 28 64 62 29 3b 0a 20 20 20 20 20 20 64 62  ll(db);.      db
153f0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
15400 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
15410 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
15420 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41  t = (u8)desiredA
15430 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20  utoCommit;.     
15440 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
15450 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
15460 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
15470 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
15480 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
15490 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69  it = (u8)(1-desi
154a0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a  redAutoCommit);.
154b0 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
154c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
154d0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76  ;.        goto v
154e0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
154f0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
15500 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
15510 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73  ment==0 );.    s
15520 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
15530 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69  oints(db);.    i
15540 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
15550 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
15560 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  = SQLITE_DONE;. 
15570 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15580 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
15590 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  R;.    }.    got
155a0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
155b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
155c0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
155d0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20  >zErrMsg, db,.  
155e0 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41        (!desiredA
155f0 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e  utoCommit)?"cann
15600 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ot start a trans
15610 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20  action within a 
15620 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20  transaction":(. 
15630 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63         (iRollbac
15640 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  k)?"cannot rollb
15650 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  ack - no transac
15660 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a  tion is active":
15670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15680 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d      "cannot comm
15690 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  it - no transact
156a0 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29  ion is active"))
156b0 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20  ;.         .    
156c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
156d0 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  R;.  }.  break;.
156e0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72  }../* Opcode: Tr
156f0 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20  ansaction P1 P2 
15700 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69  * * *.**.** Begi
15710 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  n a transaction.
15720 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f    The transactio
15730 6e 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f  n ends when a Co
15740 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b  mmit or Rollback
15750 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e  .** opcode is en
15760 63 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65  countered.  Depe
15770 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20  nding on the ON 
15780 43 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67  CONFLICT setting
15790 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63  , the.** transac
157a0 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20  tion might also 
157b0 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69  be rolled back i
157c0 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e  f an error is en
157d0 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a  countered..**.**
157e0 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
157f0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
15800 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74   file on which t
15810 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
15820 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49  s.** started.  I
15830 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61  ndex 0 is the ma
15840 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
15850 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20   and index 1 is 
15860 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64  the.** file used
15870 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74   for temporary t
15880 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20  ables.  Indices 
15890 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65  of 2 or more are
158a0 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74   used for.** att
158b0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
158c0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
158d0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
158e0 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
158f0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20  on is started.  
15900 41 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20  A RESERVED lock 
15910 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f  is.** obtained o
15920 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
15930 69 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74 65  ile when a write
15940 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
15950 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20  started.  No.** 
15960 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 63 61  other process ca
15970 6e 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20  n start another 
15980 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
15990 6e 20 77 68 69 6c 65 20 74 68 69 73 20 74 72 61  n while this tra
159a0 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75  nsaction is.** u
159b0 6e 64 65 72 77 61 79 2e 20 20 53 74 61 72 74 69  nderway.  Starti
159c0 6e 67 20 61 20 77 72 69 74 65 20 74 72 61 6e 73  ng a write trans
159d0 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61  action also crea
159e0 74 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  tes a rollback j
159f0 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69  ournal. A.** wri
15a00 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  te transaction m
15a10 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
15a20 65 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65  efore any change
15a30 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
15a40 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
15a50 2e 20 20 49 66 20 50 32 20 69 73 20 32 20 6f 72  .  If P2 is 2 or
15a60 20 67 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e   greater then an
15a70 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20   EXCLUSIVE lock 
15a80 69 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64  is also obtained
15a90 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e  .** on the file.
15aa0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
15ab0 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61  zero, then a rea
15ac0 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  d-lock is obtain
15ad0 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ed on the databa
15ae0 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65  se file..*/.case
15af0 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a   OP_Transaction:
15b00 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b   {.  Btree *pBt;
15b10 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
15b20 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
15b30 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
15b40 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
15b50 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
15b60 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
15b70 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
15b80 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20  p1].pBt;..  if( 
15b90 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  pBt ){.    rc = 
15ba0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
15bb0 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d  nTrans(pBt, pOp-
15bc0 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63  >p2);.    if( rc
15bd0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
15be0 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70  .      p->pc = p
15bf0 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  c;.      p->rc =
15c00 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
15c10 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  Y;.      goto vd
15c20 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
15c30 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
15c40 49 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51  ITE_OK && rc!=SQ
15c50 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 20 2f 2a  LITE_READONLY /*
15c60 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 42   && rc!=SQLITE_B
15c70 55 53 59 20 2a 2f 20 29 7b 0a 20 20 20 20 20 20  USY */ ){.      
15c80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
15c90 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
15ca0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
15cb0 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f  * Opcode: ReadCo
15cc0 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
15cd0 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f  *.**.** Read coo
15ce0 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72  kie number P3 fr
15cf0 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61  om database P1 a
15d00 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f  nd write it into
15d10 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
15d20 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P3==1 is the sc
15d30 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
15d40 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  3==2 is the data
15d50 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
15d60 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P3==3 is the rec
15d70 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
15d80 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73  ache size, and s
15d90 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
15da0 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  is.** the main d
15db0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
15dc0 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61   P1==1 is the da
15dd0 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
15de0 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d   to store.** tem
15df0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
15e00 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20  *.** There must 
15e10 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f  be a read-lock o
15e20 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  n the database (
15e30 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  either a transac
15e40 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20  tion.** must be 
15e50 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65  started or there
15e60 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e   must be an open
15e70 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a   cursor) before.
15e80 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  ** executing thi
15e90 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
15ea0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f  /.case OP_ReadCo
15eb0 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20  okie: {         
15ec0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
15ed0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
15ee0 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
15ef0 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69  Db;.  int iCooki
15f00 65 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  e;..  iDb = pOp-
15f10 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d  >p1;.  iCookie =
15f20 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
15f30 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49  rt( pOp->p3<SQLI
15f40 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
15f50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  );.  assert( iDb
15f60 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
15f70 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
15f80 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
15f90 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
15fa0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
15fb0 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b   (1<<iDb))!=0 );
15fc0 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
15fd0 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
15fe0 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69  iDb].pBt, iCooki
15ff0 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  e, (u32 *)&iMeta
16000 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
16010 20 69 4d 65 74 61 3b 0a 20 20 4d 65 6d 53 65 74   iMeta;.  MemSet
16020 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
16030 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
16040 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
16050 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  SetCookie P1 P2 
16060 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69  P3 * *.**.** Wri
16070 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  te the content o
16080 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28 69  f register P3 (i
16090 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e  nterpreted as an
160a0 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74   integer).** int
160b0 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  o cookie number 
160c0 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  P2 of database P
160d0 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65  1.  P2==1 is the
160e0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
160f0 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74    .** P2==2 is t
16100 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
16110 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65  at. P2==3 is the
16120 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
16130 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a  er cache .** siz
16140 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  e, and so forth.
16150 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d    P1==0 is the m
16160 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
16170 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
16180 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  he .** database 
16190 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
161a0 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  re temporary tab
161b0 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61  les..**.** A tra
161c0 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65  nsaction must be
161d0 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20   started before 
161e0 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f  executing this o
161f0 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
16200 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20  P_SetCookie: {  
16210 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20       /* in3 */. 
16220 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65   Db *pDb;.  asse
16230 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49  rt( pOp->p2<SQLI
16240 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
16250 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
16260 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
16270 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
16280 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
16290 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
162a0 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44  >p1))!=0 );.  pD
162b0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
162c0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
162d0 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
162e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
162f0 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29  Integerify(pIn3)
16300 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20  ;.  /* See note 
16310 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66  about index shif
16320 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43  ting on OP_ReadC
16330 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20  ookie */.  rc = 
16340 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61  sqlite3BtreeUpda
16350 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c  teMeta(pDb->pBt,
16360 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70   pOp->p2, (int)p
16370 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28  In3->u.i);.  if(
16380 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f   pOp->p2==BTREE_
16390 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29  SCHEMA_VERSION )
163a0 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68  {.    /* When th
163b0 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
163c0 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20  changes, record 
163d0 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69  the new cookie i
163e0 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20  nternally */.   
163f0 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73   pDb->pSchema->s
16400 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28  chema_cookie = (
16410 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  int)pIn3->u.i;. 
16420 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
16430 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
16440 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66  nges;.  }else if
16450 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
16460 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a  _FILE_FORMAT ){.
16470 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68      /* Record ch
16480 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c  anges in the fil
16490 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20  e format */.    
164a0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
164b0 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29  le_format = (u8)
164c0 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20  pIn3->u.i;.  }. 
164d0 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20   if( pOp->p1==1 
164e0 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69  ){.    /* Invali
164f0 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65  date all prepare
16500 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65  d statements whe
16510 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64  never the TEMP d
16520 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73  atabase.    ** s
16530 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64  chema is changed
16540 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20  .  Ticket #1644 
16550 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  */.    sqlite3Ex
16560 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
16570 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 0a  ements(db);.  }.
16580 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
16590 70 63 6f 64 65 3a 20 56 65 72 69 66 79 43 6f 6f  pcode: VerifyCoo
165a0 6b 69 65 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a  kie P1 P2 *.**.*
165b0 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75  * Check the valu
165c0 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74 61  e of global data
165d0 62 61 73 65 20 70 61 72 61 6d 65 74 65 72 20 6e  base parameter n
165e0 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a 2a 20  umber 0 (the.** 
165f0 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 20  schema version) 
16600 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 69 74  and make sure it
16610 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50 32 2e   is equal to P2.
16620 20 20 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20    .** P1 is the 
16630 64 61 74 61 62 61 73 65 20 6e 75 6d 62 65 72 20  database number 
16640 77 68 69 63 68 20 69 73 20 30 20 66 6f 72 20 74  which is 0 for t
16650 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
16660 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31 20 66   file.** and 1 f
16670 6f 72 20 74 68 65 20 66 69 6c 65 20 68 6f 6c 64  or the file hold
16680 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ing temporary ta
16690 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20 68 69  bles and some hi
166a0 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a 20 66  gher number.** f
166b0 6f 72 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  or auxiliary dat
166c0 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  abases..**.** Th
166d0 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  e cookie changes
166e0 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65   its value whene
166f0 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
16700 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
16710 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
16720 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  on is used to de
16730 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74  tect when that t
16740 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68  he cookie has ch
16750 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61  anged.** and tha
16760 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  t the current pr
16770 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72  ocess needs to r
16780 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61  eread the schema
16790 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72 20 61  ..**.** Either a
167a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65   transaction nee
167b0 64 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20  ds to have been 
167c0 73 74 61 72 74 65 64 20 6f 72 20 61 6e 20 4f 50  started or an OP
167d0 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a 20 74  _Open needs.** t
167e0 6f 20 62 65 20 65 78 65 63 75 74 65 64 20 28 74  o be executed (t
167f0 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20 72 65  o establish a re
16800 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72 65 20  ad lock) before 
16810 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a  this opcode is.*
16820 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61  * invoked..*/.ca
16830 73 65 20 4f 50 5f 56 65 72 69 66 79 43 6f 6f 6b  se OP_VerifyCook
16840 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65 74  ie: {.  int iMet
16850 61 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  a;.  Btree *pBt;
16860 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
16870 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
16880 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
16890 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
168a0 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
168b0 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20  1))!=0 );.  pBt 
168c0 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
168d0 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20 70 42  1].pBt;.  if( pB
168e0 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
168f0 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
16900 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  , BTREE_SCHEMA_V
16910 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26  ERSION, (u32 *)&
16920 69 4d 65 74 61 29 3b 0a 20 20 7d 65 6c 73 65 7b  iMeta);.  }else{
16930 0a 20 20 20 20 69 4d 65 74 61 20 3d 20 30 3b 0a  .    iMeta = 0;.
16940 20 20 7d 0a 20 20 69 66 28 20 69 4d 65 74 61 21    }.  if( iMeta!
16950 3d 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20  =pOp->p2 ){.    
16960 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
16970 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
16980 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
16990 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
169a0 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
169b0 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
169c0 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
169d0 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
169e0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
169f0 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
16a00 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
16a10 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
16a20 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
16a30 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
16a40 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
16a50 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
16a60 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
16a70 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
16a80 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
16a90 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
16aa0 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
16ab0 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
16ac0 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
16ad0 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
16ae0 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
16af0 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
16b00 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
16b10 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
16b20 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
16b30 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
16b40 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
16b50 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
16b60 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
16b70 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
16b80 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
16b90 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
16ba0 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
16bb0 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
16bc0 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
16bd0 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
16be0 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
16bf0 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
16c00 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
16c10 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
16c20 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
16c30 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
16c40 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
16c50 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
16c60 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
16c70 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
16c80 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
16c90 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
16ca0 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
16cb0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
16cc0 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
16cd0 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
16ce0 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
16cf0 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
16d00 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d   pOp->p1);.    }
16d10 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  ..    sqlite3Exp
16d20 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
16d30 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 72  ments(db);.    r
16d40 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  c = SQLITE_SCHEM
16d50 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  A;.  }.  break;.
16d60 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
16d70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
16d80 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
16d90 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72   a read-only cur
16da0 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61  sor for the data
16db0 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65  base table whose
16dc0 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a   root page is.**
16dd0 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73   P2 in a databas
16de0 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74  e file.  The dat
16df0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65  abase file is de
16e00 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20  termined by P3. 
16e10 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20  .** P3==0 means 
16e20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
16e30 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74  e, P3==1 means t
16e40 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
16e50 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61   for .** tempora
16e60 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50  ry tables, and P
16e70 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74  3>1 means used t
16e80 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
16e90 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74   attached.** dat
16ea0 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65  abase.  Give the
16eb0 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69   new cursor an i
16ec0 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e  dentifier of P1.
16ed0 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75    The P1.** valu
16ee0 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63  es need not be c
16ef0 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c  ontiguous but al
16f00 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75  l P1 values shou
16f10 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65  ld be small inte
16f20 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61  gers..** It is a
16f30 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74  n error for P1 t
16f40 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a  o be negative..*
16f50 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
16f60 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  en use the conte
16f70 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
16f80 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61  2 as the root pa
16f90 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76  ge, not.** the v
16fa0 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c  alue of P2 itsel
16fb0 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77  f..**.** There w
16fc0 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f  ill be a read lo
16fd0 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
16fe0 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72  se whenever ther
16ff0 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20  e is an.** open 
17000 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20  cursor.  If the 
17010 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c  database was unl
17020 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74  ocked prior to t
17030 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  his instruction.
17040 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c  ** then a read l
17050 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20  ock is acquired 
17060 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
17070 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20  instruction.  A 
17080 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c  read.** lock all
17090 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73  ows other proces
170a0 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20  ses to read the 
170b0 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f  database but pro
170c0 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74  hibits.** any ot
170d0 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d  her process from
170e0 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64   modifying the d
170f0 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65  atabase.  The re
17100 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65  ad lock is.** re
17110 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20  leased when all 
17120 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73  cursors are clos
17130 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73  ed.  If this ins
17140 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74  truction attempt
17150 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65  s.** to get a re
17160 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c  ad lock but fail
17170 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65  s, the script te
17180 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e  rminates with an
17190 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
171a0 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  error code..**.*
171b0 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
171c0 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
171d0 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
171e0 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
171f0 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
17200 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
17210 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
17220 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
17230 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
17240 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
17250 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
17260 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
17270 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
17280 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
17290 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
172a0 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
172b0 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
172c0 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
172d0 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
172e0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
172f0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  s in the table..
17300 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f  **.** See also O
17310 70 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20  penWrite..*/./* 
17320 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74  Opcode: OpenWrit
17330 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
17340 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
17350 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
17360 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20  named P1 on the 
17370 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
17380 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67  hose root.** pag
17390 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20  e is P2.  Or if 
173a0 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f  P5!=0 use the co
173b0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
173c0 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65  r P2 to find the
173d0 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a  .** root page..*
173e0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
173f0 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
17400 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
17410 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
17420 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
17430 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
17440 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
17450 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
17460 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
17470 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
17480 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
17490 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
174a0 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
174b0 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
174c0 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
174d0 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
174e0 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
174f0 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
17500 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
17510 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
17520 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
17530 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20  e, or to the.** 
17540 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66  largest index of
17550 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   any column of t
17560 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
17570 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a   actually used..
17580 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
17590 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
175a0 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
175b0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
175c0 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
175d0 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
175e0 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
175f0 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
17600 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
17610 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
17620 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
17630 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
17640 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
17650 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
17660 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
17670 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61  .case OP_OpenRea
17680 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57  d:.case OP_OpenW
17690 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 46  rite: {.  int nF
176a0 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  ield;.  KeyInfo 
176b0 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
176c0 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a   p2;.  int iDb;.
176d0 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20    int wrFlag;.  
176e0 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62  Btree *pX;.  Vdb
176f0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
17700 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 6e 46 69   Db *pDb;..  nFi
17710 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49  eld = 0;.  pKeyI
17720 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20  nfo = 0;.  p2 = 
17730 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d  pOp->p2;.  iDb =
17740 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
17750 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
17760 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
17770 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
17780 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29  Mask & (1<<iDb))
17790 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
177a0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20  db->aDb[iDb];.  
177b0 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  pX = pDb->pBt;. 
177c0 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29   assert( pX!=0 )
177d0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
177e0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
177f0 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  e ){.    wrFlag 
17800 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 44 62  = 1;.    if( pDb
17810 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
17820 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57  format < p->minW
17830 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29  riteFileFormat )
17840 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72  {.      p->minWr
17850 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20  iteFileFormat = 
17860 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
17870 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d  le_format;.    }
17880 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72  .  }else{.    wr
17890 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Flag = 0;.  }.  
178a0 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
178b0 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
178c0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
178d0 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
178e0 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65    pIn2 = &p->aMe
178f0 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71 6c 69 74  m[p2];.    sqlit
17900 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
17910 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
17920 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
17930 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
17940 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
17950 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
17960 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  r OP_CreateTable
17970 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
17980 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
17990 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
179a0 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
179b0 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
179c0 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
179d0 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
179e0 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
179f0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
17a00 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
17a10 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
17a20 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
17a30 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
17a40 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20  if( NEVER(p2<2) 
17a50 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ) {.      rc = S
17a60 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
17a70 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  PT;.      goto a
17a80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17a90 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  r;.    }.  }.  i
17aa0 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
17ab0 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20  P4_KEYINFO ){.  
17ac0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
17ad0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
17ae0 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63     pKeyInfo->enc
17af0 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20   = ENC(p->db);. 
17b00 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79     nField = pKey
17b10 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b 0a  Info->nField+1;.
17b20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
17b30 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
17b40 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  2 ){.    nField 
17b50 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d  = pOp->p4.i;.  }
17b60 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
17b70 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72 20  p1>=0 );.  pCur 
17b80 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
17b90 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69  (p, pOp->p1, nFi
17ba0 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20  eld, iDb, 1);.  
17bb0 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f  if( pCur==0 ) go
17bc0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75  to no_mem;.  pCu
17bd0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  r->nullRow = 1;.
17be0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
17bf0 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
17c00 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
17c10 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f  fo, pCur->pCurso
17c20 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
17c30 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
17c40 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69 74 20  ..  /* Since it 
17c50 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f  performs no memo
17c60 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72  ry allocation or
17c70 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61   IO, the only va
17c80 6c 75 65 73 20 74 68 61 74 0a 20 20 2a 2a 20 73  lues that.  ** s
17c90 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
17ca0 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20 61  r() may return a
17cb0 72 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  re SQLITE_EMPTY 
17cc0 61 6e 64 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 0a  and SQLITE_OK. .
17cd0 20 20 2a 2a 20 53 51 4c 49 54 45 5f 45 4d 50 54    ** SQLITE_EMPT
17ce0 59 20 69 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e  Y is only return
17cf0 65 64 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69  ed when attempti
17d00 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 74  ng to open the t
17d10 61 62 6c 65 0a 20 20 2a 2a 20 72 6f 6f 74 65 64  able.  ** rooted
17d20 20 61 74 20 70 61 67 65 20 31 20 6f 66 20 61 20   at page 1 of a 
17d30 7a 65 72 6f 2d 62 79 74 65 20 64 61 74 61 62 61  zero-byte databa
17d40 73 65 2e 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  se.  */.  assert
17d50 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50  ( rc==SQLITE_EMP
17d60 54 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  TY || rc==SQLITE
17d70 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  _OK );.  if( rc=
17d80 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b  =SQLITE_EMPTY ){
17d90 0a 20 20 20 20 70 43 75 72 2d 3e 70 43 75 72 73  .    pCur->pCurs
17da0 6f 72 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d  or = 0;.    rc =
17db0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a   SQLITE_OK;.  }.
17dc0 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
17dd0 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
17de0 20 61 6e 64 20 69 73 49 6e 64 65 78 20 76 61 72   and isIndex var
17df0 69 61 62 6c 65 73 2e 20 50 72 65 76 69 6f 75 73  iables. Previous
17e00 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a   versions of.  *
17e10 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f  * SQLite used to
17e20 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f   check if the ro
17e30 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65  ot-page flags we
17e40 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20  re sane at this 
17e50 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72  point.  ** and r
17e60 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63  eport database c
17e70 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65  orruption if the
17e80 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20  y were not, but 
17e90 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20  this check has. 
17ea0 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20   ** since moved 
17eb0 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c  into the btree l
17ec0 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43  ayer.  */  .  pC
17ed0 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  ur->isTable = pO
17ee0 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
17ef0 59 49 4e 46 4f 3b 0a 20 20 70 43 75 72 2d 3e 69  YINFO;.  pCur->i
17f00 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e  sIndex = !pCur->
17f10 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b  isTable;.  break
17f20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
17f30 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
17f40 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
17f50 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
17f60 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73  or P1 to a trans
17f70 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  ient table..** T
17f80 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77  he cursor is alw
17f90 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f  ays opened read/
17fa0 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a  write even if .*
17fb0 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
17fc0 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79  ase is read-only
17fd0 2e 20 20 54 68 65 20 74 72 61 6e 73 69 65 6e 74  .  The transient
17fe0 20 6f 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74   or virtual.** t
17ff0 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20  able is deleted 
18000 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
18010 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
18020 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50   closed..**.** P
18030 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
18040 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
18050 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
18060 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
18070 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
18080 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
18090 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
180a0 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
180b0 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
180c0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
180d0 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
180e0 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
180f0 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
18100 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
18110 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
18120 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
18130 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20  was once called 
18140 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75 74 20 74  OpenTemp.  But t
18150 68 61 74 20 63 72 65 61 74 65 64 0a 2a 2a 20 63  hat created.** c
18160 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61 75 73 65  onfusion because
18170 20 74 68 65 20 74 65 72 6d 20 22 74 65 6d 70 20   the term "temp 
18180 74 61 62 6c 65 22 2c 20 6d 69 67 68 74 20 72 65  table", might re
18190 66 65 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f  fer either.** to
181a0 20 61 20 54 45 4d 50 20 74 61 62 6c 65 20 61 74   a TEMP table at
181b0 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
181c0 6f 72 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 70  or to a table op
181d0 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68 69 73 20  ened by.** this 
181e0 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e 20 74 68  opcode.  Then th
181f0 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20 63 61  is opcode was ca
18200 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20  ll OpenVirtual. 
18210 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 63 72 65   But.** that cre
18220 61 74 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  ated confusion w
18230 69 74 68 20 74 68 65 20 77 68 6f 6c 65 20 76 69  ith the whole vi
18240 72 74 75 61 6c 2d 74 61 62 6c 65 20 69 64 65 61  rtual-table idea
18250 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
18260 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
18270 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
18280 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
18290 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 20 3d 20  int openFlags = 
182a0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
182b0 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
182c0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
182d0 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
182e0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
182f0 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
18300 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
18310 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
18320 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
18330 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73  SIENT_DB;..  ass
18340 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
18350 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
18360 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
18370 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
18380 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 1);.  if( pCx
18390 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
183a0 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
183b0 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  w = 1;.  rc = sq
183c0 6c 69 74 65 33 42 74 72 65 65 46 61 63 74 6f 72  lite3BtreeFactor
183d0 79 28 64 62 2c 20 30 2c 20 31 2c 20 53 51 4c 49  y(db, 0, 1, SQLI
183e0 54 45 5f 44 45 46 41 55 4c 54 5f 54 45 4d 50 5f  TE_DEFAULT_TEMP_
183f0 43 41 43 48 45 5f 53 49 5a 45 2c 20 6f 70 65 6e  CACHE_SIZE, open
18400 46 6c 61 67 73 2c 0a 20 20 20 20 20 20 20 20 20  Flags,.         
18410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18420 20 20 26 70 43 78 2d 3e 70 42 74 29 3b 0a 20 20    &pCx->pBt);.  
18430 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
18440 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
18450 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
18460 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31  rans(pCx->pBt, 1
18470 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
18480 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18490 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
184a0 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
184b0 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
184c0 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
184d0 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
184e0 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
184f0 68 20 74 68 65 20 42 54 52 45 45 5f 5a 45 52 4f  h the BTREE_ZERO
18500 44 41 54 41 20 66 6c 61 67 20 62 65 66 6f 72 65  DATA flag before
18510 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20  .    ** opening 
18520 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65  it. If a transie
18530 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75  nt table is requ
18540 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74  ired, just use t
18550 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61  he.    ** automa
18560 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
18570 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d  table with root-
18580 70 61 67 65 20 31 20 28 61 6e 20 49 4e 54 4b 45  page 1 (an INTKE
18590 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  Y table)..    */
185a0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
185b0 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20  .pKeyInfo ){.   
185c0 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20     int pgno;.   
185d0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
185e0 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
185f0 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  FO );.      rc =
18600 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
18610 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42  ateTable(pCx->pB
18620 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f  t, &pgno, BTREE_
18630 5a 45 52 4f 44 41 54 41 29 3b 20 0a 20 20 20 20  ZERODATA); .    
18640 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
18650 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61  _OK ){.        a
18660 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53  ssert( pgno==MAS
18670 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20  TER_ROOT+1 );.  
18680 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
18690 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
186a0 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c  x->pBt, pgno, 1,
186b0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
186c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186d0 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d    (KeyInfo*)pOp-
186e0 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72  >p4.z, pCx->pCur
186f0 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43  sor);.        pC
18700 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
18710 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
18720 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
18730 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43  yInfo->enc = ENC
18740 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d  (p->db);.      }
18750 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
18760 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
18770 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
18780 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
18790 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
187a0 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
187b0 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
187c0 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
187d0 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
187e0 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d    pCx->isIndex =
187f0 20 21 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a   !pCx->isTable;.
18800 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
18810 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64  pcode: OpenPseud
18820 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  o P1 P2 P3 * *.*
18830 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
18840 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e  cursor that poin
18850 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62  ts to a fake tab
18860 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
18870 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77   a single.** row
18880 20 6f 66 20 64 61 74 61 2e 20 20 41 6e 79 20 61   of data.  Any a
18890 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20  ttempt to write 
188a0 61 20 73 65 63 6f 6e 64 20 72 6f 77 20 6f 66 20  a second row of 
188b0 64 61 74 61 20 63 61 75 73 65 73 20 74 68 65 0a  data causes the.
188c0 2a 2a 20 66 69 72 73 74 20 72 6f 77 20 74 6f 20  ** first row to 
188d0 62 65 20 64 65 6c 65 74 65 64 2e 20 20 41 6c 6c  be deleted.  All
188e0 20 64 61 74 61 20 69 73 20 64 65 6c 65 74 65 64   data is deleted
188f0 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   when the cursor
18900 20 69 73 0a 2a 2a 20 63 6c 6f 73 65 64 2e 0a 2a   is.** closed..*
18910 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61  *.** A pseudo-ta
18920 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74  ble created by t
18930 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
18940 65 66 75 6c 20 66 6f 72 20 68 6f 6c 64 69 6e 67  eful for holding
18950 20 74 68 65 0a 2a 2a 20 4e 45 57 20 6f 72 20 4f   the.** NEW or O
18960 4c 44 20 74 61 62 6c 65 73 20 69 6e 20 61 20 74  LD tables in a t
18970 72 69 67 67 65 72 2e 20 20 41 6c 73 6f 20 75 73  rigger.  Also us
18980 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 61  ed to hold the a
18990 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f   single.** row o
189a0 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73  utput from the s
189b0 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68  orter so that th
189c0 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63  e row can be dec
189d0 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20  omposed into.** 
189e0 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d  individual colum
189f0 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  ns using the OP_
18a00 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a  Column opcode..*
18a10 2a 0a 2a 2a 20 57 68 65 6e 20 4f 50 5f 49 6e 73  *.** When OP_Ins
18a20 65 72 74 20 69 73 20 65 78 65 63 75 74 65 64 20  ert is executed 
18a30 74 6f 20 69 6e 73 65 72 74 20 61 20 72 6f 77 20  to insert a row 
18a40 69 6e 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f  in to the pseudo
18a50 20 74 61 62 6c 65 2c 0a 2a 2a 20 74 68 65 20 70   table,.** the p
18a60 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
18a70 6f 72 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f  or may or may no
18a80 74 20 6d 61 6b 65 20 69 74 27 73 20 6f 77 6e 20  t make it's own 
18a90 63 6f 70 79 20 6f 66 20 74 68 65 0a 2a 2a 20 6f  copy of the.** o
18aa0 72 69 67 69 6e 61 6c 20 72 6f 77 20 64 61 74 61  riginal row data
18ab0 2e 20 49 66 20 50 32 20 69 73 20 30 2c 20 74 68  . If P2 is 0, th
18ac0 65 6e 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  en the pseudo-ta
18ad0 62 6c 65 20 77 69 6c 6c 20 63 6f 70 79 20 74 68  ble will copy th
18ae0 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72 6f  e.** original ro
18af0 77 20 64 61 74 61 2e 20 4f 74 68 65 72 77 69 73  w data. Otherwis
18b00 65 2c 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  e, a pointer to 
18b10 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 65 6d  the original mem
18b20 6f 72 79 20 63 65 6c 6c 0a 2a 2a 20 69 73 20 73  ory cell.** is s
18b30 74 6f 72 65 64 2e 20 49 6e 20 74 68 69 73 20 63  tored. In this c
18b40 61 73 65 2c 20 74 68 65 20 76 64 62 65 20 70 72  ase, the vdbe pr
18b50 6f 67 72 61 6d 20 6d 75 73 74 20 65 6e 73 75 72  ogram must ensur
18b60 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 6d  e that the .** m
18b70 65 6d 6f 72 79 20 63 65 6c 6c 20 63 6f 6e 74 61  emory cell conta
18b80 69 6e 69 6e 67 20 74 68 65 20 72 6f 77 20 64 61  ining the row da
18b90 74 61 20 69 73 20 6e 6f 74 20 6f 76 65 72 77 72  ta is not overwr
18ba0 69 74 74 65 6e 20 75 6e 74 69 6c 20 74 68 65 0a  itten until the.
18bb0 2a 2a 20 70 73 65 75 64 6f 20 74 61 62 6c 65 20  ** pseudo table 
18bc0 69 73 20 63 6c 6f 73 65 64 20 28 6f 72 20 61 20  is closed (or a 
18bd0 6e 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72  new row is inser
18be0 74 65 64 20 69 6e 74 6f 20 69 74 29 2e 0a 2a 2a  ted into it)..**
18bf0 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75  .** P3 is the nu
18c00 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
18c10 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68  n the records th
18c20 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  at will be store
18c30 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75  d by.** the pseu
18c40 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
18c50 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a  e OP_OpenPseudo:
18c60 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
18c70 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pCx;..  assert(
18c80 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
18c90 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
18ca0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
18cb0 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30  , pOp->p3, -1, 0
18cc0 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
18cd0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
18ce0 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
18cf0 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f  1;.  pCx->pseudo
18d00 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78  Table = 1;.  pCx
18d10 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62  ->ephemPseudoTab
18d20 6c 65 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  le = (u8)pOp->p2
18d30 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
18d40 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49   = 1;.  pCx->isI
18d50 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62 72 65 61  ndex = 0;.  brea
18d60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
18d70 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20   Close P1 * * * 
18d80 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20  *.**.** Close a 
18d90 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c  cursor previousl
18da0 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20  y opened as P1. 
18db0 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a   If P1 is not.**
18dc0 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c   currently open,
18dd0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
18de0 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  n is a no-op..*/
18df0 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20  .case OP_Close: 
18e00 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
18e10 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
18e20 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
18e30 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
18e40 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
18e50 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Csr[pOp->p1]);. 
18e60 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
18e70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  1] = 0;.  break;
18e80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
18e90 65 65 6b 47 65 20 50 31 20 50 32 20 50 33 20 50  eekGe P1 P2 P3 P
18ea0 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  4 *.**.** If cur
18eb0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
18ec0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
18ed0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
18ee0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
18ef0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
18f00 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
18f10 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20  as the key.  If 
18f20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
18f30 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
18f40 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
18f50 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
18f60 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
18f70 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
18f80 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
18f90 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
18fa0 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
18fb0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
18fc0 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
18fd0 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
18fe0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
18ff0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
19000 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
19010 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
19020 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
19030 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20  rds .** greater 
19040 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
19050 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
19060 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
19070 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
19080 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
19090 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
190a0 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c  istinct, SeekLt,
190b0 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a   SeekGt, SeekLe.
190c0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
190d0 65 6b 47 74 20 50 31 20 50 32 20 50 33 20 50 34  ekGt P1 P2 P3 P4
190e0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73   *.**.** If curs
190f0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
19100 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
19110 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
19120 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
19130 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
19140 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
19150 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
19160 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
19170 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
19180 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
19190 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
191a0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
191b0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
191c0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
191d0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
191e0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
191f0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
19200 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
19210 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
19220 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
19230 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
19240 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
19250 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
19260 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
19270 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
19280 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
19290 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
192a0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
192b0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
192c0 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
192d0 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
192e0 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
192f0 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50  : SeekLt P1 P2 P
19300 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66  3 P4 * .**.** If
19310 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
19320 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
19330 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
19340 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
19350 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
19360 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
19370 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
19380 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
19390 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
193a0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
193b0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
193c0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
193d0 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
193e0 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
193f0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
19400 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
19410 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
19420 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
19430 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
19440 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
19450 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
19460 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
19470 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
19480 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a  ords less than .
19490 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
194a0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
194b0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
194c0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
194d0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
194e0 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47   Distinct, SeekG
194f0 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
19500 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
19510 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50 33 20  SeekLe P1 P2 P3 
19520 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
19530 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
19540 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
19550 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
19560 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
19570 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
19580 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
19590 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
195a0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
195b0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
195c0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
195d0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
195e0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
195f0 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
19600 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
19610 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
19620 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
19630 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
19640 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
19650 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
19660 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
19670 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
19680 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
19690 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
196a0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
196b0 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
196c0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
196d0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
196e0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
196f0 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
19700 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
19710 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
19720 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
19730 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
19740 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20 20  _SeekLt:        
19750 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
19760 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a  .case OP_SeekLe:
19770 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
19780 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
19790 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20 20  _SeekGe:        
197a0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
197b0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a  .case OP_SeekGt:
197c0 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
197d0 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
197e0 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20  es;.  int oc;.  
197f0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
19800 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
19810 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   r;.  int nField
19820 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  ;.  i64 iKey;   
19830 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
19840 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
19850 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  o */..  assert( 
19860 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
19870 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
19880 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
19890 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
198a0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
198b0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
198c0 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pC!=0 );.  if( p
198d0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b  C->pCursor!=0 ){
198e0 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f  .    oc = pOp->o
198f0 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e 6e  pcode;.    pC->n
19900 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
19910 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  if( pC->isTable 
19920 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ){.      /* The 
19930 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50  input value in P
19940 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e  3 might be of an
19950 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c  y type: integer,
19960 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20   real, string,. 
19970 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72       ** blob, or
19980 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e   NULL.  But it n
19990 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e  eeds to be an in
199a0 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20  teger before we 
199b0 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a 20  can do.      ** 
199c0 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76  the seek, so cov
199d0 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 20  ert it. */.     
199e0 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
199f0 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20  inity(pIn3);.   
19a00 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65     iKey = sqlite
19a10 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
19a20 6e 33 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72  n3);.      pC->r
19a30 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
19a40 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
19a50 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64  e P3 value could
19a60 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65   not be converte
19a70 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
19a80 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 20 20  r without.      
19a90 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
19aa0 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65  mation, then spe
19ab0 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  cial processing 
19ac0 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a  is required... *
19ad0 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  /.      if( (pIn
19ae0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
19af0 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
19b00 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
19b10 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
19b20 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  0 ){.          /
19b30 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
19b40 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  e cannot be conv
19b50 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b  erted into any k
19b60 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c  ind of a number,
19b70 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68  .          ** th
19b80 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e  en the seek is n
19b90 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20  ot possible, so 
19ba0 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
19bb0 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
19bc0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
19bd0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
19be0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20     }.        /* 
19bf0 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
19c00 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68 65   point, then the
19c10 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62   P3 value must b
19c20 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20  e a floating.   
19c30 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75       ** point nu
19c40 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20  mber. */.       
19c50 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e   assert( (pIn3->
19c60 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
19c70 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 20  )!=0 );..       
19c80 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c   if( iKey==SMALL
19c90 45 53 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49  EST_INT64 && (pI
19ca0 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b  n3->r<(double)iK
19cb0 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29  ey || pIn3->r>0)
19cc0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
19cd0 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
19ce0 20 74 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61   too large in ma
19cf0 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20 65 78  gnitude to be ex
19d00 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a 20 20  pressed as an.  
19d10 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67          ** integ
19d20 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  er. */.         
19d30 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20   res = 1;.      
19d40 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c      if( pIn3->r<
19d50 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
19d60 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
19d70 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Gt || oc==OP_See
19d80 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  kGe ){.         
19d90 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
19da0 33 42 74 72 65 65 46 69 72 73 74 28 70 43 2d 3e  3BtreeFirst(pC->
19db0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19dd0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
19de0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
19df0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
19e00 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
19e10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
19e20 20 20 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50        if( oc==OP
19e30 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLt || oc==O
19e40 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20  P_SeekLe ){.    
19e50 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
19e60 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
19e70 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
19e80 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s);.            
19e90 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
19ea0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
19eb0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
19ec0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
19ed0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
19ee0 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
19ef0 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20 70            pc = p
19f00 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
19f10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
19f20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
19f30 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d 3d 4f   }else if( oc==O
19f40 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
19f50 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20 20  OP_SeekGe ){.   
19f60 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
19f70 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75 6e 63  e ceiling() func
19f80 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20  tion to convert 
19f90 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20  real->int */.   
19fa0 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
19fb0 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69 4b 65  >r > (double)iKe
19fc0 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20 20 20  y ) iKey++;.    
19fd0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
19fe0 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20       /* Use the 
19ff0 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69 6f 6e  floor() function
1a000 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c   to convert real
1a010 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20  ->int */.       
1a020 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f     assert( oc==O
1a030 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d  P_SeekLe || oc==
1a040 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20  OP_SeekGt );.   
1a050 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
1a060 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69 4b 65  >r < (double)iKe
1a070 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20 20 20  y ) iKey--;.    
1a080 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20      }.      } . 
1a090 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1a0a0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1a0b0 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1a0c0 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20  , 0, (u64)iKey, 
1a0d0 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  0, &res);.      
1a0e0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1a0f0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
1a100 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1a110 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
1a120 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29      if( res==0 )
1a130 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f  {.        pC->ro
1a140 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a  widIsValid = 1;.
1a150 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74          pC->last
1a160 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20  Rowid = iKey;.  
1a170 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
1a180 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  .      nField = 
1a190 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20  pOp->p4.i;.     
1a1a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1a1b0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1a1c0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1a1d0 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20  nField>0 );.    
1a1e0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1a1f0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1a200 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
1a210 31 36 29 6e 46 69 65 6c 64 3b 0a 20 20 20 20 20  16)nField;.     
1a220 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
1a230 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Gt || oc==OP_See
1a240 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72  kLe ){.        r
1a250 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
1a260 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20  D_INCRKEY;.     
1a270 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1a280 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20  r.flags = 0;.   
1a290 20 20 20 7d 0a 20 20 20 20 20 20 72 2e 61 4d 65     }.      r.aMe
1a2a0 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  m = &p->aMem[pOp
1a2b0 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 72 63 20  ->p3];.      rc 
1a2c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1a2d0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1a2e0 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c  >pCursor, &r, 0,
1a2f0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20   0, &res);.     
1a300 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1a310 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
1a320 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1a330 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
1a340 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1a350 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d  Valid = 0;.    }
1a360 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1a370 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1a380 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1a390 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1a3a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1a3b0 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
1a3c0 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
1a3d0 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 6f 63  endif.    if( oc
1a3e0 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f  ==OP_SeekGe || o
1a3f0 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 7b 0a  c==OP_SeekGt ){.
1a400 20 20 20 20 20 20 69 66 28 20 72 65 73 3c 30 20        if( res<0 
1a410 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1a420 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a  ==OP_SeekGt) ){.
1a430 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1a440 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
1a450 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1a460 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1a470 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1a480 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1a490 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70  error;.        p
1a4a0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1a4b0 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
1a4c0 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
1a4d0 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
1a4e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
1a4f0 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
1a500 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
1a510 4c 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Le );.      if( 
1a520 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res>0 || (res==0
1a530 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   && oc==OP_SeekL
1a540 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  t) ){.        rc
1a550 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
1a560 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72  revious(pC->pCur
1a570 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1a580 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1a590 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1a5a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1a5b0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  .        pC->row
1a5c0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1a5d0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1a5e0 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74      /* res might
1a5f0 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63   be negative bec
1a600 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69  ause the table i
1a610 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20  s empty.  Check 
1a620 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65  to.        ** se
1a630 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65  e if this is the
1a640 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a   case..        *
1a650 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  /.        res = 
1a660 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28  sqlite3BtreeEof(
1a670 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1a680 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
1a690 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1a6a0 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  0 );.    if( res
1a6b0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1a6c0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1a6d0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
1a6e0 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
1a6f0 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74  hen attempting t
1a700 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74  o open the sqlit
1a710 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a  e3_master table.
1a720 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20      ** for read 
1a730 61 63 63 65 73 73 20 72 65 74 75 72 6e 73 20 53  access returns S
1a740 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20  QLITE_EMPTY. In 
1a750 74 68 69 73 20 63 61 73 65 20 61 6c 77 61 79 73  this case always
1a760 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65  .    ** take the
1a770 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65   jump (since the
1a780 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1a790 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e  s in the table).
1a7a0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
1a7b0 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
1a7c0 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 70 63  ble==0 );.    pc
1a7d0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1a7e0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1a7f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20  /* Opcode: Seek 
1a800 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1a810 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20  * P1 is an open 
1a820 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64  table cursor and
1a830 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20 69   P2 is a rowid i
1a840 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65  nteger.  Arrange
1a850 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f  .** for P1 to mo
1a860 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  ve so that it po
1a870 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69  ints to the rowi
1a880 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a  d given by P2..*
1a890 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74  *.** This is act
1a8a0 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64  ually a deferred
1a8b0 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20   seek.  Nothing 
1a8c0 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73  actually happens
1a8d0 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75   until.** the cu
1a8e0 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20  rsor is used to 
1a8f0 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20  read a record.  
1a900 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20  That way, if no 
1a910 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20  reads.** occur, 
1a920 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49  no unnecessary I
1a930 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63  /O happens..*/.c
1a940 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20  ase OP_Seek: {  
1a950 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
1a960 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
1a970 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1a980 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1a990 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1a9a0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1a9b0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1a9c0 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
1a9d0 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73  ALWAYS(pC->pCurs
1a9e0 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73  or!=0) ){.    as
1a9f0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1aa00 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  e );.    pC->nul
1aa10 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43  lRow = 0;.    pC
1aa20 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
1aa30 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
1aa40 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20  alue(pIn2);.    
1aa50 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1aa60 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65   = 0;.    pC->de
1aa70 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31  ferredMoveto = 1
1aa80 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1aa90 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .  ../* Opcode: 
1aaa0 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 2a  Found P1 P2 P3 *
1aab0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65   *.**.** Registe
1aac0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1aad0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1aae0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 50 31   MakeRecord.  P1
1aaf0 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a   is an index..**
1ab00 20 49 66 20 61 6e 20 65 6e 74 72 79 20 74 68 61   If an entry tha
1ab10 74 20 6d 61 74 63 68 65 73 20 74 68 65 20 76 61  t matches the va
1ab20 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1ab30 70 33 20 65 78 69 73 74 73 20 69 6e 20 50 31 20  p3 exists in P1 
1ab40 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
1ab50 50 32 2e 20 20 49 66 20 74 68 65 20 50 33 20 76  P2.  If the P3 v
1ab60 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61  alue does not ma
1ab70 74 63 68 20 61 6e 79 20 65 6e 74 72 79 20 69 6e  tch any entry in
1ab80 20 50 31 0a 2a 2a 20 74 68 65 6e 20 66 61 6c 6c   P1.** then fall
1ab90 20 74 68 72 75 2e 20 20 54 68 65 20 50 31 20 63   thru.  The P1 c
1aba0 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 70 6f  ursor is left po
1abb0 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61  inting at the ma
1abc0 74 63 68 69 6e 67 20 65 6e 74 72 79 0a 2a 2a 20  tching entry.** 
1abd0 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a  if it exists..**
1abe0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
1abf0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
1ac00 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 49 4e  implement the IN
1ac10 20 6f 70 65 72 61 74 6f 72 20 77 68 65 72 65 20   operator where 
1ac20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d 68 61 6e 64  the.** left-hand
1ac30 20 73 69 64 65 20 69 73 20 61 20 53 45 4c 45 43   side is a SELEC
1ac40 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 50 31  T statement.  P1
1ac50 20 6d 61 79 20 62 65 20 61 20 74 72 75 65 20 69   may be a true i
1ac60 6e 64 65 78 2c 20 6f 72 20 69 74 0a 2a 2a 20 6d  ndex, or it.** m
1ac70 61 79 20 62 65 20 61 20 74 65 6d 70 6f 72 61 72  ay be a temporar
1ac80 79 20 69 6e 64 65 78 20 74 68 61 74 20 68 6f 6c  y index that hol
1ac90 64 73 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ds the results o
1aca0 66 20 74 68 65 20 53 45 4c 45 43 54 0a 2a 2a 20  f the SELECT.** 
1acb0 73 74 61 74 65 6d 65 6e 74 2e 20 20 20 54 68 69  statement.   Thi
1acc0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
1acd0 20 61 6c 73 6f 20 75 73 65 64 20 74 6f 20 69 6d   also used to im
1ace0 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 44  plement the.** D
1acf0 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
1ad00 69 6e 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  in SELECT statem
1ad10 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ents..**.** This
1ad20 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 68 65   instruction che
1ad30 63 6b 73 20 69 66 20 69 6e 64 65 78 20 50 31 20  cks if index P1 
1ad40 63 6f 6e 74 61 69 6e 73 20 61 20 72 65 63 6f 72  contains a recor
1ad50 64 20 66 6f 72 20 77 68 69 63 68 20 0a 2a 2a 20  d for which .** 
1ad60 74 68 65 20 66 69 72 73 74 20 4e 20 73 65 72 69  the first N seri
1ad70 61 6c 69 7a 65 64 20 76 61 6c 75 65 73 20 65 78  alized values ex
1ad80 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20  actly match the 
1ad90 4e 20 73 65 72 69 61 6c 69 7a 65 64 20 76 61 6c  N serialized val
1ada0 75 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 72 65  ues.** in the re
1adb0 63 6f 72 64 20 69 6e 20 72 65 67 69 73 74 65 72  cord in register
1adc0 20 50 33 2c 20 77 68 65 72 65 20 4e 20 69 73 20   P3, where N is 
1add0 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
1ade0 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 0a 2a 2a   of values in.**
1adf0 20 74 68 65 20 50 33 20 72 65 63 6f 72 64 20 28   the P3 record (
1ae00 74 68 65 20 50 33 20 72 65 63 6f 72 64 20 69 73  the P3 record is
1ae10 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
1ae20 20 50 31 20 72 65 63 6f 72 64 29 2e 20 0a 2a 2a   P1 record). .**
1ae30 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
1ae40 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65  tFound, IsUnique
1ae50 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 2f  , NotExists.*/./
1ae60 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75  * Opcode: NotFou
1ae70 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
1ae80 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
1ae90 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1aea0 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1aeb0 6b 65 52 65 63 6f 72 64 2e 20 20 50 31 20 69 73  keRecord.  P1 is
1aec0 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 2e 20 20 49  .** an index.  I
1aed0 66 20 6e 6f 20 65 6e 74 72 79 20 65 78 69 73 74  f no entry exist
1aee0 73 20 69 6e 20 50 31 20 74 68 61 74 20 6d 61 74  s in P1 that mat
1aef0 63 68 65 73 20 74 68 65 20 62 6c 6f 62 20 74 68  ches the blob th
1af00 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  en jump.** to P2
1af10 2e 20 20 49 66 20 61 6e 20 65 6e 74 72 79 20 64  .  If an entry d
1af20 6f 65 73 20 65 78 69 73 74 69 6e 67 2c 20 66 61  oes existing, fa
1af30 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20 54 68 65  ll through.  The
1af40 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 0a   cursor is left.
1af50 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  ** pointing to t
1af60 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 6d 61  he entry that ma
1af70 74 63 68 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  tches..**.** See
1af80 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1af90 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75  tExists, IsUniqu
1afa0 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  e.*/.case OP_Not
1afb0 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20  Found:       /* 
1afc0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1afd0 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20  e OP_Found: {   
1afe0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1aff0 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61  3 */.  int alrea
1b000 64 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65  dyExists;.  Vdbe
1b010 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
1b020 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
1b030 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79  dRecord *pIdxKey
1b040 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70 52 65  ;.  char aTempRe
1b050 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  c[ROUND8(sizeof(
1b060 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29  UnpackedRecord))
1b070 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33   + sizeof(Mem)*3
1b080 20 2b 20 37 5d 3b 0a 0a 20 20 61 6c 72 65 61 64   + 7];..  alread
1b090 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 61  yExists = 0;.  a
1b0a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1b0b0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1b0c0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1b0d0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1b0e0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1b0f0 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c  C!=0 );.  if( AL
1b100 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72  WAYS(pC->pCursor
1b110 21 3d 30 29 20 29 7b 0a 0a 20 20 20 20 61 73 73  !=0) ){..    ass
1b120 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1b130 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
1b140 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
1b150 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
1b160 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33   ExpandBlob(pIn3
1b170 29 3b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d  );.    pIdxKey =
1b180 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f   sqlite3VdbeReco
1b190 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65  rdUnpack(pC->pKe
1b1a0 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20  yInfo, pIn3->n, 
1b1b0 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20 20  pIn3->z,.       
1b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1b1e0 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28  TempRec, sizeof(
1b1f0 61 54 65 6d 70 52 65 63 29 29 3b 0a 20 20 20 20  aTempRec));.    
1b200 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29  if( pIdxKey==0 )
1b210 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
1b220 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  mem;.    }.    i
1b230 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1b240 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20  OP_Found ){.    
1b250 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73    pIdxKey->flags
1b260 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45   |= UNPACKED_PRE
1b270 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d  FIX_MATCH;.    }
1b280 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1b290 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1b2a0 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1b2b0 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c  , pIdxKey, 0, 0,
1b2c0 20 26 72 65 73 29 3b 0a 20 20 20 20 73 71 6c 69   &res);.    sqli
1b2d0 74 65 33 56 64 62 65 44 65 6c 65 74 65 55 6e 70  te3VdbeDeleteUnp
1b2e0 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49 64 78  ackedRecord(pIdx
1b2f0 4b 65 79 29 3b 0a 20 20 20 20 69 66 28 20 72 63  Key);.    if( rc
1b300 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1b310 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1b320 7d 0a 20 20 20 20 61 6c 72 65 61 64 79 45 78 69  }.    alreadyExi
1b330 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a  sts = (res==0);.
1b340 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
1b350 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
1b360 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1b370 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1b380 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
1b390 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29  code==OP_Found )
1b3a0 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64  {.    if( alread
1b3b0 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70  yExists ) pc = p
1b3c0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
1b3d0 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c  lse{.    if( !al
1b3e0 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63  readyExists ) pc
1b3f0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1b400 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1b410 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69  /* Opcode: IsUni
1b420 71 75 65 20 50 31 20 50 32 20 50 33 20 50 34 20  que P1 P2 P3 P4 
1b430 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50  *.**.** Cursor P
1b440 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e 20  1 is open on an 
1b450 69 6e 64 65 78 2e 20 20 53 6f 20 69 74 20 68 61  index.  So it ha
1b460 73 20 6e 6f 20 64 61 74 61 20 61 6e 64 20 69 74  s no data and it
1b470 73 20 6b 65 79 20 63 6f 6e 73 69 73 74 73 20 0a  s key consists .
1b480 2a 2a 20 6f 66 20 61 20 72 65 63 6f 72 64 20 67  ** of a record g
1b490 65 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f 4d  enerated by OP_M
1b4a0 61 6b 65 52 65 63 6f 72 64 20 77 68 65 72 65 20  akeRecord where 
1b4b0 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 69  the last field i
1b4c0 73 20 74 68 65 20 0a 2a 2a 20 72 6f 77 69 64 20  s the .** rowid 
1b4d0 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  of the entry tha
1b4e0 74 20 74 68 65 20 69 6e 64 65 78 20 72 65 66 65  t the index refe
1b4f0 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rs to..**.** The
1b500 20 50 33 20 72 65 67 69 73 74 65 72 20 63 6f 6e   P3 register con
1b510 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67 65 72  tains an integer
1b520 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
1b530 43 61 6c 6c 20 74 68 69 73 20 72 65 63 6f 72 64  Call this record
1b540 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20 52   .** number R. R
1b550 65 67 69 73 74 65 72 20 50 34 20 69 73 20 74 68  egister P4 is th
1b560 65 20 66 69 72 73 74 20 69 6e 20 61 20 73 65 74  e first in a set
1b570 20 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75 73   of N contiguous
1b580 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 74 68   registers.** th
1b590 61 74 20 6d 61 6b 65 20 75 70 20 61 6e 20 75 6e  at make up an un
1b5a0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1b5b0 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65   that can be use
1b5c0 64 20 77 69 74 68 20 63 75 72 73 6f 72 20 50 31  d with cursor P1
1b5d0 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
1b5e0 66 20 4e 20 63 61 6e 20 62 65 20 69 6e 66 65 72  f N can be infer
1b5f0 72 65 64 20 66 72 6f 6d 20 74 68 65 20 63 75 72  red from the cur
1b600 73 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73 20  sor. N includes 
1b610 74 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61 6c  the rowid.** val
1b620 75 65 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74  ue appended to t
1b630 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
1b640 64 65 78 20 72 65 63 6f 72 64 2e 20 54 68 69 73  dex record. This
1b650 20 72 6f 77 69 64 20 76 61 6c 75 65 20 6d 61 79   rowid value may
1b660 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  .** or may not b
1b670 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 52 2e  e the same as R.
1b680 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f 66  .**.** If any of
1b690 20 74 68 65 20 4e 20 72 65 67 69 73 74 65 72 73   the N registers
1b6a0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
1b6b0 72 65 67 69 73 74 65 72 20 50 34 20 63 6f 6e 74  register P4 cont
1b6c0 61 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76  ains a NULL.** v
1b6d0 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  alue, jump immed
1b6e0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
1b6f0 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 74  .** Otherwise, t
1b700 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1b710 63 68 65 63 6b 73 20 69 66 20 63 75 72 73 6f 72  checks if cursor
1b720 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20   P1 contains an 
1b730 65 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65 20 74  entry.** where t
1b740 68 65 20 66 69 72 73 74 20 28 4e 2d 31 29 20 66  he first (N-1) f
1b750 69 65 6c 64 73 20 6d 61 74 63 68 20 62 75 74 20  ields match but 
1b760 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20  the rowid value 
1b770 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f 66  at the end.** of
1b780 20 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72 79   the index entry
1b790 20 69 73 20 6e 6f 74 20 52 2e 20 49 66 20 74 68   is not R. If th
1b7a0 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65  ere is no such e
1b7b0 6e 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a 75  ntry, control ju
1b7c0 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72 75  mps.** to instru
1b7d0 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77  ction P2. Otherw
1b7e0 69 73 65 2c 20 74 68 65 20 72 6f 77 69 64 20 6f  ise, the rowid o
1b7f0 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e  f the conflictin
1b800 67 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79  g index.** entry
1b810 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 72 65   is copied to re
1b820 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 63 6f  gister P3 and co
1b830 6e 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72 6f  ntrol falls thro
1b840 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a  ugh to the next.
1b850 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
1b860 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1b870 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  NotFound, NotExi
1b880 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61  sts, Found.*/.ca
1b890 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20  se OP_IsUnique: 
1b8a0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1b8b0 2c 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20 69  , in3 */.  u16 i
1b8c0 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  i;.  VdbeCursor 
1b8d0 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f 72  *pCx;.  BtCursor
1b8e0 20 2a 70 43 72 73 72 3b 0a 20 20 75 31 36 20 6e   *pCrsr;.  u16 n
1b8f0 46 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61 4d  Field;.  Mem *aM
1b900 65 6d 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  em;.  UnpackedRe
1b910 63 6f 72 64 20 72 3b 20 20 20 20 20 20 20 20 20  cord r;         
1b920 20 20 20 20 20 20 20 20 20 2f 2a 20 42 2d 54 72           /* B-Tr
1b930 65 65 20 69 6e 64 65 78 20 73 65 61 72 63 68 20  ee index search 
1b940 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b 20  key */.  i64 R; 
1b950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1b970 6f 77 69 64 20 73 74 6f 72 65 64 20 69 6e 20 72  owid stored in r
1b980 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a 20  egister P3 */.. 
1b990 20 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d   aMem = &p->aMem
1b9a0 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f  [pOp->p4.i];.  /
1b9b0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
1b9c0 65 20 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61  e values of para
1b9d0 6d 65 74 65 72 73 20 50 31 20 61 6e 64 20 50 34  meters P1 and P4
1b9e0 20 61 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a   are in range. *
1b9f0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
1ba00 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1ba10 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
1ba20 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f  Op->p4.i>0 && pO
1ba30 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d  p->p4.i<=p->nMem
1ba40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1ba50 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1ba60 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1ba70 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ;..  /* Find the
1ba80 20 69 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a   index cursor. *
1ba90 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43  /.  pCx = p->apC
1baa0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1bab0 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65  ssert( pCx->defe
1bac0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
1bad0 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75  .  pCx->seekResu
1bae0 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63  lt = 0;.  pCx->c
1baf0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1bb00 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73  HE_STALE;.  pCrs
1bb10 72 20 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72  r = pCx->pCursor
1bb20 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f  ;..  /* If any o
1bb30 66 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  f the values are
1bb40 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20   NULL, take the 
1bb50 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c  jump. */.  nFiel
1bb60 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  d = pCx->pKeyInf
1bb70 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72  o->nField;.  for
1bb80 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64  (ii=0; ii<nField
1bb90 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  ; ii++){.    if(
1bba0 20 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20   aMem[ii].flags 
1bbb0 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1bbc0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1bbd0 20 2d 20 31 3b 0a 20 20 20 20 20 20 70 43 72 73   - 1;.      pCrs
1bbe0 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 62 72 65  r = 0;.      bre
1bbf0 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
1bc00 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 6e 46  assert( (aMem[nF
1bc10 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ield].flags & ME
1bc20 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20  M_Null)==0 );.. 
1bc30 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b   if( pCrsr!=0 ){
1bc40 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74 65  .    /* Populate
1bc50 20 74 68 65 20 69 6e 64 65 78 20 73 65 61 72 63   the index searc
1bc60 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72 2e  h key. */.    r.
1bc70 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d 3e  pKeyInfo = pCx->
1bc80 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
1bc90 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 20  nField = nField 
1bca0 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73  + 1;.    r.flags
1bcb0 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46   = UNPACKED_PREF
1bcc0 49 58 5f 53 45 41 52 43 48 3b 0a 20 20 20 20 72  IX_SEARCH;.    r
1bcd0 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d 3b 0a 0a 20  .aMem = aMem;.. 
1bce0 20 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68     /* Extract th
1bcf0 65 20 76 61 6c 75 65 20 6f 66 20 52 20 66 72 6f  e value of R fro
1bd00 6d 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 2a  m register P3. *
1bd10 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
1bd20 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1bd30 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d 20 70 49  In3);.    R = pI
1bd40 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a  n3->u.i;..    /*
1bd50 20 53 65 61 72 63 68 20 74 68 65 20 42 2d 54 72   Search the B-Tr
1bd60 65 65 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f 20  ee index. If no 
1bd70 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f  conflicting reco
1bd80 72 64 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75 6d  rd is found, jum
1bd90 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e 20  p.    ** to P2. 
1bda0 4f 74 68 65 72 77 69 73 65 2c 20 63 6f 70 79 20  Otherwise, copy 
1bdb0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
1bdc0 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63   conflicting rec
1bdd0 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72 65  ord to.    ** re
1bde0 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 66 61  gister P3 and fa
1bdf0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
1be00 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1be10 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20 3d  on.  */.    rc =
1be20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1be30 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1be40 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 70 43  r, &r, 0, 0, &pC
1be50 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b 0a  x->seekResult);.
1be60 20 20 20 20 69 66 28 20 28 72 2e 66 6c 61 67 73      if( (r.flags
1be70 20 26 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46   & UNPACKED_PREF
1be80 49 58 5f 53 45 41 52 43 48 29 20 7c 7c 20 72 2e  IX_SEARCH) || r.
1be90 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20 20  rowid==R ){.    
1bea0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1beb0 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   1;.    }else{. 
1bec0 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d       pIn3->u.i =
1bed0 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a   r.rowid;.    }.
1bee0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1bef0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78  /* Opcode: NotEx
1bf00 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20  ists P1 P2 P3 * 
1bf10 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20  *.**.** Use the 
1bf20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
1bf30 74 65 72 20 50 33 20 61 73 20 61 20 69 6e 74 65  ter P3 as a inte
1bf40 67 65 72 20 6b 65 79 2e 20 20 49 66 20 61 20 72  ger key.  If a r
1bf50 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20 74  ecord .** with t
1bf60 68 61 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74  hat key does not
1bf70 20 65 78 69 73 74 20 69 6e 20 74 61 62 6c 65 20   exist in table 
1bf80 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70  of P1, then jump
1bf90 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74   to P2. .** If t
1bfa0 68 65 20 72 65 63 6f 72 64 20 64 6f 65 73 20 65  he record does e
1bfb0 78 69 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20  xist, then fall 
1bfc0 74 68 72 75 2e 20 20 54 68 65 20 63 75 72 73 6f  thru.  The curso
1bfd0 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f  r is left .** po
1bfe0 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72 65  inting to the re
1bff0 63 6f 72 64 20 69 66 20 69 74 20 65 78 69 73 74  cord if it exist
1c000 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  s..**.** The dif
1c010 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
1c020 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 61  this operation a
1c030 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74  nd NotFound is t
1c040 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hat this.** oper
1c050 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1c060 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74 65  e key is an inte
1c070 67 65 72 20 61 6e 64 20 74 68 61 74 20 50 31 20  ger and that P1 
1c080 69 73 20 61 20 74 61 62 6c 65 20 77 68 65 72 65  is a table where
1c090 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61  as.** NotFound a
1c0a0 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61 20  ssumes key is a 
1c0b0 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1c0c0 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64   from MakeRecord
1c0d0 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e   and.** P1 is an
1c0e0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65   index..**.** Se
1c0f0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1c100 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75  otFound, IsUniqu
1c110 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  e.*/.case OP_Not
1c120 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20  Exists: {       
1c130 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1c140 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1c150 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1c160 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1c170 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20  .  u64 iKey;..  
1c180 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
1c190 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
1c1a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c1b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1c1c0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1c1d0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1c1e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1c1f0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
1c200 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1c210 65 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  e );.  pCrsr = p
1c220 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
1c230 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20  ( pCrsr!=0 ){.  
1c240 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 69    res = 0;.    i
1c250 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  Key = pIn3->u.i;
1c260 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1c270 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1c280 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69  cked(pCrsr, 0, i
1c290 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
1c2a0 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64     pC->lastRowid
1c2b0 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
1c2c0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1c2d0 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30  id = res==0 ?1:0
1c2e0 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  ;.    pC->nullRo
1c2f0 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  w = 0;.    pC->c
1c300 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1c310 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43  HE_STALE;.    pC
1c320 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1c330 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72 65   = 0;.    if( re
1c340 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63  s!=0 ){.      pc
1c350 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1c360 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
1c370 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d  ->rowidIsValid==
1c380 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 );.    }.    p
1c390 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
1c3a0 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  res;.  }else{.  
1c3b0 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
1c3c0 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65 6d 70  s when an attemp
1c3d0 74 20 74 6f 20 6f 70 65 6e 20 61 20 72 65 61 64  t to open a read
1c3e0 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a   cursor on the .
1c3f0 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61      ** sqlite_ma
1c400 73 74 65 72 20 74 61 62 6c 65 20 72 65 74 75 72  ster table retur
1c410 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e  ns SQLITE_EMPTY.
1c420 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
1c430 72 74 28 20 21 70 43 2d 3e 70 73 65 75 64 6f 54  rt( !pC->pseudoT
1c440 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65  able );.    asse
1c450 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1c460 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  );.    pc = pOp-
1c470 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73  >p2 - 1;.    ass
1c480 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
1c490 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20  Valid==0 );.    
1c4a0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
1c4b0 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   0;.  }.  break;
1c4c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1c4d0 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
1c4e0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74  * *.**.** Find t
1c4f0 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c  he next availabl
1c500 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
1c510 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  r for cursor P1.
1c520 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65  .** Write the se
1c530 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e  quence number in
1c540 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
1c550 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20  ** The sequence 
1c560 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75  number on the cu
1c570 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  rsor is incremen
1c580 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a  ted after this.*
1c590 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
1c5a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
1c5b0 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20  ence: {         
1c5c0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1c5d0 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
1c5e0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1c5f0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1c600 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1c610 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1c620 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  ]!=0 );.  pOut->
1c630 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  u.i = p->apCsr[p
1c640 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e  Op->p1]->seqCoun
1c650 74 2b 2b 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  t++;.  MemSetTyp
1c660 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
1c670 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
1c680 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  .../* Opcode: Ne
1c690 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20  wRowid P1 P2 P3 
1c6a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20  * *.**.** Get a 
1c6b0 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f  new integer reco
1c6c0 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61  rd number (a.k.a
1c6d0 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61   "rowid") used a
1c6e0 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74  s the key to a t
1c6f0 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63  able..** The rec
1c700 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f  ord number is no
1c710 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
1c720 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68  d as a key in th
1c730 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61  e database.** ta
1c740 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20  ble that cursor 
1c750 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54  P1 points to.  T
1c760 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  he new record nu
1c770 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a  mber is written.
1c780 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65  ** written to re
1c790 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1c7a0 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33   If P3>0 then P3
1c7b0 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
1c7c0 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6c 61  hat holds the la
1c7d0 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79  rgest previously
1c7e0 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65  .** generated re
1c7f0 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 4e 6f  cord number.  No
1c800 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1c810 65 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ers are allowed 
1c820 74 6f 20 62 65 20 6c 65 73 73 0a 2a 2a 20 74 68  to be less.** th
1c830 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20  an this value.  
1c840 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
1c850 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
1c860 6d 75 6d 2c 20 61 20 53 51 4c 49 54 45 5f 46 55  mum, a SQLITE_FU
1c870 4c 4c 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 67  LL.** error is g
1c880 65 6e 65 72 61 74 65 64 2e 20 20 54 68 65 20 50  enerated.  The P
1c890 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70  3 register is up
1c8a0 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 67  dated with the g
1c8b0 65 6e 65 72 61 74 65 64 0a 2a 2a 20 72 65 63 6f  enerated.** reco
1c8c0 72 64 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73  rd number.  This
1c8d0 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73   P3 mechanism is
1c8e0 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d   used to help im
1c8f0 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41  plement the.** A
1c900 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61  UTOINCREMENT fea
1c910 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
1c920 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20  _NewRowid: {    
1c930 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1c940 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1c950 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
1c960 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
1c970 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65   rowid */.  Vdbe
1c980 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
1c990 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20     /* Cursor of 
1c9a0 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65  table to get the
1c9b0 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
1c9c0 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
1c9d0 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
1c9e0 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74   of an sqlite3Bt
1c9f0 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69  reeLast() */.  i
1ca00 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20  nt cnt;         
1ca10 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
1ca20 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
1ca30 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73  mber of searches
1ca40 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ca60 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1ca70 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66   largest rowid f
1ca80 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
1ca90 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
1caa0 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
1cab0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1cac0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1cad0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1cae0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1caf0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1cb00 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28   );.  if( NEVER(
1cb10 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20  pC->pCursor==0) 
1cb20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65  ){.    /* The ze
1cb30 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ro initializatio
1cb40 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74  n above is all t
1cb50 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f  hat is needed */
1cb60 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1cb70 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20   The next rowid 
1cb80 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  or record number
1cb90 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d   (different term
1cba0 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20  s for the same. 
1cbb0 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20     ** thing) is 
1cbc0 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77  obtained in a tw
1cbd0 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d  o-step algorithm
1cbe0 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1cbf0 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74  First we attempt
1cc00 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72   to find the lar
1cc10 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
1cc20 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a  wid and add one.
1cc30 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20      ** to that. 
1cc40 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67   But if the larg
1cc50 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
1cc60 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68  id is already th
1cc70 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a  e maximum.    **
1cc80 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
1cc90 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61  r, we have to fa
1cca0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
1ccb0 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20  e second.    ** 
1ccc0 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c  probabilistic al
1ccd0 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20  gorithm.    **. 
1cce0 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64     ** The second
1ccf0 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f   algorithm is to
1cd00 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20   select a rowid 
1cd10 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65  at random and se
1cd20 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61  e if.    ** it a
1cd30 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e  lready exists in
1cd40 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
1cd50 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
1cd60 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a  t, we have.    *
1cd70 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66  * succeeded.  If
1cd80 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69   the random rowi
1cd90 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65  d does exist, we
1cda0 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e   select a new on
1cdb0 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79  e.    ** and try
1cdc0 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30   again, up to 10
1cdd0 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a  0 times..    */.
1cde0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1cdf0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 63  isTable );.    c
1ce00 6e 74 20 3d 20 30 3b 0a 0a 23 69 66 64 65 66 20  nt = 0;..#ifdef 
1ce10 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
1ce20 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  ID.#   define MA
1ce30 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66  X_ROWID 0x7fffff
1ce40 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20  ff.#else.    /* 
1ce50 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63  Some compilers c
1ce60 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f  omplain about co
1ce70 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66  nstants of the f
1ce80 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66  orm 0x7fffffffff
1ce90 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f  ffffff..    ** O
1cea0 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  thers complain a
1ceb0 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66  bout 0x7ffffffff
1cec0 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65  ffffffffLL.  The
1ced0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1cee0 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f   seems.    ** to
1cef0 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e   provide the con
1cf00 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69  stant while maki
1cf10 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  ng all compilers
1cf20 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23   happy..    */.#
1cf30 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
1cf40 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75  WID  (i64)( (((u
1cf50 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
1cf60 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66  32) | (u64)0xfff
1cf70 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a  fffff ).#endif..
1cf80 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65      if( !pC->use
1cf90 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
1cfa0 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
1cfb0 42 74 72 65 65 47 65 74 43 61 63 68 65 64 52 6f  BtreeGetCachedRo
1cfc0 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  wid(pC->pCursor)
1cfd0 3b 0a 20 20 20 20 20 20 69 66 28 20 76 3d 3d 30  ;.      if( v==0
1cfe0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1cff0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1d000 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1d010 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
1d020 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1d030 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
1d040 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1d050 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
1d060 20 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20          if( res 
1d070 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d  ){.          v =
1d080 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
1d090 65 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  e{.          rc 
1d0a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
1d0b0 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
1d0c0 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  r, &v);.        
1d0d0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
1d0e0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
1d0f0 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c  Cannot fail foll
1d100 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28  owing BtreeLast(
1d110 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69  ) */.          i
1d120 66 28 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  f( v==MAX_ROWID 
1d130 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
1d140 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
1d150 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  d = 1;.         
1d160 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1d170 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20      v++;.       
1d180 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
1d190 20 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20       }..#ifndef 
1d1a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
1d1b0 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 20 20  INCREMENT.      
1d1c0 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
1d1d0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1d1e0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
1d1f0 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 20  >p3<=p->nMem ); 
1d200 2f 2a 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  /* P3 is a valid
1d210 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a   memory cell */.
1d220 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
1d230 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
1d240 3b 0a 09 52 45 47 49 53 54 45 52 5f 54 52 41 43  ;..REGISTER_TRAC
1d250 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29  E(pOp->p3, pMem)
1d260 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
1d270 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
1d280 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  fy(pMem);.      
1d290 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
1d2a0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1d2b0 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28  )!=0 );  /* mem(
1d2c0 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  P3) holds an int
1d2d0 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  eger */.        
1d2e0 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d  if( pMem->u.i==M
1d2f0 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e  AX_ROWID || pC->
1d300 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
1d310 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
1d320 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20 20   SQLITE_FULL;.  
1d330 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
1d340 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1d350 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1d360 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75     if( v<pMem->u
1d370 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20  .i+1 ){.        
1d380 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20    v = pMem->u.i 
1d390 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  + 1;.        }. 
1d3a0 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69         pMem->u.i
1d3b0 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23 65   = v;.      }.#e
1d3c0 6e 64 69 66 0a 0a 20 20 20 20 20 20 73 71 6c 69  ndif..      sqli
1d3d0 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
1d3e0 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73  dRowid(pC->pCurs
1d3f0 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49 44 20  or, v<MAX_ROWID 
1d400 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20 20 20  ? v+1 : 0);.    
1d410 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73  }.    if( pC->us
1d420 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
1d430 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1d440 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20  p->p3==0 );  /* 
1d450 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20  We cannot be in 
1d460 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64  random rowid mod
1d470 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20  e if this is.   
1d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d490 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20            ** an 
1d4a0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
1d4b0 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 76 20  ble. */.      v 
1d4c0 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
1d4d0 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a  .      cnt = 0;.
1d4e0 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
1d4f0 20 20 69 66 28 20 63 6e 74 3d 3d 30 20 26 26 20    if( cnt==0 && 
1d500 28 76 26 30 78 66 66 66 66 66 66 29 3d 3d 76 20  (v&0xffffff)==v 
1d510 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b  ){.          v++
1d520 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
1d530 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
1d540 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69  e3_randomness(si
1d550 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20  zeof(v), &v);.  
1d560 20 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c          if( cnt<
1d570 35 20 29 20 76 20 26 3d 20 30 78 66 66 66 66 66  5 ) v &= 0xfffff
1d580 66 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  f;.        }.   
1d590 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1d5a0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1d5b0 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1d5c0 2c 20 30 2c 20 28 75 36 34 29 76 2c 20 30 2c 20  , 0, (u64)v, 0, 
1d5d0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 63  &res);.        c
1d5e0 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68 69  nt++;.      }whi
1d5f0 6c 65 28 20 63 6e 74 3c 31 30 30 20 26 26 20 72  le( cnt<100 && r
1d600 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
1d610 72 65 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  res==0 );.      
1d620 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1d630 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K && res==0 ){. 
1d640 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
1d650 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20  TE_FULL;.       
1d660 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d670 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1d680 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  }.    }.    pC->
1d690 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1d6a0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1d6b0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1d6c0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1d6d0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1d6e0 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
1d6f0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
1d700 49 6e 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  Int);.  pOut->u.
1d710 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
1d720 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
1d730 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
1d740 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20   P5.**.** Write 
1d750 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
1d760 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
1d770 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
1d780 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
1d790 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
1d7a0 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
1d7b0 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
1d7c0 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
1d7d0 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
1d7e0 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
1d7f0 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
1d800 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
1d810 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
1d820 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1d830 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
1d840 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 6e 20 69   must.** be an i
1d850 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66  nteger..**.** If
1d860 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
1d870 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69  NGE flag of P5 i
1d880 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
1d890 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
1d8a0 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
1d8b0 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
1d8c0 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  t).  If the OPFL
1d8d0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61  AG_LASTROWID fla
1d8e0 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a  g of P5 is set,.
1d8f0 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73  ** then rowid is
1d900 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73   stored for subs
1d910 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79  equent return by
1d920 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
1d930 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
1d940 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74  d() function (ot
1d950 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e  herwise it is un
1d960 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a  modified)..**.**
1d970 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61   Parameter P4 ma
1d980 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72  y point to a str
1d990 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
1d9a0 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f  he table-name, o
1d9b0 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c  r.** may be NULL
1d9c0 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e  . If it is not N
1d9d0 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70  ULL, then the up
1d9e0 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73  date-hook .** (s
1d9f0 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61  qlite3.xUpdateCa
1da00 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b  llback) is invok
1da10 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73  ed following a s
1da20 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74  uccessful insert
1da30 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47  ..**.** (WARNING
1da40 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20  /TODO: If P1 is 
1da50 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  a pseudo-cursor 
1da60 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69  and P2 is dynami
1da70 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  cally.** allocat
1da80 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68  ed, then ownersh
1da90 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e  ip of P2 is tran
1daa0 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70  sferred to the p
1dab0 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20  seudo-cursor.** 
1dac0 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20  and register P2 
1dad0 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61  becomes ephemera
1dae0 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f  l.  If the curso
1daf0 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  r is changed, th
1db00 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65  e.** value of re
1db10 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74  gister P2 will t
1db20 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b  hen change.  Mak
1db30 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73  e sure this does
1db40 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e   not.** cause an
1db50 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a  y problems.).**.
1db60 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1db70 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  ion only works o
1db80 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65  n tables.  The e
1db90 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
1dba0 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64  ction.** for ind
1dbb0 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e  ices is OP_IdxIn
1dbc0 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sert..*/.case OP
1dbd0 5f 49 6e 73 65 72 74 3a 20 7b 0a 20 20 4d 65 6d  _Insert: {.  Mem
1dbe0 20 2a 70 44 61 74 61 3b 0a 20 20 4d 65 6d 20 2a   *pData;.  Mem *
1dbf0 70 4b 65 79 3b 0a 20 20 69 36 34 20 69 4b 65 79  pKey;.  i64 iKey
1dc00 3b 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67  ;   /* The integ
1dc10 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20  er ROWID or key 
1dc20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74  for the record t
1dc30 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f  o be inserted */
1dc40 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1dc50 43 3b 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 0a  C;.  int nZero;.
1dc60 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
1dc70 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
1dc80 7a 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  zDb;.  const cha
1dc90 72 20 2a 7a 54 62 6c 3b 0a 20 20 69 6e 74 20 6f  r *zTbl;.  int o
1dca0 70 3b 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 70  p;..  pData = &p
1dcb0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
1dcc0 0a 20 20 70 4b 65 79 20 3d 20 26 70 2d 3e 61 4d  .  pKey = &p->aM
1dcd0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
1dce0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1dcf0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1dd00 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1dd10 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1dd20 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1dd30 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1dd40 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1dd50 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61   || pC->pseudoTa
1dd60 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ble );.  assert(
1dd70 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d   pKey->flags & M
1dd80 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
1dd90 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1dda0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
1ddb0 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61  ACE(pOp->p2, pDa
1ddc0 74 61 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ta);.  REGISTER_
1ddd0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
1dde0 4b 65 79 29 3b 0a 0a 20 20 69 4b 65 79 20 3d 20  Key);..  iKey = 
1ddf0 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28  pKey->u.i;.  if(
1de00 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1de10 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
1de20 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20  Change++;.  if( 
1de30 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1de40 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d  _LASTROWID ) db-
1de50 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 4b 65  >lastRowid = pKe
1de60 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 70 44  y->u.i;.  if( pD
1de70 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ata->flags & MEM
1de80 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61  _Null ){.    pDa
1de90 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70  ta->z = 0;.    p
1dea0 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d  Data->n = 0;.  }
1deb0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
1dec0 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
1ded0 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
1dee0 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  tr) );.  }.  if(
1def0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1df00 20 29 7b 0a 20 20 20 20 69 66 28 20 21 70 43 2d   ){.    if( !pC-
1df10 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c  >ephemPseudoTabl
1df20 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  e ){.      sqlit
1df30 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 43 2d  e3DbFree(db, pC-
1df40 3e 70 44 61 74 61 29 3b 0a 20 20 20 20 7d 0a 20  >pData);.    }. 
1df50 20 20 20 70 43 2d 3e 69 4b 65 79 20 3d 20 69 4b     pC->iKey = iK
1df60 65 79 3b 0a 20 20 20 20 70 43 2d 3e 6e 44 61 74  ey;.    pC->nDat
1df70 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20  a = pData->n;.  
1df80 20 20 69 66 28 20 70 43 2d 3e 65 70 68 65 6d 50    if( pC->ephemP
1df90 73 65 75 64 6f 54 61 62 6c 65 20 7c 7c 20 70 44  seudoTable || pD
1dfa0 61 74 61 2d 3e 7a 3d 3d 70 44 61 74 61 2d 3e 7a  ata->z==pData->z
1dfb0 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20  Malloc ){.      
1dfc0 70 43 2d 3e 70 44 61 74 61 20 3d 20 70 44 61 74  pC->pData = pDat
1dfd0 61 2d 3e 7a 3b 0a 20 20 20 20 20 20 69 66 28 20  a->z;.      if( 
1dfe0 21 70 43 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f  !pC->ephemPseudo
1dff0 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 20  Table ){.       
1e000 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 3d   pData->flags &=
1e010 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 20   ~MEM_Dyn;.     
1e020 20 20 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20     pData->flags 
1e030 7c 3d 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20  |= MEM_Ephem;.  
1e040 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 4d 61        pData->zMa
1e050 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 20 20  lloc = 0;.      
1e060 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
1e070 20 20 20 70 43 2d 3e 70 44 61 74 61 20 3d 20 73     pC->pData = s
1e080 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 70 43  qlite3Malloc( pC
1e090 2d 3e 6e 44 61 74 61 2b 32 20 29 3b 0a 20 20 20  ->nData+2 );.   
1e0a0 20 20 20 69 66 28 20 21 70 43 2d 3e 70 44 61 74     if( !pC->pDat
1e0b0 61 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  a ) goto no_mem;
1e0c0 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 43  .      memcpy(pC
1e0d0 2d 3e 70 44 61 74 61 2c 20 70 44 61 74 61 2d 3e  ->pData, pData->
1e0e0 7a 2c 20 70 43 2d 3e 6e 44 61 74 61 29 3b 0a 20  z, pC->nData);. 
1e0f0 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70       pC->pData[p
1e100 43 2d 3e 6e 44 61 74 61 5d 20 3d 20 30 3b 0a 20  C->nData] = 0;. 
1e110 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70       pC->pData[p
1e120 43 2d 3e 6e 44 61 74 61 2b 31 5d 20 3d 20 30 3b  C->nData+1] = 0;
1e130 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 6e  .    }.    pC->n
1e140 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 7d 65  ullRow = 0;.  }e
1e150 6c 73 65 7b 0a 20 20 20 20 73 65 65 6b 52 65 73  lse{.    seekRes
1e160 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20  ult = ((pOp->p5 
1e170 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
1e180 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
1e190 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20  ekResult : 0);. 
1e1a0 20 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c     if( pData->fl
1e1b0 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
1e1c0 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20  {.      nZero = 
1e1d0 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a  pData->u.nZero;.
1e1e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1e1f0 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20   nZero = 0;.    
1e200 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  }.    sqlite3Btr
1e210 65 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64  eeSetCachedRowid
1e220 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29  (pC->pCursor, 0)
1e230 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1e240 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
1e250 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b  ->pCursor, 0, iK
1e260 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
1e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e280 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d  pData->z, pData-
1e290 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20  >n, nZero,.     
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2b0 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26         pOp->p5 &
1e2c0 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20   OPFLAG_APPEND, 
1e2d0 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 20 20 29  seekResult.    )
1e2e0 3b 0a 20 20 7d 0a 20 20 0a 20 20 70 43 2d 3e 72  ;.  }.  .  pC->r
1e2f0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1e300 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
1e310 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
1e320 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1e330 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
1e340 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
1e350 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
1e360 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
1e370 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
1e380 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
1e390 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ack && pOp->p4.z
1e3a0 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   ){.    zDb = db
1e3b0 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
1e3c0 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d  Name;.    zTbl =
1e3d0 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
1e3e0 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  op = ((pOp->p5 &
1e3f0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
1e400 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ) ? SQLITE_UPDAT
1e410 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  E : SQLITE_INSER
1e420 54 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  T);.    assert( 
1e430 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1e440 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
1e450 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
1e460 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20  teArg, op, zDb, 
1e470 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20  zTbl, iKey);.   
1e480 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
1e490 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >=0 );.  }.  bre
1e4a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1e4b0 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a  : Delete P1 P2 *
1e4c0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65   P4 *.**.** Dele
1e4d0 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  te the record at
1e4e0 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75   which the P1 cu
1e4f0 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c  rsor is currentl
1e500 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a  y pointing..**.*
1e510 2a 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c  * The cursor wil
1e520 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69  l be left pointi
1e530 6e 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65  ng at either the
1e540 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65   next or the pre
1e550 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20  vious.** record 
1e560 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  in the table. If
1e570 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   it is left poin
1e580 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74  ting at the next
1e590 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a   record, then.**
1e5a0 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69   the next Next i
1e5b0 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20  nstruction will 
1e5c0 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e  be a no-op.  Hen
1e5d0 63 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64  ce it is OK to d
1e5e0 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72  elete.** a recor
1e5f0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
1e600 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a   Next loop..**.*
1e610 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
1e620 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
1e630 50 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P2 is set, then 
1e640 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63  the row change c
1e650 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65  ount is.** incre
1e660 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
1e670 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31  e not)..**.** P1
1e680 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65   must not be pse
1e690 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68  udo-table.  It h
1e6a0 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20  as to be a real 
1e6b0 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75  table with.** mu
1e6c0 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a  ltiple rows..**.
1e6d0 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
1e6e0 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73  NULL, then it is
1e6f0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
1e700 20 74 61 62 6c 65 20 74 68 61 74 20 50 31 20 69   table that P1 i
1e710 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f  s.** pointing to
1e720 2e 20 20 54 68 65 20 75 70 64 61 74 65 20 68 6f  .  The update ho
1e730 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b  ok will be invok
1e740 65 64 2c 20 69 66 20 69 74 20 65 78 69 73 74 73  ed, if it exists
1e750 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  ..** If P4 is no
1e760 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  t NULL then the 
1e770 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68  P1 cursor must h
1e780 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f  ave been positio
1e790 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f  ned.** using OP_
1e7a0 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74  NotFound prior t
1e7b0 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20  o invoking this 
1e7c0 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
1e7d0 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69  OP_Delete: {.  i
1e7e0 36 34 20 69 4b 65 79 3b 0a 20 20 56 64 62 65 43  64 iKey;.  VdbeC
1e7f0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 69 4b  ursor *pC;..  iK
1e800 65 79 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  ey = 0;.  assert
1e810 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1e820 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1e830 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1e840 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1e850 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1e860 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1e870 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20  >pCursor!=0 );  
1e880 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  /* Only valid fo
1e890 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e  r real tables, n
1e8a0 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a  o pseudotables *
1e8b0 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75  /..  /* If the u
1e8c0 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20  pdate-hook will 
1e8d0 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20  be invoked, set 
1e8e0 69 4b 65 79 20 74 6f 20 74 68 65 20 72 6f 77 69  iKey to the rowi
1e8f0 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 72 6f  d of the.  ** ro
1e900 77 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 2e  w being deleted.
1e910 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
1e920 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
1e930 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
1e940 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1e950 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61  isTable );.    a
1e960 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
1e970 49 73 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c  IsValid );  /* l
1e980 61 73 74 52 6f 77 69 64 20 73 65 74 20 62 79 20  astRowid set by 
1e990 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46  previous OP_NotF
1e9a0 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79  ound */.    iKey
1e9b0 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64   = pC->lastRowid
1e9c0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20  ;.  }..  /* The 
1e9d0 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f 64 65  OP_Delete opcode
1e9e0 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20   always follows 
1e9f0 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  an OP_NotExists 
1ea00 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a 20 20  or OP_Last or.  
1ea10 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20  ** OP_Column on 
1ea20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 77  the same table w
1ea30 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72  ithout any inter
1ea40 76 65 6e 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e  vening operation
1ea50 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69 67 68  s that.  ** migh
1ea60 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61 6c 69  t move or invali
1ea70 64 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e  date the cursor.
1ea80 20 20 48 65 6e 63 65 20 63 75 72 73 6f 72 20 70    Hence cursor p
1ea90 43 20 69 73 20 61 6c 77 61 79 73 20 70 6f 69 6e  C is always poin
1eaa0 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74 68 65  ting.  ** to the
1eab0 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74   row to be delet
1eac0 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
1ead0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
1eae0 74 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e 0a 20  to() operation. 
1eaf0 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61 6c 77   ** below is alw
1eb00 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20  ays a no-op and 
1eb10 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20 57 65  cannot fail.  We
1eb20 20 77 69 6c 6c 20 72 75 6e 20 69 74 20 61 6e 79   will run it any
1eb30 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20 20 2a  how, though,.  *
1eb40 2a 20 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e  * to guard again
1eb50 73 74 20 66 75 74 75 72 65 20 63 68 61 6e 67 65  st future change
1eb60 73 20 74 6f 20 74 68 65 20 63 6f 64 65 20 67 65  s to the code ge
1eb70 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20  nerator..  **/. 
1eb80 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
1eb90 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
1eba0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1ebb0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
1ebc0 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  (pC);.  if( NEVE
1ebd0 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
1ebe0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1ebf0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 73  e_to_error;..  s
1ec00 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
1ec10 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43  chedRowid(pC->pC
1ec20 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20  ursor, 0);.  rc 
1ec30 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
1ec40 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  lete(pC->pCursor
1ec50 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  );.  pC->cacheSt
1ec60 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1ec70 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  LE;..  /* Invoke
1ec80 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1ec90 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
1eca0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1ecb0 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64  E_OK && db->xUpd
1ecc0 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
1ecd0 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
1ece0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20  const char *zDb 
1ecf0 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44  = db->aDb[pC->iD
1ed00 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63 6f  b].zName;.    co
1ed10 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d  nst char *zTbl =
1ed20 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
1ed30 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
1ed40 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
1ed50 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54  rg, SQLITE_DELET
1ed60 45 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b  E, zDb, zTbl, iK
1ed70 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ey);.    assert(
1ed80 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
1ed90 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32   }.  if( pOp->p2
1eda0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
1edb0 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
1edc0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1edd0 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f   Opcode: ResetCo
1ede0 75 6e 74 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a  unt P1 * *.**.**
1edf0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 73   This opcode res
1ee00 65 74 73 20 74 68 65 20 56 4d 73 20 69 6e 74 65  ets the VMs inte
1ee10 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e  rnal change coun
1ee20 74 65 72 20 74 6f 20 30 2e 20 49 66 20 50 31 20  ter to 0. If P1 
1ee30 69 73 20 74 72 75 65 2c 0a 2a 2a 20 74 68 65 6e  is true,.** then
1ee40 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
1ee50 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
1ee60 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68   is copied to th
1ee70 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
1ee80 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e  e.** change coun
1ee90 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79  ter (returned by
1eea0 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c   subsequent call
1eeb0 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61  s to sqlite3_cha
1eec0 6e 67 65 73 28 29 29 0a 2a 2a 20 62 65 66 6f 72  nges()).** befor
1eed0 65 20 69 74 20 69 73 20 72 65 73 65 74 2e 20 54  e it is reset. T
1eee0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
1eef0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
1ef00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
1ef10 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 69 66 28 20  tCount: {.  if( 
1ef20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
1ef30 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
1ef40 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61  nges(db, p->nCha
1ef50 6e 67 65 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e 6e  nge);.  }.  p->n
1ef60 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
1ef70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1ef80 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32  e: RowData P1 P2
1ef90 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
1efa0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
1efb0 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
1efc0 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75   row data for cu
1efd0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
1efe0 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
1eff0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
1f000 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a  ta.  .** It is j
1f010 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20  ust copied onto 
1f020 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
1f030 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
1f040 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
1f050 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
1f060 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
1f070 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
1f080 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
1f090 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
1f0a0 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
1f0b0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
1f0c0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1f0d0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
1f0e0 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20  owKey P1 P2 * * 
1f0f0 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  *.**.** Write in
1f100 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
1f110 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
1f120 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50  key for cursor P
1f130 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e  1..** There is n
1f140 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  o interpretation
1f150 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a   of the data.  .
1f160 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f  ** The key is co
1f170 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33  pied onto the P3
1f180 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c   register exactl
1f190 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66  y as .** it is f
1f1a0 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61  ound in the data
1f1b0 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
1f1c0 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
1f1d0 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
1f1e0 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
1f1f0 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
1f200 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
1f210 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
1f220 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
1f230 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61  se OP_RowKey:.ca
1f240 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b  se OP_RowData: {
1f250 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f260 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1f270 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20  Crsr;.  u32 n;. 
1f280 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75   i64 n64;..  pOu
1f290 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
1f2a0 2d 3e 70 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74  ->p2];..  /* Not
1f2b0 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e  e that RowKey an
1f2c0 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65  d RowData are re
1f2d0 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65  ally exactly the
1f2e0 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f   same instructio
1f2f0 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  n */.  assert( p
1f300 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1f310 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1f320 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1f330 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1f340 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1f350 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  le || pOp->opcod
1f360 65 3d 3d 4f 50 5f 52 6f 77 4b 65 79 20 29 3b 0a  e==OP_RowKey );.
1f370 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1f380 49 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70  Index || pOp->op
1f390 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61  code==OP_RowData
1f3a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1f3b0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1f3c0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20   pC->nullRow==0 
1f3d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1f3e0 3e 70 73 65 75 64 6f 54 61 62 6c 65 3d 3d 30 20  >pseudoTable==0 
1f3f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1f400 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
1f410 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
1f420 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  rsor;..  /* The 
1f430 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50  OP_RowKey and OP
1f440 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73  _RowData opcodes
1f450 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f   always follow O
1f460 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20  P_NotExists or. 
1f470 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70   ** OP_Rewind/Op
1f480 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e  _Next with no in
1f490 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75  tervening instru
1f4a0 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ctions that migh
1f4b0 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a  t invalidate.  *
1f4c0 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48  * the cursor.  H
1f4d0 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ence the followi
1f4e0 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  ng sqlite3VdbeCu
1f4f0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
1f500 6c 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a  l is always.  **
1f510 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e   a no-op and can
1f520 20 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75   never fail.  Bu
1f530 74 20 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e  t we leave it in
1f540 20 70 6c 61 63 65 20 61 73 20 61 20 73 61 66 65   place as a safe
1f550 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  ty..  */.  asser
1f560 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
1f570 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63  oveto==0 );.  rc
1f580 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
1f590 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
1f5a0 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
1f5b0 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74  SQLITE_OK) ) got
1f5c0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1f5d0 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d  rror;..  if( pC-
1f5e0 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
1f5f0 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54  assert( !pC->isT
1f600 61 62 6c 65 20 29 3b 0a 20 20 20 20 72 63 20 3d  able );.    rc =
1f610 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
1f620 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34  Size(pCrsr, &n64
1f630 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
1f640 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
1f650 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75     /* True becau
1f660 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
1f670 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
1f680 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64  */.    if( n64>d
1f690 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
1f6a0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
1f6b0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
1f6c0 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
1f6d0 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20  n = (u32)n64;.  
1f6e0 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
1f6f0 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
1f700 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29 3b  Size(pCrsr, &n);
1f710 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
1f720 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
1f730 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65   /* True because
1f740 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f   of CursorMoveto
1f750 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f  () call above */
1f760 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29  .    if( n>(u32)
1f770 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
1f780 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
1f790 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
1f7a0 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d  o_big;.    }.  }
1f7b0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
1f7c0 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
1f7d0 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74  n, 0) ){.    got
1f7e0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
1f7f0 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d  pOut->n = n;.  M
1f800 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
1f810 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  ut, MEM_Blob);. 
1f820 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78   if( pC->isIndex
1f830 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1f840 69 74 65 33 42 74 72 65 65 4b 65 79 28 70 43 72  ite3BtreeKey(pCr
1f850 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
1f860 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  z);.  }else{.   
1f870 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f880 65 65 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c  eeData(pCrsr, 0,
1f890 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
1f8a0 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  }.  pOut->enc = 
1f8b0 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a  SQLITE_UTF8;  /*
1f8c0 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f   In case the blo
1f8d0 62 20 69 73 20 65 76 65 72 20 63 61 73 74 20 74  b is ever cast t
1f8e0 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41  o text */.  UPDA
1f8f0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
1f900 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
1f910 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
1f920 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
1f930 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72  **.** Store in r
1f940 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
1f950 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
1f960 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61  he key of the ta
1f970 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  ble entry that.*
1f980 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  * P1 is currentl
1f990 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a  y point to..**.*
1f9a0 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68  * P1 can be eith
1f9b0 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  er an ordinary t
1f9c0 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61  able or a virtua
1f9d0 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20  l table.  There 
1f9e0 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20  used to.** be a 
1f9f0 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77  separate OP_VRow
1fa00 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73  id opcode for us
1fa10 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74  e with virtual t
1fa20 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a  ables, but this.
1fa30 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f  ** one opcode no
1fa40 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68  w works for both
1fa50 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f   table types..*/
1fa60 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20  .case OP_Rowid: 
1fa70 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1fa80 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1fa90 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  ease */.  VdbeCu
1faa0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
1fab0 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  v;.  sqlite3_vta
1fac0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
1fad0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
1fae0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73   *pModule;..  as
1faf0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1fb00 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1fb10 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1fb20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1fb30 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1fb40 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  !=0 );.  if( pC-
1fb50 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
1fb60 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 73 6f  /* Do nothing so
1fb70 20 74 68 61 74 20 72 65 67 5b 50 32 5d 20 72 65   that reg[P2] re
1fb80 6d 61 69 6e 73 20 4e 55 4c 4c 20 2a 2f 0a 20 20  mains NULL */.  
1fb90 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
1fba0 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
1fbb0 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
1fbc0 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
1fbd0 67 65 74 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  get;.  }else if(
1fbe0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1fbf0 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e   ){.    v = pC->
1fc00 69 4b 65 79 3b 0a 23 69 66 6e 64 65 66 20 53 51  iKey;.#ifndef SQ
1fc10 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1fc20 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69  LTABLE.  }else i
1fc30 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73  f( pC->pVtabCurs
1fc40 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62 20  or ){.    pVtab 
1fc50 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  = pC->pVtabCurso
1fc60 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d  r->pVtab;.    pM
1fc70 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
1fc80 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65  Module;.    asse
1fc90 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  rt( pModule->xRo
1fca0 77 69 64 20 29 3b 0a 20 20 20 20 69 66 28 20 73  wid );.    if( s
1fcb0 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
1fcc0 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
1fcd0 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
1fce0 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
1fcf0 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56 74  ->xRowid(pC->pVt
1fd00 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  abCursor, &v);. 
1fd10 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1fd20 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
1fd30 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
1fd40 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73   = pVtab->zErrMs
1fd50 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45  g;.    pVtab->zE
1fd60 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 69  rrMsg = 0;.    i
1fd70 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
1fd80 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  On(db) ) goto ab
1fd90 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
1fda0 65 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  e;.#endif /* SQL
1fdb0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1fdc0 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65  TABLE */.  }else
1fdd0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
1fde0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
1fdf0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1fe00 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
1fe10 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
1fe20 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1fe30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1fe40 69 66 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  if( pC->rowidIsV
1fe50 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20  alid ){.      v 
1fe60 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = pC->lastRowid;
1fe70 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1fe80 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1fe90 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
1fea0 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20  Cursor, &v);.   
1feb0 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
1fec0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20  QLITE_OK );  /* 
1fed0 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75 73  Always so becaus
1fee0 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
1fef0 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  o() above */.   
1ff00 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75   }.  }.  pOut->u
1ff10 2e 69 20 3d 20 76 3b 0a 20 20 4d 65 6d 53 65 74  .i = v;.  MemSet
1ff20 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
1ff30 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
1ff40 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1ff50 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a  NullRow P1 * * *
1ff60 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68   *.**.** Move th
1ff70 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  e cursor P1 to a
1ff80 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20   null row.  Any 
1ff90 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74  OP_Column operat
1ffa0 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63  ions.** that occ
1ffb0 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75 72  ur while the cur
1ffc0 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75  sor is on the nu
1ffd0 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61  ll row will alwa
1ffe0 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55  ys.** write a NU
1fff0 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  LL..*/.case OP_N
20000 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65  ullRow: {.  Vdbe
20010 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
20020 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
20030 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
20040 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
20050 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
20060 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
20070 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75  C!=0 );.  pC->nu
20080 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d  llRow = 1;.  pC-
20090 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
200a0 30 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75  0;.  if( pC->pCu
200b0 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rsor ){.    sqli
200c0 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72  te3BtreeClearCur
200d0 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  sor(pC->pCursor)
200e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
200f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73  ../* Opcode: Las
20100 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
20110 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
20120 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
20130 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20   Column or Next 
20140 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
20150 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
20160 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e  r to the last en
20170 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
20180 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
20190 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
201a0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
201b0 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
201c0 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
201d0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
201e0 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
201f0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
20200 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
20210 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
20220 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
20230 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
20240 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a  */.case OP_Last:
20250 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
20260 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
20270 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
20280 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
20290 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
202a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
202b0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
202c0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
202d0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
202e0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
202f0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
20300 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43  Cursor;.  if( pC
20310 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65  rsr==0 ){.    re
20320 73 20 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  s = 1;.  }else{.
20330 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
20340 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c  BtreeLast(pCrsr,
20350 20 26 72 65 73 29 3b 0a 20 20 7d 0a 20 20 70 43   &res);.  }.  pC
20360 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
20370 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  res;.  pC->defer
20380 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
20390 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
203a0 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  d = 0;.  pC->cac
203b0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
203c0 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f  _STALE;.  if( pO
203d0 70 2d 3e 70 32 3e 30 20 26 26 20 72 65 73 20 29  p->p2>0 && res )
203e0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
203f0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
20400 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
20410 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a  de: Sort P1 P2 *
20420 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
20430 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63  opcode does exac
20440 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69  tly the same thi
20450 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20  ng as OP_Rewind 
20460 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69  except that.** i
20470 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20  t increments an 
20480 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f  undocumented glo
20490 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65  bal variable use
204a0 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a  d for testing..*
204b0 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20  *.** Sorting is 
204c0 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20  accomplished by 
204d0 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20  writing records 
204e0 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69  into a sorting i
204f0 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65  ndex,.** then re
20500 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64  winding that ind
20510 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69  ex and playing i
20520 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69  t back from begi
20530 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e  nning to.** end.
20540 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f    We use the OP_
20550 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74  Sort opcode inst
20560 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64  ead of OP_Rewind
20570 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65   to do the.** re
20580 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20  winding so that 
20590 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
205a0 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72  ble will be incr
205b0 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72  emented and.** r
205c0 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
205d0 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68  can determine wh
205e0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
205f0 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a   optimizer is.**
20600 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d   correctly optim
20610 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e  izing out sorts.
20620 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
20630 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
20640 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  mp */.#ifdef SQL
20650 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
20660 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b  e3_sort_count++;
20670 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63  .  sqlite3_searc
20680 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69  h_count--;.#endi
20690 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  f.  p->aCounter[
206a0 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
206b0 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f  S_SORT-1]++;.  /
206c0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
206d0 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f  nto OP_Rewind */
206e0 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
206f0 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  wind P1 P2 * * *
20700 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
20710 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
20720 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65   or Column or Ne
20730 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  xt instruction f
20740 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
20750 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  efer to the firs
20760 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64  t entry in the d
20770 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
20780 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68   index..** If th
20790 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
207a0 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32   is empty and P2
207b0 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  >0, then jump im
207c0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
207d0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f  .** If P2 is 0 o
207e0 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f  r if the table o
207f0 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65  r index is not e
20800 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75  mpty, fall throu
20810 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
20820 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
20830 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
20840 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  ewind: {        
20850 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
20860 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
20870 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
20880 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
20890 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
208a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
208b0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
208c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
208d0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
208e0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43  !=0 );.  if( (pC
208f0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
20900 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  r)!=0 ){.    rc 
20910 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
20920 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
20930 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46 69 72 73  ;.    pC->atFirs
20940 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b  t = res==0 ?1:0;
20950 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
20960 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
20970 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
20980 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
20990 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
209a0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  alid = 0;.  }els
209b0 65 7b 0a 20 20 20 20 72 65 73 20 3d 20 31 3b 0a  e{.    res = 1;.
209c0 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f    }.  pC->nullRo
209d0 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61  w = (u8)res;.  a
209e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
209f0 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e   && pOp->p2<p->n
20a00 4f 70 20 29 3b 0a 20 20 69 66 28 20 72 65 73 20  Op );.  if( res 
20a10 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
20a20 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
20a30 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
20a40 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 2a  de: Next P1 P2 *
20a50 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
20a60 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  ce cursor P1 so 
20a70 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
20a80 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64  o the next key/d
20a90 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
20aa0 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
20ab0 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
20ac0 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c   no more key/val
20ad0 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
20ae0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
20af0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
20b00 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
20b10 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61   if the cursor a
20b20 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65  dvance was succe
20b30 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
20b40 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
20b50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
20b60 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
20b70 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
20b80 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
20b90 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  le..**.** See al
20ba0 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f  so: Prev.*/./* O
20bb0 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50  pcode: Prev P1 P
20bc0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 61  2 * * *.**.** Ba
20bd0 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20  ck up cursor P1 
20be0 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
20bf0 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
20c00 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  s key/data pair 
20c10 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
20c20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
20c30 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f  ere is no previo
20c40 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  us key/value pai
20c50 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
20c60 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
20c70 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
20c80 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
20c90 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20  e cursor backup 
20ca0 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
20cb0 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
20cc0 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
20cd0 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
20ce0 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
20cf0 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
20d00 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
20d10 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
20d20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
20d30 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20  /.case OP_Next: 
20d40 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
20d50 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
20d60 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
20d70 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
20d80 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f 52  es;..  CHECK_FOR
20d90 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61 73  _INTERRUPT;.  as
20da0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
20db0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
20dc0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
20dd0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
20de0 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30 20  1];.  if( pC==0 
20df0 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20 20 2f  ){.    break;  /
20e00 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 32  * See ticket #22
20e10 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70 43 72 73  73 */.  }.  pCrs
20e20 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
20e30 0a 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20  .  if( pCrsr==0 
20e40 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  ){.    pC->nullR
20e50 6f 77 20 3d 20 31 3b 0a 20 20 20 20 62 72 65 61  ow = 1;.    brea
20e60 6b 3b 0a 20 20 7d 0a 20 20 72 65 73 20 3d 20 31  k;.  }.  res = 1
20e70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
20e80 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
20e90 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d  0 );.  rc = pOp-
20ea0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74  >opcode==OP_Next
20eb0 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   ? sqlite3BtreeN
20ec0 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ext(pCrsr, &res)
20ed0 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   :.             
20ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ef0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
20f00 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65  vious(pCrsr, &re
20f10 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
20f20 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
20f30 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
20f40 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
20f50 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
20f60 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
20f70 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   1;.    if( pOp-
20f80 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65  >p5 ) p->aCounte
20f90 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a  r[pOp->p5-1]++;.
20fa0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
20fb0 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
20fc0 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
20fd0 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e  endif.  }.  pC->
20fe0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
20ff0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
21000 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
21010 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  rt P1 P2 P3 * P5
21020 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
21030 50 32 20 68 6f 6c 64 73 20 61 20 53 51 4c 20 69  P2 holds a SQL i
21040 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
21050 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
21060 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
21070 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
21080 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
21090 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
210a0 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
210b0 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
210c0 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61  l..**.** P3 is a
210d0 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69   flag that provi
210e0 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68  des a hint to th
210f0 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74  e b-tree layer t
21100 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65  hat this.** inse
21110 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
21120 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
21130 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
21140 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
21150 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68  for indices.  Th
21160 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
21170 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
21180 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73  tables is OP_Ins
21190 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ert..*/.case OP_
211a0 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
211b0 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
211c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
211d0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
211e0 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  r;.  int nKey;. 
211f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
21200 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  y;..  assert( pO
21210 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21220 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21230 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21240 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21250 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21260 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66   assert( pIn2->f
21270 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
21280 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
21290 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
212a0 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
212b0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
212c0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
212d0 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e  ;.    rc = Expan
212e0 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 20  dBlob(pIn2);.   
212f0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
21300 4f 4b 20 29 7b 0a 20 20 20 20 20 20 6e 4b 65 79  OK ){.      nKey
21310 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20   = pIn2->n;.    
21320 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a    zKey = pIn2->z
21330 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
21340 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
21350 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65  pCrsr, zKey, nKe
21360 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70  y, "", 0, 0, pOp
21370 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20 20  ->p3, .         
21380 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
21390 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
213a0 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
213b0 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 29  ult : 0).      )
213c0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
213d0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
213e0 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70  to==0 );.      p
213f0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
21400 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
21410 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
21420 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
21430 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50  dxDelete P1 P2 P
21440 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3 * *.**.** The 
21450 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65  content of P3 re
21460 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
21470 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20   at register P2 
21480 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63  form.** an unpac
21490 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54  ked index key. T
214a0 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76  his opcode remov
214b0 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72  es that entry fr
214c0 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78  om the .** index
214d0 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
214e0 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
214f0 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20  _IdxDelete: {.  
21500 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
21510 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
21520 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
21530 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
21540 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
21550 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p3>0 );.  asse
21560 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  rt( pOp->p2>0 &&
21570 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33   pOp->p2+pOp->p3
21580 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20  <=p->nMem+1 );. 
21590 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
215a0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
215b0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
215c0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
215d0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
215e0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
215f0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
21600 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43  .  if( ALWAYS(pC
21610 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72  rsr!=0) ){.    r
21620 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
21630 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
21640 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
21650 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61  p->p3;.    r.fla
21660 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d  gs = 0;.    r.aM
21670 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
21680 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 72 63 20 3d  p->p2];.    rc =
21690 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
216a0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
216b0 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
216c0 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  s);.    if( rc==
216d0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
216e0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
216f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
21700 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 20  lete(pCrsr);.   
21710 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
21720 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
21730 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  o==0 );.    pC->
21740 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
21750 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
21760 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
21770 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50  code: IdxRowid P
21780 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
21790 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
217a0 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
217b0 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
217c0 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
217d0 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
217e0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
217f0 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
21800 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
21810 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
21820 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
21830 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
21840 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
21850 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
21860 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
21870 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
21880 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f  , MakeRecord..*/
21890 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
218a0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
218b0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
218c0 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72 73  ease */.  BtCurs
218d0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62  or *pCrsr;.  Vdb
218e0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
218f0 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73  64 rowid;..  ass
21900 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
21910 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
21920 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
21930 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
21940 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
21950 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
21960 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
21970 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21  f( ALWAYS(pCrsr!
21980 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  =0) ){.    rc = 
21990 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
219a0 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
219b0 20 69 66 28 20 4e 45 56 45 52 28 72 63 29 20 29   if( NEVER(rc) )
219c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
219d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 61 73  to_error;.    as
219e0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
219f0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
21a00 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
21a10 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20  sTable==0 );.   
21a20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f   if( !pC->nullRo
21a30 77 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  w ){.      rc = 
21a40 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
21a50 77 69 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26  wid(db, pCrsr, &
21a60 72 6f 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66  rowid);.      if
21a70 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
21a80 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
21a90 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
21aa0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
21ab0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
21ac0 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
21ad0 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  .      pOut->u.i
21ae0 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a   = rowid;.    }.
21af0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
21b00 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45  /* Opcode: IdxGE
21b10 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
21b20 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
21b30 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
21b40 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
21b50 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
21b60 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
21b70 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57  at omits the ROW
21b80 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
21b90 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
21ba0 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
21bb0 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
21bc0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
21bd0 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
21be0 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
21bf0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
21c00 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
21c10 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74  try is greater t
21c20 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
21c30 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a  the key value.**
21c40 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
21c50 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
21c60 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
21c70 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
21c80 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  n..**.** If P5 i
21c90 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s non-zero then 
21ca0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73  the key value is
21cb0 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e   increased by an
21cc0 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69   epsilon .** pri
21cd0 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72  or to the compar
21ce0 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65  ison.  This make
21cf0 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b   the opcode work
21d00 20 6c 69 6b 65 20 49 64 78 47 54 20 65 78 63 65   like IdxGT exce
21d10 70 74 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68  pt.** that if th
21d20 65 20 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73  e key from regis
21d30 74 65 72 20 50 33 20 69 73 20 61 20 70 72 65 66  ter P3 is a pref
21d40 69 78 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e  ix of the key in
21d50 20 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20   the cursor,.** 
21d60 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61  the result is fa
21d70 6c 73 65 20 77 68 65 72 65 61 73 20 69 74 20 77  lse whereas it w
21d80 6f 75 6c 64 20 62 65 20 74 72 75 65 20 77 69 74  ould be true wit
21d90 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f  h IdxGT..*/./* O
21da0 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20  pcode: IdxLT P1 
21db0 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a  P2 P3 * P5.**.**
21dc0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
21dd0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
21de0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
21df0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
21e00 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
21e10 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20  its the ROWID.  
21e20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
21e30 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
21e40 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
21e50 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
21e60 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
21e70 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49  gnoring the ROWI
21e80 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
21e90 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
21ea0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
21eb0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
21ec0 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
21ed0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74  ump to P2..** Ot
21ee0 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
21ef0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
21f00 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
21f10 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e  .** If P5 is non
21f20 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b  -zero then the k
21f30 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72  ey value is incr
21f40 65 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69  eased by an epsi
21f50 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f  lon prior .** to
21f60 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
21f70 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65    This makes the
21f80 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b   opcode work lik
21f90 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65  e IdxLE..*/.case
21fa0 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20   OP_IdxLT:      
21fb0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
21fc0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
21fd0 45 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  E: {        /* j
21fe0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
21ff0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
22000 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
22010 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
22020 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
22030 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
22040 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
22050 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
22060 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
22070 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41  pC!=0 );.  if( A
22080 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f  LWAYS(pC->pCurso
22090 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73  r!=0) ){.    ass
220a0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
220b0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
220c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
220d0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
220e0 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =1 );.    assert
220f0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
22100 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72  4_INT32 );.    r
22110 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
22120 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
22130 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
22140 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66 28  p->p4.i;.    if(
22150 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
22160 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
22170 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55  CKED_INCRKEY | U
22180 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52  NPACKED_IGNORE_R
22190 4f 57 49 44 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OWID;.    }else{
221a0 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  .      r.flags =
221b0 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45   UNPACKED_IGNORE
221c0 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 0a 20 20  _ROWID;.    }.  
221d0 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61    r.aMem = &p->a
221e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
221f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
22200 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
22210 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20  pC, &r, &res);. 
22220 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f     if( pOp->opco
22230 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 7b 0a  de==OP_IdxLT ){.
22240 20 20 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73        res = -res
22250 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
22260 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
22270 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
22280 20 29 3b 0a 20 20 20 20 20 20 72 65 73 2b 2b 3b   );.      res++;
22290 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
222a0 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 63  es>0 ){.      pc
222b0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b   = pOp->p2 - 1 ;
222c0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
222d0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
222e0 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20  : Destroy P1 P2 
222f0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  P3 * *.**.** Del
22300 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61  ete an entire da
22310 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
22320 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
22330 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74   page in the dat
22340 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73  abase.** file is
22350 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a   given by P1..**
22360 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
22370 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73  ing destroyed is
22380 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
22390 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33  abase file if P3
223a0 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d  ==0.  If.** P3==
223b0 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
223c0 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
223d0 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
223e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
223f0 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
22400 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
22410 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
22420 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
22430 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54  LE..**.** If AUT
22440 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c  OVACUUM is enabl
22450 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f  ed then it is po
22460 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
22470 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  her root page.**
22480 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20   might be moved 
22490 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64  into the newly d
224a0 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65  eleted root page
224b0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
224c0 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61  p all.** root pa
224d0 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61  ges contiguous a
224e0 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
224f0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
22500 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20    The former.** 
22510 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f  value of the roo
22520 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65  t page that move
22530 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65  d - its value be
22540 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63  fore the move oc
22550 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73  curred -.** is s
22560 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
22570 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67  r P2.  If no pag
22580 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77  e .** movement w
22590 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
225a0 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62  ause the table b
225b0 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73  eing dropped was
225c0 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65   already .** the
225d0 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
225e0 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
225f0 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
22600 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
22610 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
22620 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68  M is disabled th
22630 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
22640 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
22650 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
22660 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73  so: Clear.*/.cas
22670 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20  e OP_Destroy: { 
22680 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
22690 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
226a0 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43  iMoved;.  int iC
226b0 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62  nt;.  Vdbe *pVdb
226c0 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 23 69  e;.  int iDb;.#i
226d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
226e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
226f0 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72   iCnt = 0;.  for
22700 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65  (pVdbe=db->pVdbe
22710 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65 20 3d  ; pVdbe; pVdbe =
22720 20 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a   pVdbe->pNext){.
22730 20 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d      if( pVdbe->m
22740 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43  agic==VDBE_MAGIC
22750 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 69  _RUN && pVdbe->i
22760 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26  nVtabMethod<2 &&
22770 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 29 7b   pVdbe->pc>=0 ){
22780 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20  .      iCnt++;. 
22790 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20     }.  }.#else. 
227a0 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61 63 74 69   iCnt = db->acti
227b0 76 65 56 64 62 65 43 6e 74 3b 0a 23 65 6e 64 69  veVdbeCnt;.#endi
227c0 66 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29  f.  if( iCnt>1 )
227d0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
227e0 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
227f0 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
22800 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65  E_Abort;.  }else
22810 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
22820 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
22830 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20   iCnt==1 );.    
22840 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
22850 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29  eMask & (1<<iDb)
22860 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  )!=0 );.    rc =
22870 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f   sqlite3BtreeDro
22880 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69  pTable(db->aDb[i
22890 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  Db].pBt, pOp->p1
228a0 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20  , &iMoved);.    
228b0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
228c0 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
228d0 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
228e0 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53  Moved;.#ifndef S
228f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
22900 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63  ACUUM.    if( rc
22910 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69  ==SQLITE_OK && i
22920 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20  Moved!=0 ){.    
22930 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67    sqlite3RootPag
22940 65 4d 6f 76 65 64 28 26 64 62 2d 3e 61 44 62 5b  eMoved(&db->aDb[
22950 69 44 62 5d 2c 20 69 4d 6f 76 65 64 2c 20 70 4f  iDb], iMoved, pO
22960 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 23 65  p->p1);.    }.#e
22970 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
22980 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22990 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a  Clear P1 P2 P3.*
229a0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20  *.** Delete all 
229b0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
229c0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
229d0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
229e0 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68  ot page.** in th
229f0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
22a00 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20  is given by P1. 
22a10 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73   But, unlike Des
22a20 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20  troy, do not.** 
22a30 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65  remove the table
22a40 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74   or index from t
22a50 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
22a60 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
22a70 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73  e being clear is
22a80 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
22a90 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32  abase file if P2
22aa0 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d  ==0.  If.** P2==
22ab0 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
22ac0 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
22ad0 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
22ae0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
22af0 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
22b00 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
22b10 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
22b20 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
22b30 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  LE..**.** If the
22b40 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e   P3 value is non
22b50 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
22b60 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74  table referred t
22b70 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20  o must be an.** 
22b80 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e  intkey table (an
22b90 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20   SQL table, not 
22ba0 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68  an index). In th
22bb0 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20  is case the row 
22bc0 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74  change .** count
22bd0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
22be0 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
22bf0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
22c00 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
22c10 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67  . .** If P3 is g
22c20 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
22c30 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
22c40 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
22c50 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73  ter P3 is.** als
22c60 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  o incremented by
22c70 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
22c80 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
22c90 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a   being cleared..
22ca0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
22cb0 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20  Destroy.*/.case 
22cc0 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e  OP_Clear: {.  in
22cd0 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e  t nChange;. .  n
22ce0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73  Change = 0;.  as
22cf0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
22d00 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
22d10 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  2))!=0 );.  rc =
22d20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
22d30 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
22d40 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
22d50 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
22d60 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
22d70 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
22d80 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
22d90 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
22da0 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
22db0 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
22dc0 20 20 20 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e     p->aMem[pOp->
22dd0 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
22de0 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
22df0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
22e00 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65  ode: CreateTable
22e10 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
22e20 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
22e30 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  w table in the m
22e40 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
22e50 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
22e60 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
22e70 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
22e80 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
22e90 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
22ea0 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
22eb0 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
22ec0 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
22ed0 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
22ee0 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
22ef0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65  .**.** The diffe
22f00 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
22f10 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64  table and an ind
22f20 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74  ex is this:  A t
22f30 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76  able must.** hav
22f40 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67  e a 4-byte integ
22f50 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68  er key and can h
22f60 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61  ave arbitrary da
22f70 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a  ta.  An index.**
22f80 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72   has an arbitrar
22f90 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74  y key but no dat
22fa0 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  a..**.** See als
22fb0 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a  o: CreateIndex.*
22fc0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  /./* Opcode: Cre
22fd0 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a  ateIndex P1 P2 *
22fe0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63   * *.**.** Alloc
22ff0 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20  ate a new index 
23000 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
23010 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
23020 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
23030 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
23040 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
23050 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
23060 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
23070 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
23080 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
23090 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
230a0 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
230b0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
230c0 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
230d0 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61  n on OP_CreateTa
230e0 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ble for addition
230f0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
23100 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
23110 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20  eIndex:         
23120 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
23130 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50  lease */.case OP
23140 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20  _CreateTable: { 
23150 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
23160 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
23170 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74   int pgno;.  int
23180 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44   flags;.  Db *pD
23190 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a  b;..  pgno = 0;.
231a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
231b0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
231c0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
231d0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
231e0 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31  sk & (1<<pOp->p1
231f0 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ))!=0 );.  pDb =
23200 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
23210 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
23220 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69  b->pBt!=0 );.  i
23230 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
23240 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29  OP_CreateTable )
23250 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d  {.    /* flags =
23260 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a   BTREE_INTKEY; *
23270 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  /.    flags = BT
23280 52 45 45 5f 4c 45 41 46 44 41 54 41 7c 42 54 52  REE_LEAFDATA|BTR
23290 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c  EE_INTKEY;.  }el
232a0 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20  se{.    flags = 
232b0 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 3b 0a  BTREE_ZERODATA;.
232c0 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
232d0 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
232e0 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67  le(pDb->pBt, &pg
232f0 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f  no, flags);.  pO
23300 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a  ut->u.i = pgno;.
23310 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
23320 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
23330 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23340 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68  Opcode: ParseSch
23350 65 6d 61 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ema P1 P2 * P4 *
23360 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20  .**.** Read and 
23370 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65  parse all entrie
23380 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  s from the SQLIT
23390 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f  E_MASTER table o
233a0 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a  f database P1.**
233b0 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20   that match the 
233c0 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e  WHERE clause P4.
233d0 20 20 50 32 20 69 73 20 74 68 65 20 22 66 6f 72    P2 is the "for
233e0 63 65 22 20 66 6c 61 67 2e 20 20 20 41 6c 77 61  ce" flag.   Alwa
233f0 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20 70 61 72  ys do.** the par
23400 73 69 6e 67 20 69 66 20 50 32 20 69 73 20 74 72  sing if P2 is tr
23410 75 65 2e 20 20 49 66 20 50 32 20 69 73 20 66 61  ue.  If P2 is fa
23420 6c 73 65 2c 20 74 68 65 6e 20 74 68 69 73 20 72  lse, then this r
23430 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a 2a 20 6e  outine is a.** n
23440 6f 2d 6f 70 20 69 66 20 74 68 65 20 73 63 68 65  o-op if the sche
23450 6d 61 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  ma is not curren
23460 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20 49 6e 20  tly loaded.  In 
23470 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
23480 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73 65 2c 20  P2.** is false, 
23490 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  the SQLITE_MASTE
234a0 52 20 74 61 62 6c 65 20 69 73 20 6f 6e 6c 79 20  R table is only 
234b0 70 61 72 73 65 64 20 69 66 20 74 68 65 20 72 65  parsed if the re
234c0 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  st of the.** sch
234d0 65 6d 61 20 69 73 20 61 6c 72 65 61 64 79 20 6c  ema is already l
234e0 6f 61 64 65 64 20 69 6e 74 6f 20 74 68 65 20 73  oaded into the s
234f0 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  ymbol table..**.
23500 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
23510 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65  nvokes the parse
23520 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  r to create a ne
23530 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
23540 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20  e,.** then runs 
23550 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20  the new virtual 
23560 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20  machine.  It is 
23570 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e  thus a re-entran
23580 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  t opcode..*/.cas
23590 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  e OP_ParseSchema
235a0 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  : {.  int iDb;. 
235b0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61   const char *zMa
235c0 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53  ster;.  char *zS
235d0 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69  ql;.  InitData i
235e0 6e 69 74 44 61 74 61 3b 0a 0a 20 20 69 44 62 20  nitData;..  iDb 
235f0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
23600 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
23610 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a 20  Db<db->nDb );.. 
23620 20 2f 2a 20 49 66 20 70 4f 70 2d 3e 70 32 20 69   /* If pOp->p2 i
23630 73 20 30 2c 20 74 68 65 6e 20 74 68 69 73 20 6f  s 0, then this o
23640 70 63 6f 64 65 20 69 73 20 62 65 69 6e 67 20 65  pcode is being e
23650 78 65 63 75 74 65 64 20 74 6f 20 72 65 61 64 20  xecuted to read 
23660 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 72 6f  a.  ** single ro
23670 77 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 20 74  w, for example t
23680 68 65 20 72 6f 77 20 63 6f 72 72 65 73 70 6f 6e  he row correspon
23690 64 69 6e 67 20 74 6f 20 61 20 6e 65 77 20 69 6e  ding to a new in
236a0 64 65 78 0a 20 20 2a 2a 20 63 72 65 61 74 65 64  dex.  ** created
236b0 20 62 79 20 74 68 69 73 20 56 44 42 45 2c 20 66   by this VDBE, f
236c0 72 6f 6d 20 74 68 65 20 73 71 6c 69 74 65 5f 6d  rom the sqlite_m
236d0 61 73 74 65 72 20 74 61 62 6c 65 2e 20 49 74 20  aster table. It 
236e0 6f 6e 6c 79 0a 20 20 2a 2a 20 64 6f 65 73 20 74  only.  ** does t
236f0 68 69 73 20 69 66 20 74 68 65 20 63 6f 72 72 65  his if the corre
23700 73 70 6f 6e 64 69 6e 67 20 69 6e 2d 6d 65 6d 6f  sponding in-memo
23710 72 79 20 73 63 68 65 6d 61 20 69 73 20 63 75 72  ry schema is cur
23720 72 65 6e 74 6c 79 0a 20 20 2a 2a 20 6c 6f 61 64  rently.  ** load
23730 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74  ed. Otherwise, t
23740 68 65 20 6e 65 77 20 69 6e 64 65 78 20 64 65 66  he new index def
23750 69 6e 69 74 69 6f 6e 20 63 61 6e 20 62 65 20 6c  inition can be l
23760 6f 61 64 65 64 20 61 6c 6f 6e 67 0a 20 20 2a 2a  oaded along.  **
23770 20 77 69 74 68 20 74 68 65 20 72 65 73 74 20 6f   with the rest o
23780 66 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65  f the schema whe
23790 6e 20 69 74 20 69 73 20 72 65 71 75 69 72 65 64  n it is required
237a0 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 41 6c 74 68  ..  **.  ** Alth
237b0 6f 75 67 68 20 74 68 65 20 6d 75 74 65 78 20 6f  ough the mutex o
237c0 6e 20 74 68 65 20 42 74 53 68 61 72 65 64 20 6f  n the BtShared o
237d0 62 6a 65 63 74 20 74 68 61 74 20 63 6f 72 72 65  bject that corre
237e0 73 70 6f 6e 64 73 20 74 6f 0a 20 20 2a 2a 20 64  sponds to.  ** d
237f0 61 74 61 62 61 73 65 20 69 44 62 20 28 74 68 65  atabase iDb (the
23800 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69   database contai
23810 6e 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 5f  ning the sqlite_
23820 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20 2a  master table.  *
23830 2a 20 72 65 61 64 20 62 79 20 74 68 69 73 20 69  * read by this i
23840 6e 73 74 72 75 63 74 69 6f 6e 29 20 69 73 20 63  nstruction) is c
23850 75 72 72 65 6e 74 6c 79 20 68 65 6c 64 2c 20 69  urrently held, i
23860 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74  t is necessary t
23870 6f 0a 20 20 2a 2a 20 6f 62 74 61 69 6e 20 74 68  o.  ** obtain th
23880 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 61 6c 6c  e mutexes on all
23890 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
238a0 73 65 73 20 62 65 66 6f 72 65 20 63 68 65 63 6b  ses before check
238b0 69 6e 67 20 69 66 0a 20 20 2a 2a 20 74 68 65 20  ing if.  ** the 
238c0 73 63 68 65 6d 61 20 6f 66 20 69 44 62 20 69 73  schema of iDb is
238d0 20 6c 6f 61 64 65 64 2e 20 54 68 69 73 20 69 73   loaded. This is
238e0 20 62 65 63 61 75 73 65 2c 20 61 74 20 74 68 65   because, at the
238f0 20 73 74 61 72 74 20 6f 66 0a 20 20 2a 2a 20 74   start of.  ** t
23900 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  he sqlite3_exec(
23910 29 20 63 61 6c 6c 20 62 65 6c 6f 77 2c 20 53 51  ) call below, SQ
23920 4c 69 74 65 20 77 69 6c 6c 20 69 6e 76 6f 6b 65  Lite will invoke
23930 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74   .  ** sqlite3Bt
23940 72 65 65 45 6e 74 65 72 41 6c 6c 28 29 2e 20 49  reeEnterAll(). I
23950 66 20 61 6c 6c 20 6d 75 74 65 78 65 73 20 61 72  f all mutexes ar
23960 65 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 68 65  e not already he
23970 6c 64 2c 20 74 68 65 0a 20 20 2a 2a 20 69 44 62  ld, the.  ** iDb
23980 20 6d 75 74 65 78 20 6d 61 79 20 62 65 20 74 65   mutex may be te
23990 6d 70 6f 72 61 72 69 6c 79 20 72 65 6c 65 61 73  mporarily releas
239a0 65 64 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64  ed to avoid dead
239b0 6c 6f 63 6b 2e 20 49 66 20 0a 20 20 2a 2a 20 74  lock. If .  ** t
239c0 68 69 73 20 68 61 70 70 65 6e 73 2c 20 74 68 65  his happens, the
239d0 6e 20 73 6f 6d 65 20 6f 74 68 65 72 20 74 68 72  n some other thr
239e0 65 61 64 20 6d 61 79 20 64 65 6c 65 74 65 20 74  ead may delete t
239f0 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 0a 20 20  he in-memory .  
23a00 2a 2a 20 73 63 68 65 6d 61 20 6f 66 20 64 61 74  ** schema of dat
23a10 61 62 61 73 65 20 69 44 62 20 62 65 66 6f 72 65  abase iDb before
23a20 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
23a30 6e 74 20 72 75 6e 73 2e 20 54 68 65 20 73 63 68  nt runs. The sch
23a40 65 6d 61 0a 20 20 2a 2a 20 77 69 6c 6c 20 6e 6f  ema.  ** will no
23a50 74 20 62 65 20 72 65 6c 6f 61 64 65 64 20 62 65  t be reloaded be
23a60 63 75 61 73 65 20 74 68 65 20 64 62 2d 3e 69 6e  cuase the db->in
23a70 69 74 2e 62 75 73 79 20 66 6c 61 67 20 69 73 20  it.busy flag is 
23a80 73 65 74 2e 20 54 68 69 73 0a 20 20 2a 2a 20 63  set. This.  ** c
23a90 61 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20 22  an result in a "
23aa0 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 73  no such table: s
23ab0 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20 6f 72  qlite_master" or
23ac0 20 22 6d 61 6c 66 6f 72 6d 65 64 0a 20 20 2a 2a   "malformed.  **
23ad0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
23ae0 22 20 65 72 72 6f 72 20 62 65 69 6e 67 20 72 65  " error being re
23af0 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
23b00 65 72 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  er..  */.  asser
23b10 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 48  t( sqlite3BtreeH
23b20 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44  oldsMutex(db->aD
23b30 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20  b[iDb].pBt) );. 
23b40 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74   sqlite3BtreeEnt
23b50 65 72 41 6c 6c 28 64 62 29 3b 0a 20 20 69 66 28  erAll(db);.  if(
23b60 20 70 4f 70 2d 3e 70 32 20 7c 7c 20 44 62 48 61   pOp->p2 || DbHa
23b70 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44  sProperty(db, iD
23b80 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  b, DB_SchemaLoad
23b90 65 64 29 20 29 7b 0a 20 20 20 20 7a 4d 61 73 74  ed) ){.    zMast
23ba0 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c  er = SCHEMA_TABL
23bb0 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74  E(iDb);.    init
23bc0 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20  Data.db = db;.  
23bd0 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d    initData.iDb =
23be0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e   pOp->p1;.    in
23bf0 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20  itData.pzErrMsg 
23c00 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  = &p->zErrMsg;. 
23c10 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
23c20 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20  3MPrintf(db,.   
23c30 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65      "SELECT name
23c40 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20  , rootpage, sql 
23c50 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45  FROM '%q'.%s WHE
23c60 52 45 20 25 73 22 2c 0a 20 20 20 20 20 20 20 64  RE %s",.       d
23c70 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d  b->aDb[iDb].zNam
23c80 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d  e, zMaster, pOp-
23c90 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20  >p4.z);.    if( 
23ca0 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zSql==0 ){.     
23cb0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
23cc0 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  EM;.    }else{. 
23cd0 20 20 20 20 20 28 76 6f 69 64 29 73 71 6c 69 74       (void)sqlit
23ce0 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b  e3SafetyOff(db);
23cf0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
23d00 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
23d10 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
23d20 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20  t.busy = 1;.    
23d30 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20    initData.rc = 
23d40 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
23d50 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
23d60 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
23d70 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
23d80 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
23d90 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
23da0 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
23db0 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
23dc0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63  ==SQLITE_OK ) rc
23dd0 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a   = initData.rc;.
23de0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
23df0 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20  ree(db, zSql);. 
23e00 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
23e10 73 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 28 76  sy = 0;.      (v
23e20 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74  oid)sqlite3Safet
23e30 79 4f 6e 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20  yOn(db);.    }. 
23e40 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65   }.  sqlite3Btre
23e50 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b 0a 20  eLeaveAll(db);. 
23e60 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
23e70 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74  NOMEM ){.    got
23e80 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
23e90 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20  break;  .}..#if 
23ea0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
23eb0 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a  OMIT_ANALYZE)./*
23ec0 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61   Opcode: LoadAna
23ed0 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a  lysis P1 * * * *
23ee0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20  .**.** Read the 
23ef0 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
23f00 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  le for database 
23f10 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20  P1 and load the 
23f20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68  content.** of th
23f30 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68  at table into th
23f40 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78  e internal index
23f50 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68   hash table.  Th
23f60 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a  is will cause.**
23f70 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f   the analysis to
23f80 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72   be used when pr
23f90 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73  eparing all subs
23fa0 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a  equent queries..
23fb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41  */.case OP_LoadA
23fc0 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73  nalysis: {.  ass
23fd0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
23fe0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
23ff0 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Db );.  rc = sql
24000 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
24010 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  (db, pOp->p1);. 
24020 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64   break;  .}.#end
24030 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
24040 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
24050 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ZE) */../* Opcod
24060 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20  e: DropTable P1 
24070 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
24080 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
24090 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
240a0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
240b0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
240c0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
240d0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
240e0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
240f0 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  ed after a table
24100 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
24110 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
24120 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
24130 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
24140 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
24150 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
24160 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
24170 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62  .case OP_DropTab
24180 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  le: {.  sqlite3U
24190 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
241a0 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ble(db, pOp->p1,
241b0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
241c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
241d0 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31  de: DropIndex P1
241e0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
241f0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
24200 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
24210 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
24220 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
24230 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64   the index named
24240 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
24250 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
24260 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64  led after an ind
24270 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  ex.** is dropped
24280 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
24290 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
242a0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
242b0 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
242c0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
242d0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
242e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49  */.case OP_DropI
242f0 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ndex: {.  sqlite
24300 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
24310 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70  Index(db, pOp->p
24320 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
24330 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
24340 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65  code: DropTrigge
24350 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  r P1 * * P4 *.**
24360 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
24370 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
24380 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
24390 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
243a0 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72  e.** the trigger
243b0 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
243c0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
243d0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
243e0 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20  a trigger.** is 
243f0 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
24400 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
24410 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
24420 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
24430 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
24440 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
24450 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
24460 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b  P_DropTrigger: {
24470 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
24480 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
24490 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
244a0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
244b0 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
244c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
244d0 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70  RITY_CHECK./* Op
244e0 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43  code: IntegrityC
244f0 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  k P1 P2 P3 * P5.
24500 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c  **.** Do an anal
24510 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72  ysis of the curr
24520 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
24530 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a  ase.  Store in.*
24540 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68  * register P1 th
24550 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72  e text of an err
24560 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72  or message descr
24570 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65  ibing any proble
24580 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f  ms..** If no pro
24590 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c  blems are found,
245a0 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
245b0 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
245c0 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
245d0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
245e0 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
245f0 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72  of allowed error
24600 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65  s..** At most re
24610 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c  g(P3) errors wil
24620 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a  l be reported..*
24630 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
24640 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73  , the analysis s
24650 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
24660 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61  reg(P1) errors a
24670 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65  re .** seen.  Re
24680 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64  g(P1) is updated
24690 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
246a0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
246b0 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ning..**.** The 
246c0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
246d0 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
246e0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
246f0 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73  are integer.** s
24700 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29  tored in reg(P1)
24710 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67  , reg(P1+1), reg
24720 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68  (P1+2), ....  Th
24730 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65  ere are P2 table
24740 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a  s.** total..**.*
24750 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a  * If P5 is not z
24760 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69  ero, the check i
24770 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75  s done on the au
24780 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
24790 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68  .** file, not th
247a0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
247b0 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  file..**.** This
247c0 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
247d0 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
247e0 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
247f0 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65   pragma..*/.case
24800 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a   OP_IntegrityCk:
24810 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20   {.  int nRoot; 
24820 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
24830 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63  f tables to chec
24840 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72  k.  (Number of r
24850 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20  oot pages.) */. 
24860 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20   int *aRoot;    
24870 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f   /* Array of roo
24880 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f  tpage numbers fo
24890 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63  r tables to be c
248a0 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20  hecked */.  int 
248b0 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  j;          /* L
248c0 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
248d0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
248e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
248f0 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f  rors reported */
24900 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
24910 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
24920 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a  e error report *
24930 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20  /.  Mem *pnErr; 
24940 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
24950 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66  keeping track of
24960 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
24970 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74 20  g */.  .  nRoot 
24980 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
24990 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a  ert( nRoot>0 );.
249a0 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65    aRoot = sqlite
249b0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
249c0 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52   sizeof(int)*(nR
249d0 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20  oot+1) );.  if( 
249e0 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20  aRoot==0 ) goto 
249f0 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74  no_mem;.  assert
24a00 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
24a10 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
24a20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 70 2d  );.  pnErr = &p-
24a30 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
24a40 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
24a50 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
24a60 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  t)!=0 );.  asser
24a70 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
24a80 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
24a90 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70  Blob))==0 );.  p
24aa0 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
24ab0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a  Op->p1];.  for(j
24ac0 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b  =0; j<nRoot; j++
24ad0 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20  ){.    aRoot[j] 
24ae0 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64  = (int)sqlite3Vd
24af0 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31  beIntValue(&pIn1
24b00 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f  [j]);.  }.  aRoo
24b10 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65  t[j] = 0;.  asse
24b20 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e  rt( pOp->p5<db->
24b30 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
24b40 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
24b50 20 28 31 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d   (1<<pOp->p5))!=
24b60 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  0 );.  z = sqlit
24b70 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79  e3BtreeIntegrity
24b80 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f  Check(db->aDb[pO
24b90 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f  p->p5].pBt, aRoo
24ba0 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20  t, nRoot,.      
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bc0 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
24bd0 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72  pnErr->u.i, &nEr
24be0 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  r);.  sqlite3DbF
24bf0 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a  ree(db, aRoot);.
24c00 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20    pnErr->u.i -= 
24c10 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56  nErr;.  sqlite3V
24c20 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
24c30 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d  n1);.  if( nErr=
24c40 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
24c50 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  ( z==0 );.  }els
24c60 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20  e if( z==0 ){.  
24c70 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
24c80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
24c90 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
24ca0 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  (pIn1, z, -1, SQ
24cb0 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
24cc0 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20  e3_free);.  }.  
24cd0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
24ce0 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  IZE(pIn1);.  sql
24cf0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
24d00 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63  coding(pIn1, enc
24d10 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
24d20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
24d30 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
24d40 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20  TY_CHECK */../* 
24d50 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64  Opcode: RowSetAd
24d60 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
24d70 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69  .** Insert the i
24d80 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c  nteger value hel
24d90 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32  d by register P2
24da0 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20   into a boolean 
24db0 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e  index.** held in
24dc0 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
24dd0 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  .** An assertion
24de0 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20   fails if P2 is 
24df0 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  not an integer..
24e00 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
24e10 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  tAdd: {       /*
24e20 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70   in2 */.  Mem *p
24e30 49 64 78 3b 0a 20 20 4d 65 6d 20 2a 70 56 61 6c  Idx;.  Mem *pVal
24e40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
24e50 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
24e60 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
24e70 49 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Idx = &p->aMem[p
24e80 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24e90 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
24ea0 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
24eb0 20 29 3b 0a 20 20 70 56 61 6c 20 3d 20 26 70 2d   );.  pVal = &p-
24ec0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
24ed0 20 20 61 73 73 65 72 74 28 20 28 70 56 61 6c 2d    assert( (pVal-
24ee0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
24ef0 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  )!=0 );.  if( (p
24f00 49 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Idx->flags & MEM
24f10 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
24f20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
24f30 6d 53 65 74 52 6f 77 53 65 74 28 70 49 64 78 29  mSetRowSet(pIdx)
24f40 3b 0a 20 20 20 20 69 66 28 20 28 70 49 64 78 2d  ;.    if( (pIdx-
24f50 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
24f60 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
24f70 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_mem;.  }.  sql
24f80 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
24f90 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIdx->u.pRowSet
24fa0 2c 20 70 56 61 6c 2d 3e 75 2e 69 29 3b 0a 20 20  , pVal->u.i);.  
24fb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
24fc0 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20  ode: RowSetRead 
24fd0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
24fe0 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73  ** Extract the s
24ff0 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72  mallest value fr
25000 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  om boolean index
25010 20 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74   P1 and put that
25020 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72   value into.** r
25030 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c  egister P3.  Or,
25040 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65   if boolean inde
25050 78 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  x P1 is initiall
25060 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50  y empty, leave P
25070 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61  3.** unchanged a
25080 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  nd jump to instr
25090 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
250a0 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64  se OP_RowSetRead
250b0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
250c0 70 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 4d 65 6d  p, out3 */.  Mem
250d0 20 2a 70 49 64 78 3b 0a 20 20 69 36 34 20 76 61   *pIdx;.  i64 va
250e0 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  l;.  assert( pOp
250f0 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
25100 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  1<=p->nMem );.  
25110 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
25120 55 50 54 3b 0a 20 20 70 49 64 78 20 3d 20 26 70  UPT;.  pIdx = &p
25130 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
25140 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
25150 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
25160 66 28 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20  f( (pIdx->flags 
25170 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
25180 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52   .   || sqlite3R
25190 6f 77 53 65 74 4e 65 78 74 28 70 49 64 78 2d 3e  owSetNext(pIdx->
251a0 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29  u.pRowSet, &val)
251b0 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20  ==0.  ){.    /* 
251c0 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  The boolean inde
251d0 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20  x is empty */.  
251e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
251f0 53 65 74 4e 75 6c 6c 28 70 49 64 78 29 3b 0a 20  SetNull(pIdx);. 
25200 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
25210 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
25220 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73    /* A value was
25230 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65   pulled from the
25240 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 61 73   index */.    as
25250 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
25260 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
25270 4d 65 6d 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  Mem );.    sqlit
25280 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
25290 34 28 70 4f 75 74 2c 20 76 61 6c 29 3b 0a 20 20  4(pOut, val);.  
252a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
252b0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54   Opcode: RowSetT
252c0 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a  est P1 P2 P3 P4.
252d0 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
252e0 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  3 is assumed to 
252f0 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e  hold a 64-bit in
25300 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20  teger value. If 
25310 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63  register P1.** c
25320 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74  ontains a RowSet
25330 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74   object and that
25340 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63   RowSet object c
25350 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76  ontains.** the v
25360 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c  alue held in P3,
25370 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65   jump to registe
25380 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  r P2. Otherwise,
25390 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69   insert the.** i
253a0 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74  nteger in P3 int
253b0 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64  o the RowSet and
253c0 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20   continue on to 
253d0 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f  the.** next opco
253e0 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f  de..**.** The Ro
253f0 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f  wSet object is o
25400 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65  ptimized for the
25410 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63 63   case where succ
25420 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f  essive sets.** o
25430 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72  f integers, wher
25440 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61  e each set conta
25450 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65  ins no duplicate
25460 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f  s. Each set.** o
25470 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e  f values is iden
25480 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71  tified by a uniq
25490 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65  ue P4 value. The
254a0 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75   first set.** mu
254b0 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74  st have P4==0, t
254c0 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d  he final set P4=
254d0 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20  -1.  P4 must be 
254e0 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20  either -1 or.** 
254f0 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46  non-negative.  F
25500 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  or non-negative 
25510 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c  values of P4 onl
25520 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a  y the lower 4.**
25530 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69 66   bits are signif
25540 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  icant..**.** Thi
25550 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a  s allows optimiz
25560 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e  ations: (a) when
25570 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20   P4==0 there is 
25580 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a  no need to test.
25590 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62  ** the rowset ob
255a0 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20  ject for P3, as 
255b0 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
255c0 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20   not to contain 
255d0 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20  it,.** (b) when 
255e0 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20  P4==-1 there is 
255f0 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72  no need to inser
25600 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20  t the value, as 
25610 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72  it will.** never
25620 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20   be tested for, 
25630 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76  and (c) when a v
25640 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72  alue that is par
25650 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a  t of set X is.**
25660 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65   inserted, there
25670 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73   is no need to s
25680 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20  earch to see if 
25690 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77  the same value w
256a0 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
256b0 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
256c0 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79  t of set X (only
256d0 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69   if it was previ
256e0 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65  ously.** inserte
256f0 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d  d as part of som
25700 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f  e other set)..*/
25710 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54  .case OP_RowSetT
25720 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  est: {          
25730 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
25740 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
25750 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e    int iSet;.  in
25760 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 69 53 65  t exists;..  iSe
25770 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  t = pOp->p4.i;. 
25780 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
25790 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
257a0 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69  .  /* If there i
257b0 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72  s anything other
257c0 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f   than a rowset o
257d0 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20  bject in memory 
257e0 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65  cell P1,.  ** de
257f0 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20  lete it now and 
25800 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69  initialize P1 wi
25810 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73  th an empty rows
25820 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  et.  */.  if( (p
25830 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
25840 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
25850 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
25860 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
25870 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
25880 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
25890 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
258a0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73  o_mem;.  }..  as
258b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
258c0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
258d0 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d   assert( iSet==-
258e0 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a  1 || iSet>=0 );.
258f0 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20    if( iSet ){.  
25900 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74    exists = sqlit
25910 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e  e3RowSetTest(pIn
25920 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 0a 20  1->u.pRowSet, . 
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75                (u
25950 38 29 28 69 53 65 74 3e 3d 30 20 3f 20 69 53 65  8)(iSet>=0 ? iSe
25960 74 20 26 20 30 78 66 20 3a 20 30 78 66 66 29 2c  t & 0xf : 0xff),
25970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25990 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20  pIn3->u.i);.    
259a0 69 66 28 20 65 78 69 73 74 73 20 29 7b 0a 20 20  if( exists ){.  
259b0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
259c0 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61   - 1;.      brea
259d0 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  k;.    }.  }.  i
259e0 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20  f( iSet>=0 ){.  
259f0 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
25a00 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52  nsert(pIn1->u.pR
25a10 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69  owSet, pIn3->u.i
25a20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
25a30 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  }...#ifndef SQLI
25a40 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
25a50 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 74 65  /* Opcode: Conte
25a60 78 74 50 75 73 68 20 2a 20 2a 20 2a 20 0a 2a 2a  xtPush * * * .**
25a70 0a 2a 2a 20 53 61 76 65 20 74 68 65 20 63 75 72  .** Save the cur
25a80 72 65 6e 74 20 56 64 62 65 20 63 6f 6e 74 65 78  rent Vdbe contex
25a90 74 20 73 75 63 68 20 74 68 61 74 20 69 74 20 63  t such that it c
25aa0 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 62  an be restored b
25ab0 79 20 61 20 43 6f 6e 74 65 78 74 50 6f 70 0a 2a  y a ContextPop.*
25ac0 2a 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 63 6f  * opcode. The co
25ad0 6e 74 65 78 74 20 73 74 6f 72 65 73 20 74 68 65  ntext stores the
25ae0 20 6c 61 73 74 20 69 6e 73 65 72 74 20 72 6f 77   last insert row
25af0 20 69 64 2c 20 74 68 65 20 6c 61 73 74 20 73 74   id, the last st
25b00 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65 0a 2a  atement change.*
25b10 2a 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74 68 65  * count, and the
25b20 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65   current stateme
25b30 6e 74 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 2e  nt change count.
25b40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 74  .*/.case OP_Cont
25b50 65 78 74 50 75 73 68 3a 20 7b 0a 20 20 69 6e 74  extPush: {.  int
25b60 20 69 3b 0a 20 20 43 6f 6e 74 65 78 74 20 2a 70   i;.  Context *p
25b70 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 69 20 3d 20  Context;..  i = 
25b80 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54  p->contextStackT
25b90 6f 70 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20  op++;.  assert( 
25ba0 69 3e 3d 30 20 29 3b 0a 20 20 2f 2a 20 46 49 58  i>=0 );.  /* FIX
25bb0 20 4d 45 3a 20 54 68 69 73 20 73 68 6f 75 6c 64   ME: This should
25bc0 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 73   be allocated as
25bd0 20 70 61 72 74 20 6f 66 20 74 68 65 20 76 64 62   part of the vdb
25be0 65 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  e at compile-tim
25bf0 65 20 2a 2f 0a 20 20 69 66 28 20 69 3e 3d 70 2d  e */.  if( i>=p-
25c00 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 44 65 70  >contextStackDep
25c10 74 68 20 29 7b 0a 20 20 20 20 70 2d 3e 63 6f 6e  th ){.    p->con
25c20 74 65 78 74 53 74 61 63 6b 44 65 70 74 68 20 3d  textStackDepth =
25c30 20 69 2b 31 3b 0a 20 20 20 20 70 2d 3e 63 6f 6e   i+1;.    p->con
25c40 74 65 78 74 53 74 61 63 6b 20 3d 20 73 71 6c 69  textStack = sqli
25c50 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
25c60 65 65 28 64 62 2c 20 70 2d 3e 63 6f 6e 74 65 78  ee(db, p->contex
25c70 74 53 74 61 63 6b 2c 0a 20 20 20 20 20 20 20 20  tStack,.        
25c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ca0 20 20 73 69 7a 65 6f 66 28 43 6f 6e 74 65 78 74    sizeof(Context
25cb0 29 2a 28 69 2b 31 29 29 3b 0a 20 20 20 20 69 66  )*(i+1));.    if
25cc0 28 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63  ( p->contextStac
25cd0 6b 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  k==0 ) goto no_m
25ce0 65 6d 3b 0a 20 20 7d 0a 20 20 70 43 6f 6e 74 65  em;.  }.  pConte
25cf0 78 74 20 3d 20 26 70 2d 3e 63 6f 6e 74 65 78 74  xt = &p->context
25d00 53 74 61 63 6b 5b 69 5d 3b 0a 20 20 70 43 6f 6e  Stack[i];.  pCon
25d10 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77 69 64 20  text->lastRowid 
25d20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
25d30 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 6e 43 68  .  pContext->nCh
25d40 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67  ange = p->nChang
25d50 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  e;.  break;.}../
25d60 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 74 65 78  * Opcode: Contex
25d70 74 50 6f 70 20 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a  tPop * * * .**.*
25d80 2a 20 52 65 73 74 6f 72 65 20 74 68 65 20 56 64  * Restore the Vd
25d90 62 65 20 63 6f 6e 74 65 78 74 20 74 6f 20 74 68  be context to th
25da0 65 20 73 74 61 74 65 20 69 74 20 77 61 73 20 69  e state it was i
25db0 6e 20 77 68 65 6e 20 63 6f 6e 74 65 78 74 50 75  n when contextPu
25dc0 73 68 20 77 61 73 20 6c 61 73 74 0a 2a 2a 20 65  sh was last.** e
25dd0 78 65 63 75 74 65 64 2e 20 54 68 65 20 63 6f 6e  xecuted. The con
25de0 74 65 78 74 20 73 74 6f 72 65 73 20 74 68 65 20  text stores the 
25df0 6c 61 73 74 20 69 6e 73 65 72 74 20 72 6f 77 20  last insert row 
25e00 69 64 2c 20 74 68 65 20 6c 61 73 74 20 73 74 61  id, the last sta
25e10 74 65 6d 65 6e 74 0a 2a 2a 20 63 68 61 6e 67 65  tement.** change
25e20 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74 68 65 20   count, and the 
25e30 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
25e40 74 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 2e 0a  t change count..
25e50 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 74 65  */.case OP_Conte
25e60 78 74 50 6f 70 3a 20 7b 0a 20 20 43 6f 6e 74 65  xtPop: {.  Conte
25e70 78 74 20 2a 70 43 6f 6e 74 65 78 74 3b 0a 20 20  xt *pContext;.  
25e80 70 43 6f 6e 74 65 78 74 20 3d 20 26 70 2d 3e 63  pContext = &p->c
25e90 6f 6e 74 65 78 74 53 74 61 63 6b 5b 2d 2d 70 2d  ontextStack[--p-
25ea0 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f 70  >contextStackTop
25eb0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ];.  assert( p->
25ec0 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f 70 3e  contextStackTop>
25ed0 3d 30 20 29 3b 0a 20 20 64 62 2d 3e 6c 61 73 74  =0 );.  db->last
25ee0 52 6f 77 69 64 20 3d 20 70 43 6f 6e 74 65 78 74  Rowid = pContext
25ef0 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  ->lastRowid;.  p
25f00 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 43 6f 6e  ->nChange = pCon
25f10 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20  text->nChange;. 
25f20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
25f30 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
25f40 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  TE_OMIT_TRIGGER 
25f50 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
25f60 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
25f70 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  EMENT./* Opcode:
25f80 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20   MemMax P1 P2 * 
25f90 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  * *.**.** Set th
25fa0 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
25fb0 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61  ter P1 to the ma
25fc0 78 69 6d 75 6d 20 6f 66 20 69 74 73 20 63 75 72  ximum of its cur
25fd0 72 65 6e 74 20 76 61 6c 75 65 0a 2a 2a 20 61 6e  rent value.** an
25fe0 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
25ff0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
26000 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
26010 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72  on throws an err
26020 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79  or if the memory
26030 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69   cell is not ini
26040 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74  tially.** an int
26050 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
26060 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20  _MemMax: {      
26070 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f    /* in1, in2 */
26080 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
26090 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
260a0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
260b0 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
260c0 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  n2);.  if( pIn1-
260d0 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b  >u.i<pIn2->u.i){
260e0 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  .    pIn1->u.i =
260f0 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a   pIn2->u.i;.  }.
26100 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
26110 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
26120 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a  _AUTOINCREMENT *
26130 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  /../* Opcode: If
26140 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Pos P1 P2 * * *.
26150 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  **.** If the val
26160 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
26170 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65  1 is 1 or greate
26180 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  r, jump to P2..*
26190 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
261a0 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
261b0 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
261c0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
261d0 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
261e0 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
261f0 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
26200 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
26210 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
26220 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20  e OP_IfPos: {   
26230 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
26240 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
26250 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
26260 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
26270 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20  ->u.i>0 ){.     
26280 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
26290 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
262a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  ../* Opcode: IfN
262b0 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  eg P1 P2 * * *.*
262c0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  *.** If the valu
262d0 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
262e0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65   is less than ze
262f0 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  ro, jump to P2. 
26300 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
26310 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
26320 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
26330 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
26340 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
26350 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
26360 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
26370 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
26380 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
26390 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20  ase OP_IfNeg: { 
263a0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
263b0 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
263c0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
263d0 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
263e0 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20  n1->u.i<0 ){.   
263f0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
26400 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
26410 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
26420 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  fZero P1 P2 * * 
26430 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  *.**.** If the v
26440 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
26450 20 50 31 20 69 73 20 65 78 61 63 74 6c 79 20 30   P1 is exactly 0
26460 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  , jump to P2. .*
26470 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
26480 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
26490 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
264a0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
264b0 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
264c0 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
264d0 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
264e0 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
264f0 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
26500 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20  e OP_IfZero: {  
26510 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
26520 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  n1 */.  assert( 
26530 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
26540 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e  Int );.  if( pIn
26550 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20  1->u.i==0 ){.   
26560 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
26570 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
26580 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
26590 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50  ggStep * P2 P3 P
265a0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  4 P5.**.** Execu
265b0 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  te the step func
265c0 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
265d0 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66  egate.  The.** f
265e0 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
265f0 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69  rguments.   P4 i
26600 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
26610 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74  he FuncDef.** st
26620 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
26630 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
26640 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74  ion.  Use regist
26650 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20  er.** P3 as the 
26660 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a  accumulator..**.
26670 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65  ** The P5 argume
26680 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72  nts are taken fr
26690 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
266a0 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73  nd its.** succes
266b0 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sors..*/.case OP
266c0 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
266d0 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
266e0 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d  Mem *pMem;.  Mem
266f0 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65   *pRec;.  sqlite
26700 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
26710 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
26720 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70  *apVal;..  n = p
26730 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74  Op->p5;.  assert
26740 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63  ( n>=0 );.  pRec
26750 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
26760 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20  >p2];.  apVal = 
26770 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
26780 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
26790 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  0 );.  for(i=0; 
267a0 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b  i<n; i++, pRec++
267b0 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  ){.    apVal[i] 
267c0 3d 20 70 52 65 63 3b 0a 20 20 20 20 73 74 6f 72  = pRec;.    stor
267d0 65 54 79 70 65 49 6e 66 6f 28 70 52 65 63 2c 20  eTypeInfo(pRec, 
267e0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a 20  encoding);.  }. 
267f0 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70   ctx.pFunc = pOp
26800 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73  ->p4.pFunc;.  as
26810 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
26820 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
26830 4d 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65  Mem );.  ctx.pMe
26840 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61  m = pMem = &p->a
26850 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
26860 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78  pMem->n++;.  ctx
26870 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  .s.flags = MEM_N
26880 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20 3d  ull;.  ctx.s.z =
26890 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c   0;.  ctx.s.zMal
268a0 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  loc = 0;.  ctx.s
268b0 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78  .xDel = 0;.  ctx
268c0 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74  .s.db = db;.  ct
268d0 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20  x.isError = 0;. 
268e0 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a   ctx.pColl = 0;.
268f0 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d    if( ctx.pFunc-
26900 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
26910 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b  FUNC_NEEDCOLL ){
26920 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
26930 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61  >p->aOp );.    a
26940 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
26950 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
26960 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Q );.    assert(
26970 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
26980 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
26990 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70     ctx.pColl = p
269a0 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b  Op[-1].p4.pColl;
269b0 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e  .  }.  (ctx.pFun
269c0 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20  c->xStep)(&ctx, 
269d0 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69 66 28  n, apVal);.  if(
269e0 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
269f0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
26a00 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
26a10 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
26a20 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
26a30 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20  ctx.s));.    rc 
26a40 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20  = ctx.isError;. 
26a50 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
26a60 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e  MemRelease(&ctx.
26a70 73 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  s);.  break;.}..
26a80 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69  /* Opcode: AggFi
26a90 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a  nal P1 P2 * P4 *
26aa0 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
26ab0 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e  he finalizer fun
26ac0 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
26ad0 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a  regate.  P1 is.*
26ae0 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  * the memory loc
26af0 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ation that is th
26b00 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f  e accumulator fo
26b10 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e  r the aggregate.
26b20 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
26b30 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
26b40 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74  ents that the st
26b50 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  ep function take
26b60 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61  s and.** P4 is a
26b70 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
26b80 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73  FuncDef for this
26b90 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
26ba0 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69  P2.** argument i
26bb0 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68  s not used by th
26bc0 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69  is opcode.  It i
26bd0 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20  s only there to 
26be0 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20  disambiguate.** 
26bf0 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63  functions that c
26c00 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20  an take varying 
26c10 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d  numbers of argum
26c20 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34  ents.  The.** P4
26c30 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c   argument is onl
26c40 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  y needed for the
26c50 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65   degenerate case
26c60 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74   where.** the st
26c70 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ep function was 
26c80 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63  not previously c
26c90 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alled..*/.case O
26ca0 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20  P_AggFinal: {.  
26cb0 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73  Mem *pMem;.  ass
26cc0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
26cd0 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  & pOp->p1<=p->nM
26ce0 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  em );.  pMem = &
26cf0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
26d00 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
26d10 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
26d20 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
26d30 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
26d40 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
26d50 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70  ize(pMem, pOp->p
26d60 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20  4.pFunc);.  if( 
26d70 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
26d80 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
26d90 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
26da0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
26db0 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d  text(pMem));.  }
26dc0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
26dd0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65  angeEncoding(pMe
26de0 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  m, encoding);.  
26df0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
26e00 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28  IZE(pMem);.  if(
26e10 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
26e20 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20  ooBig(pMem) ){. 
26e30 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
26e40 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
26e50 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
26e60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
26e70 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  M) && !defined(S
26e80 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
26e90 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  H)./* Opcode: Va
26ea0 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  cuum * * * * *.*
26eb0 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20  *.** Vacuum the 
26ec0 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e  entire database.
26ed0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69    This opcode wi
26ee0 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76  ll cause other v
26ef0 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e  irtual.** machin
26f00 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64  es to be created
26f10 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61   and run.  It ma
26f20 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20  y not be called 
26f30 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61  from within.** a
26f40 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f   transaction..*/
26f50 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a  .case OP_Vacuum:
26f60 20 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   {.  if( sqlite3
26f70 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
26f80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
26f90 6f 5f 6d 69 73 75 73 65 3b 20 0a 20 20 72 63 20  o_misuse; .  rc 
26fa0 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  = sqlite3RunVacu
26fb0 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  um(&p->zErrMsg, 
26fc0 64 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  db);.  if( sqlit
26fd0 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
26fe0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
26ff0 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 62 72 65  to_misuse;.  bre
27000 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
27010 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
27020 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
27030 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  M)./* Opcode: In
27040 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a  crVacuum P1 P2 *
27050 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f   * *.**.** Perfo
27060 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70  rm a single step
27070 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e   of the incremen
27080 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65  tal vacuum proce
27090 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50  dure on.** the P
270a0 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74  1 database. If t
270b0 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69  he vacuum has fi
270c0 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20  nished, jump to 
270d0 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50  instruction.** P
270e0 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
270f0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
27100 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
27110 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
27120 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20  ncrVacuum: {    
27130 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
27140 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
27150 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27160 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
27170 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
27180 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
27190 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29   & (1<<pOp->p1))
271a0 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64  !=0 );.  pBt = d
271b0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
271c0 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  pBt;.  rc = sqli
271d0 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75  te3BtreeIncrVacu
271e0 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20 72  um(pBt);.  if( r
271f0 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
27200 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
27210 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d  p2 - 1;.    rc =
27220 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a   SQLITE_OK;.  }.
27230 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
27240 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78  f../* Opcode: Ex
27250 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  pire P1 * * * *.
27260 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63  **.** Cause prec
27270 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e  ompiled statemen
27280 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78 70  ts to become exp
27290 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65 64  ired. An expired
272a0 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 61   statement.** fa
272b0 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ils with an erro
272c0 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45  r code of SQLITE
272d0 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20 69 73  _SCHEMA if it is
272e0 20 65 76 65 72 20 65 78 65 63 75 74 65 64 20 0a   ever executed .
272f0 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33 5f  ** (via sqlite3_
27300 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20  step())..** .** 
27310 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e  If P1 is 0, then
27320 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65   all SQL stateme
27330 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72  nts become expir
27340 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  ed. If P1 is non
27350 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f  -zero,.** then o
27360 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c  nly the currentl
27370 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74  y executing stat
27380 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74 65  ement is affecte
27390 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  d. .*/.case OP_E
273a0 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21  xpire: {.  if( !
273b0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
273c0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
273d0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
273e0 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
273f0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
27400 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
27410 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27420 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
27430 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62  E./* Opcode: Tab
27440 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20  leLock P1 P2 P3 
27450 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69  P4 *.**.** Obtai
27460 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61  n a lock on a pa
27470 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20  rticular table. 
27480 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
27490 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68   is only used wh
274a0 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64  en.** the shared
274b0 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69  -cache feature i
274c0 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a  s enabled. .**.*
274d0 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
274e0 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
274f0 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  e in sqlite3.aDb
27500 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  [] of the databa
27510 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74  se.** on which t
27520 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  he lock is acqui
27530 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b  red.  A readlock
27540 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20   is obtained if 
27550 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72  P3==0 or.** a wr
27560 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d  ite lock if P3==
27570 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74  1..**.** P2 cont
27580 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61  ains the root-pa
27590 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ge of the table 
275a0 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50  to lock..**.** P
275b0 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69  4 contains a poi
275c0 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65  nter to the name
275d0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65   of the table be
275e0 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73  ing locked. This
275f0 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64   is only.** used
27600 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20   to generate an 
27610 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66  error message if
27620 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74   the lock cannot
27630 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f   be obtained..*/
27640 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f  .case OP_TableLo
27650 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69  ck: {.  u8 isWri
27660 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70  teLock = (u8)pOp
27670 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72  ->p3;.  if( isWr
27680 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64  iteLock || 0==(d
27690 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
276a0 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29  ReadUncommitted)
276b0 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d   ){.    int p1 =
276c0 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61   pOp->p1; .    a
276d0 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20  ssert( p1>=0 && 
276e0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
276f0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
27700 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 31  reeMask & (1<<p1
27710 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  ))!=0 );.    ass
27720 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b  ert( isWriteLock
27730 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f  ==0 || isWriteLo
27740 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20  ck==1 );.    rc 
27750 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f  = sqlite3BtreeLo
27760 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  ckTable(db->aDb[
27770 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  p1].pBt, pOp->p2
27780 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a  , isWriteLock);.
27790 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46      if( (rc&0xFF
277a0 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  )==SQLITE_LOCKED
277b0 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20   ){.      const 
277c0 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70  char *z = pOp->p
277d0 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  4.z;.      sqlit
277e0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
277f0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61  zErrMsg, db, "da
27800 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
27810 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b  locked: %s", z);
27820 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
27830 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
27840 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
27850 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66  ED_CACHE */..#if
27860 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27870 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
27880 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20   Opcode: VBegin 
27890 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
278a0 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69   P4 may be a poi
278b0 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
278c0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
278d0 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74  e. If so, call t
278e0 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65  he .** xBegin me
278f0 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61  thod for that ta
27900 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c  ble..**.** Also,
27910 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
27920 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b  P4 is set, check
27930 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f   that this is no
27940 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  t being called f
27950 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  rom.** within a 
27960 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69  callback to a vi
27970 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e  rtual table xSyn
27980 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69  c() method. If i
27990 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a  t is, the error.
279a0 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20  ** code will be 
279b0 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f  set to SQLITE_LO
279c0 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  CKED..*/.case OP
279d0 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 73 71 6c  _VBegin: {.  sql
279e0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
279f0 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ;.  pVtab = pOp-
27a00 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20  >p4.pVtab;.  rc 
27a10 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  = sqlite3VtabBeg
27a20 69 6e 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20  in(db, pVtab);. 
27a30 20 69 66 28 20 70 56 74 61 62 20 29 7b 0a 20 20   if( pVtab ){.  
27a40 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
27a50 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
27a60 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
27a70 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
27a80 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72  ;.    pVtab->zEr
27a90 72 4d 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  rMsg = 0;.  }.  
27aa0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
27ab0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
27ac0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
27ad0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
27ae0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
27af0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65  ./* Opcode: VCre
27b00 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ate P1 * * P4 *.
27b10 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
27b20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
27b30 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
27b40 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  ase P1. Call the
27b50 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a   xCreate method.
27b60 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  ** for that tabl
27b70 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  e..*/.case OP_VC
27b80 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20  reate: {.  rc = 
27b90 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
27ba0 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70  reate(db, pOp->p
27bb0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70  1, pOp->p4.z, &p
27bc0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72  ->zErrMsg);.  br
27bd0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
27be0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27bf0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
27c00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
27c10 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
27c20 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
27c30 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
27c40 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
27c50 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
27c60 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
27c70 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
27c80 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
27c90 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
27ca0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
27cb0 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69  estroy: {.  p->i
27cc0 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b  nVtabMethod = 2;
27cd0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
27ce0 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64  tabCallDestroy(d
27cf0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
27d00 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56  >p4.z);.  p->inV
27d10 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20  tabMethod = 0;. 
27d20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
27d30 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
27d40 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
27d50 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27d60 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
27d70 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
27d80 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
27d90 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
27da0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
27db0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
27dc0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
27dd0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
27de0 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
27df0 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
27e00 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
27e10 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
27e20 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
27e30 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
27e40 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
27e50 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  P_VOpen: {.  Vdb
27e60 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
27e70 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
27e80 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
27e90 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
27ea0 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  b *pVtab;.  sqli
27eb0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
27ec0 75 6c 65 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30  ule;..  pCur = 0
27ed0 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
27ee0 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  = 0;.  pVtab = p
27ef0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20  Op->p4.pVtab;.  
27f00 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
27f10 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
27f20 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
27f30 73 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d  sert(pVtab && pM
27f40 6f 64 75 6c 65 29 3b 0a 20 20 69 66 28 20 73 71  odule);.  if( sq
27f50 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
27f60 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
27f70 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
27f80 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
27f90 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74  Open(pVtab, &pVt
27fa0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c  abCursor);.  sql
27fb0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
27fc0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d  ->zErrMsg);.  p-
27fd0 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
27fe0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74  ->zErrMsg;.  pVt
27ff0 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
28000 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
28010 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
28020 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
28030 69 73 75 73 65 3b 0a 20 20 69 66 28 20 53 51 4c  isuse;.  if( SQL
28040 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20  ITE_OK==rc ){.  
28050 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
28060 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
28070 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
28080 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f  /.    pVtabCurso
28090 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62  r->pVtab = pVtab
280a0 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
280b0 6c 69 73 65 20 76 64 62 65 20 63 75 72 73 6f 72  lise vdbe cursor
280c0 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70   object */.    p
280d0 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
280e0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
280f0 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20   0, -1, 0);.    
28100 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20  if( pCur ){.    
28110 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72    pCur->pVtabCur
28120 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f  sor = pVtabCurso
28130 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70  r;.      pCur->p
28140 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43 75  Module = pVtabCu
28150 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f  rsor->pVtab->pMo
28160 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  dule;.    }else{
28170 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f  .      db->mallo
28180 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
28190 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f     pModule->xClo
281a0 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  se(pVtabCursor);
281b0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
281c0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
281d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
281e0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
281f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28200 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
28210 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72   Opcode: VFilter
28220 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
28230 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  *.** P1 is a cur
28240 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67  sor opened using
28250 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61   VOpen.  P2 is a
28260 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d  n address to jum
28270 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66  p to if.** the f
28280 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73  iltered result s
28290 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a  et is empty..**.
282a0 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20  ** P4 is either 
282b0 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67  NULL or a string
282c0 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61   that was genera
282d0 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74  ted by the xBest
282e0 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20  Index.** method 
282f0 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20  of the module.  
28300 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  The interpretati
28310 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72  on of the P4 str
28320 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74  ing is left.** t
28330 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70  o the module imp
28340 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  lementation..**.
28350 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
28360 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74  nvokes the xFilt
28370 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65  er method on the
28380 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
28390 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50  pecified.** by P
283a0 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20  1.  The integer 
283b0 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d  query plan param
283c0 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20  eter to xFilter 
283d0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
283e0 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67  ister.** P3. Reg
283f0 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65  ister P3+1 store
28400 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d  s the argc param
28410 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65  eter to be passe
28420 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c  d to the.** xFil
28430 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69  ter method. Regi
28440 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31  sters P3+2..P3+1
28450 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72  +argc are the ar
28460 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  gc.** additional
28470 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63   parameters whic
28480 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a  h are passed to.
28490 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72  ** xFilter as ar
284a0 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  gv. Register P3+
284b0 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30  2 becomes argv[0
284c0 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f  ] when passed to
284d0 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20   xFilter..**.** 
284e0 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  A jump is made t
284f0 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75  o P2 if the resu
28500 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c  lt set after fil
28510 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20  tering would be 
28520 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  empty..*/.case O
28530 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f  P_VFilter: {   /
28540 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
28550 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65  nArg;.  int iQue
28560 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ry;.  const sqli
28570 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
28580 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65  ule;.  Mem *pQue
28590 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63  ry;.  Mem *pArgc
285a0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
285b0 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
285c0 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  rsor;.  sqlite3_
285d0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56  vtab *pVtab;.  V
285e0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
285f0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
28600 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  t i;.  Mem **apA
28610 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20  rg;..  pQuery = 
28620 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
28630 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51  ];.  pArgc = &pQ
28640 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20  uery[1];.  pCur 
28650 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
28660 70 31 5d 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  p1];.  REGISTER_
28670 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
28680 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74  Query);.  assert
28690 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
286a0 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75  sor );.  pVtabCu
286b0 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74  rsor = pCur->pVt
286c0 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61  abCursor;.  pVta
286d0 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  b = pVtabCursor-
286e0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
286f0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
28700 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74  le;..  /* Grab t
28710 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  he index number 
28720 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74  and argc paramet
28730 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ers */.  assert(
28740 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26   (pQuery->flags&
28750 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70  MEM_Int)!=0 && p
28760 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  Argc->flags==MEM
28770 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d  _Int );.  nArg =
28780 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69   (int)pArgc->u.i
28790 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e  ;.  iQuery = (in
287a0 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a  t)pQuery->u.i;..
287b0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
287c0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a  xFilter method *
287d0 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20  /.  {.    res = 
287e0 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70  0;.    apArg = p
287f0 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72  ->apArg;.    for
28800 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20  (i = 0; i<nArg; 
28810 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72  i++){.      apAr
28820 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b  g[i] = &pArgc[i+
28830 31 5d 3b 0a 20 20 20 20 20 20 73 74 6f 72 65 54  1];.      storeT
28840 79 70 65 49 6e 66 6f 28 61 70 41 72 67 5b 69 5d  ypeInfo(apArg[i]
28850 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  , 0);.    }..   
28860 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
28870 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
28880 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
28890 73 75 73 65 3b 0a 20 20 20 20 73 71 6c 69 74 65  suse;.    sqlite
288a0 33 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29  3VtabLock(pVtab)
288b0 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d  ;.    p->inVtabM
288c0 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72  ethod = 1;.    r
288d0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69  c = pModule->xFi
288e0 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f 72  lter(pVtabCursor
288f0 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70  , iQuery, pOp->p
28900 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  4.z, nArg, apArg
28910 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  );.    p->inVtab
28920 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20  Method = 0;.    
28930 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
28940 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
28950 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
28960 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
28970 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d      pVtab->zErrM
28980 73 67 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  sg = 0;.    sqli
28990 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62  te3VtabUnlock(db
289a0 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
289b0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
289c0 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70  ){.      res = p
289d0 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74  Module->xEof(pVt
289e0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  abCursor);.    }
289f0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
28a00 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
28a10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
28a20 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 20 20 69 66  _misuse;..    if
28a30 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70  ( res ){.      p
28a40 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
28a50 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75  .    }.  }.  pCu
28a60 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  r->nullRow = 0;.
28a70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
28a80 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
28a90 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
28aa0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
28ab0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
28ac0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
28ad0 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
28ae0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  * *.**.** Store 
28af0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
28b00 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66   P2-th column of
28b10 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74  .** the row of t
28b20 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  he virtual-table
28b30 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31   that the .** P1
28b40 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74   cursor is point
28b50 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69  ing to into regi
28b60 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
28b70 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20   OP_VColumn: {. 
28b80 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
28b90 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
28ba0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
28bb0 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44  odule;.  Mem *pD
28bc0 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  est;.  sqlite3_c
28bd0 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b  ontext sContext;
28be0 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ..  VdbeCursor *
28bf0 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
28c00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
28c10 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
28c20 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
28c30 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
28c40 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
28c50 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70   );.  pDest = &p
28c60 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
28c70 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
28c80 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
28c90 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
28ca0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72  l(pDest);.    br
28cb0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
28cc0 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
28cd0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
28ce0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
28cf0 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
28d00 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c  t( pModule->xCol
28d10 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28  umn );.  memset(
28d20 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69  &sContext, 0, si
28d30 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b  zeof(sContext));
28d40 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
28d50 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
28d60 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
28d70 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
28d80 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e  .  ** the curren
28d90 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43  t contents to sC
28da0 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63  ontext.s so in c
28db0 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e  ase the user-fun
28dc0 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20  ction .  ** can 
28dd0 75 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20  use the already 
28de0 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
28df0 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f   instead of allo
28e00 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e  cating a .  ** n
28e10 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73  ew one..  */.  s
28e20 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
28e30 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70  e(&sContext.s, p
28e40 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  Dest);.  MemSetT
28e50 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78  ypeFlag(&sContex
28e60 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  t.s, MEM_Null);.
28e70 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
28e80 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
28e90 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
28ea0 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70  misuse;.  rc = p
28eb0 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28  Module->xColumn(
28ec0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
28ed0 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f  r, &sContext, pO
28ee0 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65  p->p2);.  sqlite
28ef0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
28f00 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45  ErrMsg);.  p->zE
28f10 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
28f20 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d  ErrMsg;.  pVtab-
28f30 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
28f40 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  if( sContext.isE
28f50 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d  rror ){.    rc =
28f60 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
28f70 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70  r;.  }..  /* Cop
28f80 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  y the result of 
28f90 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
28fa0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e  the P3 register.
28fb0 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73   We.  ** do this
28fc0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
28fd0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
28fe0 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
28ff0 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20  to ensure any.  
29000 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63  ** dynamic alloc
29010 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78  ation in sContex
29020 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63  t.s (a Mem struc
29030 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e  t) is  released.
29040 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
29050 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
29060 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65  g(&sContext.s, e
29070 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49  ncoding);.  REGI
29080 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
29090 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 73 71  p3, pDest);.  sq
290a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
290b0 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78  (pDest, &sContex
290c0 74 2e 73 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  t.s);.  UPDATE_M
290d0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
290e0 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  t);..  if( sqlit
290f0 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
29100 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  {.    goto abort
29110 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
29120 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
29130 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
29140 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  Dest) ){.    got
29150 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
29160 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
29170 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
29180 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
29190 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
291a0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
291b0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65  E./* Opcode: VNe
291c0 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  xt P1 P2 * * *.*
291d0 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72  *.** Advance vir
291e0 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f  tual table P1 to
291f0 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e   the next row in
29200 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
29210 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69  and.** jump to i
29220 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20  nstruction P2.  
29230 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75  Or, if the virtu
29240 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61  al table has rea
29250 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20  ched.** the end 
29260 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  of its result se
29270 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
29280 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
29290 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
292a0 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20  .case OP_VNext: 
292b0 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
292c0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
292d0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
292e0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
292f0 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73  odule;.  int res
29300 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
29310 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30  pCur;..  res = 0
29320 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
29330 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
29340 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
29350 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  tabCursor );.  i
29360 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
29370 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
29380 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
29390 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  r->pVtabCursor->
293a0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
293b0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
293c0 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
293d0 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a  dule->xNext );..
293e0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
293f0 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f  xNext() method o
29400 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68  f the module. Th
29410 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f  ere is no way fo
29420 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72  r the.  ** under
29430 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61  lying implementa
29440 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61  tion to return a
29450 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f  n error if one o
29460 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a  ccurs during.  *
29470 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65  * xNext(). Inste
29480 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20  ad, if an error 
29490 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20  occurs, true is 
294a0 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61  returned (indica
294b0 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20  ting that .  ** 
294c0 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c  data is availabl
294d0 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72  e) and the error
294e0 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77   code returned w
294f0 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20  hen xColumn or. 
29500 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d   ** some other m
29510 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e  ethod is next in
29520 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76  voked on the sav
29530 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
29540 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69  cursor..  */.  i
29550 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
29560 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
29570 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
29580 73 65 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  se;.  sqlite3Vta
29590 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20  bLock(pVtab);.  
295a0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
295b0 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  = 1;.  rc = pMod
295c0 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d  ule->xNext(pCur-
295d0 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
295e0 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
295f0 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 44   = 0;.  sqlite3D
29600 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
29610 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72  rMsg);.  p->zErr
29620 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
29630 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a  rMsg;.  pVtab->z
29640 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 73 71  ErrMsg = 0;.  sq
29650 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
29660 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  db, pVtab);.  if
29670 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
29680 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  ){.    res = pMo
29690 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d  dule->xEof(pCur-
296a0 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
296b0 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
296c0 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
296d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
296e0 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 69 66 28 20  _misuse;..  if( 
296f0 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49  !res ){.    /* I
29700 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c  f there is data,
29710 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
29720 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
29730 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
29740 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
29750 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
29760 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
29770 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
29780 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
29790 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50  pcode: VRename P
297a0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
297b0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
297c0 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
297d0 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
297e0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
297f0 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f  cture..** This o
29800 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
29810 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
29820 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20  xRename method. 
29830 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  The value.** in 
29840 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 70  register P1 is p
29850 61 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61  assed as the zNa
29860 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  me argument to t
29870 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  he xRename metho
29880 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52  d..*/.case OP_VR
29890 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74  ename: {.  sqlit
298a0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
298b0 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20    Mem *pName;.. 
298c0 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
298d0 2e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20  .pVtab;.  pName 
298e0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
298f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
29900 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
29910 52 65 6e 61 6d 65 20 29 3b 0a 20 20 52 45 47 49  Rename );.  REGI
29920 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
29930 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73  p1, pName);.  as
29940 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61  sert( pName->fla
29950 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a  gs & MEM_Str );.
29960 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
29970 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
29980 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
29990 69 73 75 73 65 3b 0a 20 20 73 71 6c 69 74 65 33  isuse;.  sqlite3
299a0 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b  VtabLock(pVtab);
299b0 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70  .  rc = pVtab->p
299c0 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28  Module->xRename(
299d0 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29  pVtab, pName->z)
299e0 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
299f0 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
29a00 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  );.  p->zErrMsg 
29a10 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
29a20 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
29a30 73 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  sg = 0;.  sqlite
29a40 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20  3VtabUnlock(db, 
29a50 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 71  pVtab);.  if( sq
29a60 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
29a70 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
29a80 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20  ue_to_misuse;.. 
29a90 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
29aa0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
29ab0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
29ac0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
29ad0 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
29ae0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
29af0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
29b00 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
29b10 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
29b20 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
29b30 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
29b40 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
29b50 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65  sponding xUpdate
29b60 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75   method. P2 valu
29b70 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67  es.** are contig
29b80 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  uous memory cell
29b90 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33  s starting at P3
29ba0 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20   to pass to the 
29bb0 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f  xUpdate .** invo
29bc0 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  cation. The valu
29bd0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50  e in register (P
29be0 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f  3+P2-1) correspo
29bf0 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70  nds to the .** p
29c00 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  2th element of t
29c10 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61  he argv array pa
29c20 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e  ssed to xUpdate.
29c30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61  .**.** The xUpda
29c40 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64  te method will d
29c50 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e  o a DELETE or an
29c60 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e   INSERT or both.
29c70 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20  .** The argv[0] 
29c80 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63  element (which c
29c90 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65  orresponds to me
29ca0 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a  mory cell P3).**
29cb0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
29cc0 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
29cd0 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73  .  If argv[0] is
29ce0 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a   NULL then no .*
29cf0 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72  * deletion occur
29d00 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20  s.  The argv[1] 
29d10 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72  element is the r
29d20 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20  owid of the new 
29d30 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63  .** row.  This c
29d40 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61  an be NULL to ha
29d50 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ve the virtual t
29d60 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20  able select the 
29d70 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f  new .** rowid fo
29d80 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73  r itself.  The s
29d90 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e  ubsequent elemen
29da0 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20  ts in the array 
29db0 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  are .** the valu
29dc0 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  es of columns in
29dd0 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a   the new row..**
29de0 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65  .** If P2==1 the
29df0 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70  n no insert is p
29e00 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b  erformed.  argv[
29e10 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  0] is the rowid 
29e20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64  of.** a row to d
29e30 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  elete..**.** P1 
29e40 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61  is a boolean fla
29e50 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20  g. If it is set 
29e60 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20  to true and the 
29e70 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20  xUpdate call.** 
29e80 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  is successful, t
29e90 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65  hen the value re
29ea0 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
29eb0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
29ec0 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74  wid() .** is set
29ed0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
29ee0 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74   the rowid for t
29ef0 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65  he row just inse
29f00 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rted..*/.case OP
29f10 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71  _VUpdate: {.  sq
29f20 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
29f30 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
29f40 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
29f50 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
29f60 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36  i;.  sqlite_int6
29f70 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a  4 rowid;.  Mem *
29f80 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70  *apArg;.  Mem *p
29f90 58 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f  X;..  pVtab = pO
29fa0 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 70  p->p4.pVtab;.  p
29fb0 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65  Module = (sqlite
29fc0 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62  3_module *)pVtab
29fd0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72  ->pModule;.  nAr
29fe0 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  g = pOp->p2;.  a
29ff0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2a000 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20  pe==P4_VTAB );. 
2a010 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64   if( ALWAYS(pMod
2a020 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b  ule->xUpdate) ){
2a030 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  .    apArg = p->
2a040 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20  apArg;.    pX = 
2a050 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
2a060 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  ];.    for(i=0; 
2a070 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2a080 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66      storeTypeInf
2a090 6f 28 70 58 2c 20 30 29 3b 0a 20 20 20 20 20 20  o(pX, 0);.      
2a0a0 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20  apArg[i] = pX;. 
2a0b0 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d       pX++;.    }
2a0c0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
2a0d0 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
2a0e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a0f0 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 73 71  o_misuse;.    sq
2a100 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 70 56  lite3VtabLock(pV
2a110 74 61 62 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  tab);.    rc = p
2a120 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28  Module->xUpdate(
2a130 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41  pVtab, nArg, apA
2a140 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  rg, &rowid);.   
2a150 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
2a160 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
2a170 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
2a180 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b   pVtab->zErrMsg;
2a190 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  .    pVtab->zErr
2a1a0 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  Msg = 0;.    sql
2a1b0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64  ite3VtabUnlock(d
2a1c0 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  b, pVtab);.    i
2a1d0 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
2a1e0 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  On(db) ) goto ab
2a1f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
2a200 65 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  e;.    if( rc==S
2a210 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d  QLITE_OK && pOp-
2a220 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73  >p1 ){.      ass
2a230 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61  ert( nArg>1 && a
2a240 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72  pArg[0] && (apAr
2a250 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  g[0]->flags&MEM_
2a260 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64  Null) );.      d
2a270 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 72  b->lastRowid = r
2a280 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20  owid;.    }.    
2a290 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
2a2a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2a2b0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2a2c0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2a2d0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c  */..#ifndef  SQL
2a2e0 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
2a2f0 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65  RAGMAS./* Opcode
2a300 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50  : Pagecount P1 P
2a310 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
2a320 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ite the current 
2a330 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
2a340 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74  in database P1 t
2a350 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32  o memory cell P2
2a360 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67  ..*/.case OP_Pag
2a370 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  ecount: {       
2a380 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
2a390 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
2a3a0 20 70 31 3b 0a 20 20 69 6e 74 20 6e 50 61 67 65   p1;.  int nPage
2a3b0 3b 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65  ;.  Pager *pPage
2a3c0 72 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  r;..  p1 = pOp->
2a3d0 70 31 3b 20 0a 20 20 70 50 61 67 65 72 20 3d 20  p1; .  pPager = 
2a3e0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
2a3f0 72 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42  r(db->aDb[p1].pB
2a400 74 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  t);.  rc = sqlit
2a410 65 33 50 61 67 65 72 50 61 67 65 63 6f 75 6e 74  e3PagerPagecount
2a420 28 70 50 61 67 65 72 2c 20 26 6e 50 61 67 65 29  (pPager, &nPage)
2a430 3b 0a 20 20 2f 2a 20 4f 50 5f 50 61 67 65 63 6f  ;.  /* OP_Pageco
2a440 75 6e 74 20 69 73 20 61 6c 77 61 79 73 20 63 61  unt is always ca
2a450 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
2a460 20 61 20 72 65 61 64 20 74 72 61 6e 73 61 63 74   a read transact
2a470 69 6f 6e 2e 20 20 54 68 65 0a 20 20 2a 2a 20 70  ion.  The.  ** p
2a480 61 67 65 20 63 6f 75 6e 74 20 68 61 73 20 61 6c  age count has al
2a490 72 65 61 64 79 20 62 65 65 6e 20 73 75 63 63 65  ready been succe
2a4a0 73 73 66 75 6c 6c 79 20 72 65 61 64 20 61 6e 64  ssfully read and
2a4b0 20 63 61 63 68 65 64 2e 20 20 53 6f 20 74 68 65   cached.  So the
2a4c0 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 50 61 67  .  ** sqlite3Pag
2a4d0 65 72 50 61 67 65 63 6f 75 6e 74 28 29 20 63 61  erPagecount() ca
2a4e0 6c 6c 20 61 62 6f 76 65 20 63 61 6e 6e 6f 74 20  ll above cannot 
2a4f0 66 61 69 6c 2e 20 2a 2f 0a 20 20 69 66 28 20 41  fail. */.  if( A
2a500 4c 57 41 59 53 28 72 63 3d 3d 53 51 4c 49 54 45  LWAYS(rc==SQLITE
2a510 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 70 4f 75 74  _OK) ){.    pOut
2a520 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
2a530 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
2a540 20 3d 20 6e 50 61 67 65 3b 0a 20 20 7d 0a 20 20   = nPage;.  }.  
2a550 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2a560 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a570 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70  OMIT_TRACE./* Op
2a580 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20  code: Trace * * 
2a590 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  * P4 *.**.** If 
2a5a0 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c  tracing is enabl
2a5b0 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69 74  ed (by the sqlit
2a5c0 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65  e3_trace()) inte
2a5d0 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74  rface, then.** t
2a5e0 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  he UTF-8 string 
2a5f0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20  contained in P4 
2a600 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68  is emitted on th
2a610 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
2a620 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61  ..*/.case OP_Tra
2a630 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54  ce: {.  char *zT
2a640 72 61 63 65 3b 0a 0a 20 20 7a 54 72 61 63 65 20  race;..  zTrace 
2a650 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
2a660 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
2a670 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63  ql);.  if( zTrac
2a680 65 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  e ){.    if( db-
2a690 3e 78 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20  >xTrace ){.     
2a6a0 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e   db->xTrace(db->
2a6b0 70 54 72 61 63 65 41 72 67 2c 20 7a 54 72 61 63  pTraceArg, zTrac
2a6c0 65 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66  e);.    }.#ifdef
2a6d0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2a6e0 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73    if( (db->flags
2a6f0 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61   & SQLITE_SqlTra
2a700 63 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ce)!=0 ){.      
2a710 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
2a720 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25  tf("SQL-trace: %
2a730 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20  s\n", zTrace);. 
2a740 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
2a750 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20  QLITE_DEBUG */. 
2a760 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2a770 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ndif.../* Opcode
2a780 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a  : Noop * * * * *
2a790 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e  .**.** Do nothin
2a7a0 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63  g.  This instruc
2a7b0 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73  tion is often us
2a7c0 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a  eful as a jump.*
2a7d0 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a  * destination..*
2a7e0 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69  /./*.** The magi
2a7f0 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65  c Explain opcode
2a800 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74   are only insert
2a810 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d  ed when explain=
2a820 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20  =2 (which.** is 
2a830 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20  to say when the 
2a840 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
2a850 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65  AN syntax is use
2a860 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  d.).** This opco
2a870 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72  de records infor
2a880 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  mation from the 
2a890 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69  optimizer.  It i
2a8a0 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d  s the.** the sam
2a8b0 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54  e as a no-op.  T
2a8c0 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72  his opcodesnever
2a8d0 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65   appears in a re
2a8e0 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a  al VM program..*
2a8f0 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20  /.default: {    
2a900 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
2a910 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20   really OP_Noop 
2a920 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a  and OP_Explain *
2a930 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  /.  break;.}../*
2a940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
2a990 54 68 65 20 63 61 73 65 73 20 6f 66 20 74 68 65  The cases of the
2a9a0 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
2a9b0 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e  t above this lin
2a9c0 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20  e should all be 
2a9d0 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36  indented.** by 6
2a9e0 20 73 70 61 63 65 73 2e 20 20 42 75 74 20 74 68   spaces.  But th
2a9f0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70  e left-most 6 sp
2aa00 61 63 65 73 20 68 61 76 65 20 62 65 65 6e 20 72  aces have been r
2aa10 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76  emoved to improv
2aa20 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69  e the.** readabi
2aa30 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73  lity.  From this
2aa40 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20   point on down, 
2aa50 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e  the normal inden
2aa60 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65  tation rules are
2aa70 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a  .** restored..**
2aa80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aa90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aaa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aac0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20  ***********/.   
2aad0 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f   }..#ifdef VDBE_
2aae0 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20  PROFILE.    {.  
2aaf0 20 20 20 20 75 36 34 20 65 6c 61 70 73 65 64 20      u64 elapsed 
2ab00 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
2ab10 29 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20  ) - start;.     
2ab20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20   pOp->cycles += 
2ab30 65 6c 61 70 73 65 64 3b 0a 20 20 20 20 20 20 70  elapsed;.      p
2ab40 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30  Op->cnt++;.#if 0
2ab50 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66  .        fprintf
2ab60 28 73 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75  (stdout, "%10llu
2ab70 20 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20 20   ", elapsed);.  
2ab80 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2ab90 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
2aba0 20 6f 72 69 67 50 63 2c 20 26 70 2d 3e 61 4f 70   origPc, &p->aOp
2abb0 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69  [origPc]);.#endi
2abc0 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  f.    }.#endif..
2abd0 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
2abe0 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e  wing code adds n
2abf0 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63  othing to the ac
2ac00 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69  tual functionali
2ac10 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ty.    ** of the
2ac20 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73   program.  It is
2ac30 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74   only here for t
2ac40 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67  esting and debug
2ac50 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20  ging..    ** On 
2ac60 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20  the other hand, 
2ac70 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55  it does burn CPU
2ac80 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69   cycles every ti
2ac90 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a  me through.    *
2aca0 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20  * the evaluator 
2acb0 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e  loop.  So we can
2acc0 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68   leave it out wh
2acd0 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66  en NDEBUG is def
2ace0 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
2acf0 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20  ndef NDEBUG.    
2ad00 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26  assert( pc>=-1 &
2ad10 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a  & pc<p->nOp );..
2ad20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2ad30 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74  BUG.    if( p->t
2ad40 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66  race ){.      if
2ad50 28 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74  ( rc!=0 ) fprint
2ad60 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25  f(p->trace,"rc=%
2ad70 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20  d\n",rc);.      
2ad80 69 66 28 20 6f 70 50 72 6f 70 65 72 74 79 20 26  if( opProperty &
2ad90 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52   OPFLG_OUT2_PRER
2ada0 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
2adb0 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28    registerTrace(
2adc0 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70  p->trace, pOp->p
2add0 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  2, pOut);.      
2ade0 7d 0a 20 20 20 20 20 20 69 66 28 20 6f 70 50 72  }.      if( opPr
2adf0 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f  operty & OPFLG_O
2ae00 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72  UT3 ){.        r
2ae10 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e  egisterTrace(p->
2ae20 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20  trace, pOp->p3, 
2ae30 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pOut);.      }. 
2ae40 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20     }.#endif  /* 
2ae50 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
2ae60 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55  #endif  /* NDEBU
2ae70 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65  G */.  }  /* The
2ae80 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28   end of the for(
2ae90 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f  ;;) loop the loo
2aea0 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64  ps through opcod
2aeb0 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77  es */..  /* If w
2aec0 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  e reach this poi
2aed0 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  nt, it means tha
2aee0 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66  t execution is f
2aef0 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a  inished with.  *
2af00 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f  * an error of so
2af10 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64  me kind..  */.vd
2af20 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20  be_error_halt:. 
2af30 20 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20   assert( rc );. 
2af40 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73   p->rc = rc;.  s
2af50 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
2af60 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2af70 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20  ITE_IOERR_NOMEM 
2af80 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ) db->mallocFail
2af90 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53  ed = 1;.  rc = S
2afa0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 0a 20 20  QLITE_ERROR;..  
2afb0 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  /* This is the o
2afc0 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74  nly way out of t
2afd0 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20  his procedure.  
2afe0 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20  We have to.  ** 
2aff0 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65  release the mute
2b000 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68  xes on btrees th
2b010 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64  at were acquired
2b020 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70   at the.  ** top
2b030 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e  . */.vdbe_return
2b040 3a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  :.  sqlite3Btree
2b050 4d 75 74 65 78 41 72 72 61 79 4c 65 61 76 65 28  MutexArrayLeave(
2b060 26 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20 20 72  &p->aMutex);.  r
2b070 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20  eturn rc;..  /* 
2b080 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20  Jump to here if 
2b090 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
2b0a0 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c   larger than SQL
2b0b0 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20  ITE_MAX_LENGTH. 
2b0c0 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72   ** is encounter
2b0d0 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67  ed..  */.too_big
2b0e0 3a 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  :.  sqlite3SetSt
2b0f0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2b100 2c 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72  , db, "string or
2b110 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b   blob too big");
2b120 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54  .  rc = SQLITE_T
2b130 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64  OOBIG;.  goto vd
2b140 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
2b150 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
2b160 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  e if a malloc() 
2b170 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d  fails..  */.no_m
2b180 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63  em:.  db->malloc
2b190 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71  Failed = 1;.  sq
2b1a0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2b1b0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2b1c0 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29  "out of memory")
2b1d0 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
2b1e0 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64  NOMEM;.  goto vd
2b1f0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
2b200 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
2b210 65 20 66 6f 72 20 61 6e 20 53 51 4c 49 54 45 5f  e for an SQLITE_
2b220 4d 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 20 20  MISUSE error..  
2b230 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
2b240 6d 69 73 75 73 65 3a 0a 20 20 72 63 20 3d 20 53  misuse:.  rc = S
2b250 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
2b260 2f 2a 20 46 61 6c 6c 20 74 68 72 75 20 69 6e 74  /* Fall thru int
2b270 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2b280 72 72 6f 72 20 2a 2f 0a 0a 20 20 2f 2a 20 4a 75  rror */..  /* Ju
2b290 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61  mp to here for a
2b2a0 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66  ny other kind of
2b2b0 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54   fatal error.  T
2b2c0 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65  he "rc" variable
2b2d0 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c  .  ** should hol
2b2e0 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62  d the error numb
2b2f0 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  er..  */.abort_d
2b300 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61  ue_to_error:.  a
2b310 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73  ssert( p->zErrMs
2b320 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62  g==0 );.  if( db
2b330 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
2b340 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
2b350 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  EM;.  if( rc!=SQ
2b360 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
2b370 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
2b380 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2b390 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
2b3a0 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
2b3b0 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  ));.  }.  goto v
2b3c0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
2b3d0 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
2b3e0 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  re if the sqlite
2b3f0 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50  3_interrupt() AP
2b400 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72  I sets the inter
2b410 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a  rupt.  ** flag..
2b420 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
2b430 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61  o_interrupt:.  a
2b440 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73  ssert( db->u1.is
2b450 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20  Interrupted );. 
2b460 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
2b470 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20  ERRUPT;.  p->rc 
2b480 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53  = rc;.  sqlite3S
2b490 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2b4a0 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
2b4b0 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
2b4c0 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  ));.  goto vdbe_
2b4d0 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a        error_halt;.}.