/ Hex Artifact Content
Login

Artifact b7a27b4c3de1d2df80f3f9ee5a206c4af2abeb5a:


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 33 39 20 32 30 30 39  e.c,v 1.839 2009
0850: 2f 30 34 2f 32 32 20 31 37 3a 31 35 3a 30 33 20  /04/22 17:15:03 
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 2a 2f  Cursor     /* */
1b20: 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  .){.  /* Find th
1b30: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
1b40: 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  at will be used 
1b50: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f  to store the blo
1b60: 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a  b of memory.  **
1b70: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
1b80: 69 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  is VdbeCursor st
1b90: 72 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63  ructure. It is c
1ba0: 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65  onvenient to use
1bb0: 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65   a .  ** vdbe me
1bc0: 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e  mory cell to man
1bd0: 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61  age the memory a
1be0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72  llocation requir
1bf0: 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64  ed for a.  ** Vd
1c00: 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75  beCursor structu
1c10: 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f  re for the follo
1c20: 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20  wing reasons:.  
1c30: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65  **.  **   * Some
1c40: 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d  times cursor num
1c50: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
1c60: 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69  r a couple of di
1c70: 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20  fferent.  **    
1c80: 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76   purposes in a v
1c90: 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65  dbe program. The
1ca0: 20 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20   different uses 
1cb0: 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20  might require.  
1cc0: 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74  **     different
1cd0: 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f   sized allocatio
1ce0: 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73  ns. Memory cells
1cf0: 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c   provide growabl
1d00: 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63  e.  **     alloc
1d10: 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ations..  **.  *
1d20: 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67  *   * When using
1d30: 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d   ENABLE_MEMORY_M
1d40: 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72  ANAGEMENT, memor
1d50: 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63  y cell buffers c
1d60: 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66  an.  **     be f
1d70: 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20  reed lazily via 
1d80: 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65  the sqlite3_rele
1d90: 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49  ase_memory() API
1da0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20  . This.  **     
1db0: 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75  minimizes the nu
1dc0: 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63  mber of malloc c
1dd0: 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65  alls made by the
1de0: 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20   system..  **.  
1df0: 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  ** Memory cells 
1e00: 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72 65 20  for cursors are 
1e10: 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65  allocated at the
1e20: 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72   top of the addr
1e30: 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20  ess.  ** space. 
1e40: 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e  Memory cell (p->
1e50: 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64  nMem) correspond
1e60: 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53  s to cursor 0. S
1e70: 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75  pace for.  ** cu
1e80: 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65  rsor 1 is manage
1e90: 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  d by memory cell
1ea0: 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74   (p->nMem-1), et
1eb0: 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  c..  */.  Mem *p
1ec0: 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Mem = &p->aMem[p
1ed0: 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20  ->nMem-iCur];.. 
1ee0: 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64   int nByte;.  Vd
1ef0: 62 65 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20  beCursor *pCx = 
1f00: 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20  0;.  nByte = .  
1f10: 20 20 20 20 73 69 7a 65 6f 66 28 56 64 62 65 43      sizeof(VdbeC
1f20: 75 72 73 6f 72 29 20 2b 20 0a 20 20 20 20 20 20  ursor) + .      
1f30: 28 69 73 42 74 72 65 65 43 75 72 73 6f 72 3f 73  (isBtreeCursor?s
1f40: 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1f50: 72 53 69 7a 65 28 29 3a 30 29 20 2b 20 0a 20 20  rSize():0) + .  
1f60: 20 20 20 20 32 2a 6e 46 69 65 6c 64 2a 73 69 7a      2*nField*siz
1f70: 65 6f 66 28 75 33 32 29 3b 0a 0a 20 20 61 73 73  eof(u32);..  ass
1f80: 65 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75  ert( iCur<p->nCu
1f90: 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d  rsor );.  if( p-
1fa0: 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a  >apCsr[iCur] ){.
1fb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46      sqlite3VdbeF
1fc0: 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e  reeCursor(p, p->
1fd0: 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20  apCsr[iCur]);.  
1fe0: 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d    p->apCsr[iCur]
1ff0: 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
2000: 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74  SQLITE_OK==sqlit
2010: 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d  e3VdbeMemGrow(pM
2020: 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b  em, nByte, 0) ){
2030: 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43  .    p->apCsr[iC
2040: 75 72 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62  ur] = pCx = (Vdb
2050: 65 43 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a  eCursor*)pMem->z
2060: 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 4d 65  ;.    memset(pMe
2070: 6d 2d 3e 7a 2c 20 30 2c 20 6e 42 79 74 65 29 3b  m->z, 0, nByte);
2080: 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20  .    pCx->iDb = 
2090: 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46  iDb;.    pCx->nF
20a0: 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20  ield = nField;. 
20b0: 20 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b     if( nField ){
20c0: 0a 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70  .      pCx->aTyp
20d0: 65 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d  e = (u32 *)&pMem
20e0: 2d 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65 43  ->z[sizeof(VdbeC
20f0: 75 72 73 6f 72 29 5d 3b 0a 20 20 20 20 7d 0a 20  ursor)];.    }. 
2100: 20 20 20 69 66 28 20 69 73 42 74 72 65 65 43 75     if( isBtreeCu
2110: 72 73 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43  rsor ){.      pC
2120: 78 2d 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74  x->pCursor = (Bt
2130: 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20  Cursor*).       
2140: 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a 65     &pMem->z[size
2150: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 2b 32  of(VdbeCursor)+2
2160: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
2170: 33 32 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  32)];.    }.  }.
2180: 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a    return pCx;.}.
2190: 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f  ./*.** Try to co
21a0: 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e  nvert a value in
21b0: 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70  to a numeric rep
21c0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77  resentation if w
21d0: 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77  e can.** do so w
21e0: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
21f0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20  nformation.  In 
2200: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
2210: 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f  the string.** lo
2220: 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65  oks like a numbe
2230: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e  r, convert it in
2240: 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  to a number.  If
2250: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   it does not.** 
2260: 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62  look like a numb
2270: 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f  er, leave it alo
2280: 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ne..*/.static vo
2290: 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  id applyNumericA
22a0: 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65  ffinity(Mem *pRe
22b0: 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63 2d  c){.  if( (pRec-
22c0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52 65  >flags & (MEM_Re
22d0: 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20  al|MEM_Int))==0 
22e0: 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 61 6c 6e  ){.    int realn
22f0: 75 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  um;.    sqlite3V
2300: 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61  dbeMemNulTermina
2310: 74 65 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66  te(pRec);.    if
2320: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ( (pRec->flags&M
2330: 45 4d 5f 53 74 72 29 0a 20 20 20 20 20 20 20 20  EM_Str).        
2340: 20 26 26 20 73 71 6c 69 74 65 33 49 73 4e 75 6d   && sqlite3IsNum
2350: 62 65 72 28 70 52 65 63 2d 3e 7a 2c 20 26 72 65  ber(pRec->z, &re
2360: 61 6c 6e 75 6d 2c 20 70 52 65 63 2d 3e 65 6e 63  alnum, pRec->enc
2370: 29 20 29 7b 0a 20 20 20 20 20 20 69 36 34 20 76  ) ){.      i64 v
2380: 61 6c 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  alue;.      sqli
2390: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
23a0: 6f 64 69 6e 67 28 70 52 65 63 2c 20 53 51 4c 49  oding(pRec, SQLI
23b0: 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 20 20  TE_UTF8);.      
23c0: 69 66 28 20 21 72 65 61 6c 6e 75 6d 20 26 26 20  if( !realnum && 
23d0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52  sqlite3Atoi64(pR
23e0: 65 63 2d 3e 7a 2c 20 26 76 61 6c 75 65 29 20 29  ec->z, &value) )
23f0: 7b 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e  {.        pRec->
2400: 75 2e 69 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20  u.i = value;.   
2410: 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
2420: 6c 61 67 28 70 52 65 63 2c 20 4d 45 4d 5f 49 6e  lag(pRec, MEM_In
2430: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
2440: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2450: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
2460: 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Rec);.      }.  
2470: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
2480: 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64   Processing is d
2490: 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20  etermine by the 
24a0: 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74  affinity paramet
24b0: 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  er:.**.** SQLITE
24c0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a  _AFF_INTEGER:.**
24d0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
24e0: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
24f0: 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54  NUMERIC:.**    T
2500: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52  ry to convert pR
2510: 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ec to an integer
2520: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2530: 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61  or a .**    floa
2540: 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65  ting-point repre
2550: 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20  sentation if an 
2560: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2570: 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20  tation.**    is 
2580: 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e  not possible.  N
2590: 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e 74  ote that the int
25a0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
25b0: 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77  ion is.**    alw
25c0: 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20 65  ays preferred, e
25d0: 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e  ven if the affin
25e0: 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63  ity is REAL, bec
25f0: 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e  ause.**    an in
2600: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2610: 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61  tion is more spa
2620: 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20  ce efficient on 
2630: 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  disk..**.** SQLI
2640: 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20  TE_AFF_TEXT:.** 
2650: 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20     Convert pRec 
2660: 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65 73  to a text repres
2670: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
2680: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a  SQLITE_AFF_NONE:
2690: 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70  .**    No-op.  p
26a0: 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64  Rec is unchanged
26b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
26c0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a   applyAffinity(.
26d0: 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20    Mem *pRec,    
26e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c        /* The val
26f0: 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69  ue to apply affi
2700: 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61  nity to */.  cha
2710: 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20  r affinity,     
2720: 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
2730: 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a   to be applied *
2740: 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20 20  /.  u8 enc      
2750: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
2760: 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  his text encodin
2770: 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66  g */.){.  if( af
2780: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2790: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f  FF_TEXT ){.    /
27a0: 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74  * Only attempt t
27b0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f  he conversion to
27c0: 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69   TEXT if there i
27d0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  s an integer or 
27e0: 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72  real.    ** repr
27f0: 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62  esentation (blob
2800: 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74   and NULL do not
2810: 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20   get converted) 
2820: 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20  but no string.  
2830: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2840: 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ion..    */.    
2850: 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c  if( 0==(pRec->fl
2860: 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20  ags&MEM_Str) && 
2870: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45  (pRec->flags&(ME
2880: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29  M_Real|MEM_Int))
2890: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
28a0: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
28b0: 79 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20  y(pRec, enc);.  
28c0: 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c    }.    pRec->fl
28d0: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61  ags &= ~(MEM_Rea
28e0: 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65  l|MEM_Int);.  }e
28f0: 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79  lse if( affinity
2900: 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  !=SQLITE_AFF_NON
2910: 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  E ){.    assert(
2920: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2930: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c  E_AFF_INTEGER ||
2940: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2950: 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20  E_AFF_REAL.     
2960: 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e          || affin
2970: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2980: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 61  NUMERIC );.    a
2990: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
29a0: 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69  ity(pRec);.    i
29b0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
29c0: 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20   MEM_Real ){.   
29d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
29e0: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
29f0: 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  ec);.    }.  }.}
2a00: 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63  ../*.** Try to c
2a10: 6f 6e 76 65 72 74 20 74 68 65 20 74 79 70 65 20  onvert the type 
2a20: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72  of a function ar
2a30: 67 75 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75  gument or a resu
2a40: 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74  lt column.** int
2a50: 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72  o a numeric repr
2a60: 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65  esentation.  Use
2a70: 20 65 69 74 68 65 72 20 49 4e 54 45 47 45 52 20   either INTEGER 
2a80: 6f 72 20 52 45 41 4c 20 77 68 69 63 68 65 76 65  or REAL whicheve
2a90: 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69  r.** is appropri
2aa0: 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64  ate.  But only d
2ab0: 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  o the conversion
2ac0: 20 69 66 20 69 74 20 69 73 20 70 6f 73 73 69 62   if it is possib
2ad0: 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f  le without.** lo
2ae0: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2af0: 6e 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65  n and return the
2b00: 20 72 65 76 69 73 65 64 20 74 79 70 65 20 6f 66   revised type of
2b10: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a   the argument..*
2b20: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20  *.** This is an 
2b30: 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 61 70 69  EXPERIMENTAL api
2b40: 20 61 6e 64 20 69 73 20 73 75 62 6a 65 63 74 20   and is subject 
2b50: 74 6f 20 63 68 61 6e 67 65 20 6f 72 20 72 65 6d  to change or rem
2b60: 6f 76 61 6c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oval..*/.int sql
2b70: 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72  ite3_value_numer
2b80: 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f  ic_type(sqlite3_
2b90: 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20  value *pVal){.  
2ba0: 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d  Mem *pMem = (Mem
2bb0: 2a 29 70 56 61 6c 3b 0a 20 20 61 70 70 6c 79 4e  *)pVal;.  applyN
2bc0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
2bd0: 4d 65 6d 29 3b 0a 20 20 73 74 6f 72 65 54 79 70  Mem);.  storeTyp
2be0: 65 49 6e 66 6f 28 70 4d 65 6d 2c 20 30 29 3b 0a  eInfo(pMem, 0);.
2bf0: 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74    return pMem->t
2c00: 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78  ype;.}../*.** Ex
2c10: 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 20 6f  ported version o
2c20: 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  f applyAffinity(
2c30: 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b  ). This one work
2c40: 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c  s on sqlite3_val
2c50: 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65  ue*, .** not the
2c60: 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74   internal Mem* t
2c70: 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ype..*/.void sql
2c80: 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
2c90: 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69 74 65  finity(.  sqlite
2ca0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a  3_value *pVal, .
2cb0: 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c 20 0a    u8 affinity, .
2cc0: 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70    u8 enc.){.  ap
2cd0: 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d 65 6d  plyAffinity((Mem
2ce0: 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e 69 74   *)pVal, affinit
2cf0: 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64  y, enc);.}..#ifd
2d00: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2d10: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
2d20: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
2d30: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
2d40: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
2d50: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
2d60: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
2d70: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
2d80: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
2d90: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
2da0: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
2db0: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
2dc0: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
2dd0: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
2de0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
2df0: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
2e00: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
2e10: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
2e20: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
2e30: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
2e40: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
2e50: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
2e60: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
2e70: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
2e80: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
2e90: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
2ea0: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
2eb0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
2ec0: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
2ed0: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
2ee0: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
2ef0: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
2f00: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2f10: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
2f20: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
2f30: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
2f40: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2f50: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
2f60: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
2f70: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
2f80: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
2f90: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
2fa0: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
2fb0: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
2fc0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2fd0: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
2fe0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
2ff0: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
3000: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
3010: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3020: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
3030: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
3040: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3050: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
3060: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3070: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
3080: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3090: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
30a0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
30b0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
30c0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
30d0: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
30e0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
30f0: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
3100: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
3110: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
3120: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
3130: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
3140: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3150: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3160: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
3170: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3180: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3190: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
31a0: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
31b0: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
31c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
31d0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
31e0: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
31f0: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
3200: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3210: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3220: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
3230: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
3240: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
3250: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
3260: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
3270: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
3280: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3290: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
32a0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
32b0: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
32c0: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
32d0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
32e0: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
32f0: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3300: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3310: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3320: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3330: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3340: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3350: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3360: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3370: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3380: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3390: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
33a0: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
33b0: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
33c0: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
33d0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
33e0: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
33f0: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3400: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3410: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3420: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
3430: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
3440: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
3450: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
3460: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
3470: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
3480: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3490: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
34a0: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
34b0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
34c0: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
34d0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
34e0: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
34f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3500: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3510: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3520: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3530: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3540: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3550: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3560: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3570: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3580: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3590: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
35a0: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
35b0: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
35c0: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
35d0: 72 61 63 65 50 72 69 6e 74 28 46 49 4c 45 20 2a  racePrint(FILE *
35e0: 6f 75 74 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  out, Mem *p){.  
35f0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3600: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 66  EM_Null ){.    f
3610: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e 55  printf(out, " NU
3620: 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  LL");.  }else if
3630: 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d  ( (p->flags & (M
3640: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29  EM_Int|MEM_Str))
3650: 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53  ==(MEM_Int|MEM_S
3660: 74 72 29 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  tr) ){.    fprin
3670: 74 66 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c 6c  tf(out, " si:%ll
3680: 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d  d", p->u.i);.  }
3690: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
36a0: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  s & MEM_Int ){. 
36b0: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
36c0: 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e  " i:%lld", p->u.
36d0: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
36e0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
36f0: 65 61 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  eal ){.    fprin
3700: 74 66 28 6f 75 74 2c 20 22 20 72 3a 25 67 22 2c  tf(out, " r:%g",
3710: 20 70 2d 3e 72 29 3b 0a 20 20 7d 65 6c 73 65 20   p->r);.  }else 
3720: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3730: 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20 20  EM_RowSet ){.   
3740: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20   fprintf(out, " 
3750: 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65  (rowset)");.  }e
3760: 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42  lse{.    char zB
3770: 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c  uf[200];.    sql
3780: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
3790: 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b  yPrint(p, zBuf);
37a0: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74  .    fprintf(out
37b0: 2c 20 22 20 22 29 3b 0a 20 20 20 20 66 70 72 69  , " ");.    fpri
37c0: 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a  ntf(out, "%s", z
37d0: 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74  Buf);.  }.}.stat
37e0: 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72  ic void register
37f0: 54 72 61 63 65 28 46 49 4c 45 20 2a 6f 75 74 2c  Trace(FILE *out,
3800: 20 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a   int iReg, Mem *
3810: 70 29 7b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75  p){.  fprintf(ou
3820: 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c  t, "REG[%d] = ",
3830: 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61   iReg);.  memTra
3840: 63 65 50 72 69 6e 74 28 6f 75 74 2c 20 70 29 3b  cePrint(out, p);
3850: 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20  .  fprintf(out, 
3860: 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  "\n");.}.#endif.
3870: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
3880: 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52  EBUG.#  define R
3890: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c  EGISTER_TRACE(R,
38a0: 4d 29 20 69 66 28 70 2d 3e 74 72 61 63 65 29 72  M) if(p->trace)r
38b0: 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e  egisterTrace(p->
38c0: 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65 6c 73 65  trace,R,M).#else
38d0: 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53  .#  define REGIS
38e0: 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23  TER_TRACE(R,M).#
38f0: 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56  endif...#ifdef V
3900: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20  DBE_PROFILE../* 
3910: 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e  .** hwtime.h con
3920: 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73  tains inline ass
3930: 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20  embler code for 
3940: 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a  implementing .**
3950: 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63   high-performanc
3960: 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65  e timing routine
3970: 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  s..*/.#include "
3980: 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69  hwtime.h"..#endi
3990: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48 45  f../*.** The CHE
39a0: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
39b0: 20 6d 61 63 72 6f 20 64 65 66 69 6e 65 64 20 68   macro defined h
39c0: 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65 65  ere looks to see
39d0: 20 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   if the.** sqlit
39e0: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 72  e3_interrupt() r
39f0: 6f 75 74 69 6e 65 20 68 61 73 20 62 65 65 6e 20  outine has been 
3a00: 63 61 6c 6c 65 64 2e 20 20 49 66 20 69 74 20 68  called.  If it h
3a10: 61 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a 2a  as been, then.**
3a20: 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 74   processing of t
3a30: 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20  he VDBE program 
3a40: 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 2e 0a  is interrupted..
3a50: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f  **.** This macro
3a60: 20 61 64 64 65 64 20 74 6f 20 65 76 65 72 79 20   added to every 
3a70: 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 61 74  instruction that
3a80: 20 64 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e 20   does a jump in 
3a90: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70 6c  order to.** impl
3aa0: 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20 54  ement a loop.  T
3ab0: 68 69 73 20 74 65 73 74 20 75 73 65 64 20 74 6f  his test used to
3ac0: 20 62 65 20 6f 6e 20 65 76 65 72 79 20 73 69 6e   be on every sin
3ad0: 67 6c 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c  gle instruction,
3ae0: 0a 2a 2a 20 62 75 74 20 74 68 61 74 20 6d 65 61  .** but that mea
3af0: 6e 74 20 77 65 20 6d 6f 72 65 20 74 65 73 74 69  nt we more testi
3b00: 6e 67 20 74 68 61 74 20 77 65 20 6e 65 65 64 65  ng that we neede
3b10: 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65 73 74  d.  By only test
3b20: 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67 20  ing the.** flag 
3b30: 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75 63 74  on jump instruct
3b40: 69 6f 6e 73 2c 20 77 65 20 67 65 74 20 61 20 28  ions, we get a (
3b50: 73 6d 61 6c 6c 29 20 73 70 65 65 64 20 69 6d 70  small) speed imp
3b60: 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64 65  rovement..*/.#de
3b70: 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49  fine CHECK_FOR_I
3b80: 4e 54 45 52 52 55 50 54 20 5c 0a 20 20 20 69 66  NTERRUPT \.   if
3b90: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
3ba0: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
3bb0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
3bc0: 72 75 70 74 3b 0a 0a 23 69 66 64 65 66 20 53 51  rupt;..#ifdef SQ
3bd0: 4c 49 54 45 5f 44 45 42 55 47 0a 73 74 61 74 69  LITE_DEBUG.stati
3be0: 63 20 69 6e 74 20 66 69 6c 65 45 78 69 73 74 73  c int fileExists
3bf0: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f  (sqlite3 *db, co
3c00: 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 29  nst char *zFile)
3c10: 7b 0a 20 20 69 6e 74 20 72 65 73 20 3d 20 30 3b  {.  int res = 0;
3c20: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
3c30: 54 45 5f 4f 4b 3b 0a 23 69 66 64 65 66 20 53 51  TE_OK;.#ifdef SQ
3c40: 4c 49 54 45 5f 54 45 53 54 0a 20 20 2f 2a 20 49  LITE_TEST.  /* I
3c50: 66 20 77 65 20 61 72 65 20 63 75 72 72 65 6e 74  f we are current
3c60: 6c 79 20 74 65 73 74 69 6e 67 20 49 4f 20 65 72  ly testing IO er
3c70: 72 6f 72 73 2c 20 74 68 65 6e 20 64 6f 20 6e 6f  rors, then do no
3c80: 74 20 63 61 6c 6c 20 4f 73 41 63 63 65 73 73 28  t call OsAccess(
3c90: 29 20 74 6f 0a 20 20 2a 2a 20 74 65 73 74 20 66  ) to.  ** test f
3ca0: 6f 72 20 74 68 65 20 70 72 65 73 65 6e 63 65 20  or the presence 
3cb0: 6f 66 20 7a 46 69 6c 65 2e 20 54 68 69 73 20 69  of zFile. This i
3cc0: 73 20 62 65 63 61 75 73 65 20 61 6e 79 20 49 4f  s because any IO
3cd0: 20 65 72 72 6f 72 20 74 68 61 74 0a 20 20 2a 2a   error that.  **
3ce0: 20 6f 63 63 75 72 73 20 68 65 72 65 20 77 69 6c   occurs here wil
3cf0: 6c 20 6e 6f 74 20 62 65 20 72 65 70 6f 72 74 65  l not be reporte
3d00: 64 2c 20 63 61 75 73 69 6e 67 20 74 68 65 20 74  d, causing the t
3d10: 65 73 74 20 74 6f 20 66 61 69 6c 2e 0a 20 20 2a  est to fail..  *
3d20: 2f 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  /.  extern int s
3d30: 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72 6f 72 5f  qlite3_io_error_
3d40: 70 65 6e 64 69 6e 67 3b 0a 20 20 69 66 28 20 73  pending;.  if( s
3d50: 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72 6f 72 5f  qlite3_io_error_
3d60: 70 65 6e 64 69 6e 67 3c 3d 30 20 29 0a 23 65 6e  pending<=0 ).#en
3d70: 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  dif.    rc = sql
3d80: 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d  ite3OsAccess(db-
3d90: 3e 70 56 66 73 2c 20 7a 46 69 6c 65 2c 20 53 51  >pVfs, zFile, SQ
3da0: 4c 49 54 45 5f 41 43 43 45 53 53 5f 45 58 49 53  LITE_ACCESS_EXIS
3db0: 54 53 2c 20 26 72 65 73 29 3b 0a 20 20 72 65 74  TS, &res);.  ret
3dc0: 75 72 6e 20 28 72 65 73 20 26 26 20 72 63 3d 3d  urn (res && rc==
3dd0: 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d 0a 23 65  SQLITE_OK);.}.#e
3de0: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44  ndif..#ifndef ND
3df0: 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  EBUG./*.** This 
3e00: 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  function is only
3e10: 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
3e20: 68 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20  hin an assert() 
3e30: 65 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a  expression. It.*
3e40: 2a 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68  * checks that th
3e50: 65 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73  e sqlite3.nTrans
3e60: 61 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20  action variable 
3e70: 69 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74  is correctly set
3e80: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65   to.** the numbe
3e90: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
3ea0: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
3eb0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65  currently in the
3ec0: 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74   .** linked list
3ed0: 20 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c   starting at sql
3ee0: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
3ef0: 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a  .** .** Usage:.*
3f00: 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
3f10: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
3f20: 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73  ount(db) );.*/.s
3f30: 74 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53  tatic int checkS
3f40: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71  avepointCount(sq
3f50: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e  lite3 *db){.  in
3f60: 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70  t n = 0;.  Savep
3f70: 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70  oint *p;.  for(p
3f80: 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b  =db->pSavepoint;
3f90: 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20   p; p=p->pNext) 
3fa0: 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  n++;.  assert( n
3fb0: 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  ==(db->nSavepoin
3fc0: 74 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61  t + db->isTransa
3fd0: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20  ctionSavepoint) 
3fe0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d  );.  return 1;.}
3ff0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
4000: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
4010: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
4020: 20 61 73 20 77 65 20 63 61 6e 20 74 68 65 6e 20   as we can then 
4030: 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71  return..**.** sq
4040: 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65 61  lite3VdbeMakeRea
4050: 64 79 28 29 20 6d 75 73 74 20 62 65 20 63 61 6c  dy() must be cal
4060: 6c 65 64 20 62 65 66 6f 72 65 20 74 68 69 73 20  led before this 
4070: 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
4080: 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65   to.** close the
4090: 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20 61 20   program with a 
40a0: 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e  final OP_Halt an
40b0: 64 20 74 6f 20 73 65 74 20 75 70 20 74 68 65 20  d to set up the 
40c0: 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64  callbacks.** and
40d0: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
40e0: 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a  ge pointer..**.*
40f0: 2a 20 57 68 65 6e 65 76 65 72 20 61 20 72 6f 77  * Whenever a row
4100: 20 6f 72 20 72 65 73 75 6c 74 20 64 61 74 61 20   or result data 
4110: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 74 68  is available, th
4120: 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20  is routine will 
4130: 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65  either.** invoke
4140: 20 74 68 65 20 72 65 73 75 6c 74 20 63 61 6c 6c   the result call
4150: 62 61 63 6b 20 28 69 66 20 74 68 65 72 65 20 69  back (if there i
4160: 73 20 6f 6e 65 29 20 6f 72 20 72 65 74 75 72 6e  s one) or return
4170: 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f   with.** SQLITE_
4180: 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e  ROW..**.** If an
4190: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
41a0: 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65   to open a locke
41b0: 64 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  d database, then
41c0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a   this routine.**
41d0: 20 77 69 6c 6c 20 65 69 74 68 65 72 20 69 6e 76   will either inv
41e0: 6f 6b 65 20 74 68 65 20 62 75 73 79 20 63 61 6c  oke the busy cal
41f0: 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65 20  lback (if there 
4200: 69 73 20 6f 6e 65 29 20 6f 72 20 69 74 20 77 69  is one) or it wi
4210: 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c  ll.** return SQL
4220: 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20  ITE_BUSY..**.** 
4230: 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  If an error occu
4240: 72 73 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  rs, an error mes
4250: 73 61 67 65 20 69 73 20 77 72 69 74 74 65 6e 20  sage is written 
4260: 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  to memory obtain
4270: 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  ed.** from sqlit
4280: 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20  e3_malloc() and 
4290: 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73 20 6d 61  p->zErrMsg is ma
42a0: 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  de to point to t
42b0: 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54  hat memory..** T
42c0: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73  he error code is
42d0: 20 73 74 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63   stored in p->rc
42e0: 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e   and this routin
42f0: 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  e returns SQLITE
4300: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66  _ERROR..**.** If
4310: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 65 76   the callback ev
4320: 65 72 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  er returns non-z
4330: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 70 72  ero, then the pr
4340: 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69  ogram exits.** i
4350: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54 68 65  mmediately.  The
4360: 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72  re will be no er
4370: 72 6f 72 20 6d 65 73 73 61 67 65 20 62 75 74 20  ror message but 
4380: 74 68 65 20 70 2d 3e 72 63 20 66 69 65 6c 64 20  the p->rc field 
4390: 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c  is.** set to SQL
43a0: 49 54 45 5f 41 42 4f 52 54 20 61 6e 64 20 74 68  ITE_ABORT and th
43b0: 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20  is routine will 
43c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
43d0: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d  ROR..**.** A mem
43e0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65  ory allocation e
43f0: 72 72 6f 72 20 63 61 75 73 65 73 20 70 2d 3e 72  rror causes p->r
4400: 63 20 74 6f 20 62 65 20 73 65 74 20 74 6f 20 53  c to be set to S
4410: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20  QLITE_NOMEM and 
4420: 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20  this.** routine 
4430: 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  to return SQLITE
4440: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74  _ERROR..**.** Ot
4450: 68 65 72 20 66 61 74 61 6c 20 65 72 72 6f 72 73  her fatal errors
4460: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
4470: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65  RROR..**.** Afte
4480: 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 68  r this routine h
4490: 61 73 20 66 69 6e 69 73 68 65 64 2c 20 73 71 6c  as finished, sql
44a0: 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65  ite3VdbeFinalize
44b0: 28 29 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  () should be.** 
44c0: 75 73 65 64 20 74 6f 20 63 6c 65 61 6e 20 75 70  used to clean up
44d0: 20 74 68 65 20 6d 65 73 73 20 74 68 61 74 20 77   the mess that w
44e0: 61 73 20 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a  as left behind..
44f0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  */.int sqlite3Vd
4500: 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a  beExec(.  Vdbe *
4510: 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p               
4520: 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
4530: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3b   */.){.  int pc;
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4550: 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72      /* The progr
4560: 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  am counter */.  
4570: 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20  Op *pOp;        
4580: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
4590: 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrent operation 
45a0: 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  */.  int rc = SQ
45b0: 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
45c0: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
45d0: 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rn */.  sqlite3 
45e0: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20  *db = p->db;    
45f0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4600: 73 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  se */.  u8 encod
4610: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
4620: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4630: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  se encoding */. 
4640: 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20   Mem *pIn1 = 0; 
4650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
4660: 73 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  st input operand
4670: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20   */.  Mem *pIn2 
4680: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
4690: 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70   /* 2nd input op
46a0: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
46b0: 70 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn3 = 0;       
46c0: 20 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70        /* 3rd inp
46d0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
46e0: 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20  Mem *pOut = 0;  
46f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75             /* Ou
4700: 74 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  tput operand */.
4710: 20 20 75 38 20 6f 70 50 72 6f 70 65 72 74 79 3b    u8 opProperty;
4720: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4730: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4740: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4750: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4760: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  tion */.  int *a
4770: 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20  Permute = 0;    
4780: 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61 74       /* Permutat
4790: 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ion of columns f
47a0: 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f  or OP_Compare */
47b0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
47c0: 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74  FILE.  u64 start
47d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
47e0: 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63    /* CPU clock c
47f0: 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66  ount at start of
4800: 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74   opcode */.  int
4810: 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20 20 20   origPc;        
4820: 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72          /* Progr
4830: 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20 73 74  am counter at st
4840: 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f  art of opcode */
4850: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4860: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
4870: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
4880: 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  int nProgressOps
4890: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4f 70   = 0;      /* Op
48a0: 63 6f 64 65 73 20 65 78 65 63 75 74 65 64 20 73  codes executed s
48b0: 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20 63 61  ince progress ca
48c0: 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e 64 69  llback. */.#endi
48d0: 66 0a 0a 20 20 2f 2a 20 54 65 6d 70 6f 72 61 72  f..  /* Temporar
48e0: 79 20 73 70 61 63 65 20 69 6e 74 6f 20 77 68 69  y space into whi
48f0: 63 68 20 74 6f 20 75 6e 70 61 63 6b 20 61 20 72  ch to unpack a r
4900: 65 63 6f 72 64 2e 20 2a 2f 0a 20 20 63 68 61 72  ecord. */.  char
4910: 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38   aTempRec[ROUND8
4920: 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64  (sizeof(Unpacked
4930: 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f  Record)) + sizeo
4940: 66 28 4d 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a  f(Mem)*3 + 7];..
4950: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
4960: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
4970: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
4980: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
4990: 73 20 74 68 69 73 20 2a 2f 0a 20 20 61 73 73 65  s this */.  asse
49a0: 72 74 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d 53  rt( db->magic==S
49b0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
49c0: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
49d0: 65 4d 75 74 65 78 41 72 72 61 79 45 6e 74 65 72  eMutexArrayEnter
49e0: 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63  (p);.  if( p->rc
49f0: 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
4a00: 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
4a10: 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f  ppens if a mallo
4a20: 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c  c() inside a cal
4a30: 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c  l to sqlite3_col
4a40: 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20  umn_text() or.  
4a50: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c    ** sqlite3_col
4a60: 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69  umn_text16() fai
4a70: 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74  led.  */.    got
4a80: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
4a90: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53  assert( p->rc==S
4aa0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72  QLITE_OK || p->r
4ab0: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
4ac0: 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49  ;.  p->rc = SQLI
4ad0: 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28  TE_OK;.  assert(
4ae0: 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29   p->explain==0 )
4af0: 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  ;.  p->pResultSe
4b00: 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73  t = 0;.  db->bus
4b10: 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d  yHandler.nBusy =
4b20: 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f   0;.  CHECK_FOR_
4b30: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c  INTERRUPT;.  sql
4b40: 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
4b50: 71 6c 28 70 29 3b 0a 23 69 66 64 65 66 20 53 51  ql(p);.#ifdef SQ
4b60: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c  LITE_DEBUG.  sql
4b70: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4b80: 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70  alloc();.  if( p
4b90: 2d 3e 70 63 3d 3d 30 20 0a 20 20 20 26 26 20 28  ->pc==0 .   && (
4ba0: 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20  (p->db->flags & 
4bb0: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
4bc0: 6e 67 29 20 7c 7c 20 66 69 6c 65 45 78 69 73 74  ng) || fileExist
4bd0: 73 28 64 62 2c 20 22 76 64 62 65 5f 65 78 70 6c  s(db, "vdbe_expl
4be0: 61 69 6e 22 29 29 0a 20 20 29 7b 0a 20 20 20 20  ain")).  ){.    
4bf0: 69 6e 74 20 69 3b 0a 20 20 20 20 70 72 69 6e 74  int i;.    print
4c00: 66 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20  f("VDBE Program 
4c10: 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20  Listing:\n");.  
4c20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4c30: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f  ntSql(p);.    fo
4c40: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b  r(i=0; i<p->nOp;
4c50: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
4c60: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
4c70: 73 74 64 6f 75 74 2c 20 69 2c 20 26 70 2d 3e 61  stdout, i, &p->a
4c80: 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  Op[i]);.    }.  
4c90: 7d 0a 20 20 69 66 28 20 66 69 6c 65 45 78 69 73  }.  if( fileExis
4ca0: 74 73 28 64 62 2c 20 22 76 64 62 65 5f 74 72 61  ts(db, "vdbe_tra
4cb0: 63 65 22 29 20 29 7b 0a 20 20 20 20 70 2d 3e 74  ce") ){.    p->t
4cc0: 72 61 63 65 20 3d 20 73 74 64 6f 75 74 3b 0a 20  race = stdout;. 
4cd0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
4ce0: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
4cf0: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70  endif.  for(pc=p
4d00: 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45  ->pc; rc==SQLITE
4d10: 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20  _OK; pc++){.    
4d20: 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26  assert( pc>=0 &&
4d30: 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20   pc<p->nOp );.  
4d40: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
4d50: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
4d60: 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42  _mem;.#ifdef VDB
4d70: 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 6f 72  E_PROFILE.    or
4d80: 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20 20 73  igPc = pc;.    s
4d90: 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77  tart = sqlite3Hw
4da0: 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20  time();.#endif. 
4db0: 20 20 20 70 4f 70 20 3d 20 26 70 2d 3e 61 4f 70     pOp = &p->aOp
4dc0: 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e  [pc];..    /* On
4dd0: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
4de0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
4df0: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
4e00: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4e10: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
4e20: 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
4e30: 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20    if( pc==0 ){. 
4e40: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56         printf("V
4e50: 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54 72  DBE Execution Tr
4e60: 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ace:\n");.      
4e70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4e80: 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20 20  ntSql(p);.      
4e90: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
4ea0: 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72  dbePrintOp(p->tr
4eb0: 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20  ace, pc, pOp);. 
4ec0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e     }.    if( p->
4ed0: 74 72 61 63 65 3d 3d 30 20 26 26 20 70 63 3d 3d  trace==0 && pc==
4ee0: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
4ef0: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4f00: 6c 6f 63 28 29 3b 0a 20 20 20 20 20 20 69 66 28  loc();.      if(
4f10: 20 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c 20   fileExists(db, 
4f20: 22 76 64 62 65 5f 73 71 6c 74 72 61 63 65 22 29  "vdbe_sqltrace")
4f30: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
4f40: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4f50: 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p);.      }.    
4f60: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
4f70: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20  gnMalloc();.    
4f80: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a  }.#endif.      .
4f90: 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f  .    /* Check to
4fa0: 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64 20   see if we need 
4fb0: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
4fc0: 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73 20  nterrupt.  This 
4fd0: 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20  only happens.   
4fe0: 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20 61   ** if we have a
4ff0: 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62 75   special test bu
5000: 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ild..    */.#ifd
5010: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
5020: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
5030: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30  nterrupt_count>0
5040: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
5050: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
5060: 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73  t--;.      if( s
5070: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5080: 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  _count==0 ){.   
5090: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
50a0: 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20  errupt(db);.    
50b0: 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
50c0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
50d0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
50e0: 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f 2a 20 43  ALLBACK.    /* C
50f0: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
5100: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
5110: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
5120: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
5130: 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20 6f 66 20  umber.    ** of 
5140: 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62 65  VDBE ops have be
5150: 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69 74  en executed (eit
5160: 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20 69  her since this i
5170: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 20  nvocation of.   
5180: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
5190: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
51a0: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
51b0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
51c0: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 20 20  as called)..    
51d0: 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65  ** If the progre
51e0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75  ss callback retu
51f0: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78  rns non-zero, ex
5200: 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  it the virtual m
5210: 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 20 20  achine with.    
5220: 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65  ** a return code
5230: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20   SQLITE_ABORT.. 
5240: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62     */.    if( db
5250: 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  ->xProgress ){. 
5260: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 50 72       if( db->nPr
5270: 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50 72 6f 67  ogressOps==nProg
5280: 72 65 73 73 4f 70 73 20 29 7b 0a 20 20 20 20 20  ressOps ){.     
5290: 20 20 20 69 6e 74 20 70 72 63 3b 0a 20 20 20 20     int prc;.    
52a0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
52b0: 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
52c0: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
52d0: 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 20 20 20  _misuse;.       
52e0: 20 70 72 63 20 3d 64 62 2d 3e 78 50 72 6f 67 72   prc =db->xProgr
52f0: 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73  ess(db->pProgres
5300: 73 41 72 67 29 3b 0a 20 20 20 20 20 20 20 20 69  sArg);.        i
5310: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
5320: 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  On(db) ) goto ab
5330: 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
5340: 65 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  e;.        if( p
5350: 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  rc!=0 ){.       
5360: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
5370: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
5380: 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72      goto vdbe_er
5390: 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20  ror_halt;.      
53a0: 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 50 72 6f    }.        nPro
53b0: 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20  gressOps = 0;.  
53c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f      }.      nPro
53d0: 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20  gressOps++;.    
53e0: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
53f0: 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74 75 70   Do common setup
5400: 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
5410: 61 6e 79 20 6f 70 63 6f 64 65 20 74 68 61 74 20  any opcode that 
5420: 69 73 20 6d 61 72 6b 65 64 0a 20 20 20 20 2a 2a  is marked.    **
5430: 20 77 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d   with the "out2-
5440: 70 72 65 72 65 6c 65 61 73 65 22 20 74 61 67 2e  prerelease" tag.
5450: 20 20 53 75 63 68 20 6f 70 63 6f 64 65 73 20 68    Such opcodes h
5460: 61 76 65 20 61 20 73 69 6e 67 6c 65 0a 20 20 20  ave a single.   
5470: 20 2a 2a 20 6f 75 74 70 75 74 20 77 68 69 63 68   ** output which
5480: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 62 79   is specified by
5490: 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65   the P2 paramete
54a0: 72 2e 20 20 54 68 65 20 50 32 20 72 65 67 69 73  r.  The P2 regis
54b0: 74 65 72 0a 20 20 20 20 2a 2a 20 69 73 20 69 6e  ter.    ** is in
54c0: 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 61 20 4e  itialized to a N
54d0: 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ULL..    */.    
54e0: 6f 70 50 72 6f 70 65 72 74 79 20 3d 20 6f 70 63  opProperty = opc
54f0: 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d  odeProperty[pOp-
5500: 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20 20 69 66  >opcode];.    if
5510: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5520: 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45  OPFLG_OUT2_PRERE
5530: 4c 45 41 53 45 29 21 3d 30 20 29 7b 0a 20 20 20  LEASE)!=0 ){.   
5540: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5550: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
5560: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70  sert( pOp->p2<=p
5570: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
5580: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
5590: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20  pOp->p2];.      
55a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
55b0: 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70 4f  leaseExternal(pO
55c0: 75 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d  ut);.      pOut-
55d0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
55e0: 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 0a 20 0a 20  l;.    }else. . 
55f0: 20 20 20 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20     /* Do common 
5600: 73 65 74 75 70 20 66 6f 72 20 6f 70 63 6f 64 65  setup for opcode
5610: 73 20 6d 61 72 6b 65 64 20 77 69 74 68 20 6f 6e  s marked with on
5620: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
5630: 6e 67 0a 20 20 20 20 2a 2a 20 63 6f 6d 62 69 6e  ng.    ** combin
5640: 61 74 69 6f 6e 73 20 6f 66 20 70 72 6f 70 65 72  ations of proper
5650: 74 69 65 73 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ties..    **.   
5660: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e   **           in
5670: 31 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20  1.    **        
5680: 20 20 20 69 6e 31 20 69 6e 32 0a 20 20 20 20 2a     in1 in2.    *
5690: 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e 31 20  *           in1 
56a0: 69 6e 32 20 6f 75 74 33 0a 20 20 20 20 2a 2a 20  in2 out3.    ** 
56b0: 20 20 20 20 20 20 20 20 20 20 69 6e 31 20 69 6e            in1 in
56c0: 33 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  3.    **.    ** 
56d0: 56 61 72 69 61 62 6c 65 73 20 70 49 6e 31 2c 20  Variables pIn1, 
56e0: 70 49 6e 32 2c 20 61 6e 64 20 70 49 6e 33 20 61  pIn2, and pIn3 a
56f0: 72 65 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74  re made to point
5700: 20 74 6f 20 61 70 70 72 6f 70 72 69 61 74 65 0a   to appropriate.
5710: 20 20 20 20 2a 2a 20 72 65 67 69 73 74 65 72 73      ** registers
5720: 20 66 6f 72 20 69 6e 70 75 74 73 2e 20 20 56 61   for inputs.  Va
5730: 72 69 61 62 6c 65 20 70 4f 75 74 20 70 6f 69 6e  riable pOut poin
5740: 74 73 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  ts to the output
5750: 20 72 65 67 69 73 74 65 72 2e 0a 20 20 20 20 2a   register..    *
5760: 2f 0a 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f  /.    if( (opPro
5770: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
5780: 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  1)!=0 ){.      a
5790: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
57a0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
57b0: 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  ( pOp->p1<=p->nM
57c0: 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 31  em );.      pIn1
57d0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
57e0: 3e 70 31 5d 3b 0a 20 20 20 20 20 20 52 45 47 49  >p1];.      REGI
57f0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5800: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 20  p1, pIn1);.     
5810: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5820: 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30   & OPFLG_IN2)!=0
5830: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
5840: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5850: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5860: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5870: 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 49 6e  m );.        pIn
5880: 32 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  2 = &p->aMem[pOp
5890: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 52  ->p2];.        R
58a0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
58b0: 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b 0a 20 20  p->p2, pIn2);.  
58c0: 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f        if( (opPro
58d0: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55  perty & OPFLG_OU
58e0: 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T3)!=0 ){.      
58f0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5900: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p3>0 );.       
5910: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5920: 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
5930: 20 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20           pOut = 
5940: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
5950: 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ];.        }.   
5960: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 6f 70     }else if( (op
5970: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5980: 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN3)!=0 ){.    
5990: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
59a0: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p3>0 );.       
59b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
59c0: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
59d0: 20 20 20 20 20 70 49 6e 33 20 3d 20 26 70 2d 3e       pIn3 = &p->
59e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
59f0: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
5a00: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
5a10: 49 6e 33 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  In3);.      }.  
5a20: 20 20 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50    }else if( (opP
5a30: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5a40: 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN2)!=0 ){.     
5a50: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5a60: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5a70: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
5a80: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 49  nMem );.      pI
5a90: 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  n2 = &p->aMem[pO
5aa0: 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 52 45  p->p2];.      RE
5ab0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5ac0: 2d 3e 70 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20  ->p2, pIn2);.   
5ad0: 20 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72   }else if( (opPr
5ae0: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
5af0: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
5b00: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5b10: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5b20: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
5b30: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 49 6e  Mem );.      pIn
5b40: 33 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  3 = &p->aMem[pOp
5b50: 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 52 45 47  ->p3];.      REG
5b60: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5b70: 3e 70 33 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20  >p3, pIn3);.    
5b80: 7d 0a 0a 20 20 20 20 73 77 69 74 63 68 28 20 70  }..    switch( p
5b90: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f  Op->opcode ){../
5ba0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
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 0a 2a 2a  *************.**
5bf0: 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73   What follows is
5c00: 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63   a massive switc
5c10: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72  h statement wher
5c20: 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c  e each case impl
5c30: 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61  ements a.** sepa
5c40: 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  rate instruction
5c50: 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   in the virtual 
5c60: 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20  machine.  If we 
5c70: 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c  follow the usual
5c80: 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20  .** indentation 
5c90: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63  conventions, eac
5ca0: 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65  h case should be
5cb0: 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73   indented by 6 s
5cc0: 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74  paces.  But.** t
5cd0: 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20  hat is a lot of 
5ce0: 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20  wasted space on 
5cf0: 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e  the left margin.
5d00: 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69    So the code wi
5d10: 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74  thin.** the swit
5d20: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c  ch statement wil
5d30: 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e  l break with con
5d40: 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66  vention and be f
5d50: 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68  lush-left. Anoth
5d60: 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e  er.** big commen
5d70: 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  t (similar to th
5d80: 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72  is one) will mar
5d90: 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74  k the point in t
5da0: 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a  he code where.**
5db0: 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62   we transition b
5dc0: 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e  ack to normal in
5dd0: 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  dentation..**.**
5de0: 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20   The formatting 
5df0: 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20  of each case is 
5e00: 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20  important.  The 
5e10: 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c  makefile for SQL
5e20: 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73  ite.** generates
5e30: 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70   two C files "op
5e40: 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70  codes.h" and "op
5e50: 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e  codes.c" by scan
5e60: 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c  ning this.** fil
5e70: 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69  e looking for li
5e80: 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77  nes that begin w
5e90: 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20  ith "case OP_". 
5ea0: 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66   The opcodes.h f
5eb0: 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20  iles.** will be 
5ec0: 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66  filled with #def
5ed0: 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75  ines that give u
5ee0: 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61  nique integer va
5ef0: 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20  lues to each.** 
5f00: 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f  opcode and the o
5f10: 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73  pcodes.c file is
5f20: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20   filled with an 
5f30: 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73  array of strings
5f40: 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73   where.** each s
5f50: 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d  tring is the sym
5f60: 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74  bolic name for t
5f70: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
5f80: 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65   opcode.  If the
5f90: 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65  .** case stateme
5fa0: 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62  nt is followed b
5fb0: 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74  y a comment of t
5fc0: 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65  he form "/# same
5fd0: 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74   as ... #/".** t
5fe0: 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75  hat comment is u
5ff0: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
6000: 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
6010: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63  value of the opc
6020: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  ode..**.** Other
6030: 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65   keywords in the
6040: 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f   comment that fo
6050: 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20  llows each case 
6060: 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63  are used to.** c
6070: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46  onstruct the OPF
6080: 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76  LG_INITIALIZER v
6090: 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61  alue that initia
60a0: 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70  lizes opcodeProp
60b0: 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f  erty[]..** Keywo
60c0: 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31  rds include: in1
60d0: 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32  , in2, in3, out2
60e0: 5f 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74  _prerelease, out
60f0: 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a  2, out3.  See.**
6100: 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61   the mkopcodeh.a
6110: 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64  wk script for ad
6120: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
6130: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75  tion..**.** Docu
6140: 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20  mentation about 
6150: 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20  VDBE opcodes is 
6160: 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61  generated by sca
6170: 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a  nning this file.
6180: 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20  ** for lines of 
6190: 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70  that contain "Op
61a0: 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69  code:".  That li
61b0: 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65  ne and all subse
61c0: 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74  quent.** comment
61d0: 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20   lines are used 
61e0: 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
61f0: 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  n of the opcode.
6200: 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69  html documentati
6210: 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  on.** file..**.*
6220: 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a  * SUMMARY:.**.**
6230: 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20       Formatting 
6240: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
6250: 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61  scripts that sca
6260: 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20  n this file..** 
6270: 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61      Do not devia
6280: 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d  te from the form
6290: 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72  atting style cur
62a0: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a  rently in use..*
62b0: 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  *.**************
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 2f  ***************/
6300: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f  ../* Opcode:  Go
6310: 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  to * P2 * * *.**
6320: 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69  .** An unconditi
6330: 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64  onal jump to add
6340: 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ress P2..** The 
6350: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
6360: 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62   executed will b
6370: 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74  e .** the one at
6380: 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74   index P2 from t
6390: 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a  he beginning of.
63a0: 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  ** the program..
63b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a  */.case OP_Goto:
63c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
63d0: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43  * jump */.  CHEC
63e0: 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b  K_FOR_INTERRUPT;
63f0: 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20  .  pc = pOp->p2 
6400: 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  - 1;.  break;.}.
6410: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73  ./* Opcode:  Gos
6420: 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ub P1 P2 * * *.*
6430: 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
6440: 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f  urrent address o
6450: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a  nto register P1.
6460: 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70  ** and then jump
6470: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a   to address P2..
6480: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62  */.case OP_Gosub
6490: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
64a0: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
64b0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
64c0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
64d0: 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p1<=p->nMem );. 
64e0: 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn1 = &p->aMem
64f0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6500: 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ert( (pIn1->flag
6510: 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20  s & MEM_Dyn)==0 
6520: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
6530: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49   = MEM_Int;.  pI
6540: 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20  n1->u.i = pc;.  
6550: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
6560: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
6570: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
6580: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
6590: 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72  * Opcode:  Retur
65a0: 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  n P1 * * * *.**.
65b0: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e  ** Jump to the n
65c0: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
65d0: 61 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73  after the addres
65e0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
65f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74  ..*/.case OP_Ret
6600: 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20  urn: {          
6610: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73   /* in1 */.  ass
6620: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
6630: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
6640: 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e  pc = (int)pIn1->
6650: 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  u.i;.  break;.}.
6660: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65  ./* Opcode:  Yie
6670: 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ld P1 * * * *.**
6680: 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f  .** Swap the pro
6690: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74  gram counter wit
66a0: 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  h the value in r
66b0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63  egister P1..*/.c
66c0: 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20  ase OP_Yield: { 
66d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
66e0: 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73  1 */.  int pcDes
66f0: 74 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  t;.  assert( (pI
6700: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
6710: 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  Dyn)==0 );.  pIn
6720: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
6730: 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28  nt;.  pcDest = (
6740: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
6750: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b   pIn1->u.i = pc;
6760: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
6770: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
6780: 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b  ;.  pc = pcDest;
6790: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
67a0: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e  Opcode:  HaltIfN
67b0: 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34  ull  P1 P2 P3 P4
67c0: 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74   *.**.** Check t
67d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
67e0: 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 73 20  ster P3.  If is 
67f0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c  is NULL then Hal
6800: 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d  t using.** param
6810: 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64  eter P1, P2, and
6820: 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77   P4 as if this w
6830: 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72  ere a Halt instr
6840: 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a  uction.  If the.
6850: 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
6860: 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e  ster P3 is not N
6870: 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ULL, then this r
6880: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
6890: 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  p..*/.case OP_Ha
68a0: 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  ltIfNull: {     
68b0: 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 69 66 28   /* in3 */.  if(
68c0: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
68d0: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62  MEM_Null)==0 ) b
68e0: 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  reak;.  /* Fall 
68f0: 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
6900: 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70  Halt */.}../* Op
6910: 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50  code:  Halt P1 P
6920: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45  2 * P4 *.**.** E
6930: 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  xit immediately.
6940: 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f    All open curso
6950: 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  rs, etc are clos
6960: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
6970: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
6980: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
6990: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
69a0: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
69b0: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
69c0: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
69d0: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
69e0: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
69f0: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
6a00: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
6a10: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
6a20: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
6a30: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
6a40: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
6a50: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
6a60: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
6a70: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
6a80: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
6a90: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
6aa0: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
6ab0: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
6ac0: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
6ad0: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
6ae0: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
6af0: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
6b00: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
6b10: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
6b20: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
6b30: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
6b40: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
6b50: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6b60: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
6b70: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
6b80: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
6b90: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
6ba0: 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e  *.** There is an
6bb0: 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30   implied "Halt 0
6bc0: 20 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f   0 0" instructio
6bd0: 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68  n inserted at th
6be0: 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a  e very end of.**
6bf0: 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20   every program. 
6c00: 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20   So a jump past 
6c10: 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63  the last instruc
6c20: 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67  tion of the prog
6c30: 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61  ram.** is the sa
6c40: 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20  me as executing 
6c50: 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Halt..*/.case OP
6c60: 5f 48 61 6c 74 3a 20 7b 0a 20 20 70 2d 3e 72 63  _Halt: {.  p->rc
6c70: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d   = pOp->p1;.  p-
6c80: 3e 70 63 20 3d 20 70 63 3b 0a 20 20 70 2d 3e 65  >pc = pc;.  p->e
6c90: 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 70 4f 70  rrorAction = pOp
6ca0: 2d 3e 70 32 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ->p2;.  if( pOp-
6cb0: 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 73 71 6c  >p4.z ){.    sql
6cc0: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
6cd0: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
6ce0: 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  %s", pOp->p4.z);
6cf0: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
6d00: 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
6d10: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
6d20: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
6d30: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
6d40: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
6d50: 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63  USY ){.    p->rc
6d60: 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
6d70: 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  USY;.  }else{.  
6d80: 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53    rc = p->rc ? S
6d90: 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51  QLITE_ERROR : SQ
6da0: 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20  LITE_DONE;.  }. 
6db0: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
6dc0: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
6dd0: 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a   Integer P1 P2 *
6de0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33   * *.**.** The 3
6df0: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  2-bit integer va
6e00: 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65  lue P1 is writte
6e10: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
6e20: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
6e30: 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20  nteger: {       
6e40: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
6e50: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
6e60: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6e70: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
6e80: 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  Op->p1;.  break;
6e90: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6ea0: 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a  nt64 * P2 * P4 *
6eb0: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
6ec0: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
6ed0: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
6ee0: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
6ef0: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
6f00: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
6f10: 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20  OP_Int64: {     
6f20: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
6f30: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
6f40: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49  sert( pOp->p4.pI
6f50: 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  64!=0 );.  pOut-
6f60: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6f70: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
6f80: 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20  *pOp->p4.pI64;. 
6f90: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6fa0: 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20  code: Real * P2 
6fb0: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
6fc0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
6fd0: 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e  a 64-bit floatin
6fe0: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a  g point value..*
6ff0: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
7000: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
7010: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7020: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
7030: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
7040: 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65  _FLOAT, out2-pre
7050: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
7060: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52  t->flags = MEM_R
7070: 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21  eal;.  assert( !
7080: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f  sqlite3IsNaN(*pO
7090: 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a  p->p4.pReal) );.
70a0: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70    pOut->r = *pOp
70b0: 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72  ->p4.pReal;.  br
70c0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
70d0: 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20  e: String8 * P2 
70e0: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
70f0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20  points to a nul 
7100: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
7110: 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70   string. This op
7120: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
7130: 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20  med .** into an 
7140: 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65  OP_String before
7150: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20   it is executed 
7160: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69  for the first ti
7170: 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  me..*/.case OP_S
7180: 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20  tring8: {       
7190: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
71a0: 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65  STRING, out2-pre
71b0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
71c0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
71d0: 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  0 );.  pOp->opco
71e0: 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a  de = OP_String;.
71f0: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69    pOp->p1 = sqli
7200: 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d  te3Strlen30(pOp-
7210: 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66  >p4.z);..#ifndef
7220: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
7230: 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e  16.  if( encodin
7240: 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  g!=SQLITE_UTF8 )
7250: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
7260: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
7270: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20   pOp->p4.z, -1, 
7280: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
7290: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
72a0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
72b0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
72c0: 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20  eEncoding(pOut, 
72d0: 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f  encoding) ) goto
72e0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 69 66 28   no_mem;.    if(
72f0: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69   SQLITE_OK!=sqli
7300: 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72  te3VdbeMemMakeWr
7310: 69 74 65 61 62 6c 65 28 70 4f 75 74 29 20 29 20  iteable(pOut) ) 
7320: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
7330: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d   pOut->zMalloc =
7340: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
7350: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
7360: 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  c;.    pOut->fla
7370: 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a  gs &= ~MEM_Dyn;.
7380: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
7390: 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20  ype==P4_DYNAMIC 
73a0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
73b0: 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e  DbFree(db, pOp->
73c0: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20  p4.z);.    }.   
73d0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
73e0: 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70  4_DYNAMIC;.    p
73f0: 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d  Op->p4.z = pOut-
7400: 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20  >z;.    pOp->p1 
7410: 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 20 20 69  = pOut->n;.    i
7420: 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61  f( pOp->p1>db->a
7430: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
7440: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
7450: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
7460: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 55 50 44 41  ;.    }.    UPDA
7470: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
7480: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
7490: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69  ;.  }.#endif.  i
74a0: 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61  f( pOp->p1>db->a
74b0: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
74c0: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
74d0: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
74e0: 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68    }.  /* Fall th
74f0: 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
7500: 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e  t case, OP_Strin
7510: 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63  g */.}.  ./* Opc
7520: 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50  ode: String P1 P
7530: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 * P4 *.**.** T
7540: 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  he string value 
7550: 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20  P4 of length P1 
7560: 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65  (bytes) is store
7570: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
7580: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ..*/.case OP_Str
7590: 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ing: {          
75a0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
75b0: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
75c0: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
75d0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
75e0: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74  MEM_Str|MEM_Stat
75f0: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  ic|MEM_Term;.  p
7600: 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34  Out->z = pOp->p4
7610: 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  .z;.  pOut->n = 
7620: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d  pOp->p1;.  pOut-
7630: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
7640: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
7650: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
7660: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7670: 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20 50 32 20 2a  ode: Null * P2 *
7680: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
7690: 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67   a NULL into reg
76a0: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
76b0: 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20  e OP_Null: {    
76c0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
76d0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 62  rerelease */.  b
76e0: 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
76f0: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
7700: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  * P4.**.** P4 po
7710: 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f  ints to a blob o
7720: 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20  f data P1 bytes 
7730: 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69  long.  Store thi
7740: 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67  s.** blob in reg
7750: 69 73 74 65 72 20 50 32 2e 20 54 68 69 73 20 69  ister P2. This i
7760: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6e 6f  nstruction is no
7770: 74 20 63 6f 64 65 64 20 64 69 72 65 63 74 6c 79  t coded directly
7780: 0a 2a 2a 20 62 79 20 74 68 65 20 63 6f 6d 70 69  .** by the compi
7790: 6c 65 72 2e 20 49 6e 73 74 65 61 64 2c 20 74 68  ler. Instead, th
77a0: 65 20 63 6f 6d 70 69 6c 65 72 20 6c 61 79 65 72  e compiler layer
77b0: 20 73 70 65 63 69 66 69 65 73 0a 2a 2a 20 61 6e   specifies.** an
77c0: 20 4f 50 5f 48 65 78 42 6c 6f 62 20 6f 70 63 6f   OP_HexBlob opco
77d0: 64 65 2c 20 77 69 74 68 20 74 68 65 20 68 65 78  de, with the hex
77e0: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
77f0: 74 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  tation of.** the
7800: 20 62 6c 6f 62 20 61 73 20 50 34 2e 20 54 68 69   blob as P4. Thi
7810: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
7820: 73 66 6f 72 6d 65 64 20 74 6f 20 61 6e 20 4f 50  sformed to an OP
7830: 5f 42 6c 6f 62 0a 2a 2a 20 74 68 65 20 66 69 72  _Blob.** the fir
7840: 73 74 20 74 69 6d 65 20 69 74 20 69 73 20 65 78  st time it is ex
7850: 65 63 75 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  ecuted..*/.case 
7860: 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  OP_Blob: {      
7870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7880: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7890: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
78a0: 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f  1 <= SQLITE_MAX_
78b0: 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69  LENGTH );.  sqli
78c0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
78d0: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
78e0: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
78f0: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
7900: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
7910: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
7920: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
7930: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  }../* Opcode: Va
7940: 72 69 61 62 6c 65 20 50 31 20 50 32 20 50 33 20  riable P1 P2 P3 
7950: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  P4 *.**.** Trans
7960: 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f  fer the values o
7970: 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65  f bound paramete
7980: 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 69  rs P1..P1+P3-1 i
7990: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a  nto registers.**
79a0: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 0a 2a 2a   P2..P2+P3-1..**
79b0: 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d  .** If the param
79c0: 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74  eter is named, t
79d0: 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70  hen its name app
79e0: 65 61 72 73 20 69 6e 20 50 34 20 61 6e 64 20 50  ears in P4 and P
79f0: 33 3d 3d 31 2e 0a 2a 2a 20 54 68 65 20 50 34 20  3==1..** The P4 
7a00: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79  value is used by
7a10: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
7a20: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a  rameter_name()..
7a30: 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61  */.case OP_Varia
7a40: 62 6c 65 3a 20 7b 0a 20 20 69 6e 74 20 6a 20 3d  ble: {.  int j =
7a50: 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20   pOp->p1 - 1;.  
7a60: 69 6e 74 20 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b  int k = pOp->p2;
7a70: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 0a 20 20  .  Mem *pVar;.  
7a80: 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  int n = pOp->p3;
7a90: 0a 20 20 61 73 73 65 72 74 28 20 6a 3e 3d 30 20  .  assert( j>=0 
7aa0: 26 26 20 6a 2b 6e 3c 3d 70 2d 3e 6e 56 61 72 20  && j+n<=p->nVar 
7ab0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6b 3e 3d  );.  assert( k>=
7ac0: 31 20 26 26 20 6b 2b 6e 2d 31 3c 3d 70 2d 3e 6e  1 && k+n-1<=p->n
7ad0: 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Mem );.  assert(
7ae0: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c   pOp->p4.z==0 ||
7af0: 20 70 4f 70 2d 3e 70 33 3d 3d 31 20 29 3b 0a 0a   pOp->p3==1 );..
7b00: 20 20 77 68 69 6c 65 28 20 6e 2d 2d 20 3e 20 30    while( n-- > 0
7b10: 20 29 7b 0a 20 20 20 20 70 56 61 72 20 3d 20 26   ){.    pVar = &
7b20: 70 2d 3e 61 56 61 72 5b 6a 2b 2b 5d 3b 0a 20 20  p->aVar[j++];.  
7b30: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
7b40: 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29  eMemTooBig(pVar)
7b50: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
7b60: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
7b70: 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
7b80: 6d 5b 6b 2b 2b 5d 3b 0a 20 20 20 20 73 71 6c 69  m[k++];.    sqli
7b90: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
7ba0: 65 45 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b  eExternal(pOut);
7bb0: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
7bc0: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
7bd0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7be0: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
7bf0: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
7c00: 63 29 3b 0a 20 20 20 20 55 50 44 41 54 45 5f 4d  c);.    UPDATE_M
7c10: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
7c20: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
7c30: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
7c40: 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ve P1 P2 P3 * *.
7c50: 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76  **.** Move the v
7c60: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
7c70: 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76  r P1..P1+P3-1 ov
7c80: 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  er into.** regis
7c90: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31  ters P2..P2+P3-1
7ca0: 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e  .  Registers P1.
7cb0: 2e 50 31 2b 50 31 2d 31 20 61 72 65 0a 2a 2a 20  .P1+P1-1 are.** 
7cc0: 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e  left holding a N
7cd0: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65  ULL.  It is an e
7ce0: 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65  rror for registe
7cf0: 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e  r ranges.** P1..
7d00: 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e  P1+P3-1 and P2..
7d10: 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c  P2+P3-1 to overl
7d20: 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  ap..*/.case OP_M
7d30: 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ove: {.  char *z
7d40: 4d 61 6c 6c 6f 63 3b 0a 20 20 69 6e 74 20 6e 20  Malloc;.  int n 
7d50: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 6e 74  = pOp->p3;.  int
7d60: 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
7d70: 20 69 6e 74 20 70 32 20 3d 20 70 4f 70 2d 3e 70   int p2 = pOp->p
7d80: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  2;.  assert( n>0
7d90: 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30   && p1>0 && p2>0
7da0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
7db0: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
7dc0: 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  p1 );..  pIn1 = 
7dd0: 26 70 2d 3e 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20  &p->aMem[p1];.  
7de0: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
7df0: 70 32 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e 2d  p2];.  while( n-
7e00: 2d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  - ){.    assert(
7e10: 20 70 4f 75 74 3c 3d 26 70 2d 3e 61 4d 65 6d 5b   pOut<=&p->aMem[
7e20: 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20  p->nMem] );.    
7e30: 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 70  assert( pIn1<=&p
7e40: 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20  ->aMem[p->nMem] 
7e50: 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d  );.    zMalloc =
7e60: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a   pOut->zMalloc;.
7e70: 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f      pOut->zMallo
7e80: 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  c = 0;.    sqlit
7e90: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
7ea0: 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 70  ut, pIn1);.    p
7eb0: 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a  In1->zMalloc = z
7ec0: 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49  Malloc;.    REGI
7ed0: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
7ee0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
7ef0: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
7f00: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
7f10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20  /* Opcode: Copy 
7f20: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
7f30: 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  * Make a copy of
7f40: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
7f50: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7f60: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
7f70: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65  ction makes a de
7f80: 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ep copy of the v
7f90: 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61  alue.  A duplica
7fa0: 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66  te.** is made of
7fb0: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
7fc0: 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53  lob constant.  S
7fd0: 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79  ee also OP_SCopy
7fe0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70  ..*/.case OP_Cop
7ff0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
8000: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73   /* in1 */.  ass
8010: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
8020: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8030: 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p2<=p->nMem );.
8040: 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
8050: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
8060: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
8070: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
8080: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
8090: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
80a0: 45 70 68 65 6d 29 3b 0a 20 20 44 65 65 70 68 65  Ephem);.  Deephe
80b0: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
80c0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
80d0: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
80e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
80f0: 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31  Opcode: SCopy P1
8100: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
8110: 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63  Make a shallow c
8120: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20  opy of register 
8130: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
8140: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
8150: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
8160: 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  s a shallow copy
8170: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
8180: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
8190: 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  is a string or b
81a0: 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  lob, then the co
81b0: 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69  py is only a poi
81c0: 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f  nter to the.** o
81d0: 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63  riginal and henc
81e0: 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e if the origina
81f0: 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c  l changes so wil
8200: 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57  l the copy..** W
8210: 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69  orse, if the ori
8220: 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63  ginal is dealloc
8230: 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62  ated, the copy b
8240: 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a  ecomes invalid..
8250: 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67  ** Thus the prog
8260: 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74  ram must guarant
8270: 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67  ee that the orig
8280: 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68  inal will not ch
8290: 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74  ange.** during t
82a0: 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74  he lifetime of t
82b0: 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50  he copy.  Use OP
82c0: 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20  _Copy to make a 
82d0: 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79  complete.** copy
82e0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f  ..*/.case OP_SCo
82f0: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
8300: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 52 45 47   /* in1 */.  REG
8310: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
8320: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 61 73  >p1, pIn1);.  as
8330: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
8340: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
8350: 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p2<=p->nMem );
8360: 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
8370: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
8380: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
8390: 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
83a0: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
83b0: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
83c0: 5f 45 70 68 65 6d 29 3b 0a 20 20 52 45 47 49 53  _Ephem);.  REGIS
83d0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
83e0: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  2, pOut);.  brea
83f0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8400: 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32   ResultRow P1 P2
8410: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
8420: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68   registers P1 th
8430: 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f  rough P1+P2-1 co
8440: 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ntain a single r
8450: 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73  ow of.** results
8460: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61  . This opcode ca
8470: 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33  uses the sqlite3
8480: 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20  _step() call to 
8490: 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74  terminate.** wit
84a0: 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20  h an SQLITE_ROW 
84b0: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20  return code and 
84c0: 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73  it sets up the s
84d0: 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73  qlite3_stmt.** s
84e0: 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76  tructure to prov
84f0: 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ide access to th
8500: 65 20 74 6f 70 20 50 31 20 76 61 6c 75 65 73 20  e top P1 values 
8510: 61 73 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  as the result.**
8520: 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   row..*/.case OP
8530: 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20  _ResultRow: {.  
8540: 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74  Mem *pMem;.  int
8550: 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   i;.  assert( p-
8560: 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70  >nResColumn==pOp
8570: 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74  ->p2 );.  assert
8580: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
8590: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
85a0: 2b 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65  +pOp->p2<=p->nMe
85b0: 6d 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  m+1 );..  /* If 
85c0: 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  the SQLITE_Count
85d0: 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74  Rows flag is set
85e0: 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67   in sqlite3.flag
85f0: 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20  s mask, then .  
8600: 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74  ** DML statement
8610: 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  s invoke this op
8620: 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74  code to return t
8630: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
8640: 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64  s .  ** modified
8650: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
8660: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
8670: 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61  ay that a VM tha
8680: 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73  t.  ** opens a s
8690: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
86a0: 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20  tion may invoke 
86b0: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a  this opcode..  *
86c0: 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74  *.  ** In case t
86d0: 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74  his is such a st
86e0: 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61  atement, close a
86f0: 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ny statement tra
8700: 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70  nsaction.  ** op
8710: 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20  ened by this VM 
8720: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
8730: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
8740: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f  user. This is to
8750: 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61  .  ** ensure tha
8760: 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  t statement-tran
8770: 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77  sactions are alw
8780: 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20  ays nested, not 
8790: 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a  overlapping..  *
87a0: 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74  * If the open st
87b0: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
87c0: 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65  ion is not close
87d0: 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65  d here, then the
87e0: 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73   user.  ** may s
87f0: 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74  tep another VM t
8800: 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77  hat opens its ow
8810: 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  n statement tran
8820: 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20  saction. This.  
8830: 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f  ** may lead to o
8840: 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65  verlapping state
8850: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8860: 73 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  s..  */.  assert
8870: 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
8880: 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26  =0 || db->flags&
8890: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
88a0: 20 29 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45   );.  if( SQLITE
88b0: 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74  _OK!=(rc = sqlit
88c0: 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65  e3VdbeCloseState
88d0: 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e  ment(p, SAVEPOIN
88e0: 54 5f 52 45 4c 45 41 53 45 29 29 20 29 7b 0a 20  T_RELEASE)) ){. 
88f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
8900: 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
8910: 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  ll ephemeral cur
8920: 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a  sor row caches *
8930: 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20  /.  p->cacheCtr 
8940: 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b  = (p->cacheCtr +
8950: 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b   2)|1;..  /* Mak
8960: 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c  e sure the resul
8970: 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ts of the curren
8980: 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74  t row are \000 t
8990: 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61  erminated.  ** a
89a0: 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69 67  nd have an assig
89b0: 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20 72  ned type.  The r
89c0: 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70  esults are de-ep
89d0: 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20  hemeralized as. 
89e0: 20 2a 2a 20 61 73 20 73 69 64 65 20 65 66 66 65   ** as side effe
89f0: 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20  ct..  */.  pMem 
8a00: 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20  = p->pResultSet 
8a10: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
8a20: 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p1];.  for(i=0; 
8a30: 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b  i<pOp->p2; i++){
8a40: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8a50: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
8a60: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73  &pMem[i]);.    s
8a70: 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 26 70 4d  toreTypeInfo(&pM
8a80: 65 6d 5b 69 5d 2c 20 65 6e 63 6f 64 69 6e 67 29  em[i], encoding)
8a90: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
8aa0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20  RACE(pOp->p1+i, 
8ab0: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20  &pMem[i]);.  }. 
8ac0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
8ad0: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
8ae0: 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72  mem;..  /* Retur
8af0: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a  n SQLITE_ROW.  *
8b00: 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b  /.  p->pc = pc +
8b10: 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
8b20: 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64  E_ROW;.  goto vd
8b30: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
8b40: 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20   Opcode: Concat 
8b50: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
8b60: 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20  ** Add the text 
8b70: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f  in register P1 o
8b80: 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74  nto the end of t
8b90: 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65  he text in.** re
8ba0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74  gister P2 and st
8bb0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
8bc0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
8bd0: 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20  * If either the 
8be0: 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72  P1 or P2 text ar
8bf0: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  e NULL then stor
8c00: 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a  e NULL in P3..**
8c10: 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c  .**   P3 = P2 ||
8c20: 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20   P1.**.** It is 
8c30: 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61  illegal for P1 a
8c40: 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20  nd P3 to be the 
8c50: 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53  same register. S
8c60: 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20  ometimes,.** if 
8c70: 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72  P3 is the same r
8c80: 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74  egister as P2, t
8c90: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
8ca0: 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20  n is able.** to 
8cb0: 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29  avoid a memcpy()
8cc0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
8cd0: 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cat: {          
8ce0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43   /* same as TK_C
8cf0: 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  ONCAT, in1, in2,
8d00: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e   out3 */.  i64 n
8d10: 42 79 74 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  Byte;..  assert(
8d20: 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20   pIn1!=pOut );. 
8d30: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
8d40: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  s | pIn2->flags)
8d50: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
8d60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
8d70: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
8d80: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
8d90: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
8da0: 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  );.  Stringify(p
8db0: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
8dc0: 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
8dd0: 32 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  2);.  Stringify(
8de0: 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn2, encoding);
8df0: 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d  .  nByte = pIn1-
8e00: 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  >n + pIn2->n;.  
8e10: 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
8e20: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
8e30: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
8e40: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
8e50: 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46   }.  MemSetTypeF
8e60: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74  lag(pOut, MEM_St
8e70: 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  r);.  if( sqlite
8e80: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
8e90: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
8ea0: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
8eb0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
8ec0: 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21  .  }.  if( pOut!
8ed0: 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d  =pIn2 ){.    mem
8ee0: 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e  cpy(pOut->z, pIn
8ef0: 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a  2->z, pIn2->n);.
8f00: 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f    }.  memcpy(&pO
8f10: 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20  ut->z[pIn2->n], 
8f20: 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e  pIn1->z, pIn1->n
8f30: 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  );.  pOut->z[nBy
8f40: 74 65 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  te] = 0;.  pOut-
8f50: 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b  >z[nByte+1] = 0;
8f60: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c  .  pOut->flags |
8f70: 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  = MEM_Term;.  pO
8f80: 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
8f90: 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  te;.  pOut->enc 
8fa0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
8fb0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
8fc0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
8fd0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8fe0: 41 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Add P1 P2 P3 * *
8ff0: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76  .**.** Add the v
9000: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9010: 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
9020: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
9030: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
9040: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
9050: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
9060: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
9070: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
9080: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
9090: 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50  code: Multiply P
90a0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
90b0: 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68  *.** Multiply th
90c0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
90d0: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
90e0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
90f0: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
9100: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
9110: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
9120: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
9130: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
9140: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
9150: 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63   Opcode: Subtrac
9160: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
9170: 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68  *.** Subtract th
9180: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9190: 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20  ter P1 from the 
91a0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
91b0: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
91c0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
91d0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
91e0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
91f0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
9200: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
9210: 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64  /* Opcode: Divid
9220: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
9230: 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20  *.** Divide the 
9240: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9250: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
9260: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9270: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
9280: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
9290: 73 74 65 72 20 50 33 2e 20 20 49 66 20 74 68 65  ster P3.  If the
92a0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
92b0: 65 72 20 50 32 0a 2a 2a 20 69 73 20 7a 65 72 6f  er P2.** is zero
92c0: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
92d0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
92e0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
92f0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
9300: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
9310: 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64   Opcode: Remaind
9320: 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  er P1 P2 P3 * *.
9330: 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68  **.** Compute th
9340: 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65  e remainder afte
9350: 72 20 69 6e 74 65 67 65 72 20 64 69 76 69 73 69  r integer divisi
9360: 6f 6e 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20  on of the value 
9370: 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
9380: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
9390: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
93a0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
93b0: 6c 74 20 69 6e 20 50 33 2e 20 0a 2a 2a 20 49 66  lt in P3. .** If
93c0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
93d0: 67 69 73 74 65 72 20 50 32 20 69 73 20 7a 65 72  gister P2 is zer
93e0: 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  o the result is 
93f0: 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68  NULL..** If eith
9400: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
9410: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
9420: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
9430: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
9440: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9450: 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e  e as TK_PLUS, in
9460: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
9470: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
9480: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
9490: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e  * same as TK_MIN
94a0: 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  US, in1, in2, ou
94b0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  t3 */.case OP_Mu
94c0: 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20  ltiply:         
94d0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
94e0: 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e  TK_STAR, in1, in
94f0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
9500: 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20  OP_Divide:      
9510: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9520: 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69  e as TK_SLASH, i
9530: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
9540: 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64  .case OP_Remaind
9550: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  er: {           
9560: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45  /* same as TK_RE
9570: 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  M, in1, in2, out
9580: 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73  3 */.  int flags
9590: 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ;.  applyNumeric
95a0: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a  Affinity(pIn1);.
95b0: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
95c0: 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20  finity(pIn2);.  
95d0: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
95e0: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
95f0: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
9600: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
9610: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
9620: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
9630: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
9640: 61 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61 67  ags & pIn2->flag
9650: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45  s & MEM_Int)==ME
9660: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 36 34  M_Int ){.    i64
9670: 20 61 2c 20 62 3b 0a 20 20 20 20 61 20 3d 20 70   a, b;.    a = p
9680: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 20  In1->u.i;.    b 
9690: 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn2->u.i;.   
96a0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
96b0: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
96c0: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
96d0: 20 20 20 62 20 2b 3d 20 61 3b 20 20 20 20 20 20     b += a;      
96e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
96f0: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
9700: 20 20 20 62 20 2d 3d 20 61 3b 20 20 20 20 20 20     b -= a;      
9710: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
9720: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
9730: 20 20 20 62 20 2a 3d 20 61 3b 20 20 20 20 20 20     b *= a;      
9740: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
9750: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
9760: 20 20 20 20 20 20 20 20 69 66 28 20 61 3d 3d 30          if( a==0
9770: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
9780: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9790: 6c 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 69  l;.        /* Di
97a0: 76 69 64 69 6e 67 20 74 68 65 20 6c 61 72 67 65  viding the large
97b0: 73 74 20 70 6f 73 73 69 62 6c 65 20 6e 65 67 61  st possible nega
97c0: 74 69 76 65 20 36 34 2d 62 69 74 20 69 6e 74 65  tive 64-bit inte
97d0: 67 65 72 20 28 31 3c 3c 36 33 29 20 62 79 20 0a  ger (1<<63) by .
97e0: 20 20 20 20 20 20 20 20 2a 2a 20 2d 31 20 72 65          ** -1 re
97f0: 74 75 72 6e 73 20 61 6e 20 69 6e 74 65 67 65 72  turns an integer
9800: 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 73 74   too large to st
9810: 6f 72 65 20 69 6e 20 61 20 36 34 2d 62 69 74 20  ore in a 64-bit 
9820: 64 61 74 61 2d 74 79 70 65 2e 20 4f 6e 0a 20 20  data-type. On.  
9830: 20 20 20 20 20 20 2a 2a 20 73 6f 6d 65 20 61 72        ** some ar
9840: 63 68 69 74 65 63 74 75 72 65 73 2c 20 74 68 65  chitectures, the
9850: 20 76 61 6c 75 65 20 6f 76 65 72 66 6c 6f 77 73   value overflows
9860: 20 74 6f 20 28 31 3c 3c 36 33 29 2e 20 4f 6e 20   to (1<<63). On 
9870: 6f 74 68 65 72 73 2c 0a 20 20 20 20 20 20 20 20  others,.        
9880: 2a 2a 20 61 20 53 49 47 46 50 45 20 69 73 20 69  ** a SIGFPE is i
9890: 73 73 75 65 64 2e 20 54 68 65 20 66 6f 6c 6c 6f  ssued. The follo
98a0: 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 6e  wing statement n
98b0: 6f 72 6d 61 6c 69 7a 65 73 20 74 68 69 73 0a 20  ormalizes this. 
98c0: 20 20 20 20 20 20 20 2a 2a 20 62 65 68 61 76 69         ** behavi
98d0: 6f 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 61  or so that all a
98e0: 72 63 68 69 74 65 63 74 75 72 65 73 20 62 65 68  rchitectures beh
98f0: 61 76 65 20 61 73 20 69 66 20 69 6e 74 65 67 65  ave as if intege
9900: 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 76  r .        ** ov
9910: 65 72 66 6c 6f 77 20 6f 63 63 75 72 72 65 64 2e  erflow occurred.
9920: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
9930: 20 20 20 20 69 66 28 20 61 3d 3d 2d 31 20 26 26      if( a==-1 &&
9940: 20 62 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54   b==SMALLEST_INT
9950: 36 34 20 29 20 61 20 3d 20 31 3b 0a 20 20 20 20  64 ) a = 1;.    
9960: 20 20 20 20 62 20 2f 3d 20 61 3b 0a 20 20 20 20      b /= a;.    
9970: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9980: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
9990: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
99a0: 61 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  a==0 ) goto arit
99b0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
99c0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
99d0: 66 28 20 61 3d 3d 2d 31 20 29 20 61 20 3d 20 31  f( a==-1 ) a = 1
99e0: 3b 0a 20 20 20 20 20 20 20 20 62 20 25 3d 20 61  ;.        b %= a
99f0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
9a00: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
9a10: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 62     pOut->u.i = b
9a20: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
9a30: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
9a40: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  nt);.  }else{.  
9a50: 20 20 64 6f 75 62 6c 65 20 61 2c 20 62 3b 0a 20    double a, b;. 
9a60: 20 20 20 61 20 3d 20 73 71 6c 69 74 65 33 56 64     a = sqlite3Vd
9a70: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
9a80: 29 3b 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74  );.    b = sqlit
9a90: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
9aa0: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
9ab0: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
9ac0: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
9ad0: 41 64 64 3a 20 20 20 20 20 20 20 20 20 62 20 2b  Add:         b +
9ae0: 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b  = a;       break
9af0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
9b00: 53 75 62 74 72 61 63 74 3a 20 20 20 20 62 20 2d  Subtract:    b -
9b10: 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b  = a;       break
9b20: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
9b30: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 62 20 2a  Multiply:    b *
9b40: 3d 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b  = a;       break
9b50: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
9b60: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
9b70: 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49    /* (double)0 I
9b80: 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45  n case of SQLITE
9b90: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
9ba0: 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20  OINT... */.     
9bb0: 20 20 20 69 66 28 20 61 3d 3d 28 64 6f 75 62 6c     if( a==(doubl
9bc0: 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  e)0 ) goto arith
9bd0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9be0: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 62 20  null;.        b 
9bf0: 2f 3d 20 61 3b 0a 20 20 20 20 20 20 20 20 62 72  /= a;.        br
9c00: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
9c10: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
9c20: 20 20 20 20 20 20 69 36 34 20 69 61 20 3d 20 28        i64 ia = (
9c30: 69 36 34 29 61 3b 0a 20 20 20 20 20 20 20 20 69  i64)a;.        i
9c40: 36 34 20 69 62 20 3d 20 28 69 36 34 29 62 3b 0a  64 ib = (i64)b;.
9c50: 20 20 20 20 20 20 20 20 69 66 28 20 69 61 3d 3d          if( ia==
9c60: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
9c70: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
9c80: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
9c90: 69 61 3d 3d 2d 31 20 29 20 69 61 20 3d 20 31 3b  ia==-1 ) ia = 1;
9ca0: 0a 20 20 20 20 20 20 20 20 62 20 3d 20 28 64 6f  .        b = (do
9cb0: 75 62 6c 65 29 28 69 62 20 25 20 69 61 29 3b 0a  uble)(ib % ia);.
9cc0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
9cd0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
9ce0: 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61   if( sqlite3IsNa
9cf0: 4e 28 62 29 20 29 7b 0a 20 20 20 20 20 20 67 6f  N(b) ){.      go
9d00: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
9d10: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
9d20: 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72 20    }.    pOut->r 
9d30: 3d 20 62 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  = b;.    MemSetT
9d40: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
9d50: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
9d60: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65   (flags & MEM_Re
9d70: 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
9d80: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
9d90: 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29  erAffinity(pOut)
9da0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
9db0: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
9dc0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
9dd0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
9de0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
9df0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9e00: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a  pcode: CollSeq *
9e10: 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69   * P4.**.** P4 i
9e20: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
9e30: 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e   CollSeq struct.
9e40: 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c   If the next cal
9e50: 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63  l to a user func
9e60: 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65  tion.** or aggre
9e70: 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74  gate calls sqlit
9e80: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
9e90: 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69  (), this collati
9ea0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c  on sequence will
9eb0: 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e  .** be returned.
9ec0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
9ed0: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69   the built-in mi
9ee0: 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e  n(), max() and n
9ef0: 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74  ullif().** funct
9f00: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ions..**.** The 
9f10: 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62  interface used b
9f20: 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
9f30: 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72  tion of the afor
9f40: 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74  ementioned funct
9f50: 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69  ions.** to retri
9f60: 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  eve the collatio
9f70: 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  n sequence set b
9f80: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
9f90: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a   not available.*
9fa0: 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79  * publicly, only
9fb0: 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
9fc0: 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75  ns defined in fu
9fd0: 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nc.c..*/.case OP
9fe0: 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73  _CollSeq: {.  as
9ff0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
a000: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
a010: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a020: 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e  Opcode: Function
a030: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
a040: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
a050: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
a060: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
a070: 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75   a Function stru
a080: 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65  cture that.** de
a090: 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69  fines the functi
a0a0: 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75  on) with P5 argu
a0b0: 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d  ments taken from
a0c0: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
a0d0: 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20  .** successors. 
a0e0: 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   The result of t
a0f0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  he function is s
a100: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
a110: 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65  r P3..** Registe
a120: 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65  r P3 must not be
a130: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63   one of the func
a140: 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a  tion inputs..**.
a150: 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69  ** P1 is a 32-bi
a160: 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61  t bitmask indica
a170: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
a180: 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e  not each argumen
a190: 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e  t to the .** fun
a1a0: 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d  ction was determ
a1b0: 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74  ined to be const
a1c0: 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74  ant at compile t
a1d0: 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73  ime. If the firs
a1e0: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61  t.** argument wa
a1f0: 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20  s constant then 
a200: 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73  bit 0 of P1 is s
a210: 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
a220: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a   to determine.**
a230: 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61   whether meta da
a240: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
a250: 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  th a user functi
a260: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e  on argument usin
a270: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
a280: 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41  _set_auxdata() A
a290: 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79  PI may be safely
a2a0: 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20   retained until 
a2b0: 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f  the next.** invo
a2c0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f  cation of this o
a2d0: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
a2e0: 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61   also: AggStep a
a2f0: 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63  nd AggFinal.*/.c
a300: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a  ase OP_Function:
a310: 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65   {.  int i;.  Me
a320: 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74  m *pArg;.  sqlit
a330: 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
a340: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
a350: 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e  **apVal;.  int n
a360: 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 0a 20 20 61   = pOp->p5;..  a
a370: 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pVal = p->apArg;
a380: 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c  .  assert( apVal
a390: 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 0a 20 20 61   || n==0 );..  a
a3a0: 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28  ssert( n==0 || (
a3b0: 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
a3c0: 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b  ->p2+n<=p->nMem+
a3d0: 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
a3e0: 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20  pOp->p3<pOp->p2 
a3f0: 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
a400: 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20  >p2+n );.  pArg 
a410: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
a420: 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p2];.  for(i=0; 
a430: 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b  i<n; i++, pArg++
a440: 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  ){.    apVal[i] 
a450: 3d 20 70 41 72 67 3b 0a 20 20 20 20 73 74 6f 72  = pArg;.    stor
a460: 65 54 79 70 65 49 6e 66 6f 28 70 41 72 67 2c 20  eTypeInfo(pArg, 
a470: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 52  encoding);.    R
a480: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
a490: 70 2d 3e 70 32 2c 20 70 41 72 67 29 3b 0a 20 20  p->p2, pArg);.  
a4a0: 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
a4b0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
a4c0: 43 44 45 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74  CDEF || pOp->p4t
a4d0: 79 70 65 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43  ype==P4_VDBEFUNC
a4e0: 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
a4f0: 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45  4type==P4_FUNCDE
a500: 46 20 29 7b 0a 20 20 20 20 63 74 78 2e 70 46 75  F ){.    ctx.pFu
a510: 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
a520: 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 56 64 62  nc;.    ctx.pVdb
a530: 65 46 75 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c  eFunc = 0;.  }el
a540: 73 65 7b 0a 20 20 20 20 63 74 78 2e 70 56 64 62  se{.    ctx.pVdb
a550: 65 46 75 6e 63 20 3d 20 28 56 64 62 65 46 75 6e  eFunc = (VdbeFun
a560: 63 2a 29 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65  c*)pOp->p4.pVdbe
a570: 46 75 6e 63 3b 0a 20 20 20 20 63 74 78 2e 70 46  Func;.    ctx.pF
a580: 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46  unc = ctx.pVdbeF
a590: 75 6e 63 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a  unc->pFunc;.  }.
a5a0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
a5b0: 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
a5c0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f  =p->nMem );.  pO
a5d0: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
a5e0: 70 2d 3e 70 33 5d 3b 0a 20 20 63 74 78 2e 73 2e  p->p3];.  ctx.s.
a5f0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
a600: 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
a610: 62 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20  b;.  ctx.s.xDel 
a620: 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61  = 0;.  ctx.s.zMa
a630: 6c 6c 6f 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20  lloc = 0;..  /* 
a640: 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20  The output cell 
a650: 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76 65  may already have
a660: 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61   a buffer alloca
a670: 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74  ted. Move.  ** t
a680: 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63 74  he pointer to ct
a690: 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74  x.s so in case t
a6a0: 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  he user-function
a6b0: 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74 68   can use.  ** th
a6c0: 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  e already alloca
a6d0: 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65  ted buffer inste
a6e0: 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67  ad of allocating
a6f0: 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f   a new one..  */
a700: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
a710: 6d 4d 6f 76 65 28 26 63 74 78 2e 73 2c 20 70 4f  mMove(&ctx.s, pO
a720: 75 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  ut);.  MemSetTyp
a730: 65 46 6c 61 67 28 26 63 74 78 2e 73 2c 20 4d 45  eFlag(&ctx.s, ME
a740: 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e  M_Null);..  ctx.
a750: 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 69  isError = 0;.  i
a760: 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c  f( ctx.pFunc->fl
a770: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e  ags & SQLITE_FUN
a780: 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20  C_NEEDCOLL ){.  
a790: 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70 2d    assert( pOp>p-
a7a0: 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65  >aOp );.    asse
a7b0: 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79  rt( pOp[-1].p4ty
a7c0: 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29  pe==P4_COLLSEQ )
a7d0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
a7e0: 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
a7f0: 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20  _CollSeq );.    
a800: 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b  ctx.pColl = pOp[
a810: 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20  -1].p4.pColl;.  
a820: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  }.  if( sqlite3S
a830: 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
a840: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
a850: 5f 6d 69 73 75 73 65 3b 0a 20 20 28 2a 63 74 78  _misuse;.  (*ctx
a860: 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26  .pFunc->xFunc)(&
a870: 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 0a  ctx, n, apVal);.
a880: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
a890: 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20  etyOn(db) ){.   
a8a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
a8b0: 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a  elease(&ctx.s);.
a8c0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
a8d0: 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
a8e0: 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c  }.  if( db->mall
a8f0: 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20  ocFailed ){.    
a900: 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68 20 61  /* Even though a
a910: 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20 66 61   malloc() has fa
a920: 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c 65 6d  iled, the implem
a930: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
a940: 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75 6e 63      ** user func
a950: 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 61  tion may have ca
a960: 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65 33 5f  lled an sqlite3_
a970: 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66 75 6e  result_XXX() fun
a980: 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f 20  ction.    ** to 
a990: 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65 2e 20  return a value. 
a9a0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
a9b0: 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e 79 20  ll releases any 
a9c0: 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20 2a 2a  resources.    **
a9d0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
a9e0: 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e 0a 20   such a value.. 
a9f0: 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4e 6f 74     **.    ** Not
aa00: 65 3a 20 4d 61 79 62 65 20 4d 65 6d 52 65 6c 65  e: Maybe MemRele
aa10: 61 73 65 28 29 20 73 68 6f 75 6c 64 20 62 65 20  ase() should be 
aa20: 63 61 6c 6c 65 64 20 69 66 20 73 71 6c 69 74 65  called if sqlite
aa30: 33 53 61 66 65 74 79 4f 6e 28 29 0a 20 20 20 20  3SafetyOn().    
aa40: 2a 2a 20 66 61 69 6c 73 20 61 6c 73 6f 20 28 74  ** fails also (t
aa50: 68 65 20 69 66 28 2e 2e 2e 29 20 73 74 61 74 65  he if(...) state
aa60: 6d 65 6e 74 20 61 62 6f 76 65 29 2e 20 42 75 74  ment above). But
aa70: 20 69 66 20 70 65 6f 70 6c 65 20 61 72 65 0a 20   if people are. 
aa80: 20 20 20 2a 2a 20 6d 69 73 75 73 69 6e 67 20 73     ** misusing s
aa90: 71 6c 69 74 65 2c 20 74 68 65 79 20 68 61 76 65  qlite, they have
aaa0: 20 62 69 67 67 65 72 20 70 72 6f 62 6c 65 6d 73   bigger problems
aab0: 20 74 68 61 6e 20 61 20 6c 65 61 6b 65 64 20 76   than a leaked v
aac0: 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
aad0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
aae0: 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a  elease(&ctx.s);.
aaf0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
ab00: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 61 6e  .  }..  /* If an
ab10: 79 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  y auxiliary data
ab20: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
ab30: 62 65 65 6e 20 63 61 6c 6c 65 64 20 62 79 20 74  been called by t
ab40: 68 69 73 20 75 73 65 72 20 66 75 6e 63 74 69 6f  his user functio
ab50: 6e 2c 0a 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74  n,.  ** immediat
ab60: 65 6c 79 20 63 61 6c 6c 20 74 68 65 20 64 65 73  ely call the des
ab70: 74 72 75 63 74 6f 72 20 66 6f 72 20 61 6e 79 20  tructor for any 
ab80: 6e 6f 6e 2d 73 74 61 74 69 63 20 76 61 6c 75 65  non-static value
ab90: 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 63 74  s..  */.  if( ct
aba0: 78 2e 70 56 64 62 65 46 75 6e 63 20 29 7b 0a 20  x.pVdbeFunc ){. 
abb0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65     sqlite3VdbeDe
abc0: 6c 65 74 65 41 75 78 44 61 74 61 28 63 74 78 2e  leteAuxData(ctx.
abd0: 70 56 64 62 65 46 75 6e 63 2c 20 70 4f 70 2d 3e  pVdbeFunc, pOp->
abe0: 70 31 29 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  p1);.    pOp->p4
abf0: 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 63 74 78  .pVdbeFunc = ctx
ac00: 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20  .pVdbeFunc;.    
ac10: 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34  pOp->p4type = P4
ac20: 5f 56 44 42 45 46 55 4e 43 3b 0a 20 20 7d 0a 0a  _VDBEFUNC;.  }..
ac30: 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63    /* If the func
ac40: 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e  tion returned an
ac50: 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e   error, throw an
ac60: 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
ac70: 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
ac80: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
ac90: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
aca0: 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
acb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
acc0: 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20  t(&ctx.s));.    
acd0: 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
ace0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
acf0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
ad00: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f  he function into
ad10: 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a   register P3 */.
ad20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
ad30: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 63 74 78  ngeEncoding(&ctx
ad40: 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  .s, encoding);. 
ad50: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
ad60: 6f 76 65 28 70 4f 75 74 2c 20 26 63 74 78 2e 73  ove(pOut, &ctx.s
ad70: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
ad80: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4f  VdbeMemTooBig(pO
ad90: 75 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ut) ){.    goto 
ada0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 52  too_big;.  }.  R
adb0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
adc0: 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p3, pOut);.  
add0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
ade0: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
adf0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
ae00: 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20 50  : BitAnd P1 P2 P
ae10: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  3 * *.**.** Take
ae20: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e   the bit-wise AN
ae30: 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
ae40: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
ae50: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
ae60: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
ae70: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
ae80: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
ae90: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
aea0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
aeb0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f  ./* Opcode: BitO
aec0: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
aed0: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
aee0: 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65  t-wise OR of the
aef0: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
af00: 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
af10: 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72  d.** store the r
af20: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
af30: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
af40: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
af50: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
af60: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
af70: 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31  de: ShiftLeft P1
af80: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
af90: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
afa0: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
afb0: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c  ster P2 to the l
afc0: 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  eft by the.** nu
afd0: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
afe0: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
aff0: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 65 72  teger in regiser
b000: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
b010: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b020: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b030: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b040: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b050: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b060: 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68  pcode: ShiftRigh
b070: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
b080: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
b090: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
b0a0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
b0b0: 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a  he right by the.
b0c0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
b0d0: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
b0e0: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
b0f0: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
b100: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b110: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b120: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b130: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b140: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b150: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64  /.case OP_BitAnd
b160: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b170: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b180: 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  BITAND, in1, in2
b190: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b1a0: 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20  P_BitOr:        
b1b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b1c0: 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69  e as TK_BITOR, i
b1d0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b1e0: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65  .case OP_ShiftLe
b1f0: 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ft:             
b200: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
b210: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
b220: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
b230: 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20  _ShiftRight: {  
b240: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b250: 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69   as TK_RSHIFT, i
b260: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b270: 0a 20 20 69 36 34 20 61 2c 20 62 3b 0a 0a 20 20  .  i64 a, b;..  
b280: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
b290: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
b2a0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
b2b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
b2c0: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
b2d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
b2e0: 61 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  a = sqlite3VdbeI
b2f0: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  ntValue(pIn2);. 
b300: 20 62 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   b = sqlite3Vdbe
b310: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
b320: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
b330: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73  pcode ){.    cas
b340: 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20  e OP_BitAnd:    
b350: 20 20 61 20 26 3d 20 62 3b 20 20 20 20 20 62 72    a &= b;     br
b360: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
b370: 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 61 20  _BitOr:       a 
b380: 7c 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b 3b  |= b;     break;
b390: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 53 68 69  .    case OP_Shi
b3a0: 66 74 4c 65 66 74 3a 20 20 20 61 20 3c 3c 3d 20  ftLeft:   a <<= 
b3b0: 62 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  b;    break;.   
b3c0: 20 64 65 66 61 75 6c 74 3a 20 20 61 73 73 65 72   default:  asser
b3d0: 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
b3e0: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 29 3b  OP_ShiftRight );
b3f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b400: 20 20 20 20 20 20 20 20 20 20 61 20 3e 3e 3d 20            a >>= 
b410: 62 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  b;    break;.  }
b420: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 61  .  pOut->u.i = a
b430: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
b440: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
b450: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
b460: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d  * Opcode: AddImm
b470: 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a    P1 P2 * * *.**
b480: 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e   .** Add the con
b490: 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20  stant P2 to the 
b4a0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b4b0: 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73  r P1..** The res
b4c0: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e  ult is always an
b4d0: 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
b4e0: 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67  To force any reg
b4f0: 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69  ister to be an i
b500: 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64  nteger, just add
b510: 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41   0..*/.case OP_A
b520: 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20  ddImm: {        
b530: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
b540: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
b550: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
b560: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
b570: 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b  Op->p2;.  break;
b580: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
b590: 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a  ustBeInt P1 P2 *
b5a0: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63   * *.** .** Forc
b5b0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
b5c0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
b5d0: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
b5e0: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
b5f0: 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P1 is not an in
b600: 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74  teger and cannot
b610: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
b620: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  to an integer.**
b630: 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f   without data lo
b640: 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  ss, then jump im
b650: 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c  mediately to P2,
b660: 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20   or if P2==0.** 
b670: 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  raise an SQLITE_
b680: 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69  MISMATCH excepti
b690: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  on..*/.case OP_M
b6a0: 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20  ustBeInt: {     
b6b0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
b6c0: 69 6e 31 20 2a 2f 0a 20 20 61 70 70 6c 79 41 66  in1 */.  applyAf
b6d0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
b6e0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
b6f0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66   encoding);.  if
b700: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
b710: 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
b720: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
b730: 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
b740: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
b750: 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
b760: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
b770: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
b780: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
b790: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
b7a0: 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  e{.    MemSetTyp
b7b0: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
b7c0: 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
b7d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
b7e0: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
b7f0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
b800: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
b810: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
b820: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
b830: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
b840: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
b850: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
b860: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
b870: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
b880: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
b890: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
b8a0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
b8b0: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
b8c0: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
b8d0: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
b8e0: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
b8f0: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
b900: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
b910: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
b920: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
b930: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
b940: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
b950: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
b960: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
b970: 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  & MEM_Int ){.   
b980: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
b990: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
b9a0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
b9b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b9c0: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
b9d0: 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20  : ToText P1 * * 
b9e0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
b9f0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
ba00: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
ba10: 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ext..** If the v
ba20: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
ba30: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
ba40: 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68   string using th
ba50: 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20  e.** equivalent 
ba60: 6f 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c  of printf().  Bl
ba70: 6f 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e  ob values are un
ba80: 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61  changed and.** a
ba90: 72 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69  re afterwards si
baa0: 6d 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64  mply interpreted
bab0: 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20   as text..**.** 
bac0: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
bad0: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
bae0: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
baf0: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
bb00: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74  /.case OP_ToText
bb10: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
bb20: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
bb30: 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20  TK_TO_TEXT, in1 
bb40: 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  */.  if( pIn1->f
bb50: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
bb60: 29 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72  ) break;.  asser
bb70: 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d  t( MEM_Str==(MEM
bb80: 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70  _Blob>>3) );.  p
bb90: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70  In1->flags |= (p
bba0: 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42  In1->flags&MEM_B
bbb0: 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79  lob)>>3;.  apply
bbc0: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
bbd0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
bbe0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20  encoding);.  rc 
bbf0: 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
bc00: 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1);.  assert( pI
bc10: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
bc20: 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  Str || db->mallo
bc30: 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e  cFailed );.  pIn
bc40: 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  1->flags &= ~(ME
bc50: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
bc60: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f  EM_Blob|MEM_Zero
bc70: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
bc80: 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
bc90: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
bca0: 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31  pcode: ToBlob P1
bcb0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
bcc0: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
bcd0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
bce0: 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49   be a BLOB..** I
bcf0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e  f the value is n
bd00: 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20  umeric, convert 
bd10: 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 66  it to a string f
bd20: 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73  irst..** Strings
bd30: 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69 6e   are simply rein
bd40: 74 65 72 70 72 65 74 65 64 20 61 73 20 62 6c 6f  terpreted as blo
bd50: 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e 67  bs with no chang
bd60: 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64 65  e.** to the unde
bd70: 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a  rlying data..**.
bd80: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
bd90: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
bda0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
bdb0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
bdc0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42  ..*/.case OP_ToB
bdd0: 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  lob: {          
bde0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
bdf0: 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69  as TK_TO_BLOB, i
be00: 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31  n1 */.  if( pIn1
be10: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
be20: 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66  ll ) break;.  if
be30: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
be40: 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b   MEM_Blob)==0 ){
be50: 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
be60: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
be70: 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69  AFF_TEXT, encodi
be80: 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ng);.    assert(
be90: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
bea0: 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61  EM_Str || db->ma
beb0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
bec0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
bed0: 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29  (pIn1, MEM_Blob)
bee0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
bef0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  In1->flags &= ~(
bf00: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45  MEM_TypeMask&~ME
bf10: 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55  M_Blob);.  }.  U
bf20: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
bf30: 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61  ZE(pIn1);.  brea
bf40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
bf50: 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20   ToNumeric P1 * 
bf60: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
bf70: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
bf80: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
bf90: 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72   numeric (either
bfa0: 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f   an.** integer o
bfb0: 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  r a floating-poi
bfc0: 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49  nt number.).** I
bfd0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
bfe0: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
bff0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
c000: 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a  o an using the.*
c010: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
c020: 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29  atoi() or atof()
c030: 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20   and store 0 if 
c040: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
c050: 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62  on .** is possib
c060: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
c070: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c080: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c090: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c0a0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c0b0: 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b   OP_ToNumeric: {
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0d0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c0e0: 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20  TO_NUMERIC, in1 
c0f0: 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
c100: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 4e 75 6c  flags & (MEM_Nul
c110: 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65  l|MEM_Int|MEM_Re
c120: 61 6c 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  al))==0 ){.    s
c130: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d  qlite3VdbeMemNum
c140: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  erify(pIn1);.  }
c150: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
c160: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
c170: 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  T_CAST */../* Op
c180: 63 6f 64 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a  code: ToInt P1 *
c190: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c1a0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c1b0: 72 65 67 69 73 74 65 72 20 50 31 20 62 65 20 61  register P1 be a
c1c0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a  n integer.  If.*
c1d0: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63  * The value is c
c1e0: 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20  urrently a real 
c1f0: 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73  number, drop its
c200: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
c210: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
c220: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
c230: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
c240: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
c250: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
c260: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
c270: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
c280: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
c290: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
c2a0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
c2b0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c2c0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c2d0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c2e0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c2f0: 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20   OP_ToInt: {    
c300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c310: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49   same as TK_TO_I
c320: 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  NT, in1 */.  if(
c330: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c340: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
c350: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c360: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
c370: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
c380: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
c390: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20  TE_OMIT_CAST./* 
c3a0: 4f 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50  Opcode: ToReal P
c3b0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
c3c0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
c3d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
c3e0: 6f 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20  o be a floating 
c3f0: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a  point number..**
c400: 20 49 66 20 54 68 65 20 76 61 6c 75 65 20 69 73   If The value is
c410: 20 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e   currently an in
c420: 74 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  teger, convert i
c430: 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  t..** If the val
c440: 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c  ue is text or bl
c450: 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65  ob, try to conve
c460: 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65  rt it to an inte
c470: 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ger using the.**
c480: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
c490: 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20  toi() and store 
c4a0: 30 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63  0.0 if no such c
c4b0: 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73  onversion is pos
c4c0: 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e  sible..**.** A N
c4d0: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
c4e0: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
c4f0: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
c500: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
c510: 61 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b  ase OP_ToReal: {
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c530: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c540: 54 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a  TO_REAL, in1 */.
c550: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
c560: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
c570: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
c580: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
c590: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
c5a0: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
c5b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
c5c0: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  */../* Opcode: L
c5d0: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
c5e0: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
c5f0: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
c600: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e  ister P1 and P3.
c610: 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67    If reg(P3)<reg
c620: 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  (P1) then.** jum
c630: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
c640: 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20    .**.** If the 
c650: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
c660: 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  L bit of P5 is s
c670: 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65  et and either re
c680: 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28  g(P1) or.** reg(
c690: 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  P3) is NULL then
c6a0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20   take the jump. 
c6b0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
c6c0: 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69  UMPIFNULL .** bi
c6d0: 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20  t is clear then 
c6e0: 66 61 6c 6c 20 74 68 72 75 20 69 66 20 65 69 74  fall thru if eit
c6f0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
c700: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ULL..**.** The S
c710: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70  QLITE_AFF_MASK p
c720: 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73  ortion of P5 mus
c730: 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79  t be an affinity
c740: 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20   character -.** 
c750: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
c760: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
c770: 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  GER, and so fort
c780: 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73  h. An attempt is
c790: 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65   made .** to coe
c7a0: 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rce both inputs 
c7b0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69  according to thi
c7c0: 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72  s affinity befor
c7d0: 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  e the.** compari
c7e0: 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20  son is made. If 
c7f0: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  the SQLITE_AFF_M
c800: 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65  ASK is 0x00, the
c810: 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66  n numeric.** aff
c820: 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e  inity is used. N
c830: 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66  ote that the aff
c840: 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e  inity conversion
c850: 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20  s are stored.** 
c860: 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e  back into the in
c870: 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31  put registers P1
c880: 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69   and P3.  So thi
c890: 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75  s opcode can cau
c8a0: 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74  se.** persistent
c8b0: 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69   changes to regi
c8c0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
c8d0: 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20  .**.** Once any 
c8e0: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65  conversions have
c8f0: 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e   taken place, an
c900: 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20  d neither value 
c910: 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65  is NULL, .** the
c920: 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
c930: 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61  ared. If both va
c940: 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74  lues are blobs t
c950: 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a  hen memcmp() is.
c960: 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  ** used to deter
c970: 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73  mine the results
c980: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
c990: 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  on.  If both val
c9a0: 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c  ues.** are text,
c9b0: 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70   then the approp
c9c0: 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20  riate collating 
c9d0: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69  function specifi
c9e0: 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20  ed in.** P4 is  
c9f0: 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63  used to do the c
ca00: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50  omparison.  If P
ca10: 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  4 is not specifi
ca20: 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d  ed then.** memcm
ca30: 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63  p() is used to c
ca40: 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69  ompare text stri
ca50: 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  ng.  If both val
ca60: 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72  ues are.** numer
ca70: 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72  ic, then a numer
ca80: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ic comparison is
ca90: 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77   used. If the tw
caa0: 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  o values.** are 
cab0: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70  of different typ
cac0: 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73  es, then numbers
cad0: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
cae0: 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72  less than.** str
caf0: 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73  ings and strings
cb00: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
cb10: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
cb20: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
cb30: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74  LITE_STOREP2 bit
cb40: 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
cb50: 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e  hen do not jump.
cb60: 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74    Instead,.** st
cb70: 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65  ore a boolean re
cb80: 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20  sult (either 0, 
cb90: 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69  or 1, or NULL) i
cba0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
cbb0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20  /./* Opcode: Ne 
cbc0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
cbd0: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
cbe0: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
cbf0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
cc00: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
cc10: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
cc20: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
cc30: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
cc40: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20  are not equal.  
cc50: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
cc60: 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f  e for.** additio
cc70: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
cc80: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  .*/./* Opcode: E
cc90: 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  q P1 P2 P3 P4 P5
cca0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
ccb0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
ccc0: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
ccd0: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
cce0: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
ccf0: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
cd00: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
cd10: 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20  3 are equal..** 
cd20: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
cd30: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
cd40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
cd50: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50  ./* Opcode: Le P
cd60: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
cd70: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
cd80: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
cd90: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
cda0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
cdb0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
cdc0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
cdd0: 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68  er P3 is less th
cde0: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
cdf0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
ce00: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
ce10: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
ce20: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
ce30: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
ce40: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31  /* Opcode: Gt P1
ce50: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
ce60: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
ce70: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
ce80: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
ce90: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
cea0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
ceb0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
cec0: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
ced0: 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  than the content
cee0: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
cef0: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
cf00: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
cf10: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
cf20: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
cf30: 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ge P1 P2 P3 P4 
cf40: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
cf50: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
cf60: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
cf70: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
cf80: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
cf90: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
cfa0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
cfb0: 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
cfc0: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
cfd0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
cfe0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
cff0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
d000: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
d010: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
d020: 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Eq:             
d030: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d040: 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  EQ, jump, in1, i
d050: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  n3 */.case OP_Ne
d060: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
d070: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45  /* same as TK_NE
d080: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
d090: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20   */.case OP_Lt: 
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d0b0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20   same as TK_LT, 
d0c0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
d0d0: 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20  /.case OP_Le:   
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
d0f0: 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75  ame as TK_LE, ju
d100: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
d110: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20  case OP_Gt:     
d120: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d130: 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70  e as TK_GT, jump
d140: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
d150: 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20  se OP_Ge: {     
d160: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d170: 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20  as TK_GE, jump, 
d180: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
d190: 74 20 66 6c 61 67 73 3b 0a 20 20 69 6e 74 20 72  t flags;.  int r
d1a0: 65 73 3b 0a 20 20 63 68 61 72 20 61 66 66 69 6e  es;.  char affin
d1b0: 69 74 79 3b 0a 0a 20 20 66 6c 61 67 73 20 3d 20  ity;..  flags = 
d1c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 7c 70 49 6e 33  pIn1->flags|pIn3
d1d0: 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 69 66 28 20  ->flags;..  if( 
d1e0: 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29  flags&MEM_Null )
d1f0: 7b 0a 20 20 20 20 2f 2a 20 49 66 20 65 69 74 68  {.    /* If eith
d200: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
d210: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
d220: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c  lt is always NUL
d230: 4c 2e 0a 20 20 20 20 2a 2a 20 54 68 65 20 6a 75  L..    ** The ju
d240: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
d250: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
d260: 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e  NULL bit is set.
d270: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
d280: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
d290: 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
d2a0: 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
d2b0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
d2c0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d2d0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
d2e0: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
d2f0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
d300: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  pOut);.    }else
d310: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
d320: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
d330: 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
d340: 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  Op->p2-1;.    }.
d350: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
d360: 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
d370: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
d380: 46 5f 4d 41 53 4b 3b 0a 20 20 69 66 28 20 61 66  F_MASK;.  if( af
d390: 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 61 70  finity ){.    ap
d3a0: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
d3b0: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f  , affinity, enco
d3c0: 64 69 6e 67 29 3b 0a 20 20 20 20 61 70 70 6c 79  ding);.    apply
d3d0: 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61  Affinity(pIn3, a
d3e0: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
d3f0: 67 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  g);.    if( db->
d400: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
d410: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
d420: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d430: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
d440: 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43  EQ || pOp->p4.pC
d450: 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 45 78 70 61  oll==0 );.  Expa
d460: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
d470: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
d480: 3b 0a 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65  ;.  res = sqlite
d490: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33  3MemCompare(pIn3
d4a0: 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e  , pIn1, pOp->p4.
d4b0: 70 43 6f 6c 6c 29 3b 0a 20 20 73 77 69 74 63 68  pColl);.  switch
d4c0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
d4d0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a  .    case OP_Eq:
d4e0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30      res = res==0
d4f0: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
d500: 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20   case OP_Ne:    
d510: 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20  res = res!=0;   
d520: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
d530: 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20  e OP_Lt:    res 
d540: 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72  = res<0;      br
d550: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
d560: 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Le:    res = re
d570: 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s<=0;     break;
d580: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a  .    case OP_Gt:
d590: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b      res = res>0;
d5a0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
d5b0: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
d5c0: 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20  res = res>=0;   
d5d0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
d5e0: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
d5f0: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
d600: 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61      pOut = &p->a
d610: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
d620: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d630: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
d640: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
d650: 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54   res;.    REGIST
d660: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
d670: 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  , pOut);.  }else
d680: 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
d690: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
d6a0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
d6b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75  /* Opcode: Permu
d6c0: 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20  tation * * * P4 
d6d0: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
d6e0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64  permutation used
d6f0: 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   by the OP_Compa
d700: 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62  re operator to b
d710: 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f  e the array.** o
d720: 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34  f integers in P4
d730: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
d740: 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
d750: 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
d760: 6e 65 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74  next OP_Permutat
d770: 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c  ion, OP_Compare,
d780: 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20  .** OP_Halt, or 
d790: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54  OP_ResultRow.  T
d7a0: 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f  ypically the OP_
d7b0: 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75  Permutation shou
d7c0: 6c 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65  ld occur.** imme
d7d0: 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
d7e0: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
d7f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d  .*/.case OP_Perm
d800: 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73  utation: {.  ass
d810: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
d820: 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
d830: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d840: 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d  p4.ai );.  aPerm
d850: 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  ute = pOp->p4.ai
d860: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
d870: 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65   Opcode: Compare
d880: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
d890: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 6f 20  *.** Compare to 
d8a0: 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73  vectors of regis
d8b0: 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e  ters in reg(P1).
d8c0: 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 61  .reg(P1+P3-1) (a
d8d0: 6c 6c 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 22  ll this.** one "
d8e0: 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50  A") and in reg(P
d8f0: 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29  2)..reg(P2+P3-1)
d900: 20 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68   ("B").  Save th
d910: 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74  e result of.** t
d920: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f  he comparison fo
d930: 72 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78  r use by the nex
d940: 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75  t OP_Jump instru
d950: 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  ct..**.** P4 is 
d960: 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
d970: 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ure that defines
d980: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
d990: 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a  nces and sort.**
d9a0: 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20   orders for the 
d9b0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65  comparison.  The
d9c0: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70   permutation app
d9d0: 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  lies to register
d9e0: 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20  s.** only.  The 
d9f0: 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73  KeyInfo elements
da00: 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e   are used sequen
da10: 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  tially..**.** Th
da20: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
da30: 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f  a sort compariso
da40: 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70  n, so NULLs comp
da50: 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55  are equal,.** NU
da60: 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  LLs are less tha
da70: 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65  n numbers, numbe
da80: 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  rs are less than
da90: 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64   strings,.** and
daa0: 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73   strings are les
dab0: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f  s than blobs..*/
dac0: 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65  .case OP_Compare
dad0: 3a 20 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f  : {.  int n = pO
dae0: 70 2d 3e 70 33 3b 0a 20 20 69 6e 74 20 69 2c 20  p->p3;.  int i, 
daf0: 70 31 2c 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20  p1, p2;.  const 
db00: 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
db10: 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
db20: 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
db30: 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  n>0 );.  assert(
db40: 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a   pKeyInfo!=0 );.
db50: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
db60: 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
db70: 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b  & p1+n<=p->nMem+
db80: 31 20 29 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  1 );.  p2 = pOp-
db90: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
dba0: 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 70 2d 3e  2>0 && p2+n<=p->
dbb0: 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 66 6f 72 28  nMem+1 );.  for(
dbc0: 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
dbd0: 20 20 20 20 69 6e 74 20 69 64 78 20 3d 20 61 50      int idx = aP
dbe0: 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
dbf0: 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 43 6f  e[i] : i;.    Co
dc00: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20  llSeq *pColl;   
dc10: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
dc20: 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e  quence to use on
dc30: 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20   this term */.  
dc40: 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20    int bRev;     
dc50: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72       /* True for
dc60: 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74   DESCENDING sort
dc70: 20 6f 72 64 65 72 20 2a 2f 0a 20 20 20 20 52 45   order */.    RE
dc80: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b  GISTER_TRACE(p1+
dc90: 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 31  idx, &p->aMem[p1
dca0: 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49  +idx]);.    REGI
dcb0: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64  STER_TRACE(p2+id
dcc0: 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69  x, &p->aMem[p2+i
dcd0: 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74  dx]);.    assert
dce0: 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  ( i<pKeyInfo->nF
dcf0: 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c  ield );.    pCol
dd00: 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43  l = pKeyInfo->aC
dd10: 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76  oll[i];.    bRev
dd20: 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f   = pKeyInfo->aSo
dd30: 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20  rtOrder[i];.    
dd40: 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74  iCompare = sqlit
dd50: 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 70 2d  e3MemCompare(&p-
dd60: 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26  >aMem[p1+idx], &
dd70: 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c  p->aMem[p2+idx],
dd80: 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28   pColl);.    if(
dd90: 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20   iCompare ){.   
dda0: 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69 43     if( bRev ) iC
ddb0: 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61  ompare = -iCompa
ddc0: 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  re;.      break;
ddd0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65  .    }.  }.  aPe
dde0: 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65  rmute = 0;.  bre
ddf0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
de00: 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20  : Jump P1 P2 P3 
de10: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
de20: 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f  o the instructio
de30: 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31 2c  n at address P1,
de40: 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e   P2, or P3 depen
de50: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
de60: 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72  ** in the most r
de70: 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65  ecent OP_Compare
de80: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65   instruction the
de90: 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c   P1 vector was l
dea0: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61  ess than.** equa
deb0: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
dec0: 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65 63   than the P2 vec
ded0: 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c  tor, respectivel
dee0: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75  y..*/.case OP_Ju
def0: 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mp: {           
df00: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
df10: 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b  f( iCompare<0 ){
df20: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
df30: 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69  1 - 1;.  }else i
df40: 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29  f( iCompare==0 )
df50: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
df60: 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
df70: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
df80: 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  3 - 1;.  }.  bre
df90: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
dfa0: 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
dfb0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68   *.**.** Take th
dfc0: 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66  e logical AND of
dfd0: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
dfe0: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
dff0: 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20  P2 and.** write 
e000: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20  the result into 
e010: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
e020: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
e030: 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73  or P2 is 0 (fals
e040: 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
e050: 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a  lt is 0 even if.
e060: 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  ** the other inp
e070: 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
e080: 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20  ULL and true or 
e090: 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a  two NULLs give.*
e0a0: 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  * a NULL output.
e0b0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
e0c0: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
e0d0: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f  *.** Take the lo
e0e0: 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20  gical OR of the 
e0f0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
e100: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
e110: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e  .** store the an
e120: 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  swer in register
e130: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
e140: 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
e150: 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20   nonzero (true) 
e160: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e170: 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65  is 1 (true).** e
e180: 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72  ven if the other
e190: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
e1a0: 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73   A NULL and fals
e1b0: 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a  e or two NULLs.*
e1c0: 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75  * give a NULL ou
e1d0: 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tput..*/.case OP
e1e0: 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20  _And:           
e1f0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
e200: 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  _AND, in1, in2, 
e210: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
e220: 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  Or: {           
e230: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e240: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
e250: 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 2c 20  t3 */.  int v1, 
e260: 76 32 3b 20 20 20 20 2f 2a 20 30 3d 3d 46 41 4c  v2;    /* 0==FAL
e270: 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
e280: 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
e290: 2a 2f 0a 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  */..  if( pIn1->
e2a0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
e2b0: 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a   ){.    v1 = 2;.
e2c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20    }else{.    v1 
e2d0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
e2e0: 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
e2f0: 20 20 7d 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e    }.  if( pIn2->
e300: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
e310: 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a   ){.    v2 = 2;.
e320: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20    }else{.    v2 
e330: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
e340: 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a  Value(pIn2)!=0;.
e350: 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
e360: 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b  pcode==OP_And ){
e370: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
e380: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
e390: 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20  and_logic[] = { 
e3a0: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32  0, 0, 0, 0, 1, 2
e3b0: 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20  , 0, 2, 2 };.   
e3c0: 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b   v1 = and_logic[
e3d0: 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73  v1*3+v2];.  }els
e3e0: 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
e3f0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
e400: 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b  r or_logic[] = {
e410: 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20   0, 1, 2, 1, 1, 
e420: 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20  1, 2, 1, 2 };.  
e430: 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b    v1 = or_logic[
e440: 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20  v1*3+v2];.  }.  
e450: 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20  if( v1==2 ){.   
e460: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
e470: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
e480: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f  .  }else{.    pO
e490: 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20  ut->u.i = v1;.  
e4a0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
e4b0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
e4c0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
e4d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20  ./* Opcode: Not 
e4e0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
e4f0: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
e500: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
e510: 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61  r P1 as a boolea
e520: 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20  n value.  Store 
e530: 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63  the.** boolean c
e540: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67  omplement in reg
e550: 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74 68  ister P2.  If th
e560: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
e570: 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55  ter P1 is .** NU
e580: 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20  LL, then a NULL 
e590: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e  is stored in P2.
e5a0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a  .*/.case OP_Not:
e5b0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e5c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e5d0: 4e 4f 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 4f  NOT, in1 */.  pO
e5e0: 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ut = &p->aMem[pO
e5f0: 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49  p->p2];.  if( pI
e600: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
e610: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
e620: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
e630: 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  l(pOut);.  }else
e640: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
e650: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
e660: 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65 49  t, !sqlite3VdbeI
e670: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a  ntValue(pIn1));.
e680: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
e690: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f  /* Opcode: BitNo
e6a0: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
e6b0: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
e6c0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
e6d0: 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69  ister P1 as an i
e6e0: 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74  nteger.  Store t
e6f0: 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c  he.** ones-compl
e700: 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20  ement of the P1 
e710: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
e720: 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68  ter P2.  If P1 h
e730: 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74  olds.** a NULL t
e740: 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  hen store a NULL
e750: 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
e760: 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20  OP_BitNot: {    
e770: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e780: 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69   as TK_BITNOT, i
e790: 6e 31 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26  n1 */.  pOut = &
e7a0: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
e7b0: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
e7c0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
e7d0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
e7e0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
e7f0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
e800: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
e810: 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71  tInt64(pOut, ~sq
e820: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
e830: 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20  e(pIn1));.  }.  
e840: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
e850: 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33  ode: If P1 P2 P3
e860: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
e870: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
e880: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
e890: 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20  1 is true.  The 
e8a0: 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20 63  value is.** is c
e8b0: 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69  onsidered true i
e8c0: 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20  f it is numeric 
e8d0: 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49  and non-zero.  I
e8e0: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
e8f0: 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
e900: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
e910: 69 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a  if P3 is true..*
e920: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  /./* Opcode: IfN
e930: 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ot P1 P2 P3 * *.
e940: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
e950: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
e960: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
e970: 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75  False.  The valu
e980: 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  e is.** is consi
e990: 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74  dered true if it
e9a0: 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76   has a numeric v
e9b0: 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49  alue of zero.  I
e9c0: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
e9d0: 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
e9e0: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
e9f0: 69 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a  if P3 is true..*
ea00: 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20  /.case OP_If:   
ea10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ea20: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61   jump, in1 */.ca
ea30: 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20  se OP_IfNot: {  
ea40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
ea50: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  p, in1 */.  int 
ea60: 63 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  c;.  if( pIn1->f
ea70: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
ea80: 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e  ){.    c = pOp->
ea90: 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66  p3;.  }else{.#if
eaa0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
eab0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
eac0: 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64     c = sqlite3Vd
ead0: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
eae0: 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63  !=0;.#else.    c
eaf0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
eb00: 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  alValue(pIn1)!=0
eb10: 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  .0;.#endif.    i
eb20: 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
eb30: 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21  OP_IfNot ) c = !
eb40: 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20 29  c;.  }.  if( c )
eb50: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
eb60: 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2-1;.  }.  brea
eb70: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
eb80: 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 50 33   IsNull P1 P2 P3
eb90: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
eba0: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
ebb0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ebc0: 31 20 69 73 20 4e 55 4c 4c 2e 20 20 49 66 20 50  1 is NULL.  If P
ebd0: 33 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20  3 is greater.** 
ebe0: 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20  than zero, then 
ebf0: 63 68 65 63 6b 20 61 6c 6c 20 76 61 6c 75 65 73  check all values
ec00: 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31   reg(P1), reg(P1
ec10: 2b 31 29 2c 20 0a 2a 2a 20 72 65 67 28 50 31 2b  +1), .** reg(P1+
ec20: 32 29 2c 20 2e 2e 2e 2c 20 72 65 67 28 50 31 2b  2), ..., reg(P1+
ec30: 50 33 2d 31 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  P3-1)..*/.case O
ec40: 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
ec50: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ec60: 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
ec70: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  p, in1 */.  int 
ec80: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  n = pOp->p3;.  a
ec90: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
eca0: 30 20 7c 7c 20 70 4f 70 2d 3e 70 31 3e 30 20 29  0 || pOp->p1>0 )
ecb0: 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 69 66 28 20  ;.  do{.    if( 
ecc0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
ecd0: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20  EM_Null)!=0 ){. 
ece0: 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
ecf0: 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65  2 - 1;.      bre
ed00: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 49  ak;.    }.    pI
ed10: 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20  n1++;.  }while( 
ed20: 2d 2d 6e 20 3e 20 30 20 29 3b 0a 20 20 62 72 65  --n > 0 );.  bre
ed30: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
ed40: 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20  : NotNull P1 P2 
ed50: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  * * *.**.** Jump
ed60: 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
ed70: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ed80: 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20  P1 is not NULL. 
ed90: 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74   .*/.case OP_Not
eda0: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
edb0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
edc0: 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  _NOTNULL, jump, 
edd0: 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  in1 */.  if( (pI
ede0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
edf0: 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
ee00: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
ee10: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
ee20: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74  ../* Opcode: Set
ee30: 4e 75 6d 43 6f 6c 75 6d 6e 73 20 2a 20 50 32 20  NumColumns * P2 
ee40: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
ee50: 20 6f 70 63 6f 64 65 20 73 65 74 73 20 74 68 65   opcode sets the
ee60: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
ee70: 6e 73 20 66 6f 72 20 74 68 65 20 63 75 72 73 6f  ns for the curso
ee80: 72 20 6f 70 65 6e 65 64 20 62 79 20 74 68 65 0a  r opened by the.
ee90: 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  ** following ins
eea0: 74 72 75 63 74 69 6f 6e 20 74 6f 20 50 32 2e 0a  truction to P2..
eeb0: 2a 2a 0a 2a 2a 20 41 6e 20 4f 50 5f 53 65 74 4e  **.** An OP_SetN
eec0: 75 6d 43 6f 6c 75 6d 6e 73 20 69 73 20 6f 6e 6c  umColumns is onl
eed0: 79 20 75 73 65 66 75 6c 20 69 66 20 69 74 20 6f  y useful if it o
eee0: 63 63 75 72 73 20 69 6d 6d 65 64 69 61 74 65 6c  ccurs immediatel
eef0: 79 20 62 65 66 6f 72 65 20 0a 2a 2a 20 6f 6e 65  y before .** one
ef00: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
ef10: 67 20 6f 70 63 6f 64 65 73 3a 0a 2a 2a 0a 2a 2a  g opcodes:.**.**
ef20: 20 20 20 20 20 4f 70 65 6e 52 65 61 64 0a 2a 2a       OpenRead.**
ef30: 20 20 20 20 20 4f 70 65 6e 57 72 69 74 65 0a 2a       OpenWrite.*
ef40: 2a 20 20 20 20 20 4f 70 65 6e 50 73 65 75 64 6f  *     OpenPseudo
ef50: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
ef60: 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 69  _Column opcode i
ef70: 73 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64  s to be executed
ef80: 20 6f 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68   on a cursor, th
ef90: 65 6e 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64  en.** this opcod
efa0: 65 20 6d 75 73 74 20 62 65 20 70 72 65 73 65 6e  e must be presen
efb0: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 65  t immediately be
efc0: 66 6f 72 65 20 74 68 65 20 6f 70 63 6f 64 65 20  fore the opcode 
efd0: 74 68 61 74 0a 2a 2a 20 6f 70 65 6e 73 20 74 68  that.** opens th
efe0: 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 23 69 66  e cursor..*/.#if
eff0: 20 30 0a 63 61 73 65 20 4f 50 5f 53 65 74 4e 75   0.case OP_SetNu
f000: 6d 43 6f 6c 75 6d 6e 73 3a 20 7b 0a 20 20 62 72  mColumns: {.  br
f010: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
f020: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
f030: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
f040: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
f050: 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72  he data that cur
f060: 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
f070: 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20   as a structure 
f080: 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74  built using.** t
f090: 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  he MakeRecord in
f0a0: 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65  struction.  (See
f0b0: 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
f0c0: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
f0d0: 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ional.** informa
f0e0: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66  tion about the f
f0f0: 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74  ormat of the dat
f100: 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65  a.)  Extract the
f110: 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a   P2-th column.**
f120: 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72   from this recor
f130: 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  d.  If there are
f140: 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31   less that (P2+1
f150: 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20  ) .** values in 
f160: 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72  the record, extr
f170: 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  act a NULL..**.*
f180: 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72  * The value extr
f190: 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20  acted is stored 
f1a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
f1b0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c  **.** If the col
f1c0: 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77  umn contains few
f1d0: 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64  er than P2 field
f1e0: 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20  s, then extract 
f1f0: 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20  a NULL.  Or,.** 
f200: 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  if the P4 argume
f210: 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75  nt is a P4_MEM u
f220: 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  se the value of 
f230: 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
f240: 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
f250: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
f260: 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20 70 61 79  umn: {.  int pay
f270: 6c 6f 61 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e  loadSize;   /* N
f280: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
f290: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
f2a0: 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e    int p1 = pOp->
f2b0: 70 31 3b 20 20 2f 2a 20 50 31 20 76 61 6c 75 65  p1;  /* P1 value
f2c0: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a   of the opcode *
f2d0: 2f 0a 20 20 69 6e 74 20 70 32 20 3d 20 70 4f 70  /.  int p2 = pOp
f2e0: 2d 3e 70 32 3b 20 20 2f 2a 20 63 6f 6c 75 6d 6e  ->p2;  /* column
f2f0: 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69   number to retri
f300: 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  eve */.  VdbeCur
f310: 73 6f 72 20 2a 70 43 20 3d 20 30 3b 2f 2a 20 54  sor *pC = 0;/* T
f320: 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a  he VDBE cursor *
f330: 2f 0a 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20  /.  char *zRec; 
f340: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
f350: 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65  r to complete re
f360: 63 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42  cord-data */.  B
f370: 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20  tCursor *pCrsr; 
f380: 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63    /* The BTree c
f390: 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a  ursor */.  u32 *
f3a0: 61 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a  aType;        /*
f3b0: 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20   aType[i] holds 
f3c0: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
f3d0: 20 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c   of the i-th col
f3e0: 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f  umn */.  u32 *aO
f3f0: 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61  ffset;      /* a
f400: 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66  Offset[i] is off
f410: 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20  set to start of 
f420: 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f  data for i-th co
f430: 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  lumn */.  int nF
f440: 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ield;        /* 
f450: 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
f460: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
f470: 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20  /.  int len;    
f480: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65         /* The le
f490: 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69  ngth of the seri
f4a0: 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20  alized data for 
f4b0: 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  the column */.  
f4c0: 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
f4d0: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
f4e0: 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44  er */.  char *zD
f4f0: 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61  ata;       /* Pa
f500: 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  rt of the record
f510: 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
f520: 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20  /.  Mem *pDest; 
f530: 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
f540: 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74  to write the ext
f550: 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a  racted value */.
f560: 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
f570: 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
f580: 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
f590: 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
f5a0: 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c  .  memset(&sMem,
f5b0: 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29   0, sizeof(sMem)
f5c0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c  );.  assert( p1<
f5d0: 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
f5e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
f5f0: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
f600: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74  >nMem );.  pDest
f610: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
f620: 3e 70 33 5d 3b 0a 20 20 4d 65 6d 53 65 74 54 79  >p3];.  MemSetTy
f630: 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45  peFlag(pDest, ME
f640: 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 2f 2a 20 54  M_Null);..  /* T
f650: 68 69 73 20 62 6c 6f 63 6b 20 73 65 74 73 20 74  his block sets t
f660: 68 65 20 76 61 72 69 61 62 6c 65 20 70 61 79 6c  he variable payl
f670: 6f 61 64 53 69 7a 65 20 74 6f 20 62 65 20 74 68  oadSize to be th
f680: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
f690: 66 0a 20 20 2a 2a 20 62 79 74 65 73 20 69 6e 20  f.  ** bytes in 
f6a0: 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a  the record..  **
f6b0: 0a 20 20 2a 2a 20 7a 52 65 63 20 69 73 20 73 65  .  ** zRec is se
f6c0: 74 20 74 6f 20 62 65 20 74 68 65 20 63 6f 6d 70  t to be the comp
f6d0: 6c 65 74 65 20 74 65 78 74 20 6f 66 20 74 68 65  lete text of the
f6e0: 20 72 65 63 6f 72 64 20 69 66 20 69 74 20 69 73   record if it is
f6f0: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a   available..  **
f700: 20 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65   The complete re
f710: 63 6f 72 64 20 74 65 78 74 20 69 73 20 61 6c 77  cord text is alw
f720: 61 79 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  ays available fo
f730: 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a  r pseudo-tables.
f740: 20 20 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f    ** If the reco
f750: 72 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  rd is stored in 
f760: 61 20 63 75 72 73 6f 72 2c 20 74 68 65 20 63 6f  a cursor, the co
f770: 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65  mplete record te
f780: 78 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62 65  xt.  ** might be
f790: 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68   available in th
f7a0: 65 20 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68  e  pC->aRow cach
f7b0: 65 2e 20 20 4f 72 20 69 74 20 6d 69 67 68 74 20  e.  Or it might 
f7c0: 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20  not be..  ** If 
f7d0: 74 68 65 20 64 61 74 61 20 69 73 20 75 6e 61 76  the data is unav
f7e0: 61 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20 69  ailable,  zRec i
f7f0: 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20  s set to NULL.. 
f800: 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f   **.  ** We also
f810: 20 63 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d   compute the num
f820: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
f830: 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 46  n the record.  F
f840: 6f 72 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a  or cursors,.  **
f850: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
f860: 6f 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72 65 64  olumns is stored
f870: 20 69 6e 20 74 68 65 20 56 64 62 65 43 75 72 73   in the VdbeCurs
f880: 6f 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e  or.nField elemen
f890: 74 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70  t..  */.  pC = p
f8a0: 2d 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61  ->apCsr[p1];.  a
f8b0: 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
f8c0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f8d0: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
f8e0: 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
f8f0: 56 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b  VtabCursor==0 );
f900: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 43  .#endif.  if( pC
f910: 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a  ->pCursor!=0 ){.
f920: 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
f930: 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  d is stored in a
f940: 20 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20 72   B-Tree */.    r
f950: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
f960: 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
f970: 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
f980: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
f990: 65 72 72 6f 72 3b 0a 20 20 20 20 7a 52 65 63 20  error;.    zRec 
f9a0: 3d 20 30 3b 0a 20 20 20 20 70 43 72 73 72 20 3d  = 0;.    pCrsr =
f9b0: 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
f9c0: 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
f9d0: 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f  w ){.      paylo
f9e0: 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20  adSize = 0;.    
f9f0: 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61  }else if( pC->ca
fa00: 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61  cheStatus==p->ca
fa10: 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20  cheCtr ){.      
fa20: 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
fa30: 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  ->payloadSize;. 
fa40: 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61       zRec = (cha
fa50: 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20  r*)pC->aRow;.   
fa60: 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69   }else if( pC->i
fa70: 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20  sIndex ){.      
fa80: 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36  i64 payloadSize6
fa90: 34 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  4;.      sqlite3
faa0: 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
fab0: 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
fac0: 36 34 29 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f  64);.      paylo
fad0: 61 64 53 69 7a 65 20 3d 20 28 69 6e 74 29 70 61  adSize = (int)pa
fae0: 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20  yloadSize64;.   
faf0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
fb00: 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69  lite3BtreeDataSi
fb10: 7a 65 28 70 43 72 73 72 2c 20 28 75 33 32 20 2a  ze(pCrsr, (u32 *
fb20: 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a  )&payloadSize);.
fb30: 20 20 20 20 7d 0a 20 20 20 20 6e 46 69 65 6c 64      }.    nField
fb40: 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20   = pC->nField;. 
fb50: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
fb60: 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
fb70: 62 6c 65 20 29 3b 0a 20 20 20 20 2f 2a 20 54 68  ble );.    /* Th
fb80: 65 20 72 65 63 6f 72 64 20 69 73 20 74 68 65 20  e record is the 
fb90: 73 6f 6c 65 20 65 6e 74 72 79 20 6f 66 20 61 20  sole entry of a 
fba0: 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
fbb0: 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
fbc0: 3d 20 70 43 2d 3e 6e 44 61 74 61 3b 0a 20 20 20  = pC->nData;.   
fbd0: 20 7a 52 65 63 20 3d 20 70 43 2d 3e 70 44 61 74   zRec = pC->pDat
fbe0: 61 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  a;.    pC->cache
fbf0: 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
fc00: 54 41 4c 45 3b 0a 20 20 20 20 61 73 73 65 72 74  TALE;.    assert
fc10: 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30  ( payloadSize==0
fc20: 20 7c 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20   || zRec!=0 );. 
fc30: 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e     nField = pC->
fc40: 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 72 73  nField;.    pCrs
fc50: 72 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  r = 0;.  }..  /*
fc60: 20 49 66 20 70 61 79 6c 6f 61 64 53 69 7a 65 20   If payloadSize 
fc70: 69 73 20 30 2c 20 74 68 65 6e 20 6a 75 73 74 20  is 0, then just 
fc80: 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 2a 2f 0a  store a NULL */.
fc90: 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a    if( payloadSiz
fca0: 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  e==0 ){.    asse
fcb0: 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  rt( pDest->flags
fcc0: 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20  &MEM_Null );.   
fcd0: 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
fce0: 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  out;.  }.  if( p
fcf0: 61 79 6c 6f 61 64 53 69 7a 65 3e 64 62 2d 3e 61  ayloadSize>db->a
fd00: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
fd10: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
fd20: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
fd30: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
fd40: 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f  2<nField );..  /
fd50: 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65  * Read and parse
fd60: 20 74 68 65 20 74 61 62 6c 65 20 68 65 61 64 65   the table heade
fd70: 72 2e 20 20 53 74 6f 72 65 20 74 68 65 20 72 65  r.  Store the re
fd80: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 70 61 72  sults of the par
fd90: 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65  se.  ** into the
fda0: 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 63   record header c
fdb0: 61 63 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74  ache fields of t
fdc0: 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  he cursor..  */.
fdd0: 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54    aType = pC->aT
fde0: 79 70 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63  ype;.  if( pC->c
fdf0: 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63  acheStatus==p->c
fe00: 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 61  acheCtr ){.    a
fe10: 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66  Offset = pC->aOf
fe20: 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  fset;.  }else{. 
fe30: 20 20 20 75 38 20 2a 7a 49 64 78 3b 20 20 20 20     u8 *zIdx;    
fe40: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
fe50: 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  o header */.    
fe60: 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20  u8 *zEndHdr;    
fe70: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66   /* Pointer to f
fe80: 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20  irst byte after 
fe90: 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
fea0: 20 20 69 6e 74 20 6f 66 66 73 65 74 3b 20 20 20    int offset;   
feb0: 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74     /* Offset int
fec0: 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20  o the data */.  
fed0: 20 20 69 6e 74 20 73 7a 48 64 72 53 7a 3b 20 20    int szHdrSz;  
fee0: 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
fef0: 65 20 68 65 61 64 65 72 20 73 69 7a 65 20 66 69  e header size fi
ff00: 65 6c 64 20 61 74 20 73 74 61 72 74 20 6f 66 20  eld at start of 
ff10: 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20 69 6e  record */.    in
ff20: 74 20 61 76 61 69 6c 20 3d 20 30 3b 20 20 20 2f  t avail = 0;   /
ff30: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
ff40: 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64  s of available d
ff50: 61 74 61 20 2a 2f 0a 0a 20 20 20 20 61 73 73 65  ata */..    asse
ff60: 72 74 28 61 54 79 70 65 29 3b 0a 20 20 20 20 70  rt(aType);.    p
ff70: 43 2d 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66  C->aOffset = aOf
ff80: 66 73 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46  fset = &aType[nF
ff90: 69 65 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70  ield];.    pC->p
ffa0: 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79  ayloadSize = pay
ffb0: 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43  loadSize;.    pC
ffc0: 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
ffd0: 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20  p->cacheCtr;..  
ffe0: 20 20 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20    /* Figure out 
fff0: 68 6f 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61  how many bytes a
10000 72 65 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  re in the header
10010 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63   */.    if( zRec
10020 20 29 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20   ){.      zData 
10030 3d 20 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73  = zRec;.    }els
10040 65 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  e{.      if( pC-
10050 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
10060 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61      zData = (cha
10070 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b  r*)sqlite3BtreeK
10080 65 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  eyFetch(pCrsr, &
10090 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65  avail);.      }e
100a0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61  lse{.        zDa
100b0 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69  ta = (char*)sqli
100c0 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63  te3BtreeDataFetc
100d0 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29  h(pCrsr, &avail)
100e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
100f0 2f 2a 20 49 66 20 4b 65 79 46 65 74 63 68 28 29  /* If KeyFetch()
10100 2f 44 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e  /DataFetch() man
10110 61 67 65 64 20 74 6f 20 67 65 74 20 74 68 65 20  aged to get the 
10120 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a  entire payload,.
10130 20 20 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68        ** save th
10140 65 20 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65  e payload in the
10150 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e   pC->aRow cache.
10160 20 20 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65    That will save
10170 20 75 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a   us from.      *
10180 2a 20 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65  * having to make
10190 20 61 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c   additional call
101a0 73 20 74 6f 20 66 65 74 63 68 20 74 68 65 20 63  s to fetch the c
101b0 6f 6e 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f  ontent portion o
101c0 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72  f.      ** the r
101d0 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a  ecord..      */.
101e0 20 20 20 20 20 20 69 66 28 20 61 76 61 69 6c 3e        if( avail>
101f0 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a  =payloadSize ){.
10200 20 20 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a          zRec = z
10210 44 61 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43  Data;.        pC
10220 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44  ->aRow = (u8*)zD
10230 61 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ata;.      }else
10240 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  {.        pC->aR
10250 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ow = 0;.      }.
10260 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65      }.    /* The
10270 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72   following asser
10280 74 20 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c  t is true in all
10290 20 63 61 73 65 73 20 61 63 63 65 70 74 20 77 68   cases accept wh
102a0 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61  en.    ** the da
102b0 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20  tabase file has 
102c0 62 65 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65  been corrupted e
102d0 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a  xternally..    *
102e0 2a 20 20 20 20 61 73 73 65 72 74 28 20 7a 52 65  *    assert( zRe
102f0 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70  c!=0 || avail>=p
10300 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76  ayloadSize || av
10310 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20  ail>=9 ); */.   
10320 20 73 7a 48 64 72 53 7a 20 3d 20 67 65 74 56 61   szHdrSz = getVa
10330 72 69 6e 74 33 32 28 28 75 38 2a 29 7a 44 61 74  rint32((u8*)zDat
10340 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20  a, offset);..   
10350 20 2f 2a 20 54 68 65 20 4b 65 79 46 65 74 63 68   /* The KeyFetch
10360 28 29 20 6f 72 20 44 61 74 61 46 65 74 63 68 28  () or DataFetch(
10370 29 20 61 62 6f 76 65 20 61 72 65 20 66 61 73 74  ) above are fast
10380 20 61 6e 64 20 77 69 6c 6c 20 67 65 74 20 74 68   and will get th
10390 65 20 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20  e entire.    ** 
103a0 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 69 6e  record header in
103b0 20 6d 6f 73 74 20 63 61 73 65 73 2e 20 20 42 75   most cases.  Bu
103c0 74 20 74 68 65 79 20 77 69 6c 6c 20 66 61 69 6c  t they will fail
103d0 20 74 6f 20 67 65 74 20 74 68 65 20 63 6f 6d 70   to get the comp
103e0 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f  lete.    ** reco
103f0 72 64 20 68 65 61 64 65 72 20 69 66 20 74 68 65  rd header if the
10400 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 64   record header d
10410 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61  oes not fit on a
10420 20 73 69 6e 67 6c 65 20 70 61 67 65 0a 20 20 20   single page.   
10430 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d 54 72 65   ** in the B-Tre
10440 65 2e 20 20 57 68 65 6e 20 74 68 61 74 20 68 61  e.  When that ha
10450 70 70 65 6e 73 2c 20 75 73 65 20 73 71 6c 69 74  ppens, use sqlit
10460 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
10470 65 65 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61  ee() to.    ** a
10480 63 71 75 69 72 65 20 74 68 65 20 63 6f 6d 70 6c  cquire the compl
10490 65 74 65 20 68 65 61 64 65 72 20 74 65 78 74 2e  ete header text.
104a0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
104b0 21 7a 52 65 63 20 26 26 20 61 76 61 69 6c 3c 6f  !zRec && avail<o
104c0 66 66 73 65 74 20 29 7b 0a 20 20 20 20 20 20 73  ffset ){.      s
104d0 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20  Mem.flags = 0;. 
104e0 20 20 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30       sMem.db = 0
104f0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
10500 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
10510 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6f  tree(pCrsr, 0, o
10520 66 66 73 65 74 2c 20 70 43 2d 3e 69 73 49 6e 64  ffset, pC->isInd
10530 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ex, &sMem);.    
10540 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
10550 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
10560 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
10570 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
10580 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b   zData = sMem.z;
10590 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48  .    }.    zEndH
105a0 64 72 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74  dr = (u8 *)&zDat
105b0 61 5b 6f 66 66 73 65 74 5d 3b 0a 20 20 20 20 7a  a[offset];.    z
105c0 49 64 78 20 3d 20 28 75 38 20 2a 29 26 7a 44 61  Idx = (u8 *)&zDa
105d0 74 61 5b 73 7a 48 64 72 53 7a 5d 3b 0a 0a 20 20  ta[szHdrSz];..  
105e0 20 20 2f 2a 20 53 63 61 6e 20 74 68 65 20 68 65    /* Scan the he
105f0 61 64 65 72 20 61 6e 64 20 75 73 65 20 69 74 20  ader and use it 
10600 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 61  to fill in the a
10610 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66 66 73  Type[] and aOffs
10620 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72 72 61  et[].    ** arra
10630 79 73 2e 20 20 61 54 79 70 65 5b 69 5d 20 77 69  ys.  aType[i] wi
10640 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 74  ll contain the t
10650 79 70 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20  ype integer for 
10660 74 68 65 20 69 2d 74 68 0a 20 20 20 20 2a 2a 20  the i-th.    ** 
10670 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66 66 73  column and aOffs
10680 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61  et[i] will conta
10690 69 6e 20 74 68 65 20 6f 66 66 73 65 74 20 66 72  in the offset fr
106a0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
106b0 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  .    ** of the r
106c0 65 63 6f 72 64 20 74 6f 20 74 68 65 20 73 74 61  ecord to the sta
106d0 72 74 20 6f 66 20 74 68 65 20 64 61 74 61 20 66  rt of the data f
106e0 6f 72 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75  or the i-th colu
106f0 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 66 6f  mn.    */.    fo
10700 72 28 69 3d 30 3b 20 69 3c 6e 46 69 65 6c 64 3b  r(i=0; i<nField;
10710 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
10720 20 7a 49 64 78 3c 7a 45 6e 64 48 64 72 20 29 7b   zIdx<zEndHdr ){
10730 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74  .        aOffset
10740 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20  [i] = offset;.  
10750 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 67 65        zIdx += ge
10760 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c 20  tVarint32(zIdx, 
10770 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20  aType[i]);.     
10780 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 71 6c     offset += sql
10790 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
107a0 70 65 4c 65 6e 28 61 54 79 70 65 5b 69 5d 29 3b  peLen(aType[i]);
107b0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
107c0 20 20 20 20 20 20 2f 2a 20 49 66 20 69 20 69 73        /* If i is
107d0 20 6c 65 73 73 20 74 68 61 74 20 6e 46 69 65 6c   less that nFiel
107e0 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 61 72  d, then there ar
107f0 65 20 6c 65 73 73 20 66 69 65 6c 64 73 20 69 6e  e less fields in
10800 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a   this.        **
10810 20 72 65 63 6f 72 64 20 74 68 61 6e 20 53 65 74   record than Set
10820 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69 63  NumColumns indic
10830 61 74 65 64 20 74 68 65 72 65 20 61 72 65 20 63  ated there are c
10840 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20  olumns in the.  
10850 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e 20        ** table. 
10860 53 65 74 20 74 68 65 20 6f 66 66 73 65 74 20 66  Set the offset f
10870 6f 72 20 61 6e 79 20 65 78 74 72 61 20 63 6f 6c  or any extra col
10880 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e 74  umns not present
10890 20 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 74   in.        ** t
108a0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 30 2e 20  he record to 0. 
108b0 54 68 69 73 20 74 65 6c 6c 73 20 63 6f 64 65 20  This tells code 
108c0 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20 61  below to store a
108d0 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 2a 2a   NULL.        **
108e0 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65 73 65   instead of dese
108f0 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75  rializing a valu
10900 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  e from the recor
10910 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  d..        */.  
10920 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
10930 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
10940 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
10950 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
10960 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66  Mem);.    sMem.f
10970 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
10980 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68  ..    /* If we h
10990 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65  ave read more he
109a0 61 64 65 72 20 64 61 74 61 20 74 68 61 6e 20 77  ader data than w
109b0 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  as contained in 
109c0 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20  the header,.    
109d0 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64  ** or if the end
109e0 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65   of the last fie
109f0 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ld appears to be
10a00 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66   past the end of
10a10 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f   the.    ** reco
10a20 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e  rd, or if the en
10a30 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69  d of the last fi
10a40 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62  eld appears to b
10a50 65 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64  e before the end
10a60 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  .    ** of the r
10a70 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20  ecord (when all 
10a80 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c  fields present),
10a90 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65   then we must be
10aa0 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a   dealing .    **
10ab0 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74 20   with a corrupt 
10ac0 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f  database..    */
10ad0 0a 20 20 20 20 69 66 28 20 7a 49 64 78 3e 7a 45  .    if( zIdx>zE
10ae0 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 3e  ndHdr || offset>
10af0 70 61 79 6c 6f 61 64 53 69 7a 65 20 0a 20 20 20  payloadSize .   
10b00 20 20 7c 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64    || (zIdx==zEnd
10b10 48 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70  Hdr && offset!=p
10b20 61 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20  ayloadSize) ){. 
10b30 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
10b40 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
10b50 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
10b60 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
10b70 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65   }..  /* Get the
10b80 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74   column informat
10b90 69 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74 5b  ion. If aOffset[
10ba0 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  p2] is non-zero,
10bb0 20 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65   then .  ** dese
10bc0 72 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c 75  rialize the valu
10bd0 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  e from the recor
10be0 64 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32  d. If aOffset[p2
10bf0 5d 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20  ] is zero,.  ** 
10c00 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e  then there are n
10c10 6f 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64 73  ot enough fields
10c20 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 74   in the record t
10c30 6f 20 73 61 74 69 73 66 79 20 74 68 65 0a 20 20  o satisfy the.  
10c40 2a 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e 20  ** request.  In 
10c50 74 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 74  this case, set t
10c60 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72  he value NULL or
10c70 20 74 6f 20 50 34 20 69 66 20 50 34 20 69 73 0a   to P4 if P4 is.
10c80 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74    ** a pointer t
10c90 6f 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a  o a Mem object..
10ca0 20 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66 73    */.  if( aOffs
10cb0 65 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61 73  et[p2] ){.    as
10cc0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
10cd0 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  _OK );.    if( z
10ce0 52 65 63 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  Rec ){.      sql
10cf0 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
10d00 73 65 45 78 74 65 72 6e 61 6c 28 70 44 65 73 74  seExternal(pDest
10d10 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
10d20 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75  VdbeSerialGet((u
10d30 38 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73 65  8 *)&zRec[aOffse
10d40 74 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32  t[p2]], aType[p2
10d50 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  ], pDest);.    }
10d60 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20  else{.      len 
10d70 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
10d80 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65  ialTypeLen(aType
10d90 5b 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c  [p2]);.      sql
10da0 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
10db0 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20  &sMem, pDest);. 
10dc0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
10dd0 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
10de0 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74  e(pCrsr, aOffset
10df0 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69  [p2], len, pC->i
10e00 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a  sIndex, &sMem);.
10e10 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
10e20 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
10e30 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
10e40 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  n_out;.      }. 
10e50 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65       zData = sMe
10e60 6d 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  m.z;.      sqlit
10e70 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
10e80 28 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79 70  (u8*)zData, aTyp
10e90 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20  e[p2], pDest);. 
10ea0 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e     }.    pDest->
10eb0 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
10ec0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28    }else{.    if(
10ed0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
10ee0 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71  _MEM ){.      sq
10ef0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
10f00 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70  lowCopy(pDest, p
10f10 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d  Op->p4.pMem, MEM
10f20 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65  _Static);.    }e
10f30 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
10f40 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26  t( pDest->flags&
10f50 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20  MEM_Null );.    
10f60 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77  }.  }..  /* If w
10f70 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  e dynamically al
10f80 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f  located space to
10f90 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28   hold the data (
10fa0 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69  in the.  ** sqli
10fb0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
10fc0 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  ree() call above
10fd0 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20  ) then transfer 
10fe0 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a  control of that.
10ff0 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79    ** dynamically
11000 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
11010 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44 65   over to the pDe
11020 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20  st structure..  
11030 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73  ** This prevents
11040 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a   a memory copy..
11050 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e    */.  if( sMem.
11060 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61  zMalloc ){.    a
11070 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73  ssert( sMem.z==s
11080 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20  Mem.zMalloc );. 
11090 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65     assert( !(pDe
110a0 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  st->flags & MEM_
110b0 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65  Dyn) );.    asse
110c0 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61  rt( !(pDest->fla
110d0 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
110e0 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73  EM_Str)) || pDes
110f0 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a  t->z==sMem.z );.
11100 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
11110 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c   &= ~(MEM_Ephem|
11120 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
11130 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d   pDest->flags |=
11140 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70   MEM_Term;.    p
11150 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a  Dest->z = sMem.z
11160 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61  ;.    pDest->zMa
11170 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c  lloc = sMem.zMal
11180 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d  loc;.  }..  rc =
11190 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
111a0 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44 65  akeWriteable(pDe
111b0 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  st);..op_column_
111c0 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  out:.  UPDATE_MA
111d0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
111e0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
111f0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
11200 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st);.  break;.}.
11210 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
11220 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
11230 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  *.**.** Apply af
11240 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
11250 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
11260 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
11270 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
11280 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
11290 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
112a0 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63   long. The nth c
112b0 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
112c0 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
112d0 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
112e0 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
112f0 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
11300 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72  the nth.** memor
11310 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
11320 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
11330 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 68  Affinity: {.  ch
11340 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 20 3d 20  ar *zAffinity = 
11350 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 4d 65 6d  pOp->p4.z;.  Mem
11360 20 2a 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61   *pData0 = &p->a
11370 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
11380 4d 65 6d 20 2a 70 4c 61 73 74 20 3d 20 26 70 44  Mem *pLast = &pD
11390 61 74 61 30 5b 70 4f 70 2d 3e 70 32 2d 31 5d 3b  ata0[pOp->p2-1];
113a0 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 0a 20  .  Mem *pRec;.. 
113b0 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
113c0 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
113d0 52 65 63 2b 2b 29 7b 0a 20 20 20 20 45 78 70 61  Rec++){.    Expa
113e0 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20  ndBlob(pRec);.  
113f0 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
11400 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b  pRec, zAffinity[
11410 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e  pRec-pData0], en
11420 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 62  coding);.  }.  b
11430 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
11440 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50  de: MakeRecord P
11450 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
11460 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
11470 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
11480 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 61  g with P1 into a
11490 20 73 69 6e 67 6c 65 20 65 6e 74 72 79 0a 2a 2a   single entry.**
114a0 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73   suitable for us
114b0 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f  e as a data reco
114c0 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  rd in a database
114d0 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b   table or as a k
114e0 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65  ey.** in an inde
114f0 78 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20  x.  The details 
11500 6f 66 20 74 68 65 20 66 6f 72 6d 61 74 20 61 72  of the format ar
11510 65 20 69 72 72 65 6c 65 76 61 6e 74 20 61 73 20  e irrelevant as 
11520 6c 6f 6e 67 20 61 73 0a 2a 2a 20 74 68 65 20 4f  long as.** the O
11530 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20  P_Column opcode 
11540 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72  can decode the r
11550 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 20  ecord later..** 
11560 52 65 66 65 72 20 74 6f 20 73 6f 75 72 63 65 20  Refer to source 
11570 63 6f 64 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f  code comments fo
11580 72 20 74 68 65 20 64 65 74 61 69 6c 73 20 6f 66  r the details of
11590 20 74 68 65 20 72 65 63 6f 72 64 0a 2a 2a 20 66   the record.** f
115a0 6f 72 6d 61 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ormat..**.** P4 
115b0 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
115c0 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
115d0 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
115e0 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
115f0 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
11600 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
11610 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
11620 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
11630 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
11640 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
11650 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
11660 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
11670 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
11680 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
11690 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
116a0 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
116b0 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
116c0 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
116d0 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
116e0 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
116f0 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
11700 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NONE..*/.case OP
11710 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
11720 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65   /* Assuming the
11730 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
11740 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72   N fields, the r
11750 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f  ecord format loo
11760 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69  ks.  ** like thi
11770 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d  s:.  **.  ** ---
11780 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11790 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
117a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
117b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
117c0 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72  -----.  ** | hdr
117d0 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c  -size | type 0 |
117e0 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20   type 1 | ... | 
117f0 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30  type N-1 | data0
11800 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d   | ... | data N-
11810 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d  1 | .  ** ------
11820 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11830 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11840 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11850 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11860 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74  --.  **.  ** Dat
11870 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72  a(0) is taken fr
11880 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  om register P1. 
11890 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66   Data(1) comes f
118a0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b  rom register P1+
118b0 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72  1.  ** and so fr
118c0 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45  oth..  **.  ** E
118d0 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69  ach type field i
118e0 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65  s a varint repre
118f0 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69  senting the seri
11900 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a  al type of the .
11910 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69    ** correspondi
11920 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20  ng data element 
11930 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65  (see sqlite3Vdbe
11940 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54  SerialType()). T
11950 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65  he.  ** hdr-size
11960 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61   field is also a
11970 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
11980 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
11990 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
119a0 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
119b0 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f  d to data0..  */
119c0 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72  .  u8 *zNewRecor
119d0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62  d;        /* A b
119e0 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68  uffer to hold th
119f0 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e  e data for the n
11a00 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d  ew record */.  M
11a10 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20  em *pRec;       
11a20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
11a30 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34   record */.  u64
11a40 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20   nData = 0;     
11a50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11a60 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
11a70 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
11a80 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  dr = 0;         
11a90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
11aa0 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
11ab0 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ace */.  i64 nBy
11ac0 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  te = 0;         
11ad0 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65  /* Data space re
11ae0 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20  quired for this 
11af0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
11b00 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20  nZero = 0;      
11b10 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11b20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
11b30 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
11b40 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61  ord */.  int nVa
11b50 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  rint;           
11b60 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
11b70 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a  es in a varint *
11b80 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74  /.  u32 serial_t
11b90 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79  ype;       /* Ty
11ba0 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65  pe field */.  Me
11bb0 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20  m *pData0;      
11bc0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69       /* First fi
11bd0 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e  eld to be combin
11be0 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f  ed into the reco
11bf0 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61  rd */.  Mem *pLa
11c00 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
11c10 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20  * Last field of 
11c20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
11c30 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
11c40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11c50 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
11c60 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68  e record */.  ch
11c70 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20  ar *zAffinity;  
11c80 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
11c90 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20  nity string for 
11ca0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
11cb0 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  int file_format;
11cc0 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66         /* File f
11cd0 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72  ormat to use for
11ce0 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
11cf0 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
11d00 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75        /* Space u
11d10 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72  sed in zNewRecor
11d20 64 5b 5d 20 2a 2f 0a 0a 20 20 6e 46 69 65 6c 64  d[] */..  nField
11d30 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41   = pOp->p1;.  zA
11d40 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
11d50 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  4.z;.  assert( n
11d60 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e  Field>0 && pOp->
11d70 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
11d80 6e 46 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b  nField<=p->nMem+
11d90 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20  1 );.  pData0 = 
11da0 26 70 2d 3e 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d  &p->aMem[nField]
11db0 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  ;.  nField = pOp
11dc0 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20  ->p2;.  pLast = 
11dd0 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31  &pData0[nField-1
11de0 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74  ];.  file_format
11df0 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   = p->minWriteFi
11e00 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20  leFormat;..  /* 
11e10 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
11e20 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
11e30 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
11e40 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
11e50 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
11e60 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
11e70 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
11e80 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
11e90 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
11ea0 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
11eb0 65 63 2b 2b 29 7b 0a 20 20 20 20 69 6e 74 20 6c  ec++){.    int l
11ec0 65 6e 3b 0a 20 20 20 20 69 66 28 20 7a 41 66 66  en;.    if( zAff
11ed0 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61  inity ){.      a
11ee0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65  pplyAffinity(pRe
11ef0 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65  c, zAffinity[pRe
11f00 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64  c-pData0], encod
11f10 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ing);.    }.    
11f20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 26  if( pRec->flags&
11f30 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70 52 65 63  MEM_Zero && pRec
11f40 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  ->n>0 ){.      s
11f50 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
11f60 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20  andBlob(pRec);. 
11f70 20 20 20 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f     }.    serial_
11f80 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
11f90 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
11fa0 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
11fb0 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74  .    len = sqlit
11fc0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
11fd0 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
11fe0 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c  ;.    nData += l
11ff0 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20  en;.    nHdr += 
12000 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
12010 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
12020 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
12030 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
12040 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70  .      /* Only p
12050 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20  ure zero-filled 
12060 42 4c 4f 42 73 20 63 61 6e 20 62 65 20 69 6e 70  BLOBs can be inp
12070 75 74 20 74 6f 20 74 68 69 73 20 4f 70 63 6f 64  ut to this Opcod
12080 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57 65 20 64  e..      ** We d
12090 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62  o not allow blob
120a0 73 20 77 69 74 68 20 61 20 70 72 65 66 69 78 20  s with a prefix 
120b0 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65  and a zero-fille
120c0 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20  d tail. */.     
120d0 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e   nZero += pRec->
120e0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c  u.nZero;.    }el
120f0 73 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20  se if( len ){.  
12100 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20      nZero = 0;. 
12110 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41     }.  }..  /* A
12120 64 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68  dd the initial h
12130 65 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64  eader varint and
12140 20 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20   total the size 
12150 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61  */.  nHdr += nVa
12160 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61  rint = sqlite3Va
12170 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20  rintLen(nHdr);. 
12180 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c   if( nVarint<sql
12190 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
121a0 64 72 29 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b  dr) ){.    nHdr+
121b0 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d  +;.  }.  nByte =
121c0 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72   nHdr+nData-nZer
121d0 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64  o;.  if( nByte>d
121e0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
121f0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
12200 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
12210 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61  ig;.  }..  /* Ma
12220 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70  ke sure the outp
12230 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ut register has 
12240 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65  a buffer large e
12250 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a  nough to store .
12260 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63    ** the new rec
12270 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20  ord. The output 
12280 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70  register (pOp->p
12290 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  3) is not allowe
122a0 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65  d to.  ** be one
122b0 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65   of the input re
122c0 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65  gisters (because
122d0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
122e0 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
122f0 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29  te3VdbeMemGrow()
12300 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74   could clobber t
12310 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  he value before 
12320 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a  it is used)..  *
12330 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
12340 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70  >p3<pOp->p1 || p
12350 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b  Op->p3>=pOp->p1+
12360 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75  pOp->p2 );.  pOu
12370 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
12380 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 73 71 6c  ->p3];.  if( sql
12390 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
123a0 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
123b0 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  , 0) ){.    goto
123c0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a   no_mem;.  }.  z
123d0 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20  NewRecord = (u8 
123e0 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a  *)pOut->z;..  /*
123f0 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72   Write the recor
12400 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61  d */.  i = putVa
12410 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72  rint32(zNewRecor
12420 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28  d, nHdr);.  for(
12430 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
12440 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
12450 29 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79  ){.    serial_ty
12460 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
12470 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
12480 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20   file_format);. 
12490 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e     i += putVarin
124a0 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  t32(&zNewRecord[
124b0 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  i], serial_type)
124c0 3b 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c  ;      /* serial
124d0 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66   type */.  }.  f
124e0 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
124f0 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
12500 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c  c++){  /* serial
12510 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b   data */.    i +
12520 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
12530 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f  ialPut(&zNewReco
12540 72 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79  rd[i], (int)(nBy
12550 74 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65  te-i), pRec,file
12560 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20  _format);.  }.  
12570 61 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65  assert( i==nByte
12580 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   );..  assert( p
12590 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
125a0 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
125b0 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
125c0 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
125d0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
125e0 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f   | MEM_Dyn;.  pO
125f0 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  ut->xDel = 0;.  
12600 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20  if( nZero ){.   
12610 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d   pOut->u.nZero =
12620 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74   nZero;.    pOut
12630 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a  ->flags |= MEM_Z
12640 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ero;.  }.  pOut-
12650 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
12660 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
12670 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
12680 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65   converted to te
12690 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52  xt */.  REGISTER
126a0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
126b0 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
126c0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
126d0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
126e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74  /* Opcode: Count
126f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
12700 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d  ** Store the num
12710 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28  ber of entries (
12720 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
12730 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  ) in the table o
12740 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e  r index .** open
12750 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20  ed by cursor P1 
12760 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
12770 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
12780 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
12790 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20  .case OP_Count: 
127a0 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
127b0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
127c0 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20    i64 nEntry;.  
127d0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 20  BtCursor *pCrsr 
127e0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
127f0 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20  p1]->pCursor;.  
12800 69 66 28 20 70 43 72 73 72 20 29 7b 0a 20 20 20  if( pCrsr ){.   
12810 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
12820 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26  eeCount(pCrsr, &
12830 6e 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c 73 65  nEntry);.  }else
12840 7b 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d 20 30  {.    nEntry = 0
12850 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 66 6c  ;.  }.  pOut->fl
12860 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
12870 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e   pOut->u.i = nEn
12880 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  try;.  break;.}.
12890 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
128a0 65 3a 20 53 74 61 74 65 6d 65 6e 74 20 50 31 20  e: Statement P1 
128b0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65  * * * *.**.** Be
128c0 67 69 6e 20 61 6e 20 69 6e 64 69 76 69 64 75 61  gin an individua
128d0 6c 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  l statement tran
128e0 73 61 63 74 69 6f 6e 20 77 68 69 63 68 20 69 73  saction which is
128f0 20 70 61 72 74 20 6f 66 20 61 20 6c 61 72 67 65   part of a large
12900 72 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e  r.** transaction
12910 2e 20 20 54 68 69 73 20 69 73 20 6e 65 65 64 65  .  This is neede
12920 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 73 74  d so that the st
12930 61 74 65 6d 65 6e 74 0a 2a 2a 20 63 61 6e 20 62  atement.** can b
12940 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66  e rolled back af
12950 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74  ter an error wit
12960 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72  hout having to r
12970 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20  oll back the.** 
12980 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69  entire transacti
12990 6f 6e 2e 20 20 54 68 65 20 73 74 61 74 65 6d 65  on.  The stateme
129a0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  nt transaction w
129b0 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
129c0 79 0a 2a 2a 20 63 6f 6d 6d 69 74 20 77 68 65 6e  y.** commit when
129d0 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
129e0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
129f0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12a00 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69  n is currently i
12a10 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64  n autocommit mod
12a20 65 20 28 74 68 61 74 20 0a 2a 2a 20 69 73 20 74  e (that .** is t
12a30 6f 20 73 61 79 2c 20 69 66 20 69 74 20 69 73 20  o say, if it is 
12a40 69 6e 20 62 65 74 77 65 65 6e 20 42 45 47 49 4e  in between BEGIN
12a50 20 61 6e 64 20 43 4f 4d 4d 49 54 29 0a 2a 2a 20   and COMMIT).** 
12a60 61 6e 64 20 69 66 20 74 68 65 72 65 20 61 72 65  and if there are
12a70 20 6e 6f 20 6f 74 68 65 72 20 61 63 74 69 76 65   no other active
12a80 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 20 74   statements on t
12a90 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
12aa0 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20  .** connection, 
12ab0 74 68 65 6e 20 74 68 69 73 20 6f 70 65 72 61 74  then this operat
12ac0 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20  ion is a no-op. 
12ad0 20 4e 6f 20 73 74 61 74 65 6d 65 6e 74 20 74 72   No statement tr
12ae0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 69 73 20  ansaction.** is 
12af0 6e 65 65 64 65 64 20 73 69 6e 63 65 20 61 6e 79  needed since any
12b00 20 65 72 72 6f 72 20 63 61 6e 20 75 73 65 20 74   error can use t
12b10 68 65 20 6e 6f 72 6d 61 6c 20 52 4f 4c 4c 42 41  he normal ROLLBA
12b20 43 4b 20 70 72 6f 63 65 73 73 20 74 6f 0a 2a 2a  CK process to.**
12b30 20 75 6e 64 6f 20 63 68 61 6e 67 65 73 2e 0a 2a   undo changes..*
12b40 2a 0a 2a 2a 20 49 66 20 61 20 73 74 61 74 65 6d  *.** If a statem
12b50 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
12b60 69 73 20 73 74 61 72 74 65 64 2c 20 74 68 65 6e  is started, then
12b70 20 61 20 73 74 61 74 65 6d 65 6e 74 20 6a 6f 75   a statement jou
12b80 72 6e 61 6c 20 66 69 6c 65 0a 2a 2a 20 77 69 6c  rnal file.** wil
12b90 6c 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 20 61  l be allocated a
12ba0 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0a  nd initialized..
12bb0 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  **.** The statem
12bc0 65 6e 74 20 69 73 20 62 65 67 75 6e 20 6f 6e 20  ent is begun on 
12bd0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
12be0 65 20 77 69 74 68 20 69 6e 64 65 78 20 50 31 2e  e with index P1.
12bf0 20 20 54 68 65 20 6d 61 69 6e 0a 2a 2a 20 64 61    The main.** da
12c00 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20  tabase file has 
12c10 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 61 6e  an index of 0 an
12c20 64 20 74 68 65 20 66 69 6c 65 20 75 73 65 64 20  d the file used 
12c30 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61  for temporary ta
12c40 62 6c 65 73 0a 2a 2a 20 68 61 73 20 61 6e 20 69  bles.** has an i
12c50 6e 64 65 78 20 6f 66 20 31 2e 0a 2a 2f 0a 63 61  ndex of 1..*/.ca
12c60 73 65 20 4f 50 5f 53 74 61 74 65 6d 65 6e 74 3a  se OP_Statement:
12c70 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61 75 74   {.  if( db->aut
12c80 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
12c90 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
12ca0 31 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d  1 ){.    int i =
12cb0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 42 74   pOp->p1;.    Bt
12cc0 72 65 65 20 2a 70 42 74 3b 0a 20 20 20 20 61 73  ree *pBt;.    as
12cd0 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
12ce0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61  db->nDb );.    a
12cf0 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69  ssert( db->aDb[i
12d00 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20  ].pBt!=0 );.    
12d10 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d  pBt = db->aDb[i]
12d20 2e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74  .pBt;.    assert
12d30 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
12d40 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a  InTrans(pBt) );.
12d50 20 20 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e      assert( (p->
12d60 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
12d70 69 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 69 66  i))!=0 );.    if
12d80 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
12d90 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
12da0 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
12db0 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
12dc0 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
12dd0 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
12de0 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 70 2d 3e  nt++; .      p->
12df0 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d  iStatement = db-
12e00 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
12e10 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20  ->nStatement;.  
12e20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
12e30 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74  ite3BtreeBeginSt
12e40 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74  mt(pBt, p->iStat
12e50 65 6d 65 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72  ement);.  }.  br
12e60 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
12e70 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20  e: Savepoint P1 
12e80 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  * * P4 *.**.** O
12e90 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20  pen, release or 
12ea0 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76  rollback the sav
12eb0 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20  epoint named by 
12ec0 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65  parameter P4, de
12ed0 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68  pending.** on th
12ee0 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54  e value of P1. T
12ef0 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76  o open a new sav
12f00 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54  epoint, P1==0. T
12f10 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
12f20 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e  t) an.** existin
12f30 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  g savepoint, P1=
12f40 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61  =1, or to rollba
12f50 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73  ck an existing s
12f60 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a  avepoint P1==2..
12f70 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70  */.case OP_Savep
12f80 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31  oint: {.  int p1
12f90 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 63 68   = pOp->p1;.  ch
12fa0 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d  ar *zName = pOp-
12fb0 3e 70 34 2e 7a 3b 20 20 20 20 20 20 20 20 20 2f  >p4.z;         /
12fc0 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
12fd0 69 6e 74 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73  int */..  /* Ass
12fe0 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20  ert that the p1 
12ff0 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c  parameter is val
13000 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66  id. Also that if
13010 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
13020 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  n.  ** transacti
13030 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63  on, then there c
13040 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76  annot be any sav
13050 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20  epoints. .  */. 
13060 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
13070 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62  vepoint==0 || db
13080 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
13090 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d  );.  assert( p1=
130a0 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
130b0 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
130c0 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56  RELEASE||p1==SAV
130d0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
130e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
130f0 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64  >pSavepoint || d
13100 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
13110 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
13120 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
13130 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
13140 29 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d  ) );..  if( p1==
13150 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
13160 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 77  ){.    if( db->w
13170 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 29 7b  riteVdbeCnt>0 ){
13180 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20  .      /* A new 
13190 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74  savepoint cannot
131a0 20 62 65 20 63 72 65 61 74 65 64 20 69 66 20 74   be created if t
131b0 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
131c0 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20  write .      ** 
131d0 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e  statements (i.e.
131e0 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65   open read/write
131f0 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f   incremental blo
13200 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20  b handles)..    
13210 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
13220 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
13230 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
13240 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f  nnot open savepo
13250 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20  int - ".        
13260 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
13270 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
13280 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
13290 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
132a0 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 4e 61 6d  {.      int nNam
132b0 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  e = sqlite3Strle
132c0 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  n30(zName);.    
132d0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
132e0 77 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  w;..      /* Cre
132f0 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
13300 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
13310 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
13320 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
13330 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76  w(db, sizeof(Sav
13340 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29  epoint)+nName+1)
13350 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65 77  ;.      if( pNew
13360 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77   ){.        pNew
13370 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20  ->zName = (char 
13380 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20  *)&pNew[1];.    
13390 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d      memcpy(pNew-
133a0 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e  >zName, zName, n
133b0 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20  Name+1);.    .  
133c0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72        /* If ther
133d0 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61  e is no open tra
133e0 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  nsaction, then m
133f0 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73 70  ark this as a sp
13400 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a  ecial.        **
13410 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61   "transaction sa
13420 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20  vepoint". */.   
13430 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
13440 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20  oCommit ){.     
13450 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
13460 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
13470 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
13480 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
13490 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
134a0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
134b0 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 09 7d  nSavepoint++;..}
134c0 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
134d0 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61   Link the new sa
134e0 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65  vepoint into the
134f0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
13500 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20  's list. */.    
13510 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20      pNew->pNext 
13520 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
13530 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
13540 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b  avepoint = pNew;
13550 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
13560 20 7d 65 6c 73 65 7b 0a 20 20 20 20 53 61 76 65   }else{.    Save
13570 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
13580 74 3b 0a 20 20 20 20 69 6e 74 20 69 53 61 76 65  t;.    int iSave
13590 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  point = 0;..    
135a0 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65  /* Find the name
135b0 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  d savepoint. If 
135c0 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
135d0 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e   savepoint, then
135e0 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72   an.    ** an er
135f0 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
13600 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f  to the user.  */
13610 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20  .    for(.      
13620 70 53 61 76 65 70 6f 69 6e 74 3d 64 62 2d 3e 70  pSavepoint=db->p
13630 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
13640 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
13650 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
13660 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
13670 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
13680 70 53 61 76 65 70 6f 69 6e 74 3d 70 53 61 76 65  pSavepoint=pSave
13690 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20  point->pNext.   
136a0 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70   ){.      iSavep
136b0 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  oint++;.    }.  
136c0 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e    if( !pSavepoin
136d0 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
136e0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
136f0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f  zErrMsg, db, "no
13700 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a   such savepoint:
13710 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20   %s", zName);.  
13720 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
13730 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65  ERROR;.    }else
13740 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 64 62   if( .        db
13750 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30  ->writeVdbeCnt>0
13760 20 7c 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f 49   || (p1==SAVEPOI
13770 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 64  NT_ROLLBACK && d
13780 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
13790 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >1) .    ){.    
137a0 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70    /* It is not p
137b0 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61  ossible to relea
137c0 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61  se (commit) a sa
137d0 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65  vepoint if there
137e0 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61   are .      ** a
137f0 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74  ctive write stat
13800 65 6d 65 6e 74 73 2e 20 49 74 20 69 73 20 6e 6f  ements. It is no
13810 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 6f  t possible to ro
13820 6c 6c 62 61 63 6b 20 61 20 73 61 76 65 70 6f 69  llback a savepoi
13830 6e 74 0a 20 20 20 20 20 20 2a 2a 20 69 66 20 74  nt.      ** if t
13840 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
13850 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61  ive statements a
13860 74 20 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a  t all..      */.
13870 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
13880 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
13890 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20  sg, db, .       
138a0 20 22 63 61 6e 6e 6f 74 20 25 73 20 73 61 76 65   "cannot %s save
138b0 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74  point - SQL stat
138c0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
138d0 73 73 22 2c 0a 20 20 20 20 20 20 20 20 28 70 31  ss",.        (p1
138e0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
138f0 42 41 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63 6b  BACK ? "rollback
13900 22 3a 20 22 72 65 6c 65 61 73 65 22 29 0a 20 20  ": "release").  
13910 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20      );.      rc 
13920 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
13930 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
13940 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
13950 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
13960 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
13970 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
13980 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
13990 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
139a0 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
139b0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
139c0 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
139d0 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
139e0 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
139f0 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
13a00 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
13a10 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
13a20 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
13a30 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
13a40 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
13a50 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
13a60 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
13a70 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
13a80 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
13a90 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
13aa0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
13ab0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
13ac0 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
13ad0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
13ae0 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
13af0 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
13b00 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
13b10 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
13b20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
13b30 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
13b40 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
13b50 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20  Savepoint = 0;. 
13b60 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72         rc = p->r
13b70 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
13b80 20 20 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a          int ii;.
13b90 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69          iSavepoi
13ba0 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
13bb0 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74  int - iSavepoint
13bc0 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 66 6f   - 1;.        fo
13bd0 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
13be0 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
13bf0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
13c00 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28  3BtreeSavepoint(
13c10 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
13c20 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
13c30 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
13c40 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
13c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
13c60 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
13c70 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
13c80 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
13c90 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
13ca0 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26  POINT_ROLLBACK &
13cb0 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  & (db->flags&SQL
13cc0 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
13cd0 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  s)!=0 ){.       
13ce0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
13cf0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
13d00 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  ts(db);.        
13d10 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
13d20 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
13d30 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   0);.        }. 
13d40 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
13d50 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  /* Regardless of
13d60 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
13d70 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f   a RELEASE or RO
13d80 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20  LLBACK, destroy 
13d90 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61  all .      ** sa
13da0 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20  vepoints nested 
13db0 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61  inside of the sa
13dc0 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
13dd0 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20  erated on. */.  
13de0 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70      while( db->p
13df0 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65  Savepoint!=pSave
13e00 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  point ){.       
13e10 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70   Savepoint *pTmp
13e20 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
13e30 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
13e40 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70  Savepoint = pTmp
13e50 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
13e60 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
13e70 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20  b, pTmp);.      
13e80 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
13e90 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
13ea0 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61     /* If it is a
13eb0 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64   RELEASE, then d
13ec0 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70  estroy the savep
13ed0 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
13ee0 74 65 64 20 6f 6e 20 74 6f 6f 20 2a 2f 0a 20 20  ted on too */.  
13ef0 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
13f00 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
13f10 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13f20 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d   pSavepoint==db-
13f30 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20  >pSavepoint );. 
13f40 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
13f50 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
13f60 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  nt->pNext;.     
13f70 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
13f80 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29  (db, pSavepoint)
13f90 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69  ;.        if( !i
13fa0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
13fb0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
13fc0 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
13fd0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
13fe0 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b    }.  }..  break
13ff0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
14000 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32  AutoCommit P1 P2
14010 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74   * * *.**.** Set
14020 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75   the database au
14030 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74  to-commit flag t
14040 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49  o P1 (1 or 0). I
14050 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f  f P2 is true, ro
14060 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63  ll.** back any c
14070 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20  urrently active 
14080 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f  btree transactio
14090 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ns. If there are
140a0 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56   any active.** V
140b0 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74  Ms (apart from t
140c0 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61  his one), then a
140d0 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e   ROLLBACK fails.
140e0 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73    A COMMIT fails
140f0 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65   if.** there are
14100 20 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20   active writing 
14110 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d  VMs or active VM
14120 73 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65  s that use share
14130 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54  d cache..**.** T
14140 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
14150 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f  causes the VM to
14160 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   halt..*/.case O
14170 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a  P_AutoCommit: {.
14180 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74    int desiredAut
14190 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70  oCommit = pOp->p
141a0 31 3b 0a 20 20 69 6e 74 20 72 6f 6c 6c 62 61 63  1;.  int rollbac
141b0 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69  k = pOp->p2;.  i
141c0 6e 74 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65  nt turnOnAC = de
141d0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
141e0 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && !db->autoComm
141f0 69 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 64  it;..  assert( d
14200 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
14210 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75  ==1 || desiredAu
14220 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
14230 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
14240 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
14250 20 72 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a   rollback==0 );.
14260 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
14270 63 74 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29  ctiveVdbeCnt>0 )
14280 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
14290 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
142a0 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20 74  tive */..  if( t
142b0 75 72 6e 4f 6e 41 43 20 26 26 20 72 6f 6c 6c 62  urnOnAC && rollb
142c0 61 63 6b 20 26 26 20 64 62 2d 3e 61 63 74 69 76  ack && db->activ
142d0 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20  eVdbeCnt>1 ){.  
142e0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
142f0 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
14300 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61  nts a ROLLBACK a
14310 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  nd other VMs are
14320 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75  .    ** still ru
14330 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61  nning, and a tra
14340 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
14350 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72  ve, return an er
14360 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20  ror indicating. 
14370 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f     ** that the o
14380 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
14390 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
143a0 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
143b0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
143c0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e  ErrMsg, db, "can
143d0 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61  not rollback tra
143e0 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
143f0 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
14400 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
14410 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  ");.    rc = SQL
14420 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
14430 65 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26  e if( turnOnAC &
14440 26 20 21 72 6f 6c 6c 62 61 63 6b 20 26 26 20 64  & !rollback && d
14450 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e  b->writeVdbeCnt>
14460 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  1 ){.    /* If t
14470 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
14480 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
14490 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
144a0 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
144b0 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
144c0 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
144d0 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
144e0 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
144f0 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
14500 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
14510 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
14520 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f  , db, "cannot co
14530 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  mmit transaction
14540 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
14550 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
14560 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
14570 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
14580 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65  ;.  }else if( de
14590 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21  siredAutoCommit!
145a0 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  =db->autoCommit 
145b0 29 7b 0a 20 20 20 20 69 66 28 20 72 6f 6c 6c 62  ){.    if( rollb
145c0 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ack ){.      ass
145d0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
145e0 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20  Commit==1 );.   
145f0 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61     sqlite3Rollba
14600 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20 20  ckAll(db);.     
14610 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
14620 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 1;.    }else{.
14630 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
14640 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69 72  mmit = (u8)desir
14650 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
14660 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
14670 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
14680 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
14690 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
146a0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
146b0 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64  ommit = (u8)(1-d
146c0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
146d0 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63  );.        p->rc
146e0 20 3d 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 20 20 20 20 67 6f 74  USY;.        got
14700 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
14710 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
14720 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
14730 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20  atement==0 );.  
14740 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61    sqlite3CloseSa
14750 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20  vepoints(db);.  
14760 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
14770 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
14780 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  rc = SQLITE_DONE
14790 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
147a0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
147b0 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20  RROR;.    }.    
147c0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
147d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
147e0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
147f0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
14800 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72  .        (!desir
14810 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63  edAutoCommit)?"c
14820 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72  annot start a tr
14830 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  ansaction within
14840 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a   a transaction":
14850 28 0a 20 20 20 20 20 20 20 20 28 72 6f 6c 6c 62  (.        (rollb
14860 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c  ack)?"cannot rol
14870 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73  lback - no trans
14880 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
14890 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ":.             
148a0 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f        "cannot co
148b0 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61  mmit - no transa
148c0 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
148d0 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20  ));.         .  
148e0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
148f0 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ROR;.  }.  break
14900 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
14910 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50  Transaction P1 P
14920 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65  2 * * *.**.** Be
14930 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  gin a transactio
14940 6e 2e 20 20 54 68 65 20 74 72 61 6e 73 61 63 74  n.  The transact
14950 69 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20 61 20  ion ends when a 
14960 43 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61  Commit or Rollba
14970 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20  ck.** opcode is 
14980 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20 44 65  encountered.  De
14990 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f  pending on the O
149a0 4e 20 43 4f 4e 46 4c 49 43 54 20 73 65 74 74 69  N CONFLICT setti
149b0 6e 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73  ng, the.** trans
149c0 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73  action might als
149d0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
149e0 20 69 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20   if an error is 
149f0 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a  encountered..**.
14a00 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
14a10 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
14a20 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68  se file on which
14a30 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
14a40 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20   is.** started. 
14a50 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20   Index 0 is the 
14a60 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
14a70 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69  le and index 1 i
14a80 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73  s the.** file us
14a90 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
14aa0 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65   tables.  Indice
14ab0 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61  s of 2 or more a
14ac0 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61  re used for.** a
14ad0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
14ae0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69  s..**.** If P2 i
14af0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
14b00 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
14b10 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
14b20 20 20 41 20 52 45 53 45 52 56 45 44 20 6c 6f 63    A RESERVED loc
14b30 6b 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64  k is.** obtained
14b40 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
14b50 20 66 69 6c 65 20 77 68 65 6e 20 61 20 77 72 69   file when a wri
14b60 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
14b70 73 20 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a  s started.  No.*
14b80 2a 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20  * other process 
14b90 63 61 6e 20 73 74 61 72 74 20 61 6e 6f 74 68 65  can start anothe
14ba0 72 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  r write transact
14bb0 69 6f 6e 20 77 68 69 6c 65 20 74 68 69 73 20 74  ion while this t
14bc0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a  ransaction is.**
14bd0 20 75 6e 64 65 72 77 61 79 2e 20 20 53 74 61 72   underway.  Star
14be0 74 69 6e 67 20 61 20 77 72 69 74 65 20 74 72 61  ting a write tra
14bf0 6e 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72  nsaction also cr
14c00 65 61 74 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b  eates a rollback
14c10 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77   journal. A.** w
14c20 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
14c30 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
14c40 20 62 65 66 6f 72 65 20 61 6e 79 20 63 68 61 6e   before any chan
14c50 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20  ges can be made 
14c60 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61  to the.** databa
14c70 73 65 2e 20 20 49 66 20 50 32 20 69 73 20 32 20  se.  If P2 is 2 
14c80 6f 72 20 67 72 65 61 74 65 72 20 74 68 65 6e 20  or greater then 
14c90 61 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63  an EXCLUSIVE loc
14ca0 6b 20 69 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e  k is also obtain
14cb0 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c  ed.** on the fil
14cc0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69  e..**.** If P2 i
14cd0 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72  s zero, then a r
14ce0 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62 74 61  ead-lock is obta
14cf0 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61  ined on the data
14d00 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61  base file..*/.ca
14d10 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f  se OP_Transactio
14d20 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70  n: {.  int i = p
14d30 4f 70 2d 3e 70 31 3b 0a 20 20 42 74 72 65 65 20  Op->p1;.  Btree 
14d40 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
14d50 20 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e   i>=0 && i<db->n
14d60 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
14d70 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
14d80 28 31 3c 3c 69 29 29 21 3d 30 20 29 3b 0a 20 20  (1<<i))!=0 );.  
14d90 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d  pBt = db->aDb[i]
14da0 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74  .pBt;..  if( pBt
14db0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
14dc0 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
14dd0 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32  ans(pBt, pOp->p2
14de0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
14df0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
14e00 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a      p->pc = pc;.
14e10 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
14e20 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
14e30 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
14e40 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20  return;.    }.  
14e50 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
14e60 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c 49 54  _OK && rc!=SQLIT
14e70 45 5f 52 45 41 44 4f 4e 4c 59 20 2f 2a 20 26 26  E_READONLY /* &&
14e80 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc!=SQLITE_BUSY
14e90 20 2a 2f 20 29 7b 0a 20 20 20 20 20 20 67 6f 74   */ ){.      got
14ea0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
14eb0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
14ec0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
14ed0 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69  pcode: ReadCooki
14ee0 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
14ef0 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65  *.** Read cookie
14f00 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20   number P3 from 
14f10 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
14f20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65  write it into re
14f30 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33  gister P2..** P3
14f40 3d 3d 30 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==0 is the schem
14f50 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d  a version.  P3==
14f60 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
14f70 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d  e format..** P3=
14f80 3d 32 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =2 is the recomm
14f90 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
14fa0 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  e size, and so f
14fb0 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a  orth.  P1==0 is.
14fc0 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
14fd0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
14fe0 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
14ff0 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
15000 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72   store.** tempor
15010 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
15020 2a 20 49 66 20 50 31 20 69 73 20 6e 65 67 61 74  * If P1 is negat
15030 69 76 65 2c 20 74 68 65 6e 20 74 68 69 73 20 69  ive, then this i
15040 73 20 61 20 72 65 71 75 65 73 74 20 74 6f 20 72  s a request to r
15050 65 61 64 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ead the size of 
15060 61 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 66  a.** databases f
15070 72 65 65 2d 6c 69 73 74 2e 20 50 33 20 6d 75 73  ree-list. P3 mus
15080 74 20 62 65 20 73 65 74 20 74 6f 20 31 20 69 6e  t be set to 1 in
15090 20 74 68 69 73 20 63 61 73 65 2e 20 54 68 65 20   this case. The 
150a0 61 63 74 75 61 6c 0a 2a 2a 20 64 61 74 61 62 61  actual.** databa
150b0 73 65 20 61 63 63 65 73 73 65 64 20 69 73 20 28  se accessed is (
150c0 28 50 31 2b 31 29 2a 2d 31 29 2e 20 46 6f 72 20  (P1+1)*-1). For 
150d0 65 78 61 6d 70 6c 65 2c 20 61 20 50 31 20 70 61  example, a P1 pa
150e0 72 61 6d 65 74 65 72 20 6f 66 20 2d 31 0a 2a 2a  rameter of -1.**
150f0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
15100 64 61 74 61 62 61 73 65 20 30 20 28 22 6d 61 69  database 0 ("mai
15110 6e 22 29 2c 20 61 20 50 31 20 6f 66 20 2d 32 20  n"), a P1 of -2 
15120 69 73 20 64 61 74 61 62 61 73 65 20 31 20 28 22  is database 1 ("
15130 74 65 6d 70 22 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  temp")..**.** Th
15140 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65  ere must be a re
15150 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad-lock on the d
15160 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20  atabase (either 
15170 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  a transaction.**
15180 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
15190 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62   or there must b
151a0 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  e an open cursor
151b0 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63  ) before.** exec
151c0 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  uting this instr
151d0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
151e0 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b  OP_ReadCookie: {
151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15200 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
15210 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61  e */.  int iMeta
15220 3b 0a 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f  ;.  int iDb = pO
15230 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 69 43 6f  p->p1;.  int iCo
15240 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
15250 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
15260 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p3<SQLITE_N_BTRE
15270 45 5f 4d 45 54 41 20 29 3b 0a 20 20 69 66 28 20  E_META );.  if( 
15280 69 44 62 3c 30 20 29 7b 0a 20 20 20 20 69 44 62  iDb<0 ){.    iDb
15290 20 3d 20 28 2d 31 2a 28 69 44 62 2b 31 29 29 3b   = (-1*(iDb+1));
152a0 0a 20 20 20 20 69 43 6f 6f 6b 69 65 20 2a 3d 20  .    iCookie *= 
152b0 2d 31 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  -1;.  }.  assert
152c0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
152d0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
152e0 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62  ert( db->aDb[iDb
152f0 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ].pBt!=0 );.  as
15300 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
15310 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21  ask & (1<<iDb))!
15320 3d 30 20 29 3b 0a 20 20 2f 2a 20 54 68 65 20 69  =0 );.  /* The i
15330 6e 64 65 78 69 6e 67 20 6f 66 20 6d 65 74 61 20  ndexing of meta 
15340 76 61 6c 75 65 73 20 61 74 20 74 68 65 20 73 63  values at the sc
15350 68 65 6d 61 20 6c 61 79 65 72 20 69 73 20 6f 66  hema layer is of
15360 66 20 62 79 20 6f 6e 65 20 66 72 6f 6d 0a 20 20  f by one from.  
15370 2a 2a 20 74 68 65 20 69 6e 64 65 78 69 6e 67 20  ** the indexing 
15380 69 6e 20 74 68 65 20 62 74 72 65 65 20 6c 61 79  in the btree lay
15390 65 72 2e 20 20 54 68 65 20 62 74 72 65 65 20 63  er.  The btree c
153a0 6f 6e 73 69 64 65 72 73 20 6d 65 74 61 5b 30 5d  onsiders meta[0]
153b0 20 74 6f 0a 20 20 2a 2a 20 62 65 20 74 68 65 20   to.  ** be the 
153c0 6e 75 6d 62 65 72 20 6f 66 20 66 72 65 65 20 70  number of free p
153d0 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  ages in the data
153e0 62 61 73 65 20 28 61 20 72 65 61 64 2d 6f 6e 6c  base (a read-onl
153f0 79 20 76 61 6c 75 65 29 0a 20 20 2a 2a 20 61 6e  y value).  ** an
15400 64 20 6d 65 74 61 5b 31 5d 20 74 6f 20 62 65 20  d meta[1] to be 
15410 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
15420 65 2e 20 20 54 68 65 20 73 63 68 65 6d 61 20 6c  e.  The schema l
15430 61 79 65 72 20 63 6f 6e 73 69 64 65 72 73 0a 20  ayer considers. 
15440 20 2a 2a 20 6d 65 74 61 5b 31 5d 20 74 6f 20 62   ** meta[1] to b
15450 65 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  e the schema coo
15460 6b 69 65 2e 20 20 53 6f 20 77 65 20 68 61 76 65  kie.  So we have
15470 20 74 6f 20 73 68 69 66 74 20 74 68 65 20 69 6e   to shift the in
15480 64 65 78 0a 20 20 2a 2a 20 62 79 20 6f 6e 65 20  dex.  ** by one 
15490 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
154a0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a 2f   statement..  */
154b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
154c0 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e  treeGetMeta(db->
154d0 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 31 20  aDb[iDb].pBt, 1 
154e0 2b 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20  + iCookie, (u32 
154f0 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75  *)&iMeta);.  pOu
15500 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a  t->u.i = iMeta;.
15510 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
15520 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
15530 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
15540 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69  Opcode: SetCooki
15550 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
15560 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
15570 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
15580 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65 74  er P3 (interpret
15590 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
155a0 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65  ).** into cookie
155b0 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61   number P2 of da
155c0 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32  tabase P1..** P2
155d0 3d 3d 30 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==0 is the schem
155e0 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d  a version.  P2==
155f0 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
15600 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d  e format..** P2=
15610 3d 32 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =2 is the recomm
15620 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
15630 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  e size, and so f
15640 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a  orth.  P1==0 is.
15650 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
15660 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
15670 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
15680 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
15690 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72   store.** tempor
156a0 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
156b0 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  * A transaction 
156c0 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
156d0 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67  before executing
156e0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
156f0 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b  .case OP_SetCook
15700 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69  ie: {       /* i
15710 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b  n3 */.  Db *pDb;
15720 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
15730 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p2<SQLITE_N_BTRE
15740 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
15750 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
15760 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
15770 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
15780 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
15790 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
157a0 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
157b0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
157c0 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
157d0 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  !=0 );.  sqlite3
157e0 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
157f0 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65  y(pIn3);.  /* Se
15800 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e 64  e note about ind
15810 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f  ex shifting on O
15820 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a  P_ReadCookie */.
15830 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
15840 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70 44  reeUpdateMeta(pD
15850 62 2d 3e 70 42 74 2c 20 31 2b 70 4f 70 2d 3e 70  b->pBt, 1+pOp->p
15860 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e  2, (int)pIn3->u.
15870 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  i);.  if( pOp->p
15880 32 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 57  2==0 ){.    /* W
15890 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63  hen the schema c
158a0 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72  ookie changes, r
158b0 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f  ecord the new co
158c0 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20  okie internally 
158d0 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
158e0 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
158f0 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e  ie = (int)pIn3->
15900 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61  u.i;.    db->fla
15910 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
15920 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65  ernChanges;.  }e
15930 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  lse if( pOp->p2=
15940 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63  =1 ){.    /* Rec
15950 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74  ord changes in t
15960 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a  he file format *
15970 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
15980 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
15990 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b  = (u8)pIn3->u.i;
159a0 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
159b0 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20  p1==1 ){.    /* 
159c0 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70  Invalidate all p
159d0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
159e0 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ts whenever the 
159f0 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20  TEMP database.  
15a00 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63    ** schema is c
15a10 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20  hanged.  Ticket 
15a20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c  #1644 */.    sql
15a30 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
15a40 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
15a50 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
15a60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65 72  ../* Opcode: Ver
15a70 69 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  ifyCookie P1 P2 
15a80 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  *.**.** Check th
15a90 65 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61  e value of globa
15aa0 6c 20 64 61 74 61 62 61 73 65 20 70 61 72 61 6d  l database param
15ab0 65 74 65 72 20 6e 75 6d 62 65 72 20 30 20 28 74  eter number 0 (t
15ac0 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65 72  he.** schema ver
15ad0 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73  sion) and make s
15ae0 75 72 65 20 69 74 20 69 73 20 65 71 75 61 6c 20  ure it is equal 
15af0 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 50 31 20 69  to P2.  .** P1 i
15b00 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e  s the database n
15b10 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 30  umber which is 0
15b20 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
15b30 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61  tabase file.** a
15b40 6e 64 20 31 20 66 6f 72 20 74 68 65 20 66 69 6c  nd 1 for the fil
15b50 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72  e holding tempor
15b60 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 73  ary tables and s
15b70 6f 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62 65  ome higher numbe
15b80 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69 61  r.** for auxilia
15b90 72 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a  ry databases..**
15ba0 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63  .** The cookie c
15bb0 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65  hanges its value
15bc0 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
15bd0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
15be0 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f  anges..** This o
15bf0 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64  peration is used
15c00 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20   to detect when 
15c10 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20  that the cookie 
15c20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61  has changed.** a
15c30 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72  nd that the curr
15c40 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64  ent process need
15c50 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20  s to reread the 
15c60 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69  schema..**.** Ei
15c70 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69  ther a transacti
15c80 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76 65  on needs to have
15c90 20 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f 72   been started or
15ca0 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64   an OP_Open need
15cb0 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63 75  s.** to be execu
15cc0 74 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69 73  ted (to establis
15cd0 68 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20 62  h a read lock) b
15ce0 65 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f 64  efore this opcod
15cf0 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e  e is.** invoked.
15d00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72 69  .*/.case OP_Veri
15d10 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e  fyCookie: {.  in
15d20 74 20 69 4d 65 74 61 3b 0a 20 20 42 74 72 65 65  t iMeta;.  Btree
15d30 20 2a 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28   *pBt;.  assert(
15d40 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
15d50 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
15d60 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
15d70 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
15d80 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
15d90 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
15da0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
15db0 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
15dc0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
15dd0 47 65 74 4d 65 74 61 28 70 42 74 2c 20 31 2c 20  GetMeta(pBt, 1, 
15de0 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
15df0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
15e00 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
15e10 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a   iMeta = 0;.  }.
15e20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
15e30 5f 4f 4b 20 26 26 20 69 4d 65 74 61 21 3d 70 4f  _OK && iMeta!=pO
15e40 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 73 71 6c  p->p2 ){.    sql
15e50 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
15e60 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
15e70 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
15e80 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c  ite3DbStrDup(db,
15e90 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d   "database schem
15ea0 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b  a has changed");
15eb0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73  .    /* If the s
15ec0 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f  chema-cookie fro
15ed0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
15ee0 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20  ile matches the 
15ef0 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73  cookie .    ** s
15f00 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69  tored with the i
15f10 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65  n-memory represe
15f20 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ntation of the s
15f30 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a  chema, do.    **
15f40 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20   not reload the 
15f50 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20  schema from the 
15f60 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20  database file.. 
15f70 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20     **.    ** If 
15f80 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61  virtual-tables a
15f90 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20  re in use, this 
15fa0 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f  is not just an o
15fb0 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20  ptimization..   
15fc0 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62   ** Often, v-tab
15fd0 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20  les store their 
15fe0 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51  data in other SQ
15ff0 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69  Lite tables, whi
16000 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75  ch.    ** are qu
16010 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69  eried from withi
16020 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74  n xNext() and ot
16030 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  her v-table meth
16040 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a  ods using.    **
16050 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65   prepared querie
16060 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65  s. If such a que
16070 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74  ry is out-of-dat
16080 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e  e, we do not wan
16090 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63  t to.    ** disc
160a0 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ard the database
160b0 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20   schema, as the 
160c0 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d  user code implem
160d0 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a  enting the.    *
160e0 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20  * v-table would 
160f0 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79  have to be ready
16100 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
16110 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20  _vtab structure 
16120 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f  itself.    ** to
16130 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20   be invalidated 
16140 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33  whenever sqlite3
16150 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65  _step() is calle
16160 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20  d from within . 
16170 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20     ** a v-table 
16180 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20  method..    */. 
16190 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70     if( db->aDb[p
161a0 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
161b0 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d  >schema_cookie!=
161c0 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73  iMeta ){.      s
161d0 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
161e0 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 70 4f  nalSchema(db, pO
161f0 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20  p->p1);.    }.. 
16200 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
16210 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
16220 74 73 28 64 62 29 3b 0a 20 20 20 20 72 63 20 3d  ts(db);.    rc =
16230 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a   SQLITE_SCHEMA;.
16240 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
16250 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52  /* Opcode: OpenR
16260 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ead P1 P2 P3 P4 
16270 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P5.**.** Open a 
16280 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72  read-only cursor
16290 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
162a0 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f  e table whose ro
162b0 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32  ot page is.** P2
162c0 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66   in a database f
162d0 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61  ile.  The databa
162e0 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72  se file is deter
162f0 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a  mined by P3. .**
16300 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65   P3==0 means the
16310 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20   main database, 
16320 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20  P3==1 means the 
16330 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f  database used fo
16340 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  r .** temporary 
16350 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31  tables, and P3>1
16360 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20   means used the 
16370 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74  corresponding at
16380 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61  tached.** databa
16390 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65  se.  Give the ne
163a0 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e  w cursor an iden
163b0 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54  tifier of P1.  T
163c0 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20  he P1.** values 
163d0 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74  need not be cont
163e0 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50  iguous but all P
163f0 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20  1 values should 
16400 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72  be small integer
16410 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65  s..** It is an e
16420 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62  rror for P1 to b
16430 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a  e negative..**.*
16440 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20  * If P5!=0 then 
16450 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
16460 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61  of register P2 a
16470 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c  s the root page,
16480 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75   not.** the valu
16490 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a  e of P2 itself..
164a0 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c  **.** There will
164b0 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20   be a read lock 
164c0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
164d0 77 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69  whenever there i
164e0 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72  s an.** open cur
164f0 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74  sor.  If the dat
16500 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b  abase was unlock
16510 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
16520 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
16530 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b  then a read lock
16540 20 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20   is acquired as 
16550 70 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73  part of this ins
16560 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61  truction.  A rea
16570 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73  d.** lock allows
16580 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73   other processes
16590 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74   to read the dat
165a0 61 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62  abase but prohib
165b0 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72  its.** any other
165c0 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f   process from mo
165d0 64 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61  difying the data
165e0 62 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20  base.  The read 
165f0 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61  lock is.** relea
16600 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72  sed when all cur
16610 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e  sors are closed.
16620 20 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75    If this instru
16630 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a  ction attempts.*
16640 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20  * to get a read 
16650 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20  lock but fails, 
16660 74 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69  the script termi
16670 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a  nates with an.**
16680 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72   SQLITE_BUSY err
16690 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54  or code..**.** T
166a0 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
166b0 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
166c0 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
166d0 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
166e0 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
166f0 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
16700 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
16710 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
16720 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
16730 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
16740 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
16750 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
16760 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
16770 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
16780 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
16790 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
167a0 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
167b0 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
167c0 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
167d0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
167e0 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a  n the table..**.
167f0 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
16800 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  Write..*/./* Opc
16810 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50  ode: OpenWrite P
16820 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
16830 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f  .** Open a read/
16840 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d  write cursor nam
16850 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62  ed P1 on the tab
16860 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
16870 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69  e root.** page i
16880 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21  s P2.  Or if P5!
16890 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  =0 use the conte
168a0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
168b0 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a  2 to find the.**
168c0 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a   root page..**.*
168d0 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
168e0 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
168f0 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
16900 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
16910 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
16920 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
16930 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
16940 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
16950 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
16960 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
16970 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
16980 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
16990 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
169a0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
169b0 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
169c0 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
169d0 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
169e0 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
169f0 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
16a00 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
16a10 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a  s in the table..
16a20 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
16a30 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
16a40 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
16a50 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
16a60 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
16a70 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
16a80 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
16a90 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
16aa0 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
16ab0 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
16ac0 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
16ad0 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
16ae0 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
16af0 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
16b00 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
16b10 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61  .case OP_OpenRea
16b20 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57  d:.case OP_OpenW
16b30 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 46  rite: {.  int nF
16b40 69 65 6c 64 20 3d 20 30 3b 0a 20 20 4b 65 79 49  ield = 0;.  KeyI
16b50 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 20 3d 20  nfo *pKeyInfo = 
16b60 30 3b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70  0;.  int i = pOp
16b70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 70 32 20 3d  ->p1;.  int p2 =
16b80 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 6e 74 20   pOp->p2;.  int 
16b90 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
16ba0 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42   int wrFlag;.  B
16bb0 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65  tree *pX;.  Vdbe
16bc0 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
16bd0 44 62 20 2a 70 44 62 3b 0a 20 20 0a 20 20 61 73  Db *pDb;.  .  as
16be0 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
16bf0 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
16c00 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
16c10 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62  eeMask & (1<<iDb
16c20 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ))!=0 );.  pDb =
16c30 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a   &db->aDb[iDb];.
16c40 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b    pX = pDb->pBt;
16c50 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30  .  assert( pX!=0
16c60 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
16c70 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
16c80 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61  ite ){.    wrFla
16c90 67 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70  g = 1;.    if( p
16ca0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
16cb0 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
16cc0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
16cd0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
16ce0 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
16cf0 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
16d00 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
16d10 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
16d20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
16d30 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
16d40 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
16d50 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
16d60 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a   p2<=p->nMem );.
16d70 20 20 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61      pIn2 = &p->a
16d80 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71 6c  Mem[p2];.    sql
16d90 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
16da0 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20  erify(pIn2);.   
16db0 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d   p2 = (int)pIn2-
16dc0 3e 75 2e 69 3b 0a 20 20 20 20 69 66 28 20 70 32  >u.i;.    if( p2
16dd0 3c 32 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20  <2 ) {.      rc 
16de0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
16df0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
16e00 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
16e10 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
16e20 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29    assert( i>=0 )
16e30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  ;.  if( pOp->p4t
16e40 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
16e50 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20  ){.    pKeyInfo 
16e60 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
16e70 66 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f  fo;.    pKeyInfo
16e80 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64  ->enc = ENC(p->d
16e90 62 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d  b);.    nField =
16ea0 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
16eb0 64 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  d+1;.  }else if(
16ec0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
16ed0 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46  _INT32 ){.    nF
16ee0 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
16ef0 3b 0a 20 20 7d 0a 20 20 70 43 75 72 20 3d 20 61  ;.  }.  pCur = a
16f00 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
16f10 20 69 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c   i, nField, iDb,
16f20 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d   1);.  if( pCur=
16f30 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
16f40 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
16f50 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  w = 1;.  rc = sq
16f60 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
16f70 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c  (pX, p2, wrFlag,
16f80 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d   pKeyInfo, pCur-
16f90 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  >pCursor);.  pCu
16fa0 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
16fb0 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 77 69 74 63  eyInfo;..  switc
16fc0 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73  h( rc ){.    cas
16fd0 65 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 7b  e SQLITE_BUSY: {
16fe0 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70  .      p->pc = p
16ff0 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  c;.      p->rc =
17000 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
17010 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  Y;.      goto vd
17020 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
17030 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
17040 5f 4f 4b 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74  _OK: {.      int
17050 20 66 6c 61 67 73 20 3d 20 73 71 6c 69 74 65 33   flags = sqlite3
17060 42 74 72 65 65 46 6c 61 67 73 28 70 43 75 72 2d  BtreeFlags(pCur-
17070 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
17080 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b   /* Sanity check
17090 69 6e 67 2e 20 20 4f 6e 6c 79 20 74 68 65 20 6c  ing.  Only the l
170a0 6f 77 65 72 20 66 6f 75 72 20 62 69 74 73 20 6f  ower four bits o
170b0 66 20 74 68 65 20 66 6c 61 67 73 20 62 79 74 65  f the flags byte
170c0 20 73 68 6f 75 6c 64 0a 20 20 20 20 20 20 2a 2a   should.      **
170d0 20 62 65 20 75 73 65 64 2e 20 20 42 69 74 20 33   be used.  Bit 3
170e0 20 28 6d 61 73 6b 20 30 78 30 38 29 20 69 73 20   (mask 0x08) is 
170f0 75 6e 70 72 65 64 69 63 74 61 62 6c 65 2e 20 20  unpredictable.  
17100 54 68 65 20 6c 6f 77 65 72 20 33 20 62 69 74 73  The lower 3 bits
17110 0a 20 20 20 20 20 20 2a 2a 20 28 6d 61 73 6b 20  .      ** (mask 
17120 30 78 30 37 29 20 73 68 6f 75 6c 64 20 62 65 20  0x07) should be 
17130 65 69 74 68 65 72 20 35 20 28 69 6e 74 6b 65 79  either 5 (intkey
17140 2b 6c 65 61 66 64 61 74 61 20 66 6f 72 20 74 61  +leafdata for ta
17150 62 6c 65 73 29 20 6f 72 0a 20 20 20 20 20 20 2a  bles) or.      *
17160 2a 20 32 20 28 7a 65 72 6f 64 61 74 61 20 66 6f  * 2 (zerodata fo
17170 72 20 69 6e 64 69 63 65 73 29 2e 20 20 49 66 20  r indices).  If 
17180 74 68 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73  these conditions
17190 20 61 72 65 20 6e 6f 74 20 6d 65 74 20 69 74 20   are not met it 
171a0 63 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 6e 6c  can.      ** onl
171b0 79 20 6d 65 61 6e 20 74 68 61 74 20 77 65 20 61  y mean that we a
171c0 72 65 20 64 65 61 6c 69 6e 67 20 77 69 74 68 20  re dealing with 
171d0 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
171e0 73 65 20 66 69 6c 65 0a 20 20 20 20 20 20 2a 2f  se file.      */
171f0 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
17200 73 20 26 20 30 78 66 30 29 21 3d 30 20 7c 7c 20  s & 0xf0)!=0 || 
17210 28 28 66 6c 61 67 73 20 26 20 30 78 30 37 29 21  ((flags & 0x07)!
17220 3d 35 20 26 26 20 28 66 6c 61 67 73 20 26 20 30  =5 && (flags & 0
17230 78 30 37 29 21 3d 32 29 20 29 7b 0a 20 20 20 20  x07)!=2) ){.    
17240 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
17250 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
17260 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
17270 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
17280 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 75       }.      pCu
17290 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 28 66 6c  r->isTable = (fl
172a0 61 67 73 20 26 20 42 54 52 45 45 5f 49 4e 54 4b  ags & BTREE_INTK
172b0 45 59 29 21 3d 30 20 3f 31 3a 30 3b 0a 20 20 20  EY)!=0 ?1:0;.   
172c0 20 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78     pCur->isIndex
172d0 20 3d 20 28 66 6c 61 67 73 20 26 20 42 54 52 45   = (flags & BTRE
172e0 45 5f 5a 45 52 4f 44 41 54 41 29 21 3d 30 20 3f  E_ZERODATA)!=0 ?
172f0 31 3a 30 3b 0a 20 20 20 20 20 20 2f 2a 20 49 66  1:0;.      /* If
17300 20 50 34 3d 3d 30 20 69 74 20 6d 65 61 6e 73 20   P4==0 it means 
17310 77 65 20 61 72 65 20 65 78 70 65 63 74 65 64 20  we are expected 
17320 74 6f 20 6f 70 65 6e 20 61 20 74 61 62 6c 65 2e  to open a table.
17330 20 20 49 66 20 50 34 21 3d 30 20 74 68 65 6e 0a    If P4!=0 then.
17340 20 20 20 20 20 20 2a 2a 20 77 65 20 65 78 70 65        ** we expe
17350 63 74 20 74 6f 20 62 65 20 6f 70 65 6e 69 6e 67  ct to be opening
17360 20 61 6e 20 69 6e 64 65 78 2e 20 20 49 66 20 74   an index.  If t
17370 68 69 73 20 69 73 20 6e 6f 74 20 77 68 61 74 20  his is not what 
17380 68 61 70 70 65 6e 65 64 2c 0a 20 20 20 20 20 20  happened,.      
17390 2a 2a 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  ** then the data
173a0 62 61 73 65 20 69 73 20 63 6f 72 72 75 70 74 0a  base is corrupt.
173b0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
173c0 66 28 20 28 70 43 75 72 2d 3e 69 73 54 61 62 6c  f( (pCur->isTabl
173d0 65 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65  e && pOp->p4type
173e0 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 29 0a 20 20  ==P4_KEYINFO).  
173f0 20 20 20 20 20 7c 7c 20 28 70 43 75 72 2d 3e 69       || (pCur->i
17400 73 49 6e 64 65 78 20 26 26 20 70 4f 70 2d 3e 70  sIndex && pOp->p
17410 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46  4type!=P4_KEYINF
17420 4f 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  O) ){.        rc
17430 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
17440 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20  T_BKPT;.        
17450 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17460 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
17470 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
17480 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c    }.    case SQL
17490 49 54 45 5f 45 4d 50 54 59 3a 20 7b 0a 20 20 20  ITE_EMPTY: {.   
174a0 20 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65     pCur->isTable
174b0 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d   = pOp->p4type!=
174c0 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 20 20  P4_KEYINFO;.    
174d0 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20    pCur->isIndex 
174e0 3d 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  = !pCur->isTable
174f0 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 43  ;.      pCur->pC
17500 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20  ursor = 0;.     
17510 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
17520 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
17530 20 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74 3a    }.    default:
17540 20 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62   {.      goto ab
17550 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
17560 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
17570 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17580 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  e: OpenEphemeral
17590 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
175a0 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
175b0 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72  ursor P1 to a tr
175c0 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a  ansient table..*
175d0 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20  * The cursor is 
175e0 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65  always opened re
175f0 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66  ad/write even if
17600 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61   .** the main da
17610 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f  tabase is read-o
17620 6e 6c 79 2e 20 20 54 68 65 20 74 72 61 6e 73 69  nly.  The transi
17630 65 6e 74 20 6f 72 20 76 69 72 74 75 61 6c 0a 2a  ent or virtual.*
17640 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74  * table is delet
17650 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
17660 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   when the cursor
17670 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a   is closed..**.*
17680 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
17690 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
176a0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
176b0 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
176c0 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54  r points to a BT
176d0 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d  ree table if P4=
176e0 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65  =0 and to a BTre
176f0 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34  e index.** if P4
17700 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50   is not 0.  If P
17710 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69  4 is not NULL, i
17720 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65  t points to a Ke
17730 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a  yInfo structure.
17740 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ** that defines 
17750 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65  the format of ke
17760 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ys in the index.
17770 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
17780 64 65 20 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c  de was once call
17790 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75  ed OpenTemp.  Bu
177a0 74 20 74 68 61 74 20 63 72 65 61 74 65 64 0a 2a  t that created.*
177b0 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61  * confusion beca
177c0 75 73 65 20 74 68 65 20 74 65 72 6d 20 22 74 65  use the term "te
177d0 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69 67 68 74  mp table", might
177e0 20 72 65 66 65 72 20 65 69 74 68 65 72 0a 2a 2a   refer either.**
177f0 20 74 6f 20 61 20 54 45 4d 50 20 74 61 62 6c 65   to a TEMP table
17800 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
17810 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61 62 6c 65  l, or to a table
17820 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68   opened by.** th
17830 69 73 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e  is opcode.  Then
17840 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73   this opcode was
17850 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61   call OpenVirtua
17860 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20  l.  But.** that 
17870 63 72 65 61 74 65 64 20 63 6f 6e 66 75 73 69 6f  created confusio
17880 6e 20 77 69 74 68 20 74 68 65 20 77 68 6f 6c 65  n with the whole
17890 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 69   virtual-table i
178a0 64 65 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  dea..*/.case OP_
178b0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b  OpenEphemeral: {
178c0 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
178d0 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  p1;.  VdbeCursor
178e0 20 2a 70 43 78 3b 0a 20 20 73 74 61 74 69 63 20   *pCx;.  static 
178f0 63 6f 6e 73 74 20 69 6e 74 20 6f 70 65 6e 46 6c  const int openFl
17900 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c  ags = .      SQL
17910 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49  ITE_OPEN_READWRI
17920 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
17930 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a  E_OPEN_CREATE |.
17940 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
17950 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20  N_EXCLUSIVE |.  
17960 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
17970 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a  DELETEONCLOSE |.
17980 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
17990 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a  N_TRANSIENT_DB;.
179a0 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
179b0 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
179c0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c 20  ateCursor(p, i, 
179d0 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b  pOp->p2, -1, 1);
179e0 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
179f0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
17a00 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
17a10 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
17a20 74 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20  treeFactory(db, 
17a30 30 2c 20 31 2c 20 53 51 4c 49 54 45 5f 44 45 46  0, 1, SQLITE_DEF
17a40 41 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f  AULT_TEMP_CACHE_
17a50 53 49 5a 45 2c 20 6f 70 65 6e 46 6c 61 67 73 2c  SIZE, openFlags,
17a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17a70 20 20 20 20 20 20 20 20 20 20 20 20 26 70 43 78              &pCx
17a80 2d 3e 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63  ->pBt);.  if( rc
17a90 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
17aa0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17ab0 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
17ac0 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d  Cx->pBt, 1);.  }
17ad0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
17ae0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49  E_OK ){.    /* I
17af0 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  f a transient in
17b00 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c  dex is required,
17b10 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61   create it by ca
17b20 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c  lling.    ** sql
17b30 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
17b40 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20  able() with the 
17b50 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 20 66  BTREE_ZERODATA f
17b60 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a  lag before.    *
17b70 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66  * opening it. If
17b80 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
17b90 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  le is required, 
17ba0 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20  just use the.   
17bb0 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   ** automaticall
17bc0 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y created table 
17bd0 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31  with root-page 1
17be0 20 28 61 6e 20 49 4e 54 4b 45 59 20 74 61 62 6c   (an INTKEY tabl
17bf0 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  e)..    */.    i
17c00 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49  f( pOp->p4.pKeyI
17c10 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  nfo ){.      int
17c20 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73   pgno;.      ass
17c30 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
17c40 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
17c50 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
17c60 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
17c70 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67  le(pCx->pBt, &pg
17c80 6e 6f 2c 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  no, BTREE_ZERODA
17c90 54 41 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20  TA); .      if( 
17ca0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
17cb0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
17cc0 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f   pgno==MASTER_RO
17cd0 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20  OT+1 );.        
17ce0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
17cf0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
17d00 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20  , pgno, 1, .    
17d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d20 20 20 20 20 20 20 20 20 20 20 20 20 28 4b 65 79              (Key
17d30 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c  Info*)pOp->p4.z,
17d40 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a   pCx->pCursor);.
17d50 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
17d60 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
17d70 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
17d80 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d    pCx->pKeyInfo-
17d90 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62  >enc = ENC(p->db
17da0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
17db0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
17dc0 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
17dd0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
17de0 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
17df0 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  >pBt, MASTER_ROO
17e00 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43  T, 1, 0, pCx->pC
17e10 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43  ursor);.      pC
17e20 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
17e30 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d      }.  }.  pCx-
17e40 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d  >isIndex = !pCx-
17e50 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61  >isTable;.  brea
17e60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
17e70 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50   OpenPseudo P1 P
17e80 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f  2 P3 * *.**.** O
17e90 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
17ea0 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
17eb0 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61  a fake table tha
17ec0 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  t contains a sin
17ed0 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61  gle.** row of da
17ee0 74 61 2e 20 20 41 6e 79 20 61 74 74 65 6d 70 74  ta.  Any attempt
17ef0 20 74 6f 20 77 72 69 74 65 20 61 20 73 65 63 6f   to write a seco
17f00 6e 64 20 72 6f 77 20 6f 66 20 64 61 74 61 20 63  nd row of data c
17f10 61 75 73 65 73 20 74 68 65 0a 2a 2a 20 66 69 72  auses the.** fir
17f20 73 74 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c  st row to be del
17f30 65 74 65 64 2e 20 20 41 6c 6c 20 64 61 74 61 20  eted.  All data 
17f40 69 73 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20  is deleted when 
17f50 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
17f60 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41   closed..**.** A
17f70 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
17f80 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
17f90 63 6f 64 65 20 69 73 20 75 73 65 66 75 6c 20 66  code is useful f
17fa0 6f 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 0a 2a  or holding the.*
17fb0 2a 20 4e 45 57 20 6f 72 20 4f 4c 44 20 74 61 62  * NEW or OLD tab
17fc0 6c 65 73 20 69 6e 20 61 20 74 72 69 67 67 65 72  les in a trigger
17fd0 2e 20 20 41 6c 73 6f 20 75 73 65 64 20 74 6f 20  .  Also used to 
17fe0 68 6f 6c 64 20 74 68 65 20 61 20 73 69 6e 67 6c  hold the a singl
17ff0 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20  e.** row output 
18000 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20  from the sorter 
18010 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  so that the row 
18020 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65  can be decompose
18030 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  d into.** indivi
18040 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69  dual columns usi
18050 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ng the OP_Column
18060 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57   opcode..**.** W
18070 68 65 6e 20 4f 50 5f 49 6e 73 65 72 74 20 69 73  hen OP_Insert is
18080 20 65 78 65 63 75 74 65 64 20 74 6f 20 69 6e 73   executed to ins
18090 65 72 74 20 61 20 72 6f 77 20 69 6e 20 74 6f 20  ert a row in to 
180a0 74 68 65 20 70 73 65 75 64 6f 20 74 61 62 6c 65  the pseudo table
180b0 2c 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  ,.** the pseudo-
180c0 74 61 62 6c 65 20 63 75 72 73 6f 72 20 6d 61 79  table cursor may
180d0 20 6f 72 20 6d 61 79 20 6e 6f 74 20 6d 61 6b 65   or may not make
180e0 20 69 74 27 73 20 6f 77 6e 20 63 6f 70 79 20 6f   it's own copy o
180f0 66 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  f the.** origina
18100 6c 20 72 6f 77 20 64 61 74 61 2e 20 49 66 20 50  l row data. If P
18110 32 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68 65  2 is 0, then the
18120 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 77 69   pseudo-table wi
18130 6c 6c 20 63 6f 70 79 20 74 68 65 0a 2a 2a 20 6f  ll copy the.** o
18140 72 69 67 69 6e 61 6c 20 72 6f 77 20 64 61 74 61  riginal row data
18150 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 61 20 70  . Otherwise, a p
18160 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f 72  ointer to the or
18170 69 67 69 6e 61 6c 20 6d 65 6d 6f 72 79 20 63 65  iginal memory ce
18180 6c 6c 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 2e  ll.** is stored.
18190 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74   In this case, t
181a0 68 65 20 76 64 62 65 20 70 72 6f 67 72 61 6d 20  he vdbe program 
181b0 6d 75 73 74 20 65 6e 73 75 72 65 20 74 68 61 74  must ensure that
181c0 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
181d0 63 65 6c 6c 20 63 6f 6e 74 61 69 6e 69 6e 67 20  cell containing 
181e0 74 68 65 20 72 6f 77 20 64 61 74 61 20 69 73 20  the row data is 
181f0 6e 6f 74 20 6f 76 65 72 77 72 69 74 74 65 6e 20  not overwritten 
18200 75 6e 74 69 6c 20 74 68 65 0a 2a 2a 20 70 73 65  until the.** pse
18210 75 64 6f 20 74 61 62 6c 65 20 69 73 20 63 6c 6f  udo table is clo
18220 73 65 64 20 28 6f 72 20 61 20 6e 65 77 20 72 6f  sed (or a new ro
18230 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e  w is inserted in
18240 74 6f 20 69 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 33  to it)..**.** P3
18250 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
18260 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
18270 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
18280 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
18290 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
182a0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
182b0 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 69  penPseudo: {.  i
182c0 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
182d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
182e0 78 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  x;.  assert( i>=
182f0 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
18300 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 69  ocateCursor(p, i
18310 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30  , pOp->p3, -1, 0
18320 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
18330 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
18340 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
18350 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f  1;.  pCx->pseudo
18360 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78  Table = 1;.  pCx
18370 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62  ->ephemPseudoTab
18380 6c 65 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  le = (u8)pOp->p2
18390 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65  ;.  pCx->isTable
183a0 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49   = 1;.  pCx->isI
183b0 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62 72 65 61  ndex = 0;.  brea
183c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
183d0 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20   Close P1 * * * 
183e0 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20  *.**.** Close a 
183f0 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c  cursor previousl
18400 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20  y opened as P1. 
18410 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a   If P1 is not.**
18420 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c   currently open,
18430 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
18440 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  n is a no-op..*/
18450 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20  .case OP_Close: 
18460 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  {.  int i = pOp-
18470 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
18480 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
18490 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  sor );.  sqlite3
184a0 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70  VdbeFreeCursor(p
184b0 2c 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 3b 0a  , p->apCsr[i]);.
184c0 20 20 70 2d 3e 61 70 43 73 72 5b 69 5d 20 3d 20    p->apCsr[i] = 
184d0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
184e0 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 65  * Opcode: SeekGe
184f0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
18500 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
18510 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
18520 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
18530 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
18540 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
18550 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
18560 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68  egister P3 as th
18570 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f  e key.  If curso
18580 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
18590 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
185a0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
185b0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
185c0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
185d0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
185e0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
185f0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
18600 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
18610 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
18620 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
18630 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
18640 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
18650 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
18660 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
18670 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
18680 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a  are no records .
18690 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ** greater than 
186a0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
186b0 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
186c0 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
186d0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
186e0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
186f0 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
18700 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  ct, SeekLt, Seek
18710 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Gt, SeekLe.*/./*
18720 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 74 20   Opcode: SeekGt 
18730 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
18740 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
18750 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
18760 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
18770 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
18780 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
18790 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
187a0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
187b0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
187c0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
187d0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
187e0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
187f0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
18800 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
18810 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
18820 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
18830 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
18840 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
18850 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
18860 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
18870 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
18880 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
18890 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
188a0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
188b0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67  are no records g
188c0 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20  reater than .** 
188d0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
188e0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
188f0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
18900 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
18910 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
18920 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20  stinct, SeekLt, 
18930 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
18940 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
18950 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20  kLt P1 P2 P3 P4 
18960 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  * .**.** If curs
18970 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
18980 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
18990 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
189a0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
189b0 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
189c0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
189d0 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
189e0 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
189f0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
18a00 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
18a10 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
18a20 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
18a30 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
18a40 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
18a50 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
18a60 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
18a70 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
18a80 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
18a90 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
18aa0 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
18ab0 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
18ac0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
18ad0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
18ae0 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68  less than .** th
18af0 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
18b00 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
18b10 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
18b20 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
18b30 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
18b40 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  inct, SeekGt, Se
18b50 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
18b60 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
18b70 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
18b80 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
18b90 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
18ba0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
18bb0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
18bc0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
18bd0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
18be0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
18bf0 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
18c00 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
18c10 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
18c20 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
18c30 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
18c40 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
18c50 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
18c60 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
18c70 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
18c80 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
18c90 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
18ca0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
18cb0 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
18cc0 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
18cd0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
18ce0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
18cf0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
18d00 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
18d10 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
18d20 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
18d30 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
18d40 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
18d50 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
18d60 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
18d70 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74  Distinct, SeekGt
18d80 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74  , SeekGe, SeekLt
18d90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
18da0 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Lt:         /* j
18db0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
18dc0 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20 20   OP_SeekLe:     
18dd0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
18de0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
18df0 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Ge:         /* j
18e00 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
18e10 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20 20   OP_SeekGt: {   
18e20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
18e30 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f   */.  int i = pO
18e40 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72  p->p1;.  VdbeCur
18e50 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
18e60 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d  rt( i>=0 && i<p-
18e70 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
18e80 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30  sert( pOp->p2!=0
18e90 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
18ea0 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
18eb0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
18ec0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
18ed0 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 2c 20  ){.    int res, 
18ee0 6f 63 3b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70  oc;.    oc = pOp
18ef0 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43  ->opcode;.    pC
18f00 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
18f10 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62     if( pC->isTab
18f20 6c 65 20 29 7b 0a 20 20 20 20 20 20 69 36 34 20  le ){.      i64 
18f30 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68  iKey;      /* Th
18f40 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74  e rowid we are t
18f50 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20  o seek to */..  
18f60 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74      /* The input
18f70 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67   value in P3 mig
18f80 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70  ht be of any typ
18f90 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c  e: integer, real
18fa0 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 20 20  , string,.      
18fb0 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c  ** blob, or NULL
18fc0 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20  .  But it needs 
18fd0 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
18fe0 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64   before we can d
18ff0 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 73  o.      ** the s
19000 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20 69  eek, so covert i
19010 74 2e 20 2a 2f 0a 20 20 20 20 20 20 61 70 70 6c  t. */.      appl
19020 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
19030 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 69 4b  (pIn3);.      iK
19040 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
19050 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a  IntValue(pIn3);.
19060 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
19070 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20  sValid = 0;..   
19080 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
19090 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20  value could not 
190a0 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
190b0 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74  o an integer wit
190c0 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a 20 6c 6f  hout.      ** lo
190d0 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
190e0 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20  n, then special 
190f0 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65  processing is re
19100 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20  quired... */.   
19110 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
19120 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
19130 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  0 ){.        if(
19140 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
19150 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
19160 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
19170 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e  the P3 value can
19180 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
19190 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f   into any kind o
191a0 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20  f a number,.    
191b0 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
191c0 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f  e seek is not po
191d0 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20  ssible, so jump 
191e0 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20  to P2 */.       
191f0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
19200 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 62  - 1;.          b
19210 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
19220 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 77 65          /* If we
19230 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
19240 74 2c 20 74 68 65 6e 20 74 68 65 20 50 33 20 76  t, then the P3 v
19250 61 6c 75 65 20 6d 75 73 74 20 62 65 20 61 20 66  alue must be a f
19260 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20 20 20 20  loating.        
19270 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e  ** point number.
19280 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
19290 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
192a0 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21 3d 30 20   & MEM_Real)!=0 
192b0 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20  );..        if( 
192c0 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49  iKey==SMALLEST_I
192d0 4e 54 36 34 20 26 26 20 28 70 49 6e 33 2d 3e 72  NT64 && (pIn3->r
192e0 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 7c 7c  <(double)iKey ||
192f0 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a 20   pIn3->r>0) ){. 
19300 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
19310 50 33 20 76 61 6c 75 65 20 69 73 20 74 6f 20 6c  P3 value is to l
19320 61 72 67 65 20 69 6e 20 6d 61 67 6e 69 74 75 64  arge in magnitud
19330 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73 65  e to be expresse
19340 64 20 61 73 20 61 6e 0a 20 20 20 20 20 20 20 20  d as an.        
19350 20 20 2a 2a 20 69 6e 74 65 67 65 72 2e 20 2a 2f    ** integer. */
19360 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d  .          res =
19370 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66   1;.          if
19380 28 20 70 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20  ( pIn3->r<0 ){. 
19390 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f             if( o
193a0 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20  c==OP_SeekGt || 
193b0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b  oc==OP_SeekGe ){
193c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
193d0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
193e0 46 69 72 73 74 28 70 43 2d 3e 70 43 75 72 73 6f  First(pC->pCurso
193f0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
19400 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
19410 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
19420 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19430 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ror;.           
19440 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c   }.          }el
19450 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
19460 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  if( oc==OP_SeekL
19470 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
19480 4c 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  Le ){.          
19490 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
194a0 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43  BtreeLast(pC->pC
194b0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
194c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
194d0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
194e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
194f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
19500 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
19510 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
19520 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20   res ){.        
19530 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
19540 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   - 1;.          
19550 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  }.          brea
19560 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  k;.        }else
19570 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
19580 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Lt || oc==OP_See
19590 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  kGe ){.         
195a0 20 2f 2a 20 55 73 65 20 74 68 65 20 63 65 69 6c   /* Use the ceil
195b0 69 6e 67 28 29 20 66 75 6e 63 74 69 6f 6e 20 74  ing() function t
195c0 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e  o convert real->
195d0 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  int */.         
195e0 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3e 20 28   if( pIn3->r > (
195f0 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b  double)iKey ) iK
19600 65 79 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65  ey++;.        }e
19610 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  lse{.          /
19620 2a 20 55 73 65 20 74 68 65 20 66 6c 6f 6f 72 28  * Use the floor(
19630 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f  ) function to co
19640 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20  nvert real->int 
19650 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  */.          ass
19660 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
19670 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Le || oc==OP_See
19680 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20  kGt );.         
19690 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3c 20 28   if( pIn3->r < (
196a0 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b  double)iKey ) iK
196b0 65 79 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ey--;.        }.
196c0 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20 72        } .      r
196d0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
196e0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
196f0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  C->pCursor, 0, (
19700 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65  u64)iKey, 0, &re
19710 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
19720 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
19730 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
19740 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
19750 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
19760 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
19770 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
19780 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  alid = 1;.      
19790 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20    pC->lastRowid 
197a0 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 7d 0a  = iKey;.      }.
197b0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
197c0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
197d0 72 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 46 69  r;.      int nFi
197e0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
197f0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
19800 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
19810 4e 54 33 32 20 29 3b 0a 20 20 20 20 20 20 61 73  NT32 );.      as
19820 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29  sert( nField>0 )
19830 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e  ;.      r.pKeyIn
19840 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
19850 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c  o;.      r.nFiel
19860 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
19870 0a 20 20 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f  .      if( oc==O
19880 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d  P_SeekGt || oc==
19890 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20  OP_SeekLe ){.   
198a0 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
198b0 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 3b  NPACKED_INCRKEY;
198c0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
198d0 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20        r.flags = 
198e0 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  0;.      }.     
198f0 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d   r.aMem = &p->aM
19900 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
19910 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
19920 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
19930 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
19940 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
19950 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
19960 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
19970 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
19980 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
19990 20 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72     }.      pC->r
199a0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
199b0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64  .    }.    pC->d
199c0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
199d0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
199e0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
199f0 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c  TALE;.#ifdef SQL
19a00 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c  ITE_TEST.    sql
19a10 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
19a20 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  t++;.#endif.    
19a30 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  if( oc==OP_SeekG
19a40 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  e || oc==OP_Seek
19a50 47 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  Gt ){.      if( 
19a60 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res<0 || (res==0
19a70 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   && oc==OP_SeekG
19a80 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  t) ){.        rc
19a90 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   = sqlite3BtreeN
19aa0 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ext(pC->pCursor,
19ab0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
19ac0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
19ad0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
19ae0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
19af0 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
19b00 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20  Valid = 0;.     
19b10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
19b20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  res = 0;.      }
19b30 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
19b40 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
19b50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLt || oc==O
19b60 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20  P_SeekLe );.    
19b70 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28    if( res>0 || (
19b80 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
19b90 5f 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20  _SeekLt) ){.    
19ba0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19bb0 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
19bc0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
19bd0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
19be0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
19bf0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19c00 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70  error;.        p
19c10 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
19c20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 0;.      }else
19c30 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73  {.        /* res
19c40 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69   might be negati
19c50 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74  ve because the t
19c60 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20  able is empty.  
19c70 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 20  Check to.       
19c80 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20   ** see if this 
19c90 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20  is the case..   
19ca0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
19cb0 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72  res = sqlite3Btr
19cc0 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f  eeEof(pC->pCurso
19cd0 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
19ce0 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  }.    assert( pO
19cf0 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 69  p->p2>0 );.    i
19d00 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
19d10 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
19d20 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  ;.    }.  }else 
19d30 69 66 28 20 21 70 43 2d 3e 70 73 65 75 64 6f 54  if( !pC->pseudoT
19d40 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54  able ){.    /* T
19d50 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e  his happens when
19d60 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f   attempting to o
19d70 70 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33 5f  pen the sqlite3_
19d80 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20 20  master table.   
19d90 20 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63 63   ** for read acc
19da0 65 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ess returns SQLI
19db0 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68 69  TE_EMPTY. In thi
19dc0 73 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20 20  s case always.  
19dd0 20 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a 75    ** take the ju
19de0 6d 70 20 28 73 69 6e 63 65 20 74 68 65 72 65 20  mp (since there 
19df0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 69  are no records i
19e00 6e 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20 20  n the table)..  
19e10 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f    */.    pc = pO
19e20 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
19e30 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
19e40 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32  code: Seek P1 P2
19e50 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20   * * *.**.** P1 
19e60 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65  is an open table
19e70 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69   cursor and P2 i
19e80 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65  s a rowid intege
19e90 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66  r.  Arrange.** f
19ea0 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f  or P1 to move so
19eb0 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
19ec0 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76  to the rowid giv
19ed0 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  en by P2..**.** 
19ee0 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79  This is actually
19ef0 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
19f00 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61  .  Nothing actua
19f10 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69  lly happens unti
19f20 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  l.** the cursor 
19f30 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  is used to read 
19f40 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20  a record.  That 
19f50 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73  way, if no reads
19f60 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e  .** occur, no un
19f70 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61  necessary I/O ha
19f80 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ppens..*/.case O
19f90 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20  P_Seek: {    /* 
19fa0 69 6e 32 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  in2 */.  int i =
19fb0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65   pOp->p1;.  Vdbe
19fc0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
19fd0 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
19fe0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
19ff0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69   pC = p->apCsr[i
1a000 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1a010 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  =0 );.  if( pC->
1a020 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20  pCursor!=0 ){.  
1a030 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1a040 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d  Table );.    pC-
1a050 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1a060 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
1a070 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  et = sqlite3Vdbe
1a080 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
1a090 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1a0a0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43  alid = 0;.    pC
1a0b0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1a0c0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
1a0d0 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f  k;.}.  ../* Opco
1a0e0 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
1a0f0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67  P3 * *.**.** Reg
1a100 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
1a110 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
1a120 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
1a130 20 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78    P1 is an index
1a140 2e 0a 2a 2a 20 49 66 20 61 6e 20 65 6e 74 72 79  ..** If an entry
1a150 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 74 68   that matches th
1a160 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1a170 74 65 72 20 70 33 20 65 78 69 73 74 73 20 69 6e  ter p3 exists in
1a180 20 50 31 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70   P1 then.** jump
1a190 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 20   to P2.  If the 
1a1a0 50 33 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  P3 value does no
1a1b0 74 20 6d 61 74 63 68 20 61 6e 79 20 65 6e 74 72  t match any entr
1a1c0 79 20 69 6e 20 50 31 0a 2a 2a 20 74 68 65 6e 20  y in P1.** then 
1a1d0 66 61 6c 6c 20 74 68 72 75 2e 20 20 54 68 65 20  fall thru.  The 
1a1e0 50 31 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  P1 cursor is lef
1a1f0 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1a200 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79  e matching entry
1a210 0a 2a 2a 20 69 66 20 69 74 20 65 78 69 73 74 73  .** if it exists
1a220 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
1a230 74 72 75 63 74 69 6f 6e 20 69 73 20 75 73 65 64  truction is used
1a240 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
1a250 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 77 68  e IN operator wh
1a260 65 72 65 20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d  ere the.** left-
1a270 68 61 6e 64 20 73 69 64 65 20 69 73 20 61 20 53  hand side is a S
1a280 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1a290 20 20 50 31 20 6d 61 79 20 62 65 20 61 20 74 72    P1 may be a tr
1a2a0 75 65 20 69 6e 64 65 78 2c 20 6f 72 20 69 74 0a  ue index, or it.
1a2b0 2a 2a 20 6d 61 79 20 62 65 20 61 20 74 65 6d 70  ** may be a temp
1a2c0 6f 72 61 72 79 20 69 6e 64 65 78 20 74 68 61 74  orary index that
1a2d0 20 68 6f 6c 64 73 20 74 68 65 20 72 65 73 75 6c   holds the resul
1a2e0 74 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  ts of the SELECT
1a2f0 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  .** statement.  
1a300 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
1a310 6e 20 69 73 20 61 6c 73 6f 20 75 73 65 64 20 74  n is also used t
1a320 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  o implement the.
1a330 2a 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  ** DISTINCT keyw
1a340 6f 72 64 20 69 6e 20 53 45 4c 45 43 54 20 73 74  ord in SELECT st
1a350 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
1a360 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1a370 20 63 68 65 63 6b 73 20 69 66 20 69 6e 64 65 78   checks if index
1a380 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 20 72   P1 contains a r
1a390 65 63 6f 72 64 20 66 6f 72 20 77 68 69 63 68 20  ecord for which 
1a3a0 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 4e 20  .** the first N 
1a3b0 73 65 72 69 61 6c 69 7a 65 64 20 76 61 6c 75 65  serialized value
1a3c0 73 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20  s exactly match 
1a3d0 74 68 65 20 4e 20 73 65 72 69 61 6c 69 7a 65 64  the N serialized
1a3e0 20 76 61 6c 75 65 73 0a 2a 2a 20 69 6e 20 74 68   values.** in th
1a3f0 65 20 72 65 63 6f 72 64 20 69 6e 20 72 65 67 69  e record in regi
1a400 73 74 65 72 20 50 33 2c 20 77 68 65 72 65 20 4e  ster P3, where N
1a410 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
1a420 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69  mber of values i
1a430 6e 0a 2a 2a 20 74 68 65 20 50 33 20 72 65 63 6f  n.** the P3 reco
1a440 72 64 20 28 74 68 65 20 50 33 20 72 65 63 6f 72  rd (the P3 recor
1a450 64 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  d is a prefix of
1a460 20 74 68 65 20 50 31 20 72 65 63 6f 72 64 29 2e   the P1 record).
1a470 20 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f   .**.** See also
1a480 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e  : NotFound, IsUn
1a490 69 71 75 65 2c 20 4e 6f 74 45 78 69 73 74 73 0a  ique, NotExists.
1a4a0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
1a4b0 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20  tFound P1 P2 P3 
1a4c0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  * *.**.** Regist
1a4d0 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1a4e0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1a4f0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 50  y MakeRecord.  P
1a500 31 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 64 65 78  1 is.** an index
1a510 2e 20 20 49 66 20 6e 6f 20 65 6e 74 72 79 20 65  .  If no entry e
1a520 78 69 73 74 73 20 69 6e 20 50 31 20 74 68 61 74  xists in P1 that
1a530 20 6d 61 74 63 68 65 73 20 74 68 65 20 62 6c 6f   matches the blo
1a540 62 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74  b then jump.** t
1a550 6f 20 50 32 2e 20 20 49 66 20 61 6e 20 65 6e 74  o P2.  If an ent
1a560 72 79 20 64 6f 65 73 20 65 78 69 73 74 69 6e 67  ry does existing
1a570 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20  , fall through. 
1a580 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
1a590 65 66 74 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20  eft.** pointing 
1a5a0 74 6f 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  to the entry tha
1a5b0 74 20 6d 61 74 63 68 65 73 2e 0a 2a 2a 0a 2a 2a  t matches..**.**
1a5c0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1a5d0 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55  , NotExists, IsU
1a5e0 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  nique.*/.case OP
1a5f0 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20  _NotFound:      
1a600 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1a610 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20  .case OP_Found: 
1a620 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1a630 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69  , in3 */.  int i
1a640 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e   = pOp->p1;.  in
1a650 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20  t alreadyExists 
1a660 3d 20 30 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  = 0;.  VdbeCurso
1a670 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
1a680 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1a690 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1a6a0 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d  t( p->apCsr[i]!=
1a6b0 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 20 3d  0 );.  if( (pC =
1a6c0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70   p->apCsr[i])->p
1a6d0 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20  Cursor!=0 ){.   
1a6e0 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 55 6e   int res;.    Un
1a6f0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49  packedRecord *pI
1a700 64 78 4b 65 79 3b 0a 0a 20 20 20 20 61 73 73 65  dxKey;..    asse
1a710 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
1a720 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
1a730 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
1a740 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
1a750 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65  pIdxKey = sqlite
1a760 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63  3VdbeRecordUnpac
1a770 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20  k(pC->pKeyInfo, 
1a780 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a  pIn3->n, pIn3->z
1a790 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7b0 20 20 20 20 20 20 20 20 61 54 65 6d 70 52 65 63          aTempRec
1a7c0 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65  , sizeof(aTempRe
1a7d0 63 29 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64  c));.    if( pId
1a7e0 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20 20 20  xKey==0 ){.     
1a7f0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1a800 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d    }.    if( pOp-
1a810 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
1a820 64 20 29 7b 0a 20 20 20 20 20 20 70 49 64 78 4b  d ){.      pIdxK
1a830 65 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50  ey->flags |= UNP
1a840 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54  ACKED_PREFIX_MAT
1a850 43 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63  CH;.    }.    rc
1a860 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1a870 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1a880 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b  ->pCursor, pIdxK
1a890 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  ey, 0, 0, &res);
1a8a0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1a8b0 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65  DeleteUnpackedRe
1a8c0 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20  cord(pIdxKey);. 
1a8d0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1a8e0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72  E_OK ){.      br
1a8f0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  eak;.    }.    a
1a900 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
1a910 72 65 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d  res==0);.    pC-
1a920 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1a930 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
1a940 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1a950 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66  _STALE;.  }.  if
1a960 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1a970 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69  P_Found ){.    i
1a980 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  f( alreadyExists
1a990 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20   ) pc = pOp->p2 
1a9a0 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
1a9b0 20 20 69 66 28 20 21 61 6c 72 65 61 64 79 45 78    if( !alreadyEx
1a9c0 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d  ists ) pc = pOp-
1a9d0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
1a9e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1a9f0 64 65 3a 20 49 73 55 6e 69 71 75 65 20 50 31 20  de: IsUnique P1 
1aa00 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1aa10 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
1aa20 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74   contains an int
1aa30 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  eger record numb
1aa40 65 72 2e 20 20 43 61 6c 6c 20 74 68 69 73 0a 2a  er.  Call this.*
1aa50 2a 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  * record number 
1aa60 52 2e 20 20 54 68 65 20 50 34 20 72 65 67 69 73  R.  The P4 regis
1aa70 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  ter contains an 
1aa80 69 6e 64 65 78 20 6b 65 79 20 63 72 65 61 74 65  index key create
1aa90 64 0a 2a 2a 20 75 73 69 6e 67 20 4d 61 6b 65 52  d.** using MakeR
1aaa0 65 63 6f 72 64 2e 20 20 43 61 6c 6c 20 69 74 20  ecord.  Call it 
1aab0 4b 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  K..**.** P1 is a
1aac0 6e 20 69 6e 64 65 78 2e 20 20 53 6f 20 69 74 20  n index.  So it 
1aad0 68 61 73 20 6e 6f 20 64 61 74 61 20 61 6e 64 20  has no data and 
1aae0 69 74 73 20 6b 65 79 20 63 6f 6e 73 69 73 74 73  its key consists
1aaf0 20 6f 66 20 61 0a 2a 2a 20 72 65 63 6f 72 64 20   of a.** record 
1ab00 67 65 6e 65 72 61 74 65 64 20 62 79 20 4f 50 5f  generated by OP_
1ab10 4d 61 6b 65 52 65 63 6f 72 64 20 77 68 65 72 65  MakeRecord where
1ab20 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
1ab30 69 73 20 74 68 65 20 0a 2a 2a 20 72 6f 77 69 64  is the .** rowid
1ab40 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68   of the entry th
1ab50 61 74 20 74 68 65 20 69 6e 64 65 78 20 72 65 66  at the index ref
1ab60 65 72 73 20 74 6f 2e 0a 2a 2a 20 0a 2a 2a 20 54  ers to..** .** T
1ab70 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1ab80 61 73 6b 73 20 69 66 20 74 68 65 72 65 20 69 73  asks if there is
1ab90 20 61 6e 20 65 6e 74 72 79 20 69 6e 20 50 31 20   an entry in P1 
1aba0 77 68 65 72 65 20 74 68 65 0a 2a 2a 20 66 69 65  where the.** fie
1abb0 6c 64 73 20 6d 61 74 63 68 65 73 20 4b 20 62 75  lds matches K bu
1abc0 74 20 74 68 65 20 72 6f 77 69 64 20 69 73 20 64  t the rowid is d
1abd0 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 52 2e  ifferent from R.
1abe0 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20  .** If there is 
1abf0 6e 6f 20 73 75 63 68 20 65 6e 74 72 79 2c 20 74  no such entry, t
1ac00 68 65 6e 20 74 68 65 72 65 20 69 73 20 61 6e 20  hen there is an 
1ac10 69 6d 6d 65 64 69 61 74 65 0a 2a 2a 20 6a 75 6d  immediate.** jum
1ac20 70 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6e 79  p to P2.  If any
1ac30 20 65 6e 74 72 79 20 64 6f 65 73 20 65 78 69 73   entry does exis
1ac40 74 20 77 68 65 72 65 20 74 68 65 20 69 6e 64 65  t where the inde
1ac50 78 20 73 74 72 69 6e 67 0a 2a 2a 20 6d 61 74 63  x string.** matc
1ac60 68 65 73 20 4b 20 62 75 74 20 74 68 65 20 72 65  hes K but the re
1ac70 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
1ac80 6f 74 20 52 2c 20 74 68 65 6e 20 74 68 65 20 72  ot R, then the r
1ac90 65 63 6f 72 64 0a 2a 2a 20 6e 75 6d 62 65 72 20  ecord.** number 
1aca0 66 6f 72 20 74 68 61 74 20 65 6e 74 72 79 20 69  for that entry i
1acb0 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 50  s written into P
1acc0 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 0a 2a 2a  3 and control.**
1acd0 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74   falls through t
1ace0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
1acf0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  uction..**.** Se
1ad00 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
1ad10 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75  , NotExists, Fou
1ad20 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73  nd.*/.case OP_Is
1ad30 55 6e 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20  Unique: {       
1ad40 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1ad50 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
1ad60 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  p1;.  VdbeCursor
1ad70 20 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73 6f   *pCx;.  BtCurso
1ad80 72 20 2a 70 43 72 73 72 3b 0a 20 20 4d 65 6d 20  r *pCrsr;.  Mem 
1ad90 2a 70 4b 3b 0a 20 20 69 36 34 20 52 3b 0a 0a 20  *pK;.  i64 R;.. 
1ada0 20 2f 2a 20 50 6f 70 20 74 68 65 20 76 61 6c 75   /* Pop the valu
1adb0 65 20 52 20 6f 66 66 20 74 68 65 20 74 6f 70 20  e R off the top 
1adc0 6f 66 20 74 68 65 20 73 74 61 63 6b 0a 20 20 2a  of the stack.  *
1add0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
1ade0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1adf0 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
1ae00 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f  Op->p4.i>0 && pO
1ae10 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d  p->p4.i<=p->nMem
1ae20 20 29 3b 0a 20 20 70 4b 20 3d 20 26 70 2d 3e 61   );.  pK = &p->a
1ae30 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a  Mem[pOp->p4.i];.
1ae40 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1ae50 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29  Integerify(pIn3)
1ae60 3b 0a 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75 2e  ;.  R = pIn3->u.
1ae70 69 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  i;.  assert( i>=
1ae80 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
1ae90 72 20 29 3b 0a 20 20 70 43 78 20 3d 20 70 2d 3e  r );.  pCx = p->
1aea0 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65  apCsr[i];.  asse
1aeb0 72 74 28 20 70 43 78 21 3d 30 20 29 3b 0a 20 20  rt( pCx!=0 );.  
1aec0 70 43 72 73 72 20 3d 20 70 43 78 2d 3e 70 43 75  pCrsr = pCx->pCu
1aed0 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73  rsor;.  if( pCrs
1aee0 72 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20  r!=0 ){.    int 
1aef0 72 65 73 3b 0a 20 20 20 20 69 36 34 20 76 3b 20  res;.    i64 v; 
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af10 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
1af20 64 20 6e 75 6d 62 65 72 20 74 68 61 74 20 6d 61  d number that ma
1af30 74 63 68 65 73 20 4b 20 2a 2f 0a 20 20 20 20 55  tches K */.    U
1af40 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
1af50 49 64 78 4b 65 79 3b 20 20 20 2f 2a 20 55 6e 70  IdxKey;   /* Unp
1af60 61 63 6b 65 64 20 76 65 72 73 69 6f 6e 20 6f 66  acked version of
1af70 20 50 34 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 4d   P4 */..    /* M
1af80 61 6b 65 20 73 75 72 65 20 4b 20 69 73 20 61 20  ake sure K is a 
1af90 73 74 72 69 6e 67 20 61 6e 64 20 6d 61 6b 65 20  string and make 
1afa0 7a 4b 65 79 20 70 6f 69 6e 74 20 74 6f 20 4b 0a  zKey point to K.
1afb0 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
1afc0 74 28 20 70 4b 2d 3e 66 6c 61 67 73 20 26 20 4d  t( pK->flags & M
1afd0 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 70  EM_Blob );.    p
1afe0 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  IdxKey = sqlite3
1aff0 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b  VdbeRecordUnpack
1b000 28 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20  (pCx->pKeyInfo, 
1b010 70 4b 2d 3e 6e 2c 20 70 4b 2d 3e 7a 2c 0a 20 20  pK->n, pK->z,.  
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b040 20 20 20 20 61 54 65 6d 70 52 65 63 2c 20 73 69      aTempRec, si
1b050 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 29 3b  zeof(aTempRec));
1b060 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79  .    if( pIdxKey
1b070 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  ==0 ){.      got
1b080 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a  o no_mem;.    }.
1b090 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61      pIdxKey->fla
1b0a0 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 49  gs |= UNPACKED_I
1b0b0 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 0a 20 20  GNORE_ROWID;..  
1b0c0 20 20 2f 2a 20 53 65 61 72 63 68 20 66 6f 72 20    /* Search for 
1b0d0 61 6e 20 65 6e 74 72 79 20 69 6e 20 50 31 20 77  an entry in P1 w
1b0e0 68 65 72 65 20 61 6c 6c 20 62 75 74 20 74 68 65  here all but the
1b0f0 20 6c 61 73 74 20 72 6f 77 69 64 20 6d 61 74 63   last rowid matc
1b100 68 20 4b 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  h K.    ** If th
1b110 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65  ere is no such e
1b120 6e 74 72 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  ntry, jump immed
1b130 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 20 20  iately to P2..  
1b140 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
1b150 20 70 43 78 2d 3e 64 65 66 65 72 72 65 64 4d 6f   pCx->deferredMo
1b160 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70  veto==0 );.    p
1b170 43 78 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  Cx->cacheStatus 
1b180 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1b190 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1b1a0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1b1b0 65 64 28 70 43 72 73 72 2c 20 70 49 64 78 4b 65  ed(pCrsr, pIdxKe
1b1c0 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  y, 0, 0, &res);.
1b1d0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1b1e0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73  TE_OK ){.      s
1b1f0 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
1b200 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70  UnpackedRecord(p
1b210 49 64 78 4b 65 79 29 3b 0a 20 20 20 20 20 20 67  IdxKey);.      g
1b220 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1b230 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
1b240 20 20 69 66 28 20 72 65 73 3c 30 20 29 7b 0a 20    if( res<0 ){. 
1b250 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b260 33 42 74 72 65 65 4e 65 78 74 28 70 43 72 73 72  3BtreeNext(pCrsr
1b270 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1b280 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
1b290 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1b2a0 20 31 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   1;.        sqli
1b2b0 74 65 33 56 64 62 65 44 65 6c 65 74 65 55 6e 70  te3VdbeDeleteUnp
1b2c0 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49 64 78  ackedRecord(pIdx
1b2d0 4b 65 79 29 3b 0a 20 20 20 20 20 20 20 20 62 72  Key);.        br
1b2e0 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
1b2f0 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
1b300 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d  te3VdbeIdxKeyCom
1b310 70 61 72 65 28 70 43 78 2c 20 70 49 64 78 4b 65  pare(pCx, pIdxKe
1b320 79 2c 20 26 72 65 73 29 3b 20 0a 20 20 20 20 73  y, &res); .    s
1b330 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
1b340 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70  UnpackedRecord(p
1b350 49 64 78 4b 65 79 29 3b 0a 20 20 20 20 69 66 28  IdxKey);.    if(
1b360 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1b370 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b380 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
1b390 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20  ( res>0 ){.     
1b3a0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1b3b0 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  1;.      break;.
1b3c0 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 41 74      }..    /* At
1b3d0 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 70 43 72   this point, pCr
1b3e0 73 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  sr is pointing t
1b3f0 6f 20 61 6e 20 65 6e 74 72 79 20 69 6e 20 50 31  o an entry in P1
1b400 20 77 68 65 72 65 20 61 6c 6c 20 62 75 74 0a 20   where all but. 
1b410 20 20 20 2a 2a 20 74 68 65 20 66 69 6e 61 6c 20     ** the final 
1b420 65 6e 74 72 79 20 28 74 68 65 20 72 6f 77 69 64  entry (the rowid
1b430 29 20 6d 61 74 63 68 65 73 20 4b 2e 20 20 43 68  ) matches K.  Ch
1b440 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
1b450 65 0a 20 20 20 20 2a 2a 20 66 69 6e 61 6c 20 72  e.    ** final r
1b460 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 69 73 20 64  owid column is d
1b470 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 52 2e  ifferent from R.
1b480 20 20 49 66 20 69 74 20 65 71 75 61 6c 73 20 52    If it equals R
1b490 20 74 68 65 6e 20 6a 75 6d 70 0a 20 20 20 20 2a   then jump.    *
1b4a0 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  * immediately to
1b4b0 20 50 32 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20   P2..    */.    
1b4c0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
1b4d0 49 64 78 52 6f 77 69 64 28 70 43 72 73 72 2c 20  IdxRowid(pCrsr, 
1b4e0 26 76 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  &v);.    if( rc!
1b4f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1b500 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1b510 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1b520 20 7d 0a 20 20 20 20 69 66 28 20 76 3d 3d 52 20   }.    if( v==R 
1b530 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
1b540 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
1b550 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20   break;.    }.. 
1b560 20 20 20 2f 2a 20 54 68 65 20 66 69 6e 61 6c 20     /* The final 
1b570 76 61 72 69 6e 74 20 6f 66 20 74 68 65 20 6b 65  varint of the ke
1b580 79 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66  y is different f
1b590 72 6f 6d 20 52 2e 20 20 53 74 6f 72 65 20 69 74  rom R.  Store it
1b5a0 20 62 61 63 6b 0a 20 20 20 20 2a 2a 20 69 6e 74   back.    ** int
1b5b0 6f 20 72 65 67 69 73 74 65 72 20 52 33 2e 20 20  o register R3.  
1b5c0 28 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62  (The record numb
1b5d0 65 72 20 6f 66 20 61 6e 20 65 6e 74 72 79 20 74  er of an entry t
1b5e0 68 61 74 20 76 69 6f 6c 61 74 65 73 0a 20 20 20  hat violates.   
1b5f0 20 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e   ** a UNIQUE con
1b600 73 74 72 61 69 6e 74 2e 29 0a 20 20 20 20 2a 2f  straint.).    */
1b610 0a 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d  .    pIn3->u.i =
1b620 20 76 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   v;.    assert( 
1b630 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
1b640 49 6e 74 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65  Int );.  }.  bre
1b650 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1b660 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50  : NotExists P1 P
1b670 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55  2 P3 * *.**.** U
1b680 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
1b690 66 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  f register P3 as
1b6a0 20 61 20 69 6e 74 65 67 65 72 20 6b 65 79 2e 20   a integer key. 
1b6b0 20 49 66 20 61 20 72 65 63 6f 72 64 20 0a 2a 2a   If a record .**
1b6c0 20 77 69 74 68 20 74 68 61 74 20 6b 65 79 20 64   with that key d
1b6d0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e  oes not exist in
1b6e0 20 74 61 62 6c 65 20 6f 66 20 50 31 2c 20 74 68   table of P1, th
1b6f0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  en jump to P2. .
1b700 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  ** If the record
1b710 20 64 6f 65 73 20 65 78 69 73 74 2c 20 74 68 65   does exist, the
1b720 6e 20 66 61 6c 6c 20 74 68 72 75 2e 20 20 54 68  n fall thru.  Th
1b730 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74  e cursor is left
1b740 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f   .** pointing to
1b750 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69   the record if i
1b760 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20  t exists..**.** 
1b770 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  The difference b
1b780 65 74 77 65 65 6e 20 74 68 69 73 20 6f 70 65 72  etween this oper
1b790 61 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f 75  ation and NotFou
1b7a0 6e 64 20 69 73 20 74 68 61 74 20 74 68 69 73 0a  nd is that this.
1b7b0 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61 73 73  ** operation ass
1b7c0 75 6d 65 73 20 74 68 65 20 6b 65 79 20 69 73 20  umes the key is 
1b7d0 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74  an integer and t
1b7e0 68 61 74 20 50 31 20 69 73 20 61 20 74 61 62 6c  hat P1 is a tabl
1b7f0 65 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f 74  e whereas.** Not
1b800 46 6f 75 6e 64 20 61 73 73 75 6d 65 73 20 6b 65  Found assumes ke
1b810 79 20 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  y is a blob cons
1b820 74 72 75 63 74 65 64 20 66 72 6f 6d 20 4d 61 6b  tructed from Mak
1b830 65 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20 50  eRecord and.** P
1b840 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a  1 is an index..*
1b850 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1b860 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1b870 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65  IsUnique.*/.case
1b880 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b   OP_NotExists: {
1b890 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1b8a0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20   in3 */.  int i 
1b8b0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62  = pOp->p1;.  Vdb
1b8c0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
1b8d0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1b8e0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
1b8f0 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
1b900 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
1b910 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20  pCsr[i]!=0 );.  
1b920 69 66 28 20 28 70 43 72 73 72 20 3d 20 28 70 43  if( (pCrsr = (pC
1b930 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d   = p->apCsr[i])-
1b940 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a  >pCursor)!=0 ){.
1b950 20 20 20 20 69 6e 74 20 72 65 73 20 3d 20 30 3b      int res = 0;
1b960 0a 20 20 20 20 75 36 34 20 69 4b 65 79 3b 0a 20  .    u64 iKey;. 
1b970 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
1b980 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1b990 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1b9a0 70 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e 69 73 54  p->apCsr[i]->isT
1b9b0 61 62 6c 65 20 29 3b 0a 20 20 20 20 69 4b 65 79  able );.    iKey
1b9c0 20 3d 20 69 6e 74 54 6f 4b 65 79 28 70 49 6e 33   = intToKey(pIn3
1b9d0 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 72 63 20 3d  ->u.i);.    rc =
1b9e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1b9f0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1ba00 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 26 72  r, 0, iKey, 0,&r
1ba10 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73  es);.    pC->las
1ba20 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75  tRowid = pIn3->u
1ba30 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  .i;.    pC->rowi
1ba40 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d  dIsValid = res==
1ba50 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e  0 ?1:0;.    pC->
1ba60 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1ba70 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1ba80 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1ba90 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
1baa0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
1bab0 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20  if( res!=0 ){.  
1bac0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1bad0 20 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65   - 1;.      asse
1bae0 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  rt( pC->rowidIsV
1baf0 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  alid==0 );.    }
1bb00 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 21 70 43  .  }else if( !pC
1bb10 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b  ->pseudoTable ){
1bb20 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
1bb30 70 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74  pens when an att
1bb40 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72  empt to open a r
1bb50 65 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68  ead cursor on th
1bb60 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  e .    ** sqlite
1bb70 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72 65  _master table re
1bb80 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50  turns SQLITE_EMP
1bb90 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  TY..    */.    a
1bba0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1bbb0 6c 65 20 29 3b 0a 20 20 20 20 70 63 20 3d 20 70  le );.    pc = p
1bbc0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1bbd0 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69  assert( pC->rowi
1bbe0 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20  dIsValid==0 );. 
1bbf0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1bc00 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
1bc10 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
1bc20 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65  *.** Find the ne
1bc30 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71  xt available seq
1bc40 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72  uence number for
1bc50 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57   cursor P1..** W
1bc60 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63  rite the sequenc
1bc70 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65  e number into re
1bc80 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68  gister P2..** Th
1bc90 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
1bca0 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20  r on the cursor 
1bcb0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  is incremented a
1bcc0 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73  fter this.** ins
1bcd0 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63  truction.  .*/.c
1bce0 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a  ase OP_Sequence:
1bcf0 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
1bd00 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
1bd10 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70  */.  int i = pOp
1bd20 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
1bd30 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
1bd40 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1bd50 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30  ( p->apCsr[i]!=0
1bd60 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
1bd70 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e 73  = p->apCsr[i]->s
1bd80 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 4d 65 6d  eqCount++;.  Mem
1bd90 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
1bda0 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
1bdb0 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
1bdc0 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
1bdd0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1bde0 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65  Get a new intege
1bdf0 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
1be00 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20  (a.k.a "rowid") 
1be10 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
1be20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  to a table..** T
1be30 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  he record number
1be40 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
1be50 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79  ly used as a key
1be60 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1be70 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63  .** table that c
1be80 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
1be90 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63  to.  The new rec
1bea0 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72  ord number is wr
1beb0 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e  itten.** written
1bec0 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
1bed0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74  .**.** If P3>0 t
1bee0 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69  hen P3 is a regi
1bef0 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  ster that holds 
1bf00 74 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76  the largest prev
1bf10 69 6f 75 73 6c 79 0a 2a 2a 20 67 65 6e 65 72 61  iously.** genera
1bf20 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
1bf30 72 2e 20 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72  r.  No new recor
1bf40 64 20 6e 75 6d 62 65 72 73 20 61 72 65 20 61 6c  d numbers are al
1bf50 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73  lowed to be less
1bf60 0a 2a 2a 20 74 68 61 6e 20 74 68 69 73 20 76 61  .** than this va
1bf70 6c 75 65 2e 20 20 57 68 65 6e 20 74 68 69 73 20  lue.  When this 
1bf80 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74  value reaches it
1bf90 73 20 6d 61 78 69 6d 75 6d 2c 20 61 20 53 51 4c  s maximum, a SQL
1bfa0 49 54 45 5f 46 55 4c 4c 0a 2a 2a 20 65 72 72 6f  ITE_FULL.** erro
1bfb0 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20  r is generated. 
1bfc0 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
1bfd0 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
1bfe0 20 74 68 65 20 67 65 6e 65 72 61 74 65 64 0a 2a   the generated.*
1bff0 2a 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  * record number.
1c000 20 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e    This P3 mechan
1c010 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68  ism is used to h
1c020 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68  elp implement th
1c030 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45  e.** AUTOINCREME
1c040 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63  NT feature..*/.c
1c050 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a  ase OP_NewRowid:
1c060 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
1c070 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
1c080 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70  */.  int i = pOp
1c090 2d 3e 70 31 3b 0a 20 20 69 36 34 20 76 20 3d 20  ->p1;.  i64 v = 
1c0a0 30 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  0;.  VdbeCursor 
1c0b0 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 69  *pC;.  assert( i
1c0c0 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
1c0d0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1c0e0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20   p->apCsr[i]!=0 
1c0f0 29 3b 0a 20 20 69 66 28 20 28 70 43 20 3d 20 70  );.  if( (pC = p
1c100 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75  ->apCsr[i])->pCu
1c110 72 73 6f 72 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  rsor==0 ){.    /
1c120 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69  * The zero initi
1c130 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20  alization above 
1c140 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e  is all that is n
1c150 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65  eeded */.  }else
1c160 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  {.    /* The nex
1c170 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72  t rowid or recor
1c180 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72  d number (differ
1c190 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68  ent terms for th
1c1a0 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68  e same.    ** th
1c1b0 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64  ing) is obtained
1c1c0 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61   in a two-step a
1c1d0 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a  lgorithm..    **
1c1e0 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65  .    ** First we
1c1f0 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
1c200 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
1c210 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20  sting rowid and 
1c220 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74  add one.    ** t
1c230 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20  o that.  But if 
1c240 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
1c250 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c  ting rowid is al
1c260 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75  ready the maximu
1c270 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76  m.    ** positiv
1c280 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61  e integer, we ha
1c290 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75  ve to fall throu
1c2a0 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64  gh to the second
1c2b0 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c  .    ** probabil
1c2c0 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a  istic algorithm.
1c2d0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68      **.    ** Th
1c2e0 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74  e second algorit
1c2f0 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20  hm is to select 
1c300 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f  a rowid at rando
1c310 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20  m and see if.   
1c320 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65   ** it already e
1c330 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62  xists in the tab
1c340 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  le.  If it does 
1c350 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61  not exist, we ha
1c360 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65  ve.    ** succee
1c370 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e  ded.  If the ran
1c380 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65  dom rowid does e
1c390 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20  xist, we select 
1c3a0 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a  a new one.    **
1c3b0 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20   and try again, 
1c3c0 75 70 20 74 6f 20 31 30 30 30 20 74 69 6d 65 73  up to 1000 times
1c3d0 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1c3e0 46 6f 72 20 61 20 74 61 62 6c 65 20 77 69 74 68  For a table with
1c3f0 20 6c 65 73 73 20 74 68 61 6e 20 32 20 62 69 6c   less than 2 bil
1c400 6c 69 6f 6e 20 65 6e 74 72 69 65 73 2c 20 74 68  lion entries, th
1c410 65 20 70 72 6f 62 61 62 69 6c 69 74 79 0a 20 20  e probability.  
1c420 20 20 2a 2a 20 6f 66 20 6e 6f 74 20 66 69 6e 64    ** of not find
1c430 69 6e 67 20 61 20 75 6e 75 73 65 64 20 72 6f 77  ing a unused row
1c440 69 64 20 69 73 20 61 62 6f 75 74 20 31 2e 30 65  id is about 1.0e
1c450 2d 33 30 30 2e 20 20 54 68 69 73 20 69 73 20 61  -300.  This is a
1c460 20 0a 20 20 20 20 2a 2a 20 6e 6f 6e 2d 7a 65 72   .    ** non-zer
1c470 6f 20 70 72 6f 62 61 62 69 6c 69 74 79 2c 20 62  o probability, b
1c480 75 74 20 69 74 20 69 73 20 73 74 69 6c 6c 20 76  ut it is still v
1c490 61 6e 69 73 68 69 6e 67 6c 79 20 73 6d 61 6c 6c  anishingly small
1c4a0 20 61 6e 64 20 73 68 6f 75 6c 64 0a 20 20 20 20   and should.    
1c4b0 2a 2a 20 6e 65 76 65 72 20 63 61 75 73 65 20 61  ** never cause a
1c4c0 20 70 72 6f 62 6c 65 6d 2e 20 20 59 6f 75 20 61   problem.  You a
1c4d0 72 65 20 6d 75 63 68 2c 20 6d 75 63 68 20 6d 6f  re much, much mo
1c4e0 72 65 20 6c 69 6b 65 6c 79 20 74 6f 20 68 61 76  re likely to hav
1c4f0 65 20 61 0a 20 20 20 20 2a 2a 20 68 61 72 64 77  e a.    ** hardw
1c500 61 72 65 20 66 61 69 6c 75 72 65 20 74 68 61 6e  are failure than
1c510 20 66 6f 72 20 74 68 69 73 20 61 6c 67 6f 72 69   for this algori
1c520 74 68 6d 20 74 6f 20 66 61 69 6c 2e 0a 20 20 20  thm to fail..   
1c530 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 61   **.    ** The a
1c540 6e 61 6c 79 73 69 73 20 69 6e 20 74 68 65 20 70  nalysis in the p
1c550 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
1c560 68 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 79  h assumes that y
1c570 6f 75 20 68 61 76 65 20 61 20 67 6f 6f 64 0a 20  ou have a good. 
1c580 20 20 20 2a 2a 20 73 6f 75 72 63 65 20 6f 66 20     ** source of 
1c590 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 73 2e 20  random numbers. 
1c5a0 20 49 73 20 61 20 6c 69 62 72 61 72 79 20 66 75   Is a library fu
1c5b0 6e 63 74 69 6f 6e 20 6c 69 6b 65 20 6c 72 61 6e  nction like lran
1c5c0 64 34 38 28 29 0a 20 20 20 20 2a 2a 20 67 6f 6f  d48().    ** goo
1c5d0 64 20 65 6e 6f 75 67 68 3f 20 20 4d 61 79 62 65  d enough?  Maybe
1c5e0 2e 20 4d 61 79 62 65 20 6e 6f 74 2e 20 49 74 27  . Maybe not. It'
1c5f0 73 20 68 61 72 64 20 74 6f 20 6b 6e 6f 77 20 77  s hard to know w
1c600 68 65 74 68 65 72 20 74 68 65 72 65 0a 20 20 20  hether there.   
1c610 20 2a 2a 20 6d 69 67 68 74 20 62 65 20 73 75 62   ** might be sub
1c620 74 6c 65 20 62 75 67 73 20 69 73 20 73 6f 6d 65  tle bugs is some
1c630 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
1c640 20 6f 66 20 6c 72 61 6e 64 34 38 28 29 20 74 68   of lrand48() th
1c650 61 74 0a 20 20 20 20 2a 2a 20 63 6f 75 6c 64 20  at.    ** could 
1c660 63 61 75 73 65 20 70 72 6f 62 6c 65 6d 73 2e 20  cause problems. 
1c670 54 6f 20 61 76 6f 69 64 20 75 6e 63 65 72 74 61  To avoid uncerta
1c680 69 6e 74 79 2c 20 53 51 4c 69 74 65 20 75 73 65  inty, SQLite use
1c690 73 20 69 74 73 20 6f 77 6e 20 0a 20 20 20 20 2a  s its own .    *
1c6a0 2a 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20  * random number 
1c6b0 67 65 6e 65 72 61 74 6f 72 20 62 61 73 65 64 20  generator based 
1c6c0 6f 6e 20 74 68 65 20 52 43 34 20 61 6c 67 6f 72  on the RC4 algor
1c6d0 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
1c6e0 20 2a 2a 20 54 6f 20 70 72 6f 6d 6f 74 65 20 6c   ** To promote l
1c6f0 6f 63 61 6c 69 74 79 20 6f 66 20 72 65 66 65 72  ocality of refer
1c700 65 6e 63 65 20 66 6f 72 20 72 65 70 65 74 69 74  ence for repetit
1c710 69 76 65 20 69 6e 73 65 72 74 73 2c 20 74 68 65  ive inserts, the
1c720 0a 20 20 20 20 2a 2a 20 66 69 72 73 74 20 66 65  .    ** first fe
1c730 77 20 61 74 74 65 6d 70 74 73 20 61 74 20 63 68  w attempts at ch
1c740 6f 6f 73 69 6e 67 20 61 20 72 61 6e 64 6f 6d 20  oosing a random 
1c750 72 6f 77 69 64 20 70 69 63 6b 20 76 61 6c 75 65  rowid pick value
1c760 73 20 6a 75 73 74 20 61 20 6c 69 74 74 6c 65 0a  s just a little.
1c770 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68      ** larger th
1c780 61 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  an the previous 
1c790 72 6f 77 69 64 2e 20 20 54 68 69 73 20 68 61 73  rowid.  This has
1c7a0 20 62 65 65 6e 20 73 68 6f 77 6e 20 65 78 70 65   been shown expe
1c7b0 72 69 6d 65 6e 74 61 6c 6c 79 0a 20 20 20 20 2a  rimentally.    *
1c7c0 2a 20 74 6f 20 64 6f 75 62 6c 65 20 74 68 65 20  * to double the 
1c7d0 73 70 65 65 64 20 6f 66 20 74 68 65 20 43 4f 50  speed of the COP
1c7e0 59 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 20  Y operation..   
1c7f0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 73 3d   */.    int res=
1c800 30 2c 20 72 78 3d 53 51 4c 49 54 45 5f 4f 4b 2c  0, rx=SQLITE_OK,
1c810 20 63 6e 74 3b 0a 20 20 20 20 69 36 34 20 78 3b   cnt;.    i64 x;
1c820 0a 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20  .    cnt = 0;.  
1c830 20 20 69 66 28 20 28 73 71 6c 69 74 65 33 42 74    if( (sqlite3Bt
1c840 72 65 65 46 6c 61 67 73 28 70 43 2d 3e 70 43 75  reeFlags(pC->pCu
1c850 72 73 6f 72 29 26 28 42 54 52 45 45 5f 49 4e 54  rsor)&(BTREE_INT
1c860 4b 45 59 7c 42 54 52 45 45 5f 5a 45 52 4f 44 41  KEY|BTREE_ZERODA
1c870 54 41 29 29 20 21 3d 0a 20 20 20 20 20 20 20 20  TA)) !=.        
1c880 20 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 20 29    BTREE_INTKEY )
1c890 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
1c8a0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
1c8b0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
1c8c0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1c8d0 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
1c8e0 74 28 20 28 73 71 6c 69 74 65 33 42 74 72 65 65  t( (sqlite3Btree
1c8f0 46 6c 61 67 73 28 70 43 2d 3e 70 43 75 72 73 6f  Flags(pC->pCurso
1c900 72 29 20 26 20 42 54 52 45 45 5f 49 4e 54 4b 45  r) & BTREE_INTKE
1c910 59 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  Y)!=0 );.    ass
1c920 65 72 74 28 20 28 73 71 6c 69 74 65 33 42 74 72  ert( (sqlite3Btr
1c930 65 65 46 6c 61 67 73 28 70 43 2d 3e 70 43 75 72  eeFlags(pC->pCur
1c940 73 6f 72 29 20 26 20 42 54 52 45 45 5f 5a 45 52  sor) & BTREE_ZER
1c950 4f 44 41 54 41 29 3d 3d 30 20 29 3b 0a 0a 23 69  ODATA)==0 );..#i
1c960 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49  fdef SQLITE_32BI
1c970 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69  T_ROWID.#   defi
1c980 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37  ne MAX_ROWID 0x7
1c990 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20  fffffff.#else.  
1c9a0 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c    /* Some compil
1c9b0 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
1c9c0 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20  ut constants of 
1c9d0 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66  the form 0x7ffff
1c9e0 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20  fffffffffff..   
1c9f0 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c   ** Others compl
1ca00 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66  ain about 0x7fff
1ca10 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e  fffffffffffffLL.
1ca20 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1ca30 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20  macro seems.    
1ca40 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68  ** to provide th
1ca50 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65  e constant while
1ca60 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70   making all comp
1ca70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20  ilers happy..   
1ca80 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d   */.#   define M
1ca90 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28  AX_ROWID  (i64)(
1caa0 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66   (((u64)0x7fffff
1cab0 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29  ff)<<32) | (u64)
1cac0 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e  0xffffffff ).#en
1cad0 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43  dif..    if( !pC
1cae0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1caf0 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71   ){.      v = sq
1cb00 6c 69 74 65 33 42 74 72 65 65 47 65 74 43 61 63  lite3BtreeGetCac
1cb10 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
1cb20 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 69 66 28  rsor);.      if(
1cb30 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20   v==0 ){.       
1cb40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1cb50 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73  eeLast(pC->pCurs
1cb60 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1cb70 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1cb80 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1cb90 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1cba0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1cbb0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
1cbc0 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20   res ){.        
1cbd0 20 20 76 20 3d 20 31 3b 0a 20 20 20 20 20 20 20    v = 1;.       
1cbe0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1cbf0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65    sqlite3BtreeKe
1cc00 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
1cc10 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  r, &v);.        
1cc20 20 20 76 20 3d 20 6b 65 79 54 6f 49 6e 74 28 76    v = keyToInt(v
1cc30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
1cc40 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b   v==MAX_ROWID ){
1cc50 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 43 2d  .            pC-
1cc60 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1cc70 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  = 1;.          }
1cc80 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1cc90 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20    v++;.         
1cca0 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
1ccb0 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51     }..#ifndef SQ
1ccc0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
1ccd0 43 52 45 4d 45 4e 54 0a 20 20 20 20 20 20 69 66  CREMENT.      if
1cce0 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
1ccf0 20 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a       Mem *pMem;.
1cd00 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1cd10 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
1cd20 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
1cd30 20 2f 2a 20 50 33 20 69 73 20 61 20 76 61 6c 69   /* P3 is a vali
1cd40 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  d memory cell */
1cd50 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20  .        pMem = 
1cd60 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
1cd70 5d 3b 0a 09 52 45 47 49 53 54 45 52 5f 54 52 41  ];..REGISTER_TRA
1cd80 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d  CE(pOp->p3, pMem
1cd90 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
1cda0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1cdb0 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  ify(pMem);.     
1cdc0 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
1cdd0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1cde0 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d  t)!=0 );  /* mem
1cdf0 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e  (P3) holds an in
1ce00 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  teger */.       
1ce10 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
1ce20 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
1ce30 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1ce40 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
1ce50 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20  = SQLITE_FULL;. 
1ce60 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
1ce70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1ce80 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1ce90 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e      if( v<pMem->
1cea0 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20  u.i+1 ){.       
1ceb0 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69     v = pMem->u.i
1cec0 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a   + 1;.        }.
1ced0 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e          pMem->u.
1cee0 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23  i = v;.      }.#
1cef0 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73 71 6c  endif..      sql
1cf00 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
1cf10 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72  edRowid(pC->pCur
1cf20 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49 44  sor, v<MAX_ROWID
1cf30 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20 20   ? v+1 : 0);.   
1cf40 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75   }.    if( pC->u
1cf50 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1cf60 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1cf70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a  Op->p3==0 );  /*
1cf80 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 6d 75 73   SQLITE_FULL mus
1cf90 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
1cfa0 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 2a 2f  prior to this */
1cfb0 0a 20 20 20 20 20 20 76 20 3d 20 64 62 2d 3e 70  .      v = db->p
1cfc0 72 69 6f 72 4e 65 77 52 6f 77 69 64 3b 0a 20 20  riorNewRowid;.  
1cfd0 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20      cnt = 0;.   
1cfe0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69     do{.        i
1cff0 66 28 20 63 6e 74 3d 3d 30 20 26 26 20 28 76 26  f( cnt==0 && (v&
1d000 30 78 66 66 66 66 66 66 29 3d 3d 76 20 29 7b 0a  0xffffff)==v ){.
1d010 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20            v++;. 
1d020 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1d030 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1d040 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
1d050 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
1d060 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29       if( cnt<5 )
1d070 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a   v &= 0xffffff;.
1d080 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1d090 20 20 69 66 28 20 76 3d 3d 30 20 29 20 63 6f 6e    if( v==0 ) con
1d0a0 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 78  tinue;.        x
1d0b0 20 3d 20 69 6e 74 54 6f 4b 65 79 28 76 29 3b 0a   = intToKey(v);.
1d0c0 20 20 20 20 20 20 20 20 72 78 20 3d 20 73 71 6c          rx = sql
1d0d0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1d0e0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1d0f0 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 78 2c 20  sor, 0, (u64)x, 
1d100 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  0, &res);.      
1d110 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d    cnt++;.      }
1d120 77 68 69 6c 65 28 20 63 6e 74 3c 31 30 30 20 26  while( cnt<100 &
1d130 26 20 72 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  & rx==SQLITE_OK 
1d140 26 26 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 20  && res==0 );.   
1d150 20 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52     db->priorNewR
1d160 6f 77 69 64 20 3d 20 76 3b 0a 20 20 20 20 20 20  owid = v;.      
1d170 69 66 28 20 72 78 3d 3d 53 51 4c 49 54 45 5f 4f  if( rx==SQLITE_O
1d180 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K && res==0 ){. 
1d190 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
1d1a0 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20  TE_FULL;.       
1d1b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d1c0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1d1d0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  }.    }.    pC->
1d1e0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1d1f0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1d200 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1d210 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1d220 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1d230 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
1d240 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
1d250 49 6e 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  Int);.  pOut->u.
1d260 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
1d270 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
1d280 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
1d290 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20   P5.**.** Write 
1d2a0 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
1d2b0 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
1d2c0 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
1d2d0 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
1d2e0 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
1d2f0 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
1d300 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
1d310 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
1d320 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
1d330 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
1d340 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
1d350 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
1d360 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
1d370 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1d380 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
1d390 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 6e 20 69   must.** be an i
1d3a0 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66  nteger..**.** If
1d3b0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
1d3c0 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69  NGE flag of P5 i
1d3d0 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
1d3e0 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
1d3f0 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
1d400 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
1d410 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  t).  If the OPFL
1d420 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61  AG_LASTROWID fla
1d430 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a  g of P5 is set,.
1d440 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73  ** then rowid is
1d450 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73   stored for subs
1d460 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79  equent return by
1d470 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
1d480 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
1d490 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74  d() function (ot
1d4a0 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e  herwise it is un
1d4b0 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a  modified)..**.**
1d4c0 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61   Parameter P4 ma
1d4d0 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72  y point to a str
1d4e0 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
1d4f0 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f  he table-name, o
1d500 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c  r.** may be NULL
1d510 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e  . If it is not N
1d520 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70  ULL, then the up
1d530 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73  date-hook .** (s
1d540 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61  qlite3.xUpdateCa
1d550 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b  llback) is invok
1d560 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73  ed following a s
1d570 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74  uccessful insert
1d580 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47  ..**.** (WARNING
1d590 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20  /TODO: If P1 is 
1d5a0 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  a pseudo-cursor 
1d5b0 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69  and P2 is dynami
1d5c0 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  cally.** allocat
1d5d0 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68  ed, then ownersh
1d5e0 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e  ip of P2 is tran
1d5f0 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70  sferred to the p
1d600 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20  seudo-cursor.** 
1d610 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20  and register P2 
1d620 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61  becomes ephemera
1d630 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f  l.  If the curso
1d640 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  r is changed, th
1d650 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65  e.** value of re
1d660 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74  gister P2 will t
1d670 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b  hen change.  Mak
1d680 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73  e sure this does
1d690 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e   not.** cause an
1d6a0 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a  y problems.).**.
1d6b0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1d6c0 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  ion only works o
1d6d0 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65  n tables.  The e
1d6e0 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
1d6f0 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64  ction.** for ind
1d700 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e  ices is OP_IdxIn
1d710 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sert..*/.case OP
1d720 5f 49 6e 73 65 72 74 3a 20 7b 0a 20 20 4d 65 6d  _Insert: {.  Mem
1d730 20 2a 70 44 61 74 61 20 3d 20 26 70 2d 3e 61 4d   *pData = &p->aM
1d740 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 4d  em[pOp->p2];.  M
1d750 65 6d 20 2a 70 4b 65 79 20 3d 20 26 70 2d 3e 61  em *pKey = &p->a
1d760 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20  Mem[pOp->p3];.. 
1d770 20 69 36 34 20 69 4b 65 79 3b 20 20 20 2f 2a 20   i64 iKey;   /* 
1d780 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49  The integer ROWI
1d790 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65  D or key for the
1d7a0 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
1d7b0 73 65 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  serted */.  int 
1d7c0 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56  i = pOp->p1;.  V
1d7d0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1d7e0 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
1d7f0 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
1d800 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1d810 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  [i];.  assert( p
1d820 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1d830 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1d840 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61   || pC->pseudoTa
1d850 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ble );.  assert(
1d860 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d   pKey->flags & M
1d870 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
1d880 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1d890 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
1d8a0 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61  ACE(pOp->p2, pDa
1d8b0 74 61 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ta);.  REGISTER_
1d8c0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
1d8d0 4b 65 79 29 3b 0a 0a 20 20 69 4b 65 79 20 3d 20  Key);..  iKey = 
1d8e0 69 6e 74 54 6f 4b 65 79 28 70 4b 65 79 2d 3e 75  intToKey(pKey->u
1d8f0 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .i);.  if( pOp->
1d900 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
1d910 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
1d920 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  ++;.  if( pOp->p
1d930 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  5 & OPFLAG_LASTR
1d940 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52  OWID ) db->lastR
1d950 6f 77 69 64 20 3d 20 70 4b 65 79 2d 3e 75 2e 69  owid = pKey->u.i
1d960 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
1d970 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
1d980 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20  ){.    pData->z 
1d990 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e  = 0;.    pData->
1d9a0 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n = 0;.  }else{.
1d9b0 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
1d9c0 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
1d9d0 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
1d9e0 0a 20 20 7d 0a 20 20 69 66 28 20 70 43 2d 3e 70  .  }.  if( pC->p
1d9f0 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20  seudoTable ){.  
1da00 20 20 69 66 28 20 21 70 43 2d 3e 65 70 68 65 6d    if( !pC->ephem
1da10 50 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20  PseudoTable ){. 
1da20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
1da30 65 65 28 64 62 2c 20 70 43 2d 3e 70 44 61 74 61  ee(db, pC->pData
1da40 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  );.    }.    pC-
1da50 3e 69 4b 65 79 20 3d 20 69 4b 65 79 3b 0a 20 20  >iKey = iKey;.  
1da60 20 20 70 43 2d 3e 6e 44 61 74 61 20 3d 20 70 44    pC->nData = pD
1da70 61 74 61 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20  ata->n;.    if( 
1da80 70 44 61 74 61 2d 3e 7a 3d 3d 70 44 61 74 61 2d  pData->z==pData-
1da90 3e 7a 4d 61 6c 6c 6f 63 20 7c 7c 20 70 43 2d 3e  >zMalloc || pC->
1daa0 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65  ephemPseudoTable
1dab0 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 70 44   ){.      pC->pD
1dac0 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a  ata = pData->z;.
1dad0 20 20 20 20 20 20 69 66 28 20 21 70 43 2d 3e 65        if( !pC->e
1dae0 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20  phemPseudoTable 
1daf0 29 7b 0a 20 20 20 20 20 20 20 20 70 44 61 74 61  ){.        pData
1db00 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
1db10 44 79 6e 3b 0a 20 20 20 20 20 20 20 20 70 44 61  Dyn;.        pDa
1db20 74 61 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ta->flags |= MEM
1db30 5f 45 70 68 65 6d 3b 0a 20 20 20 20 20 20 20 20  _Ephem;.        
1db40 70 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d  pData->zMalloc =
1db50 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
1db60 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 2d  }else{.      pC-
1db70 3e 70 44 61 74 61 20 3d 20 73 71 6c 69 74 65 33  >pData = sqlite3
1db80 4d 61 6c 6c 6f 63 28 20 70 43 2d 3e 6e 44 61 74  Malloc( pC->nDat
1db90 61 2b 32 20 29 3b 0a 20 20 20 20 20 20 69 66 28  a+2 );.      if(
1dba0 20 21 70 43 2d 3e 70 44 61 74 61 20 29 20 67 6f   !pC->pData ) go
1dbb0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20  to no_mem;.     
1dbc0 20 6d 65 6d 63 70 79 28 70 43 2d 3e 70 44 61 74   memcpy(pC->pDat
1dbd0 61 2c 20 70 44 61 74 61 2d 3e 7a 2c 20 70 43 2d  a, pData->z, pC-
1dbe0 3e 6e 44 61 74 61 29 3b 0a 20 20 20 20 20 20 70  >nData);.      p
1dbf0 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61  C->pData[pC->nDa
1dc00 74 61 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  ta] = 0;.      p
1dc10 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61  C->pData[pC->nDa
1dc20 74 61 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 7d  ta+1] = 0;.    }
1dc30 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
1dc40 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
1dc50 20 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 0a 20 20     int nZero;.  
1dc60 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
1dc70 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
1dc80 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70  .      nZero = p
1dc90 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  Data->u.nZero;. 
1dca0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1dcb0 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d  nZero = 0;.    }
1dcc0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1dcd0 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eSetCachedRowid(
1dce0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b  pC->pCursor, 0);
1dcf0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1dd00 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
1dd10 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65  >pCursor, 0, iKe
1dd20 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
1dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1dd40 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e  Data->z, pData->
1dd50 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20  n, nZero,.      
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd70 20 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20        pOp->p5 & 
1dd80 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 3b 0a  OPFLAG_APPEND);.
1dd90 20 20 7d 0a 20 20 0a 20 20 70 43 2d 3e 72 6f 77    }.  .  pC->row
1dda0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1ddb0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1ddc0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
1ddd0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1dde0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
1ddf0 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
1de00 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
1de10 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
1de20 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
1de30 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
1de40 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
1de50 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
1de60 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b   *zDb = db->aDb[
1de70 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a  pC->iDb].zName;.
1de80 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1de90 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  zTbl = pOp->p4.z
1dea0 3b 0a 20 20 20 20 69 6e 74 20 6f 70 20 3d 20 28  ;.    int op = (
1deb0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
1dec0 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
1ded0 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
1dee0 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20  LITE_INSERT);.  
1def0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1df00 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d  Table );.    db-
1df10 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1df20 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
1df30 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20   op, zDb, zTbl, 
1df40 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72  iKey);.    asser
1df50 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
1df60 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1df70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65  ./* Opcode: Dele
1df80 74 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  te P1 P2 * P4 *.
1df90 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65  **.** Delete the
1dfa0 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68   record at which
1dfb0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69   the P1 cursor i
1dfc0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
1dfd0 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ting..**.** The 
1dfe0 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c  cursor will be l
1dff0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1e000 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20  either the next 
1e010 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a  or the previous.
1e020 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65  ** record in the
1e030 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73   table. If it is
1e040 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1e050 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72  t the next recor
1e060 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e  d, then.** the n
1e070 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63  ext Next instruc
1e080 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e  tion will be a n
1e090 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20  o-op.  Hence it 
1e0a0 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a  is OK to delete.
1e0b0 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d  ** a record from
1e0c0 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78 74 20   within an Next 
1e0d0 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  loop..**.** If t
1e0e0 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
1e0f0 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20  E flag of P2 is 
1e100 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
1e110 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
1e120 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
1e130 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
1e140 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20  ..**.** P1 must 
1e150 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61  not be pseudo-ta
1e160 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20  ble.  It has to 
1e170 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  be a real table 
1e180 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65  with.** multiple
1e190 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   rows..**.** If 
1e1a0 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
1e1b0 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e  then it is the n
1e1c0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
1e1d0 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70   that P1 is.** p
1e1e0 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65  ointing to.  The
1e1f0 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c   update hook wil
1e200 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66  l be invoked, if
1e210 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49   it exists..** I
1e220 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
1e230 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75 72   then the P1 cur
1e240 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65  sor must have be
1e250 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a  en positioned.**
1e260 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75   using OP_NotFou
1e270 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f  nd prior to invo
1e280 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  king this opcode
1e290 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c  ..*/.case OP_Del
1e2a0 65 74 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d  ete: {.  int i =
1e2b0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 36 34 20   pOp->p1;.  i64 
1e2c0 69 4b 65 79 20 3d 20 30 3b 0a 20 20 56 64 62 65  iKey = 0;.  Vdbe
1e2d0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
1e2e0 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
1e2f0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1e300 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69   pC = p->apCsr[i
1e310 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1e320 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1e330 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1e340 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64  ;  /* Only valid
1e350 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73   for real tables
1e360 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65  , no pseudotable
1e370 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68  s */..  /* If th
1e380 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e update-hook wi
1e390 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
1e3a0 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65 20 72  et iKey to the r
1e3b0 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a  owid of the.  **
1e3c0 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74   row being delet
1e3d0 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ed..  */.  if( d
1e3e0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
1e3f0 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
1e400 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1e410 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1e420 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
1e430 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20 20 2f  widIsValid );  /
1e440 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65 74 20  * lastRowid set 
1e450 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e  by previous OP_N
1e460 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69  otFound */.    i
1e470 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f  Key = pC->lastRo
1e480 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d  wid;.  }..  rc =
1e490 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
1e4a0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
1e4b0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1e4c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1e4d0 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ;.  sqlite3Btree
1e4e0 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70  SetCachedRowid(p
1e4f0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a  C->pCursor, 0);.
1e500 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1e510 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43  reeDelete(pC->pC
1e520 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61  ursor);.  pC->ca
1e530 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1e540 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
1e550 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
1e560 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
1e570 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
1e580 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
1e590 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1e5a0 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
1e5b0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
1e5c0 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70  *zDb = db->aDb[p
1e5d0 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
1e5e0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1e5f0 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
1e600 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
1e610 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
1e620 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
1e630 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62  DELETE, zDb, zTb
1e640 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
1e650 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
1e660 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   );.  }.  if( pO
1e670 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p2 & OPFLAG_N
1e680 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
1e690 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  nge++;.  break;.
1e6a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
1e6b0 73 65 74 43 6f 75 6e 74 20 50 31 20 2a 20 2a 0a  setCount P1 * *.
1e6c0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1e6d0 65 20 72 65 73 65 74 73 20 74 68 65 20 56 4d 73  e resets the VMs
1e6e0 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
1e6f0 20 63 6f 75 6e 74 65 72 20 74 6f 20 30 2e 20 49   counter to 0. I
1e700 66 20 50 31 20 69 73 20 74 72 75 65 2c 0a 2a 2a  f P1 is true,.**
1e710 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
1e720 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
1e730 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
1e740 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
1e750 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
1e760 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
1e770 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
1e780 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
1e790 33 5f 63 68 61 6e 67 65 73 28 29 29 0a 2a 2a 20  3_changes()).** 
1e7a0 62 65 66 6f 72 65 20 69 74 20 69 73 20 72 65 73  before it is res
1e7b0 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
1e7c0 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
1e7d0 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rams..*/.case OP
1e7e0 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20  _ResetCount: {. 
1e7f0 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
1e800 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
1e810 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
1e820 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 7d 0a 20  >nChange);.  }. 
1e830 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
1e840 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1e850 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
1e860 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1e870 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
1e880 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
1e890 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66  plete row data f
1e8a0 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
1e8b0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
1e8c0 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
1e8d0 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74  he data.  .** It
1e8e0 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20   is just copied 
1e8f0 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
1e900 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
1e910 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
1e920 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
1e930 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  file..**.** If t
1e940 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
1e950 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
1e960 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
1e970 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
1e980 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
1e990 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
1e9a0 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  able..*/./* Opco
1e9b0 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32  de: RowKey P1 P2
1e9c0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
1e9d0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
1e9e0 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
1e9f0 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72   row key for cur
1ea00 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
1ea10 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
1ea20 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
1ea30 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20  a.  .** The key 
1ea40 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  is copied onto t
1ea50 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65  he P3 register e
1ea60 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
1ea70 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
1ea80 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1ea90 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
1eaa0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
1eab0 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
1eac0 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
1ead0 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
1eae0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
1eaf0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1eb00 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65  */.case OP_RowKe
1eb10 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  y:.case OP_RowDa
1eb20 74 61 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20  ta: {.  int i = 
1eb30 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43  pOp->p1;.  VdbeC
1eb40 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
1eb50 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1eb60 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d  u32 n;..  pOut =
1eb70 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
1eb80 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74  2];..  /* Note t
1eb90 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52  hat RowKey and R
1eba0 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c  owData are reall
1ebb0 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  y exactly the sa
1ebc0 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a  me instruction *
1ebd0 2f 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  /.  assert( i>=0
1ebe0 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1ebf0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1ec00 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
1ec10 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c  ( pC->isTable ||
1ec20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1ec30 5f 52 6f 77 4b 65 79 20 29 3b 0a 20 20 61 73 73  _RowKey );.  ass
1ec40 65 72 74 28 20 70 43 2d 3e 69 73 49 6e 64 65 78  ert( pC->isIndex
1ec50 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
1ec60 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
1ec70 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1ec80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1ec90 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20  nullRow==0 );.  
1eca0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1ecb0 64 6f 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  doTable==0 );.  
1ecc0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1ecd0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73  sor!=0 );.  pCrs
1ece0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
1ecf0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1ed00 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1ed10 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  pC);.  if( rc ) 
1ed20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ed30 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
1ed40 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
1ed50 20 20 69 36 34 20 6e 36 34 3b 0a 20 20 20 20 61    i64 n64;.    a
1ed60 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61  ssert( !pC->isTa
1ed70 62 6c 65 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ble );.    sqlit
1ed80 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
1ed90 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20  Crsr, &n64);.   
1eda0 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69   if( n64>db->aLi
1edb0 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
1edc0 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
1edd0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
1ede0 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 69      }.    n = (i
1edf0 6e 74 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b  nt)n64;.  }else{
1ee00 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1ee10 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c  eDataSize(pCrsr,
1ee20 20 26 6e 29 3b 0a 20 20 20 20 69 66 28 20 28 69   &n);.    if( (i
1ee30 6e 74 29 6e 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  nt)n>db->aLimit[
1ee40 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
1ee50 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
1ee60 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
1ee70 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  }.  }.  if( sqli
1ee80 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
1ee90 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20  Out, n, 0) ){.  
1eea0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
1eeb0 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
1eec0 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
1eed0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
1eee0 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
1eef0 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63 20  Index ){.    rc 
1ef00 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
1ef10 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  y(pCrsr, 0, n, p
1ef20 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65  Out->z);.  }else
1ef30 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1ef40 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73  e3BtreeData(pCrs
1ef50 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a  r, 0, n, pOut->z
1ef60 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  );.  }.  pOut->e
1ef70 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
1ef80 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
1ef90 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
1efa0 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20  ast to text */. 
1efb0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
1efc0 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
1efd0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1efe0 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
1eff0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
1f000 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
1f010 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
1f020 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
1f030 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
1f040 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72  hat.** P1 is cur
1f050 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e  rently point to.
1f060 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65  .**.** P1 can be
1f070 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e   either an ordin
1f080 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76  ary table or a v
1f090 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
1f0a0 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  here used to.** 
1f0b0 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50  be a separate OP
1f0c0 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66  _VRowid opcode f
1f0d0 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74  or use with virt
1f0e0 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20  ual tables, but 
1f0f0 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f  this.** one opco
1f100 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72  de now works for
1f110 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65   both table type
1f120 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  s..*/.case OP_Ro
1f130 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
1f140 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1f150 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1f160 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1f170 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f180 3b 0a 20 20 69 36 34 20 76 3b 0a 0a 20 20 61 73  ;.  i64 v;..  as
1f190 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1f1a0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1f1b0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
1f1c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1f1d0 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e  0 );.  if( pC->n
1f1e0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 2f 2a  ullRow ){.    /*
1f1f0 20 44 6f 20 6e 6f 74 68 69 6e 67 20 73 6f 20 74   Do nothing so t
1f200 68 61 74 20 72 65 67 5b 50 32 5d 20 72 65 6d 61  hat reg[P2] rema
1f210 69 6e 73 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  ins NULL */.    
1f220 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69  break;.  }else i
1f230 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  f( pC->deferredM
1f240 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d  oveto ){.    v =
1f250 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
1f260 74 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  t;.  }else if( p
1f270 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29  C->pseudoTable )
1f280 7b 0a 20 20 20 20 76 20 3d 20 6b 65 79 54 6f 49  {.    v = keyToI
1f290 6e 74 28 70 43 2d 3e 69 4b 65 79 29 3b 0a 23 69  nt(pC->iKey);.#i
1f2a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1f2b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1f2c0 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70   }else if( pC->p
1f2d0 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20  VtabCursor ){.  
1f2e0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
1f2f0 70 56 74 61 62 3b 0a 20 20 20 20 63 6f 6e 73 74  pVtab;.    const
1f300 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
1f310 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 70 56  *pModule;.    pV
1f320 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43  tab = pC->pVtabC
1f330 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
1f340 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
1f350 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
1f360 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
1f370 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 69  >xRowid );.    i
1f380 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
1f390 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
1f3a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
1f3b0 73 65 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f  se;.    rc = pMo
1f3c0 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
1f3d0 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76  >pVtabCursor, &v
1f3e0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  );.    sqlite3Db
1f3f0 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
1f400 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72  Msg);.    p->zEr
1f410 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45  rMsg = pVtab->zE
1f420 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62  rrMsg;.    pVtab
1f430 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
1f440 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
1f450 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
1f460 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
1f470 69 73 75 73 65 3b 0a 23 65 6e 64 69 66 20 2f 2a  isuse;.#endif /*
1f480 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1f490 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
1f4a0 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
1f4b0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
1f4c0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20  Moveto(pC);.    
1f4d0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1f4e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1f4f0 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f  ;.    if( pC->ro
1f500 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20  widIsValid ){.  
1f510 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74      v = pC->last
1f520 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65  Rowid;.    }else
1f530 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
1f540 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1f550 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
1f560 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
1f570 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
1f580 20 20 20 20 76 20 3d 20 6b 65 79 54 6f 49 6e 74      v = keyToInt
1f590 28 76 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  (v);.    }.  }. 
1f5a0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
1f5b0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
1f5c0 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
1f5d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1f5e0 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20  Opcode: NullRow 
1f5f0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
1f600 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72   Move the cursor
1f610 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f   P1 to a null ro
1f620 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d  w.  Any OP_Colum
1f630 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20  n operations.** 
1f640 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65  that occur while
1f650 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f   the cursor is o
1f660 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77  n the null row w
1f670 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72  ill always.** wr
1f680 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  ite a NULL..*/.c
1f690 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20  ase OP_NullRow: 
1f6a0 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  {.  int i = pOp-
1f6b0 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  >p1;.  VdbeCurso
1f6c0 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
1f6d0 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1f6e0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1f6f0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
1f700 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1f710 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1f720 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   1;.  pC->rowidI
1f730 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66  sValid = 0;.  if
1f740 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b  ( pC->pCursor ){
1f750 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1f760 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
1f770 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  >pCursor);.  }. 
1f780 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1f790 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
1f7a0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
1f7b0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
1f7c0 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
1f7d0 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
1f7e0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
1f7f0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
1f800 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
1f810 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
1f820 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
1f830 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
1f840 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
1f850 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
1f860 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1f870 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
1f880 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
1f890 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
1f8a0 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
1f8b0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
1f8c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
1f8d0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
1f8e0 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20   OP_Last: {     
1f8f0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
1f900 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
1f910 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f920 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1f930 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1f940 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
1f950 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1f960 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1f970 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
1f980 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
1f990 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
1f9a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
1f9b0 72 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  r!=0 );.  rc = s
1f9c0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
1f9d0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
1f9e0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
1f9f0 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66  8)res;.  pC->def
1fa00 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1fa10 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
1fa20 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  lid = 0;.  pC->c
1fa30 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1fa40 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
1fa50 72 65 73 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30  res && pOp->p2>0
1fa60 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
1fa70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
1fa80 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
1fa90 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32  code: Sort P1 P2
1faa0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
1fab0 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78  s opcode does ex
1fac0 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74  actly the same t
1fad0 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e  hing as OP_Rewin
1fae0 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  d except that.**
1faf0 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61   it increments a
1fb00 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67  n undocumented g
1fb10 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75  lobal variable u
1fb20 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e  sed for testing.
1fb30 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69  .**.** Sorting i
1fb40 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62  s accomplished b
1fb50 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64  y writing record
1fb60 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67  s into a sorting
1fb70 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20   index,.** then 
1fb80 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69  rewinding that i
1fb90 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67  ndex and playing
1fba0 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65   it back from be
1fbb0 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e  ginning to.** en
1fbc0 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f  d.  We use the O
1fbd0 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e  P_Sort opcode in
1fbe0 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69  stead of OP_Rewi
1fbf0 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20  nd to do the.** 
1fc00 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61  rewinding so tha
1fc10 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  t the global var
1fc20 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e  iable will be in
1fc30 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a  cremented and.**
1fc40 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
1fc50 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20  s can determine 
1fc60 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
1fc70 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a  he optimizer is.
1fc80 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74  ** correctly opt
1fc90 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74  imizing out sort
1fca0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
1fcb0 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  rt: {        /* 
1fcc0 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53  jump */.#ifdef S
1fcd0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c  QLITE_TEST.  sql
1fce0 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b  ite3_sort_count+
1fcf0 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61  +;.  sqlite3_sea
1fd00 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e  rch_count--;.#en
1fd10 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65  dif.  p->aCounte
1fd20 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  r[SQLITE_STMTSTA
1fd30 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20  TUS_SORT-1]++;. 
1fd40 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
1fd50 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20   into OP_Rewind 
1fd60 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  */.}./* Opcode: 
1fd70 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a  Rewind P1 P2 * *
1fd80 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
1fd90 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
1fda0 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
1fdb0 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
1fdc0 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
1fdd0 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69   refer to the fi
1fde0 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  rst entry in the
1fdf0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
1fe00 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
1fe10 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1fe20 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
1fe30 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
1fe40 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1fe50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
1fe60 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
1fe70 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
1fe80 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
1fe90 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
1fea0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
1feb0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
1fec0 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20  _Rewind: {      
1fed0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
1fee0 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1fef0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1ff00 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
1ff10 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
1ff20 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1ff30 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1ff40 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1ff50 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  sr[i];.  assert(
1ff60 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
1ff70 28 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75  (pCrsr = pC->pCu
1ff80 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20  rsor)!=0 ){.    
1ff90 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ffa0 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72  eFirst(pCrsr, &r
1ffb0 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46  es);.    pC->atF
1ffc0 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31  irst = res==0 ?1
1ffd0 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65  :0;.    pC->defe
1ffe0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1fff0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
20000 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
20010 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  E;.    pC->rowid
20020 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d  IsValid = 0;.  }
20030 65 6c 73 65 7b 0a 20 20 20 20 72 65 73 20 3d 20  else{.    res = 
20040 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c  1;.  }.  pC->nul
20050 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
20060 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20070 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  2>0 && pOp->p2<p
20080 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72  ->nOp );.  if( r
20090 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
200a0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
200b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
200c0 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50  pcode: Next P1 P
200d0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
200e0 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20  vance cursor P1 
200f0 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
20100 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65  s to the next ke
20110 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69  y/data pair in i
20120 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  ts.** table or i
20130 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20  ndex.  If there 
20140 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f  are no more key/
20150 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
20160 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
20170 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
20180 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
20190 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
201a0 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75  r advance was su
201b0 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d  ccessful,.** jum
201c0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
201d0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50   P2..**.** The P
201e0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
201f0 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
20200 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
20210 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  table..**.** See
20220 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f   also: Prev.*/./
20230 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50  * Opcode: Prev P
20240 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
20250 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20   Back up cursor 
20260 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
20270 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76  ints to the prev
20280 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61  ious key/data pa
20290 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
202a0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
202b0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65   there is no pre
202c0 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20  vious key/value 
202d0 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
202e0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
202f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
20300 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
20310 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b   the cursor back
20320 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75  up was successfu
20330 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
20340 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
20350 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
20360 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
20370 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
20380 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
20390 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
203a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
203b0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
203c0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
203d0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
203e0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
203f0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
20400 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f  t res;..  CHECK_
20410 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
20420 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
20430 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
20440 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
20450 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
20460 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d  ->p1];.  if( pC=
20470 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  =0 ){.    break;
20480 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20    /* See ticket 
20490 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70  #2273 */.  }.  p
204a0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
204b0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
204c0 72 73 72 20 29 3b 0a 20 20 72 65 73 20 3d 20 31  rsr );.  res = 1
204d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
204e0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
204f0 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d  0 );.  rc = pOp-
20500 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74  >opcode==OP_Next
20510 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   ? sqlite3BtreeN
20520 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ext(pCrsr, &res)
20530 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   :.             
20540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20550 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
20560 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65  vious(pCrsr, &re
20570 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
20580 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
20590 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
205a0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
205b0 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
205c0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
205d0 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   1;.    if( pOp-
205e0 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65  >p5 ) p->aCounte
205f0 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a  r[pOp->p5-1]++;.
20600 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
20610 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
20620 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
20630 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e  endif.  }.  pC->
20640 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
20650 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
20660 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
20670 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  rt P1 P2 P3 * *.
20680 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
20690 32 20 68 6f 6c 64 73 20 61 20 53 51 4c 20 69 6e  2 holds a SQL in
206a0 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69  dex key made usi
206b0 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65  ng the.** MakeRe
206c0 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
206d0 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  s.  This opcode 
206e0 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a  writes that key.
206f0 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65  ** into the inde
20700 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20  x P1.  Data for 
20710 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c  the entry is nil
20720 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20  ..**.** P3 is a 
20730 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69 64  flag that provid
20740 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  es a hint to the
20750 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68   b-tree layer th
20760 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72  at this.** inser
20770 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  t is likely to b
20780 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a  e an append..**.
20790 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
207a0 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  ion only works f
207b0 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65  or indices.  The
207c0 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
207d0 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74  ruction.** for t
207e0 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65  ables is OP_Inse
207f0 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  rt..*/.case OP_I
20800 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20  dxInsert: {     
20810 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 69     /* in2 */.  i
20820 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
20830 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
20840 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
20850 72 73 72 3b 0a 20 20 61 73 73 65 72 74 28 20 69  rsr;.  assert( i
20860 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
20870 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
20880 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20   p->apCsr[i]!=0 
20890 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
208a0 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  2->flags & MEM_B
208b0 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20 28 70 43  lob );.  if( (pC
208c0 72 73 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61  rsr = (pC = p->a
208d0 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f  pCsr[i])->pCurso
208e0 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  r)!=0 ){.    ass
208f0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
20900 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ==0 );.    rc = 
20910 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
20920 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
20930 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
20940 20 69 6e 74 20 6e 4b 65 79 20 3d 20 70 49 6e 32   int nKey = pIn2
20950 2d 3e 6e 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74  ->n;.      const
20960 20 63 68 61 72 20 2a 7a 4b 65 79 20 3d 20 70 49   char *zKey = pI
20970 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20  n2->z;.      rc 
20980 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
20990 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79  sert(pCrsr, zKey
209a0 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30  , nKey, "", 0, 0
209b0 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 20 20  , pOp->p3);.    
209c0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
209d0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
209e0 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63  );.      pC->cac
209f0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
20a00 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20  _STALE;.    }.  
20a10 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
20a20 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65   Opcode: IdxDele
20a30 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  te P1 P2 P3 * *.
20a40 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e  **.** The conten
20a50 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72  t of P3 register
20a60 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65  s starting at re
20a70 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a  gister P2 form.*
20a80 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  * an unpacked in
20a90 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70  dex key. This op
20aa0 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61  code removes tha
20ab0 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65  t entry from the
20ac0 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65   .** index opene
20ad0 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a  d by cursor P1..
20ae0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65  */.case OP_IdxDe
20af0 6c 65 74 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20  lete: {.  int i 
20b00 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62  = pOp->p1;.  Vdb
20b10 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
20b20 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
20b30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20b40 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  3>0 );.  assert(
20b50 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
20b60 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70  p->p2+pOp->p3<=p
20b70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 61 73  ->nMem+1 );.  as
20b80 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
20b90 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
20ba0 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
20bb0 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  [i]!=0 );.  if( 
20bc0 28 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20 70  (pCrsr = (pC = p
20bd0 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75  ->apCsr[i])->pCu
20be0 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20  rsor)!=0 ){.    
20bf0 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 55 6e 70  int res;.    Unp
20c00 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
20c10 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
20c20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
20c30 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
20c40 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72  6)pOp->p3;.    r
20c50 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  .flags = 0;.    
20c60 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65  r.aMem = &p->aMe
20c70 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
20c80 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
20c90 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
20ca0 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
20cb0 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
20cc0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
20cd0 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
20ce0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
20cf0 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b  eeDelete(pCrsr);
20d00 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
20d10 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
20d20 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
20d30 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
20d40 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
20d50 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
20d60 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77  * Opcode: IdxRow
20d70 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
20d80 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
20d90 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
20da0 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
20db0 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
20dc0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a  n the record at.
20dd0 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  ** the end of th
20de0 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e  e index key poin
20df0 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72  ted to by cursor
20e00 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67   P1.  This integ
20e10 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  er should be.** 
20e20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
20e30 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20   table entry to 
20e40 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78  which this index
20e50 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a   entry points..*
20e60 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52  *.** See also: R
20e70 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64  owid, MakeRecord
20e80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
20e90 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
20ea0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
20eb0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
20ec0 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
20ed0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
20ee0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
20ef0 70 43 3b 0a 0a 0a 20 20 61 73 73 65 72 74 28 20  pC;...  assert( 
20f00 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
20f10 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
20f20 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30  ( p->apCsr[i]!=0
20f30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72   );.  if( (pCrsr
20f40 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73   = (pC = p->apCs
20f50 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21  r[i])->pCursor)!
20f60 3d 30 20 29 7b 0a 20 20 20 20 69 36 34 20 72 6f  =0 ){.    i64 ro
20f70 77 69 64 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  wid;.    rc = sq
20f80 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
20f90 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69  oveto(pC);.    i
20fa0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
20fb0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
20fc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
20fd0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
20fe0 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
20ff0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
21000 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43 2d   );.    if( !pC-
21010 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
21020 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
21030 62 65 49 64 78 52 6f 77 69 64 28 70 43 72 73 72  beIdxRowid(pCrsr
21040 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 20  , &rowid);.     
21050 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
21060 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
21070 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
21080 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
21090 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
210a0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
210b0 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  t);.      pOut->
210c0 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  u.i = rowid;.   
210d0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
210e0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
210f0 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
21100 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  P5.**.** The P4 
21110 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
21120 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
21130 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
21140 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
21150 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
21160 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
21170 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
21180 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
21190 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
211a0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
211b0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
211c0 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
211d0 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
211e0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
211f0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
21200 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
21210 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
21220 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
21230 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
21240 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
21250 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
21260 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
21270 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
21280 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
21290 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
212a0 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20   an epsilon .** 
212b0 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d  prior to the com
212c0 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
212d0 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77  ake the opcode w
212e0 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65  ork like IdxGT e
212f0 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66  xcept.** that if
21300 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65   the key from re
21310 67 69 73 74 65 72 20 50 33 20 69 73 20 61 20 70  gister P3 is a p
21320 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
21330 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a   in the cursor,.
21340 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ** the result is
21350 20 66 61 6c 73 65 20 77 68 65 72 65 61 73 20 69   false whereas i
21360 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20  t would be true 
21370 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f  with IdxGT..*/./
21380 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
21390 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
213a0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
213b0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
213c0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
213d0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
213e0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
213f0 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
21400 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
21410 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
21420 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
21430 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
21440 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
21450 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
21460 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
21470 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
21480 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
21490 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
214a0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
214b0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
214c0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
214d0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
214e0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
214f0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
21500 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
21510 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
21520 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
21530 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a  psilon prior .**
21540 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
21550 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20  on.  This makes 
21560 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20  the opcode work 
21570 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63  like IdxLE..*/.c
21580 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20  ase OP_IdxLT:   
21590 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
215a0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in3 */.case OP_I
215b0 64 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f  dxGE: {        /
215c0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
215d0 20 69 6e 74 20 69 3d 20 70 4f 70 2d 3e 70 31 3b   int i= pOp->p1;
215e0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
215f0 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e  C;..  assert( i>
21600 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
21610 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
21620 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29  p->apCsr[i]!=0 )
21630 3b 0a 20 20 69 66 28 20 28 70 43 20 3d 20 70 2d  ;.  if( (pC = p-
21640 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72  >apCsr[i])->pCur
21650 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e  sor!=0 ){.    in
21660 74 20 72 65 73 3b 0a 20 20 20 20 55 6e 70 61 63  t res;.    Unpac
21670 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 20  kedRecord r;.   
21680 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
21690 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
216a0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
216b0 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
216c0 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73  >p5==1 );.    as
216d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
216e0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
216f0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
21700 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
21710 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
21720 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
21730 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
21740 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20        r.flags = 
21750 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
21760 20 7c 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f   | UNPACKED_IGNO
21770 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 65  RE_ROWID;.    }e
21780 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61  lse{.      r.fla
21790 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 47  gs = UNPACKED_IG
217a0 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20  NORE_ROWID;.    
217b0 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26  }.    r.aMem = &
217c0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
217d0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
217e0 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70  e3VdbeIdxKeyComp
217f0 61 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73  are(pC, &r, &res
21800 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
21810 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
21820 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
21830 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  -res;.    }else{
21840 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
21850 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
21860 64 78 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65  dxGE );.      re
21870 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  s++;.    }.    i
21880 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20  f( res>0 ){.    
21890 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
218a0 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   1 ;.    }.  }. 
218b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
218c0 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31  code: Destroy P1
218d0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
218e0 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72   Delete an entir
218f0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
21900 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
21910 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
21920 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
21930 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
21940 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
21950 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65  e being destroye
21960 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  d is in the main
21970 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
21980 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P3==0.  If.** 
21990 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P3==1 then the t
219a0 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
219b0 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
219c0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
219d0 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
219e0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
219f0 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
21a00 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
21a10 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
21a20 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65   AUTOVACUUM is e
21a30 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69  nabled then it i
21a40 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
21a50 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67  another root pag
21a60 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f  e.** might be mo
21a70 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77  ved into the new
21a80 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20  ly deleted root 
21a90 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  page in order to
21aa0 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f   keep all.** roo
21ab0 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f  t pages contiguo
21ac0 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  us at the beginn
21ad0 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62  ing of the datab
21ae0 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72  ase.  The former
21af0 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65  .** value of the
21b00 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20   root page that 
21b10 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75  moved - its valu
21b20 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76  e before the mov
21b30 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20  e occurred -.** 
21b40 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
21b50 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f  ister P2.  If no
21b60 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65   page .** moveme
21b70 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20  nt was required 
21b80 28 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62  (because the tab
21b90 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64  le being dropped
21ba0 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a   was already .**
21bb0 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e   the last one in
21bc0 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74   the database) t
21bd0 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74  hen a zero is st
21be0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
21bf0 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56   P2..** If AUTOV
21c00 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65  ACUUM is disable
21c10 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  d then a zero is
21c20 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
21c30 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ter P2..**.** Se
21c40 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f  e also: Clear.*/
21c50 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79  .case OP_Destroy
21c60 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d  : {     /* out2-
21c70 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
21c80 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e  int iMoved;.  in
21c90 74 20 69 43 6e 74 3b 0a 23 69 66 6e 64 65 66 20  t iCnt;.#ifndef 
21ca0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
21cb0 55 41 4c 54 41 42 4c 45 0a 20 20 56 64 62 65 20  UALTABLE.  Vdbe 
21cc0 2a 70 56 64 62 65 3b 0a 20 20 69 43 6e 74 20 3d  *pVdbe;.  iCnt =
21cd0 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d   0;.  for(pVdbe=
21ce0 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65  db->pVdbe; pVdbe
21cf0 3b 20 70 56 64 62 65 3d 70 56 64 62 65 2d 3e 70  ; pVdbe=pVdbe->p
21d00 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70  Next){.    if( p
21d10 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  Vdbe->magic==VDB
21d20 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70  E_MAGIC_RUN && p
21d30 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68  Vdbe->inVtabMeth
21d40 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70  od<2 && pVdbe->p
21d50 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 43  c>=0 ){.      iC
21d60 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  nt++;.    }.  }.
21d70 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64  #else.  iCnt = d
21d80 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
21d90 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69  ;.#endif.  if( i
21da0 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20  Cnt>1 ){.    rc 
21db0 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
21dc0 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  .    p->errorAct
21dd0 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a  ion = OE_Abort;.
21de0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74    }else{.    int
21df0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
21e00 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6e 74      assert( iCnt
21e10 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==1 );.    asser
21e20 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
21e30 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20   & (1<<iDb))!=0 
21e40 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
21e50 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c  te3BtreeDropTabl
21e60 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  e(db->aDb[iDb].p
21e70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d  Bt, pOp->p1, &iM
21e80 6f 76 65 64 29 3b 0a 20 20 20 20 4d 65 6d 53 65  oved);.    MemSe
21e90 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
21ea0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
21eb0 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64  ut->u.i = iMoved
21ec0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
21ed0 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
21ee0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
21ef0 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64  ITE_OK && iMoved
21f00 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  !=0 ){.      sql
21f10 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
21f20 64 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2c  d(&db->aDb[iDb],
21f30 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
21f40 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
21f50 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
21f60 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72  /* Opcode: Clear
21f70 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
21f80 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
21f90 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  nts of the datab
21fa0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
21fb0 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
21fc0 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74  ge.** in the dat
21fd0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69  abase file is gi
21fe0 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c  ven by P1.  But,
21ff0 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c   unlike Destroy,
22000 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76   do not.** remov
22010 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  e the table or i
22020 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61  ndex from the da
22030 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
22040 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
22050 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  ng clear is in t
22060 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
22070 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20   file if P2==0. 
22080 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65   If.** P2==1 the
22090 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
220a0 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
220b0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
220c0 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
220d0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
220e0 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
220f0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
22100 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
22110 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76  *.** If the P3 v
22120 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
22130 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
22140 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73   referred to mus
22150 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65  t be an.** intke
22160 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20  y table (an SQL 
22170 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e  table, not an in
22180 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61  dex). In this ca
22190 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  se the row chang
221a0 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69  e .** count is i
221b0 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
221c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
221d0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
221e0 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a  ing cleared. .**
221f0 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65   If P3 is greate
22200 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65  r than zero, the
22210 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  n the value stor
22220 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
22230 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63  3 is.** also inc
22240 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
22250 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
22260 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
22270 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a  g cleared..**.**
22280 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72   See also: Destr
22290 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  oy.*/.case OP_Cl
222a0 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68  ear: {.  int nCh
222b0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65  ange = 0;.  asse
222c0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
222d0 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 32 29  k & (1<<pOp->p2)
222e0 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )!=0 );.  rc = s
222f0 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
22300 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d  Table(.      db-
22310 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42  >aDb[pOp->p2].pB
22320 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70  t, pOp->p1, (pOp
22330 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20  ->p3 ? &nChange 
22340 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20  : 0).  );.  if( 
22350 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70  pOp->p3 ){.    p
22360 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68  ->nChange += nCh
22370 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f  ange;.    if( pO
22380 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20  p->p3>0 ){.     
22390 20 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   p->aMem[pOp->p3
223a0 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65  ].u.i += nChange
223b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
223c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
223d0 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50  e: CreateTable P
223e0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
223f0 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
22400 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69  table in the mai
22410 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
22420 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
22430 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
22440 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
22450 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
22460 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
22470 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
22480 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
22490 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
224a0 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
224b0 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  ** register P2.*
224c0 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65  *.** The differe
224d0 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61  nce between a ta
224e0 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78  ble and an index
224f0 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62   is this:  A tab
22500 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20  le must.** have 
22510 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  a 4-byte integer
22520 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76   key and can hav
22530 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  e arbitrary data
22540 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  .  An index.** h
22550 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  as an arbitrary 
22560 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e  key but no data.
22570 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
22580 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a   CreateIndex.*/.
22590 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
225a0 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a  eIndex P1 P2 * *
225b0 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74   *.**.** Allocat
225c0 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e  e a new index in
225d0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
225e0 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
225f0 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
22600 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
22610 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
22620 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
22630 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
22640 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
22650 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
22660 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
22670 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
22680 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ter P2..**.** Se
22690 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
226a0 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  on OP_CreateTabl
226b0 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
226c0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
226d0 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49  .case OP_CreateI
226e0 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20  ndex:           
226f0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
22700 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ase */.case OP_C
22710 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20  reateTable: {   
22720 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
22730 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
22740 6e 74 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 69  nt pgno = 0;.  i
22750 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a  nt flags;.  Db *
22760 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pDb;.  assert( p
22770 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
22780 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
22790 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
227a0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
227b0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
227c0 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
227d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
227e0 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
227f0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
22800 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61  ode==OP_CreateTa
22810 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c  ble ){.    /* fl
22820 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
22830 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73  EY; */.    flags
22840 20 3d 20 42 54 52 45 45 5f 4c 45 41 46 44 41 54   = BTREE_LEAFDAT
22850 41 7c 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a  A|BTREE_INTKEY;.
22860 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61    }else{.    fla
22870 67 73 20 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44  gs = BTREE_ZEROD
22880 41 54 41 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  ATA;.  }.  rc = 
22890 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
228a0 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74  teTable(pDb->pBt
228b0 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b  , &pgno, flags);
228c0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
228d0 67 6e 6f 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  gno;.  MemSetTyp
228e0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
228f0 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
22900 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
22910 73 65 53 63 68 65 6d 61 20 50 31 20 50 32 20 2a  seSchema P1 P2 *
22920 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64   P4 *.**.** Read
22930 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65   and parse all e
22940 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20  ntries from the 
22950 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61  SQLITE_MASTER ta
22960 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ble of database 
22970 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68  P1.** that match
22980 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
22990 65 20 50 34 2e 20 20 50 32 20 69 73 20 74 68 65  e P4.  P2 is the
229a0 20 22 66 6f 72 63 65 22 20 66 6c 61 67 2e 20 20   "force" flag.  
229b0 20 41 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68   Always do.** th
229c0 65 20 70 61 72 73 69 6e 67 20 69 66 20 50 32 20  e parsing if P2 
229d0 69 73 20 74 72 75 65 2e 20 20 49 66 20 50 32 20  is true.  If P2 
229e0 69 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 74  is false, then t
229f0 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
22a00 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65  .** no-op if the
22a10 20 73 63 68 65 6d 61 20 69 73 20 6e 6f 74 20 63   schema is not c
22a20 75 72 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e  urrently loaded.
22a30 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
22a40 2c 20 69 66 20 50 32 0a 2a 2a 20 69 73 20 66 61  , if P2.** is fa
22a50 6c 73 65 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  lse, the SQLITE_
22a60 4d 41 53 54 45 52 20 74 61 62 6c 65 20 69 73 20  MASTER table is 
22a70 6f 6e 6c 79 20 70 61 72 73 65 64 20 69 66 20 74  only parsed if t
22a80 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 0a 2a  he rest of the.*
22a90 2a 20 73 63 68 65 6d 61 20 69 73 20 61 6c 72 65  * schema is alre
22aa0 61 64 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20  ady loaded into 
22ab0 74 68 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65  the symbol table
22ac0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
22ad0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
22ae0 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65  parser to create
22af0 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d   a new virtual m
22b00 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20  achine,.** then 
22b10 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72  runs the new vir
22b20 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
22b30 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65  t is thus a re-e
22b40 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a  ntrant opcode..*
22b50 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53  /.case OP_ParseS
22b60 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69  chema: {.  int i
22b70 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
22b80 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
22b90 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
22ba0 0a 0a 20 20 2f 2a 20 49 66 20 70 4f 70 2d 3e 70  ..  /* If pOp->p
22bb0 32 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68 69  2 is 0, then thi
22bc0 73 20 6f 70 63 6f 64 65 20 69 73 20 62 65 69 6e  s opcode is bein
22bd0 67 20 65 78 65 63 75 74 65 64 20 74 6f 20 72 65  g executed to re
22be0 61 64 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65  ad a.  ** single
22bf0 20 72 6f 77 2c 20 66 6f 72 20 65 78 61 6d 70 6c   row, for exampl
22c00 65 20 74 68 65 20 72 6f 77 20 63 6f 72 72 65 73  e the row corres
22c10 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 6e 65 77  ponding to a new
22c20 20 69 6e 64 65 78 0a 20 20 2a 2a 20 63 72 65 61   index.  ** crea
22c30 74 65 64 20 62 79 20 74 68 69 73 20 56 44 42 45  ted by this VDBE
22c40 2c 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74  , from the sqlit
22c50 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 20  e_master table. 
22c60 49 74 20 6f 6e 6c 79 0a 20 20 2a 2a 20 64 6f 65  It only.  ** doe
22c70 73 20 74 68 69 73 20 69 66 20 74 68 65 20 63 6f  s this if the co
22c80 72 72 65 73 70 6f 6e 64 69 6e 67 20 69 6e 2d 6d  rresponding in-m
22c90 65 6d 6f 72 79 20 73 63 68 65 6d 61 20 69 73 20  emory schema is 
22ca0 63 75 72 72 65 6e 74 6c 79 0a 20 20 2a 2a 20 6c  currently.  ** l
22cb0 6f 61 64 65 64 2e 20 4f 74 68 65 72 77 69 73 65  oaded. Otherwise
22cc0 2c 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 20  , the new index 
22cd0 64 65 66 69 6e 69 74 69 6f 6e 20 63 61 6e 20 62  definition can b
22ce0 65 20 6c 6f 61 64 65 64 20 61 6c 6f 6e 67 0a 20  e loaded along. 
22cf0 20 2a 2a 20 77 69 74 68 20 74 68 65 20 72 65 73   ** with the res
22d00 74 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  t of the schema 
22d10 77 68 65 6e 20 69 74 20 69 73 20 72 65 71 75 69  when it is requi
22d20 72 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 41  red..  **.  ** A
22d30 6c 74 68 6f 75 67 68 20 74 68 65 20 6d 75 74 65  lthough the mute
22d40 78 20 6f 6e 20 74 68 65 20 42 74 53 68 61 72 65  x on the BtShare
22d50 64 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  d object that co
22d60 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 20 20 2a  rresponds to.  *
22d70 2a 20 64 61 74 61 62 61 73 65 20 69 44 62 20 28  * database iDb (
22d80 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
22d90 74 61 69 6e 69 6e 67 20 74 68 65 20 73 71 6c 69  taining the sqli
22da0 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a  te_master table.
22db0 20 20 2a 2a 20 72 65 61 64 20 62 79 20 74 68 69    ** read by thi
22dc0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 29 20 69  s instruction) i
22dd0 73 20 63 75 72 72 65 6e 74 6c 79 20 68 65 6c 64  s currently held
22de0 2c 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72  , it is necessar
22df0 79 20 74 6f 0a 20 20 2a 2a 20 6f 62 74 61 69 6e  y to.  ** obtain
22e00 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
22e10 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
22e20 61 62 61 73 65 73 20 62 65 66 6f 72 65 20 63 68  abases before ch
22e30 65 63 6b 69 6e 67 20 69 66 0a 20 20 2a 2a 20 74  ecking if.  ** t
22e40 68 65 20 73 63 68 65 6d 61 20 6f 66 20 69 44 62  he schema of iDb
22e50 20 69 73 20 6c 6f 61 64 65 64 2e 20 54 68 69 73   is loaded. This
22e60 20 69 73 20 62 65 63 61 75 73 65 2c 20 61 74 20   is because, at 
22e70 74 68 65 20 73 74 61 72 74 20 6f 66 0a 20 20 2a  the start of.  *
22e80 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78  * the sqlite3_ex
22e90 65 63 28 29 20 63 61 6c 6c 20 62 65 6c 6f 77 2c  ec() call below,
22ea0 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 69 6e 76   SQLite will inv
22eb0 6f 6b 65 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65  oke .  ** sqlite
22ec0 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 29  3BtreeEnterAll()
22ed0 2e 20 49 66 20 61 6c 6c 20 6d 75 74 65 78 65 73  . If all mutexes
22ee0 20 61 72 65 20 6e 6f 74 20 61 6c 72 65 61 64 79   are not already
22ef0 20 68 65 6c 64 2c 20 74 68 65 0a 20 20 2a 2a 20   held, the.  ** 
22f00 69 44 62 20 6d 75 74 65 78 20 6d 61 79 20 62 65  iDb mutex may be
22f10 20 74 65 6d 70 6f 72 61 72 69 6c 79 20 72 65 6c   temporarily rel
22f20 65 61 73 65 64 20 74 6f 20 61 76 6f 69 64 20 64  eased to avoid d
22f30 65 61 64 6c 6f 63 6b 2e 20 49 66 20 0a 20 20 2a  eadlock. If .  *
22f40 2a 20 74 68 69 73 20 68 61 70 70 65 6e 73 2c 20  * this happens, 
22f50 74 68 65 6e 20 73 6f 6d 65 20 6f 74 68 65 72 20  then some other 
22f60 74 68 72 65 61 64 20 6d 61 79 20 64 65 6c 65 74  thread may delet
22f70 65 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  e the in-memory 
22f80 0a 20 20 2a 2a 20 73 63 68 65 6d 61 20 6f 66 20  .  ** schema of 
22f90 64 61 74 61 62 61 73 65 20 69 44 62 20 62 65 66  database iDb bef
22fa0 6f 72 65 20 74 68 65 20 53 51 4c 20 73 74 61 74  ore the SQL stat
22fb0 65 6d 65 6e 74 20 72 75 6e 73 2e 20 54 68 65 20  ement runs. The 
22fc0 73 63 68 65 6d 61 0a 20 20 2a 2a 20 77 69 6c 6c  schema.  ** will
22fd0 20 6e 6f 74 20 62 65 20 72 65 6c 6f 61 64 65 64   not be reloaded
22fe0 20 62 65 63 75 61 73 65 20 74 68 65 20 64 62 2d   becuase the db-
22ff0 3e 69 6e 69 74 2e 62 75 73 79 20 66 6c 61 67 20  >init.busy flag 
23000 69 73 20 73 65 74 2e 20 54 68 69 73 0a 20 20 2a  is set. This.  *
23010 2a 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20  * can result in 
23020 61 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  a "no such table
23030 3a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22  : sqlite_master"
23040 20 6f 72 20 22 6d 61 6c 66 6f 72 6d 65 64 0a 20   or "malformed. 
23050 20 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68   ** database sch
23060 65 6d 61 22 20 65 72 72 6f 72 20 62 65 69 6e 67  ema" error being
23070 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
23080 20 75 73 65 72 2e 0a 20 20 2a 2f 0a 20 20 61 73   user..  */.  as
23090 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
230a0 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
230b0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
230c0 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ;.  sqlite3Btree
230d0 45 6e 74 65 72 41 6c 6c 28 64 62 29 3b 0a 20 20  EnterAll(db);.  
230e0 69 66 28 20 70 4f 70 2d 3e 70 32 20 7c 7c 20 44  if( pOp->p2 || D
230f0 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
23100 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c   iDb, DB_SchemaL
23110 6f 61 64 65 64 29 20 29 7b 0a 20 20 20 20 63 6f  oaded) ){.    co
23120 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65  nst char *zMaste
23130 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  r = SCHEMA_TABLE
23140 28 69 44 62 29 3b 0a 20 20 20 20 63 68 61 72 20  (iDb);.    char 
23150 2a 7a 53 71 6c 3b 0a 20 20 20 20 49 6e 69 74 44  *zSql;.    InitD
23160 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 20 20  ata initData;.  
23170 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20    initData.db = 
23180 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  db;.    initData
23190 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .iDb = pOp->p1;.
231a0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45      initData.pzE
231b0 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72  rrMsg = &p->zErr
231c0 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20  Msg;.    zSql = 
231d0 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
231e0 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43  b,.       "SELEC
231f0 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65  T name, rootpage
23200 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e  , sql FROM '%q'.
23210 25 73 20 57 48 45 52 45 20 25 73 22 2c 0a 20 20  %s WHERE %s",.  
23220 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
23230 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72  ].zName, zMaster
23240 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
23250 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
23260 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
23270 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65  TE_NOMEM;.    }e
23280 6c 73 65 7b 0a 20 20 20 20 20 20 28 76 6f 69 64  lse{.      (void
23290 29 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66  )sqlite3SafetyOf
232a0 66 28 64 62 29 3b 0a 20 20 20 20 20 20 61 73 73  f(db);.      ass
232b0 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75  ert( db->init.bu
232c0 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64  sy==0 );.      d
232d0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31  b->init.busy = 1
232e0 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61  ;.      initData
232f0 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  .rc = SQLITE_OK;
23300 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21  .      assert( !
23310 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
23320 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
23330 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
23340 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69  zSql, sqlite3Ini
23350 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74  tCallback, &init
23360 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20  Data, 0);.      
23370 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
23380 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74  K ) rc = initDat
23390 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69  a.rc;.      sqli
233a0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53  te3DbFree(db, zS
233b0 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  ql);.      db->i
233c0 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20  nit.busy = 0;.  
233d0 20 20 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65      (void)sqlite
233e0 33 53 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20  3SafetyOn(db);. 
233f0 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
23400 65 33 42 74 72 65 65 4c 65 61 76 65 41 6c 6c 28  e3BtreeLeaveAll(
23410 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  db);.  if( rc==S
23420 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
23430 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
23440 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d    }.  break;  .}
23450 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
23460 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
23470 5a 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ZE) && !defined(
23480 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53  SQLITE_OMIT_PARS
23490 45 52 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  ER)./* Opcode: L
234a0 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a  oadAnalysis P1 *
234b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61   * * *.**.** Rea
234c0 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
234d0 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74  t1 table for dat
234e0 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61  abase P1 and loa
234f0 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  d the content.**
23500 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69   of that table i
23510 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  nto the internal
23520 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c   index hash tabl
23530 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  e.  This will ca
23540 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79  use.** the analy
23550 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77  sis to be used w
23560 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c  hen preparing al
23570 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65  l subsequent que
23580 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ries..*/.case OP
23590 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b  _LoadAnalysis: {
235a0 0a 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70  .  int iDb = pOp
235b0 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
235c0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
235d0 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20  ->nDb );.  rc = 
235e0 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
235f0 6f 61 64 28 64 62 2c 20 69 44 62 29 3b 0a 20 20  oad(db, iDb);.  
23600 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69  break;  .}.#endi
23610 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
23620 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
23630 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  E) && !defined(S
23640 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45  QLITE_OMIT_PARSE
23650 52 29 20 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  R)  */../* Opcod
23660 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20  e: DropTable P1 
23670 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
23680 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
23690 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
236a0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
236b0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
236c0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
236d0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
236e0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
236f0 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  ed after a table
23700 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
23710 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
23720 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
23730 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
23740 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
23750 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
23760 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
23770 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62  .case OP_DropTab
23780 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  le: {.  sqlite3U
23790 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
237a0 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ble(db, pOp->p1,
237b0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
237c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
237d0 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31  de: DropIndex P1
237e0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
237f0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
23800 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
23810 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
23820 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
23830 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64   the index named
23840 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
23850 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
23860 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64  led after an ind
23870 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  ex.** is dropped
23880 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
23890 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
238a0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
238b0 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
238c0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
238d0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
238e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49  */.case OP_DropI
238f0 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ndex: {.  sqlite
23900 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
23910 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70  Index(db, pOp->p
23920 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
23930 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
23940 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65  code: DropTrigge
23950 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  r P1 * * P4 *.**
23960 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
23970 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
23980 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
23990 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
239a0 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72  e.** the trigger
239b0 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
239c0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
239d0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
239e0 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20  a trigger.** is 
239f0 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
23a00 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
23a10 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
23a20 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
23a30 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
23a40 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
23a50 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
23a60 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b  P_DropTrigger: {
23a70 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
23a80 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
23a90 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
23aa0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
23ab0 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
23ac0 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
23ad0 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70  RITY_CHECK./* Op
23ae0 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43  code: IntegrityC
23af0 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  k P1 P2 P3 * P5.
23b00 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c  **.** Do an anal
23b10 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72  ysis of the curr
23b20 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
23b30 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a  ase.  Store in.*
23b40 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68  * register P1 th
23b50 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72  e text of an err
23b60 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72  or message descr
23b70 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65  ibing any proble
23b80 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f  ms..** If no pro
23b90 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c  blems are found,
23ba0 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
23bb0 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
23bc0 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
23bd0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
23be0 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
23bf0 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72  of allowed error
23c00 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65  s..** At most re
23c10 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c  g(P3) errors wil
23c20 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a  l be reported..*
23c30 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
23c40 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73  , the analysis s
23c50 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
23c60 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61  reg(P1) errors a
23c70 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65  re .** seen.  Re
23c80 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64  g(P1) is updated
23c90 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
23ca0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
23cb0 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ning..**.** The 
23cc0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
23cd0 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
23ce0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
23cf0 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73  are integer.** s
23d00 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29  tored in reg(P1)
23d10 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67  , reg(P1+1), reg
23d20 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68  (P1+2), ....  Th
23d30 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65  ere are P2 table
23d40 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a  s.** total..**.*
23d50 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a  * If P5 is not z
23d60 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69  ero, the check i
23d70 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75  s done on the au
23d80 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
23d90 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68  .** file, not th
23da0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
23db0 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  file..**.** This
23dc0 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
23dd0 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
23de0 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
23df0 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65   pragma..*/.case
23e00 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a   OP_IntegrityCk:
23e10 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20   {.  int nRoot; 
23e20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
23e30 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63  f tables to chec
23e40 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72  k.  (Number of r
23e50 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20  oot pages.) */. 
23e60 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20   int *aRoot;    
23e70 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f   /* Array of roo
23e80 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f  tpage numbers fo
23e90 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63  r tables to be c
23ea0 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20  hecked */.  int 
23eb0 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  j;          /* L
23ec0 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
23ed0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
23ee0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
23ef0 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f  rors reported */
23f00 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
23f10 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
23f20 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a  e error report *
23f30 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20  /.  Mem *pnErr; 
23f40 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
23f50 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66  keeping track of
23f60 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
23f70 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f 74 20  g */.  .  nRoot 
23f80 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
23f90 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a  ert( nRoot>0 );.
23fa0 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65    aRoot = sqlite
23fb0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
23fc0 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52   sizeof(int)*(nR
23fd0 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20  oot+1) );.  if( 
23fe0 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20  aRoot==0 ) goto 
23ff0 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74  no_mem;.  assert
24000 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
24010 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
24020 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 70 2d  );.  pnErr = &p-
24030 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
24040 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
24050 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
24060 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  t)!=0 );.  asser
24070 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
24080 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
24090 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70  Blob))==0 );.  p
240a0 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
240b0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a  Op->p1];.  for(j
240c0 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b  =0; j<nRoot; j++
240d0 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20  ){.    aRoot[j] 
240e0 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64  = (int)sqlite3Vd
240f0 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31  beIntValue(&pIn1
24100 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f  [j]);.  }.  aRoo
24110 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65  t[j] = 0;.  asse
24120 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e  rt( pOp->p5<db->
24130 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
24140 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
24150 20 28 31 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d   (1<<pOp->p5))!=
24160 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  0 );.  z = sqlit
24170 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79  e3BtreeIntegrity
24180 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f  Check(db->aDb[pO
24190 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f  p->p5].pBt, aRoo
241a0 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20  t, nRoot,.      
241b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241c0 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
241d0 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72  pnErr->u.i, &nEr
241e0 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  r);.  sqlite3DbF
241f0 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a  ree(db, aRoot);.
24200 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20    pnErr->u.i -= 
24210 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56  nErr;.  sqlite3V
24220 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
24230 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d  n1);.  if( nErr=
24240 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
24250 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  ( z==0 );.  }els
24260 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20  e if( z==0 ){.  
24270 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
24280 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
24290 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
242a0 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  (pIn1, z, -1, SQ
242b0 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
242c0 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20  e3_free);.  }.  
242d0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
242e0 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  IZE(pIn1);.  sql
242f0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
24300 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63  coding(pIn1, enc
24310 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
24320 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
24330 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
24340 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20  TY_CHECK */../* 
24350 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64  Opcode: RowSetAd
24360 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
24370 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69  .** Insert the i
24380 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c  nteger value hel
24390 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32  d by register P2
243a0 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20   into a boolean 
243b0 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e  index.** held in
243c0 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
243d0 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  .** An assertion
243e0 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20   fails if P2 is 
243f0 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  not an integer..
24400 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
24410 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  tAdd: {       /*
24420 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70   in2 */.  Mem *p
24430 49 64 78 3b 0a 20 20 4d 65 6d 20 2a 70 56 61 6c  Idx;.  Mem *pVal
24440 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
24450 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
24460 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
24470 49 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Idx = &p->aMem[p
24480 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24490 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
244a0 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
244b0 20 29 3b 0a 20 20 70 56 61 6c 20 3d 20 26 70 2d   );.  pVal = &p-
244c0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
244d0 20 20 61 73 73 65 72 74 28 20 28 70 56 61 6c 2d    assert( (pVal-
244e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
244f0 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  )!=0 );.  if( (p
24500 49 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Idx->flags & MEM
24510 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
24520 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
24530 6d 53 65 74 52 6f 77 53 65 74 28 70 49 64 78 29  mSetRowSet(pIdx)
24540 3b 0a 20 20 20 20 69 66 28 20 28 70 49 64 78 2d  ;.    if( (pIdx-
24550 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
24560 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
24570 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_mem;.  }.  sql
24580 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
24590 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIdx->u.pRowSet
245a0 2c 20 70 56 61 6c 2d 3e 75 2e 69 29 3b 0a 20 20  , pVal->u.i);.  
245b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
245c0 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20  ode: RowSetRead 
245d0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
245e0 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73  ** Extract the s
245f0 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72  mallest value fr
24600 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  om boolean index
24610 20 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74   P1 and put that
24620 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72   value into.** r
24630 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c  egister P3.  Or,
24640 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65   if boolean inde
24650 78 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  x P1 is initiall
24660 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50  y empty, leave P
24670 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61  3.** unchanged a
24680 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  nd jump to instr
24690 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
246a0 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64  se OP_RowSetRead
246b0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
246c0 70 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 4d 65 6d  p, out3 */.  Mem
246d0 20 2a 70 49 64 78 3b 0a 20 20 69 36 34 20 76 61   *pIdx;.  i64 va
246e0 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  l;.  assert( pOp
246f0 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
24700 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  1<=p->nMem );.  
24710 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
24720 55 50 54 3b 0a 20 20 70 49 64 78 20 3d 20 26 70  UPT;.  pIdx = &p
24730 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
24740 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
24750 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
24760 66 28 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20  f( (pIdx->flags 
24770 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
24780 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52   .   || sqlite3R
24790 6f 77 53 65 74 4e 65 78 74 28 70 49 64 78 2d 3e  owSetNext(pIdx->
247a0 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29  u.pRowSet, &val)
247b0 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20  ==0.  ){.    /* 
247c0 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  The boolean inde
247d0 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20  x is empty */.  
247e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
247f0 53 65 74 4e 75 6c 6c 28 70 49 64 78 29 3b 0a 20  SetNull(pIdx);. 
24800 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
24810 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
24820 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73    /* A value was
24830 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65   pulled from the
24840 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 61 73   index */.    as
24850 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
24860 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
24870 4d 65 6d 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  Mem );.    sqlit
24880 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
24890 34 28 70 4f 75 74 2c 20 76 61 6c 29 3b 0a 20 20  4(pOut, val);.  
248a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
248b0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54   Opcode: RowSetT
248c0 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a  est P1 P2 P3 P4.
248d0 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
248e0 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  3 is assumed to 
248f0 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e  hold a 64-bit in
24900 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20  teger value. If 
24910 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63  register P1.** c
24920 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74  ontains a RowSet
24930 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74   object and that
24940 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63   RowSet object c
24950 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76  ontains.** the v
24960 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c  alue held in P3,
24970 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65   jump to registe
24980 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  r P2. Otherwise,
24990 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69   insert the.** i
249a0 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74  nteger in P3 int
249b0 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64  o the RowSet and
249c0 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20   continue on to 
249d0 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f  the.** next opco
249e0 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f  de..**.** The Ro
249f0 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f  wSet object is o
24a00 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65  ptimized for the
24a10 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63 63   case where succ
24a20 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f  essive sets.** o
24a30 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72  f integers, wher
24a40 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61  e each set conta
24a50 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65  ins no duplicate
24a60 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f  s. Each set.** o
24a70 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e  f values is iden
24a80 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71  tified by a uniq
24a90 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65  ue P4 value. The
24aa0 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75   first set.** mu
24ab0 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74  st have P4==0, t
24ac0 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d  he final set P4=
24ad0 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20  -1.  P4 must be 
24ae0 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20  either -1 or.** 
24af0 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46  non-negative.  F
24b00 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  or non-negative 
24b10 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c  values of P4 onl
24b20 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a  y the lower 4.**
24b30 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69 66   bits are signif
24b40 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  icant..**.** Thi
24b50 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a  s allows optimiz
24b60 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e  ations: (a) when
24b70 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20   P4==0 there is 
24b80 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a  no need to test.
24b90 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62  ** the rowset ob
24ba0 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20  ject for P3, as 
24bb0 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
24bc0 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20   not to contain 
24bd0 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20  it,.** (b) when 
24be0 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20  P4==-1 there is 
24bf0 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72  no need to inser
24c00 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20  t the value, as 
24c10 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72  it will.** never
24c20 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20   be tested for, 
24c30 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76  and (c) when a v
24c40 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72  alue that is par
24c50 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a  t of set X is.**
24c60 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65   inserted, there
24c70 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73   is no need to s
24c80 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20  earch to see if 
24c90 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77  the same value w
24ca0 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
24cb0 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
24cc0 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79  t of set X (only
24cd0 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69   if it was previ
24ce0 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65  ously.** inserte
24cf0 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d  d as part of som
24d00 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f  e other set)..*/
24d10 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54  .case OP_RowSetT
24d20 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  est: {          
24d30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
24d40 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
24d50 20 20 69 6e 74 20 69 53 65 74 20 3d 20 70 4f 70    int iSet = pOp
24d60 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74  ->p4.i;.  assert
24d70 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn3->flags&ME
24d80 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  M_Int );..  /* I
24d90 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68  f there is anyth
24da0 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61  ing other than a
24db0 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69   rowset object i
24dc0 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31  n memory cell P1
24dd0 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74  ,.  ** delete it
24de0 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c   now and initial
24df0 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65  ize P1 with an e
24e00 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f  mpty rowset.  */
24e10 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
24e20 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
24e30 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
24e40 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
24e50 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
24e60 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
24e70 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
24e80 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
24e90 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
24ea0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
24eb0 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74  NT32 );.  assert
24ec0 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53  ( iSet==-1 || iS
24ed0 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69  et>=0 );.  if( i
24ee0 53 65 74 20 29 7b 0a 20 20 20 20 69 6e 74 20 65  Set ){.    int e
24ef0 78 69 73 74 73 3b 0a 20 20 20 20 65 78 69 73 74  xists;.    exist
24f00 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65  s = sqlite3RowSe
24f10 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tTest(pIn1->u.pR
24f20 6f 77 53 65 74 2c 20 69 53 65 74 3e 3d 30 20 3f  owSet, iSet>=0 ?
24f30 20 69 53 65 74 20 26 20 30 78 66 20 3a 20 30 78   iSet & 0xf : 0x
24f40 66 66 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ff,.            
24f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f60 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20     pIn3->u.i);. 
24f70 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29 7b     if( exists ){
24f80 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
24f90 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
24fa0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
24fb0 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b    if( iSet>=0 ){
24fc0 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53  .    sqlite3RowS
24fd0 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
24fe0 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e  .pRowSet, pIn3->
24ff0 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  u.i);.  }.  brea
25000 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
25010 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
25020 45 52 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  ER./* Opcode: Co
25030 6e 74 65 78 74 50 75 73 68 20 2a 20 2a 20 2a 20  ntextPush * * * 
25040 0a 2a 2a 0a 2a 2a 20 53 61 76 65 20 74 68 65 20  .**.** Save the 
25050 63 75 72 72 65 6e 74 20 56 64 62 65 20 63 6f 6e  current Vdbe con
25060 74 65 78 74 20 73 75 63 68 20 74 68 61 74 20 69  text such that i
25070 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65  t can be restore
25080 64 20 62 79 20 61 20 43 6f 6e 74 65 78 74 50 6f  d by a ContextPo
25090 70 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 54 68 65  p.** opcode. The
250a0 20 63 6f 6e 74 65 78 74 20 73 74 6f 72 65 73 20   context stores 
250b0 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20  the last insert 
250c0 72 6f 77 20 69 64 2c 20 74 68 65 20 6c 61 73 74  row id, the last
250d0 20 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67   statement chang
250e0 65 0a 2a 2a 20 63 6f 75 6e 74 2c 20 61 6e 64 20  e.** count, and 
250f0 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74  the current stat
25100 65 6d 65 6e 74 20 63 68 61 6e 67 65 20 63 6f 75  ement change cou
25110 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  nt..*/.case OP_C
25120 6f 6e 74 65 78 74 50 75 73 68 3a 20 7b 0a 20 20  ontextPush: {.  
25130 69 6e 74 20 69 20 3d 20 70 2d 3e 63 6f 6e 74 65  int i = p->conte
25140 78 74 53 74 61 63 6b 54 6f 70 2b 2b 3b 0a 20 20  xtStackTop++;.  
25150 43 6f 6e 74 65 78 74 20 2a 70 43 6f 6e 74 65 78  Context *pContex
25160 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e  t;..  assert( i>
25170 3d 30 20 29 3b 0a 20 20 2f 2a 20 46 49 58 20 4d  =0 );.  /* FIX M
25180 45 3a 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62  E: This should b
25190 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 73 20 70  e allocated as p
251a0 61 72 74 20 6f 66 20 74 68 65 20 76 64 62 65 20  art of the vdbe 
251b0 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
251c0 2a 2f 0a 20 20 69 66 28 20 69 3e 3d 70 2d 3e 63  */.  if( i>=p->c
251d0 6f 6e 74 65 78 74 53 74 61 63 6b 44 65 70 74 68  ontextStackDepth
251e0 20 29 7b 0a 20 20 20 20 70 2d 3e 63 6f 6e 74 65   ){.    p->conte
251f0 78 74 53 74 61 63 6b 44 65 70 74 68 20 3d 20 69  xtStackDepth = i
25200 2b 31 3b 0a 20 20 20 20 70 2d 3e 63 6f 6e 74 65  +1;.    p->conte
25210 78 74 53 74 61 63 6b 20 3d 20 73 71 6c 69 74 65  xtStack = sqlite
25220 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
25230 28 64 62 2c 20 70 2d 3e 63 6f 6e 74 65 78 74 53  (db, p->contextS
25240 74 61 63 6b 2c 0a 20 20 20 20 20 20 20 20 20 20  tack,.          
25250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25270 73 69 7a 65 6f 66 28 43 6f 6e 74 65 78 74 29 2a  sizeof(Context)*
25280 28 69 2b 31 29 29 3b 0a 20 20 20 20 69 66 28 20  (i+1));.    if( 
25290 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 3d  p->contextStack=
252a0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
252b0 3b 0a 20 20 7d 0a 20 20 70 43 6f 6e 74 65 78 74  ;.  }.  pContext
252c0 20 3d 20 26 70 2d 3e 63 6f 6e 74 65 78 74 53 74   = &p->contextSt
252d0 61 63 6b 5b 69 5d 3b 0a 20 20 70 43 6f 6e 74 65  ack[i];.  pConte
252e0 78 74 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  xt->lastRowid = 
252f0 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  db->lastRowid;. 
25300 20 70 43 6f 6e 74 65 78 74 2d 3e 6e 43 68 61 6e   pContext->nChan
25310 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b  ge = p->nChange;
25320 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
25330 4f 70 63 6f 64 65 3a 20 43 6f 6e 74 65 78 74 50  Opcode: ContextP
25340 6f 70 20 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20  op * * * .**.** 
25350 52 65 73 74 6f 72 65 20 74 68 65 20 56 64 62 65  Restore the Vdbe
25360 20 63 6f 6e 74 65 78 74 20 74 6f 20 74 68 65 20   context to the 
25370 73 74 61 74 65 20 69 74 20 77 61 73 20 69 6e 20  state it was in 
25380 77 68 65 6e 20 63 6f 6e 74 65 78 74 50 75 73 68  when contextPush
25390 20 77 61 73 20 6c 61 73 74 0a 2a 2a 20 65 78 65   was last.** exe
253a0 63 75 74 65 64 2e 20 54 68 65 20 63 6f 6e 74 65  cuted. The conte
253b0 78 74 20 73 74 6f 72 65 73 20 74 68 65 20 6c 61  xt stores the la
253c0 73 74 20 69 6e 73 65 72 74 20 72 6f 77 20 69 64  st insert row id
253d0 2c 20 74 68 65 20 6c 61 73 74 20 73 74 61 74 65  , the last state
253e0 6d 65 6e 74 0a 2a 2a 20 63 68 61 6e 67 65 20 63  ment.** change c
253f0 6f 75 6e 74 2c 20 61 6e 64 20 74 68 65 20 63 75  ount, and the cu
25400 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20  rrent statement 
25410 63 68 61 6e 67 65 20 63 6f 75 6e 74 2e 0a 2a 2f  change count..*/
25420 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 74 65 78 74  .case OP_Context
25430 50 6f 70 3a 20 7b 0a 20 20 43 6f 6e 74 65 78 74  Pop: {.  Context
25440 20 2a 70 43 6f 6e 74 65 78 74 20 3d 20 26 70 2d   *pContext = &p-
25450 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b 2d 2d  >contextStack[--
25460 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54  p->contextStackT
25470 6f 70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  op];.  assert( p
25480 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f  ->contextStackTo
25490 70 3e 3d 30 20 29 3b 0a 20 20 64 62 2d 3e 6c 61  p>=0 );.  db->la
254a0 73 74 52 6f 77 69 64 20 3d 20 70 43 6f 6e 74 65  stRowid = pConte
254b0 78 74 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  xt->lastRowid;. 
254c0 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 43   p->nChange = pC
254d0 6f 6e 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65 3b  ontext->nChange;
254e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
254f0 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
25500 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
25510 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  R */..#ifndef SQ
25520 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
25530 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
25540 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
25550 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
25560 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
25570 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
25580 6d 61 78 69 6d 75 6d 20 6f 66 20 69 74 73 20 63  maximum of its c
25590 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 2a 2a 20  urrent value.** 
255a0 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  and the value in
255b0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
255c0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
255d0 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65  tion throws an e
255e0 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f  rror if the memo
255f0 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69  ry cell is not i
25600 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69  nitially.** an i
25610 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
25620 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20  OP_MemMax: {    
25630 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20      /* in1, in2 
25640 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
25650 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
25660 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
25670 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
25680 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
25690 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
256a0 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
256b0 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
256c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
256d0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
256e0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
256f0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
25700 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20  IfPos P1 P2 * * 
25710 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  *.**.** If the v
25720 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
25730 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
25740 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ter, jump to P2.
25750 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
25760 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
25770 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
25780 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
25790 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
257a0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
257b0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
257c0 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
257d0 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
257e0 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
257f0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
25800 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
25810 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
25820 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
25830 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20  n1->u.i>0 ){.   
25840 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
25850 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
25860 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
25870 66 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a  fNeg P1 P2 * * *
25880 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
25890 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
258a0 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P1 is less than 
258b0 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32  zero, jump to P2
258c0 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  . .**.** It is i
258d0 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
258e0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
258f0 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
25900 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
25910 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
25920 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
25930 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
25940 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
25950 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20  .case OP_IfNeg: 
25960 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
25970 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  , in1 */.  asser
25980 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
25990 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20  EM_Int );.  if( 
259a0 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20  pIn1->u.i<0 ){. 
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 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
259d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
259e0 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20   IfZero P1 P2 * 
259f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  * *.**.** If the
25a00 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
25a10 65 72 20 50 31 20 69 73 20 65 78 61 63 74 6c 79  er P1 is exactly
25a20 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20   0, jump to P2. 
25a30 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
25a40 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
25a50 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
25a60 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
25a70 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
25a80 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
25a90 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
25aa0 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
25ab0 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
25ac0 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b  ase OP_IfZero: {
25ad0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
25ae0 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
25af0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
25b00 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
25b10 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20  In1->u.i==0 ){. 
25b20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
25b30 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
25b40 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
25b50 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33   AggStep * P2 P3
25b60 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65   P4 P5.**.** Exe
25b70 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
25b80 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
25b90 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
25ba0 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
25bb0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
25bc0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
25bd0 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
25be0 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
25bf0 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
25c00 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69  ction.  Use regi
25c10 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68  ster.** P3 as th
25c20 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  e accumulator..*
25c30 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
25c40 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
25c50 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
25c60 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
25c70 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20  essors..*/.case 
25c80 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20  OP_AggStep: {.  
25c90 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  int n = pOp->p5;
25ca0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
25cb0 2a 70 4d 65 6d 2c 20 2a 70 52 65 63 3b 0a 20 20  *pMem, *pRec;.  
25cc0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
25cd0 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ctx;.  sqlite3_v
25ce0 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20  alue **apVal;.. 
25cf0 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b   assert( n>=0 );
25d00 0a 20 20 70 52 65 63 20 3d 20 26 70 2d 3e 61 4d  .  pRec = &p->aM
25d10 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
25d20 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pVal = p->apArg;
25d30 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c  .  assert( apVal
25d40 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f   || n==0 );.  fo
25d50 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
25d60 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 70   pRec++){.    ap
25d70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20  Val[i] = pRec;. 
25d80 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f     storeTypeInfo
25d90 28 70 52 65 63 2c 20 65 6e 63 6f 64 69 6e 67 29  (pRec, encoding)
25da0 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e  ;.  }.  ctx.pFun
25db0 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
25dc0 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  c;.  assert( pOp
25dd0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
25de0 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
25df0 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20  ctx.pMem = pMem 
25e00 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
25e10 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  p3];.  pMem->n++
25e20 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20  ;.  ctx.s.flags 
25e30 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74  = MEM_Null;.  ct
25e40 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78  x.s.z = 0;.  ctx
25e50 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
25e60 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
25e70 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
25e80 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  b;.  ctx.isError
25e90 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c   = 0;.  ctx.pCol
25ea0 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  l = 0;.  if( ctx
25eb0 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20  .pFunc->flags & 
25ec0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
25ed0 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
25ee0 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29  rt( pOp>p->aOp )
25ef0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
25f00 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
25f10 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
25f20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
25f30 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
25f40 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
25f50 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
25f60 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63  .pColl;.  }.  (c
25f70 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29  tx.pFunc->xStep)
25f80 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
25f90 3b 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72  ;.  if( ctx.isEr
25fa0 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ror ){.    sqlit
25fb0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
25fc0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
25fd0 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
25fe0 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a  _text(&ctx.s));.
25ff0 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45      rc = ctx.isE
26000 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
26010 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
26020 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 62 72 65  e(&ctx.s);.  bre
26030 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26040 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32  : AggFinal P1 P2
26050 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   * P4 *.**.** Ex
26060 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69  ecute the finali
26070 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  zer function for
26080 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
26090 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d  P1 is.** the mem
260a0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
260b0 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c  t is the accumul
260c0 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67  ator for the agg
260d0 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32  regate..**.** P2
260e0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
260f0 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  f arguments that
26100 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
26110 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20  on takes and.** 
26120 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
26130 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66  to the FuncDef f
26140 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  or this function
26150 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67  .  The P2.** arg
26160 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65  ument is not use
26170 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
26180 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68  .  It is only th
26190 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75  ere to disambigu
261a0 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  ate.** functions
261b0 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76   that can take v
261c0 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f  arying numbers o
261d0 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68  f arguments.  Th
261e0 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74  e.** P4 argument
261f0 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20   is only needed 
26200 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61  for the degenera
26210 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a  te case where.**
26220 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
26230 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69  on was not previ
26240 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f  ously called..*/
26250 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61  .case OP_AggFina
26260 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  l: {.  Mem *pMem
26270 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
26280 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
26290 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
262a0 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Mem = &p->aMem[p
262b0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
262c0 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
262d0 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d  & ~(MEM_Null|MEM
262e0 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72  _Agg))==0 );.  r
262f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
26300 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c  emFinalize(pMem,
26310 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b   pOp->p4.pFunc);
26320 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
26330 45 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20 20 73  E_ERROR ){.    s
26340 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
26350 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
26360 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
26370 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29  alue_text(pMem))
26380 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
26390 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
263a0 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
263b0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
263c0 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
263d0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
263e0 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
263f0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
26400 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
26410 6b 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65 66 69  k;.}...#if !defi
26420 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
26430 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
26440 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
26450 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
26460 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20  e: Vacuum * * * 
26470 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d  * *.**.** Vacuum
26480 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
26490 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  base.  This opco
264a0 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74  de will cause ot
264b0 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d  her virtual.** m
264c0 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72  achines to be cr
264d0 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20  eated and run.  
264e0 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61  It may not be ca
264f0 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
26500 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f  .** a transactio
26510 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  n..*/.case OP_Va
26520 63 75 75 6d 3a 20 7b 0a 20 20 69 66 28 20 73 71  cuum: {.  if( sq
26530 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
26540 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
26550 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 20 0a  due_to_misuse; .
26560 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75    rc = sqlite3Ru
26570 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72  nVacuum(&p->zErr
26580 4d 73 67 2c 20 64 62 29 3b 0a 20 20 69 66 28 20  Msg, db);.  if( 
26590 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
265a0 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
265b0 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
265c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
265d0 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  f..#if !defined(
265e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
265f0 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64  VACUUM)./* Opcod
26600 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31  e: IncrVacuum P1
26610 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
26620 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65  Perform a single
26630 20 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63   step of the inc
26640 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20  remental vacuum 
26650 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20  procedure on.** 
26660 74 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e  the P1 database.
26670 20 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68   If the vacuum h
26680 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d  as finished, jum
26690 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
266a0 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73  .** P2. Otherwis
266b0 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
266c0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
266d0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
266e0 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20   OP_IncrVacuum: 
266f0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
26700 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
26710 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
26720 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26730 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
26740 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
26750 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
26760 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42  >p1))!=0 );.  pB
26770 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
26780 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d  >p1].pBt;.  rc =
26790 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63   sqlite3BtreeInc
267a0 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20  rVacuum(pBt);.  
267b0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
267c0 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ONE ){.    pc = 
267d0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
267e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
267f0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
26800 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
26810 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a  e: Expire P1 * *
26820 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65   * *.**.** Cause
26830 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61   precompiled sta
26840 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d  tements to becom
26850 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78  e expired. An ex
26860 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pired statement.
26870 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  ** fails with an
26880 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53   error code of S
26890 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20  QLITE_SCHEMA if 
268a0 69 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75  it is ever execu
268b0 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c  ted .** (via sql
268c0 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a  ite3_step())..**
268d0 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c   .** If P1 is 0,
268e0 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74   then all SQL st
268f0 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20  atements become 
26900 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69  expired. If P1 i
26910 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74  s non-zero,.** t
26920 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72  hen only the cur
26930 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
26940 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66   statement is af
26950 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65  fected. .*/.case
26960 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20   OP_Expire: {.  
26970 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a  if( !pOp->p1 ){.
26980 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
26990 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
269a0 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65  nts(db);.  }else
269b0 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  {.    p->expired
269c0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
269d0 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
269e0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
269f0 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65  _CACHE./* Opcode
26a00 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50  : TableLock P1 P
26a10 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
26a20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e  Obtain a lock on
26a30 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
26a40 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75  ble. This instru
26a50 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73  ction is only us
26a60 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73  ed when.** the s
26a70 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74  hared-cache feat
26a80 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20  ure is enabled. 
26a90 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
26aa0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
26ab0 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
26ac0 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
26ad0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
26ae0 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
26af0 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
26b00 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
26b10 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
26b20 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
26b30 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
26b40 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
26b50 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
26b60 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
26b70 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
26b80 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
26b90 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
26ba0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
26bb0 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
26bc0 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
26bd0 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
26be0 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
26bf0 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
26c00 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
26c10 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
26c20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
26c30 31 3b 20 0a 20 20 75 38 20 69 73 57 72 69 74 65  1; .  u8 isWrite
26c40 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e  Lock = (u8)pOp->
26c50 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  p3;.  assert( p1
26c60 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44  >=0 && p1<db->nD
26c70 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
26c80 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
26c90 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  1<<p1))!=0 );.  
26ca0 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c  assert( isWriteL
26cb0 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74  ock==0 || isWrit
26cc0 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 72 63  eLock==1 );.  rc
26cd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
26ce0 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ockTable(db->aDb
26cf0 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  [p1].pBt, pOp->p
26d00 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b  2, isWriteLock);
26d10 0a 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29  .  if( (rc&0xFF)
26d20 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  ==SQLITE_LOCKED 
26d30 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ){.    const cha
26d40 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
26d50 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  ;.    sqlite3Set
26d60 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
26d70 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73  sg, db, "databas
26d80 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
26d90 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 7d 0a  d: %s", z);.  }.
26da0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
26db0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
26dc0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f  _SHARED_CACHE */
26dd0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
26de0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
26df0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42  LE./* Opcode: VB
26e00 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  egin * * * P4 *.
26e10 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
26e20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
26e30 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
26e40 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63  ucture. If so, c
26e50 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67  all the .** xBeg
26e60 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  in method for th
26e70 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  at table..**.** 
26e80 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72  Also, whether or
26e90 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20   not P4 is set, 
26ea0 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20  check that this 
26eb0 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c  is not being cal
26ec0 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68  led from.** with
26ed0 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f  in a callback to
26ee0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
26ef0 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e   xSync() method.
26f00 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65   If it is, the e
26f10 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c  rror.** code wil
26f20 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  l be set to SQLI
26f30 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61  TE_LOCKED..*/.ca
26f40 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a  se OP_VBegin: {.
26f50 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
26f60 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
26f70 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71  pVtab;.  rc = sq
26f80 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64  lite3VtabBegin(d
26f90 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  b, pVtab);.  if(
26fa0 20 70 56 74 61 62 20 29 7b 0a 20 20 20 20 73 71   pVtab ){.    sq
26fb0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
26fc0 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  p->zErrMsg);.   
26fd0 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
26fe0 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
26ff0 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
27000 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
27010 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
27020 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
27030 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
27040 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27050 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
27060 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20  Opcode: VCreate 
27070 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
27080 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
27090 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
270a0 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
270b0 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72  P1. Call the xCr
270c0 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66  eate method.** f
270d0 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
270e0 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74  /.case OP_VCreat
270f0 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69  e: {.  rc = sqli
27100 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
27110 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
27120 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45  Op->p4.z, &p->zE
27130 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b  rrMsg);.  break;
27140 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
27150 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
27160 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
27170 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
27180 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
27190 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50  code: VDestroy P
271a0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
271b0 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
271c0 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
271d0 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
271e0 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65  1.  Call the xDe
271f0 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20  stroy method.** 
27200 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  of that table..*
27210 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72  /.case OP_VDestr
27220 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61  oy: {.  p->inVta
27230 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72  bMethod = 2;.  r
27240 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
27250 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70  allDestroy(db, p
27260 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
27270 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  z);.  p->inVtabM
27280 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65  ethod = 0;.  bre
27290 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
272a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
272b0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
272c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
272d0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
272e0 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50   Opcode: VOpen P
272f0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
27300 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
27310 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
27320 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
27330 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
27340 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20  cture..** P1 is 
27350 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e  a cursor number.
27360 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70    This opcode op
27370 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20  ens a cursor to 
27380 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
27390 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20  able and stores 
273a0 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50  that cursor in P
273b0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f  1..*/.case OP_VO
273c0 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
273d0 73 6f 72 20 2a 70 43 75 72 20 3d 20 30 3b 0a 20  sor *pCur = 0;. 
273e0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
273f0 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
27400 72 20 3d 20 30 3b 0a 0a 20 20 73 71 6c 69 74 65  r = 0;..  sqlite
27410 33 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20  3_vtab *pVtab = 
27420 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
27430 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
27440 2a 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69  *pModule = (sqli
27450 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
27460 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  ab->pModule;..  
27470 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26 20  assert(pVtab && 
27480 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 69 66 28 20  pModule);.  if( 
27490 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
274a0 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
274b0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
274c0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
274d0 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70  >xOpen(pVtab, &p
274e0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73  VtabCursor);.  s
274f0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
27500 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
27510 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74  p->zErrMsg = pVt
27520 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70  ab->zErrMsg;.  p
27530 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
27540 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  0;.  if( sqlite3
27550 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
27560 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
27570 5f 6d 69 73 75 73 65 3b 0a 20 20 69 66 28 20 53  _misuse;.  if( S
27580 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a  QLITE_OK==rc ){.
27590 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
275a0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
275b0 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73  ursor base class
275c0 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72   */.    pVtabCur
275d0 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74  sor->pVtab = pVt
275e0 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  ab;..    /* Init
275f0 69 61 6c 69 73 65 20 76 64 62 65 20 63 75 72 73  ialise vdbe curs
27600 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20  or object */.   
27610 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
27620 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
27630 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  1, 0, -1, 0);.  
27640 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20    if( pCur ){.  
27650 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43      pCur->pVtabC
27660 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72  ursor = pVtabCur
27670 73 6f 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d  sor;.      pCur-
27680 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62  >pModule = pVtab
27690 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70  Cursor->pVtab->p
276a0 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73  Module;.    }els
276b0 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c  e{.      db->mal
276c0 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
276d0 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43       pModule->xC
276e0 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72  lose(pVtabCursor
276f0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
27700 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
27710 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
27720 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
27730 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27740 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
27750 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74  /* Opcode: VFilt
27760 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  er P1 P2 P3 P4 *
27770 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  .**.** P1 is a c
27780 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69  ursor opened usi
27790 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73  ng VOpen.  P2 is
277a0 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a   an address to j
277b0 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65  ump to if.** the
277c0 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74   filtered result
277d0 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a   set is empty..*
277e0 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65  *.** P4 is eithe
277f0 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69  r NULL or a stri
27800 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65  ng that was gene
27810 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65  rated by the xBe
27820 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f  stIndex.** metho
27830 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
27840 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61    The interpreta
27850 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73  tion of the P4 s
27860 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a  tring is left.**
27870 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   to the module i
27880 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a  mplementation..*
27890 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
278a0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69   invokes the xFi
278b0 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74  lter method on t
278c0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
278d0 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79   specified.** by
278e0 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65   P1.  The intege
278f0 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72  r query plan par
27900 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65  ameter to xFilte
27910 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  r is stored in r
27920 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52  egister.** P3. R
27930 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f  egister P3+1 sto
27940 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72  res the argc par
27950 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73  ameter to be pas
27960 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46  sed to the.** xF
27970 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65  ilter method. Re
27980 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33  gisters P3+2..P3
27990 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20  +1+argc are the 
279a0 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e  argc.** addition
279b0 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68  al parameters wh
279c0 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74  ich are passed t
279d0 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20  o.** xFilter as 
279e0 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50  argv. Register P
279f0 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76  3+2 becomes argv
27a00 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20  [0] when passed 
27a10 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a  to xFilter..**.*
27a20 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  * A jump is made
27a30 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65   to P2 if the re
27a40 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66  sult set after f
27a50 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62  iltering would b
27a60 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65  e empty..*/.case
27a70 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20   OP_VFilter: {  
27a80 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
27a90 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51  t nArg;.  int iQ
27aa0 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71  uery;.  const sq
27ab0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
27ac0 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51  odule;.  Mem *pQ
27ad0 75 65 72 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  uery = &p->aMem[
27ae0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 4d 65 6d 20  pOp->p3];.  Mem 
27af0 2a 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79  *pArgc = &pQuery
27b00 5b 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  [1];.  sqlite3_v
27b10 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61  tab_cursor *pVta
27b20 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74  bCursor;.  sqlit
27b30 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
27b40 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
27b50 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
27b60 4f 70 2d 3e 70 31 5d 3b 0a 0a 20 20 52 45 47 49  Op->p1];..  REGI
27b70 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
27b80 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61  p3, pQuery);.  a
27b90 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
27ba0 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56  abCursor );.  pV
27bb0 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72  tabCursor = pCur
27bc0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20  ->pVtabCursor;. 
27bd0 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75   pVtab = pVtabCu
27be0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
27bf0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
27c00 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47  pModule;..  /* G
27c10 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75  rab the index nu
27c20 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61  mber and argc pa
27c30 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73  rameters */.  as
27c40 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66  sert( (pQuery->f
27c50 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30  lags&MEM_Int)!=0
27c60 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73   && pArgc->flags
27c70 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e  ==MEM_Int );.  n
27c80 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63  Arg = (int)pArgc
27c90 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20  ->u.i;.  iQuery 
27ca0 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75  = (int)pQuery->u
27cb0 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  .i;..  /* Invoke
27cc0 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
27cd0 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 69  hod */.  {.    i
27ce0 6e 74 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20  nt res = 0;.    
27cf0 69 6e 74 20 69 3b 0a 20 20 20 20 4d 65 6d 20 2a  int i;.    Mem *
27d00 2a 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72  *apArg = p->apAr
27d10 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30  g;.    for(i = 0
27d20 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
27d30 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d        apArg[i] =
27d40 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20   &pArgc[i+1];.  
27d50 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66      storeTypeInf
27d60 6f 28 61 70 41 72 67 5b 69 5d 2c 20 30 29 3b 0a  o(apArg[i], 0);.
27d70 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 73      }..    if( s
27d80 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
27d90 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
27da0 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
27db0 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c      sqlite3VtabL
27dc0 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 20 20  ock(pVtab);.    
27dd0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
27de0 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  = 1;.    rc = pM
27df0 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70  odule->xFilter(p
27e00 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65  VtabCursor, iQue
27e10 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e  ry, pOp->p4.z, n
27e20 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20  Arg, apArg);.   
27e30 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
27e40 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
27e50 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
27e60 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
27e70 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
27e80 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56  >zErrMsg;.    pV
27e90 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
27ea0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
27eb0 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61  bUnlock(db, pVta
27ec0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
27ed0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
27ee0 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
27ef0 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73  ->xEof(pVtabCurs
27f00 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  or);.    }.    i
27f10 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
27f20 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  On(db) ) goto ab
27f30 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
27f40 65 3b 0a 0a 20 20 20 20 69 66 28 20 72 65 73 20  e;..    if( res 
27f50 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
27f60 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d  p->p2 - 1;.    }
27f70 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  .  }.  pCur->nul
27f80 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65  lRow = 0;..  bre
27f90 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
27fa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
27fb0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
27fc0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27fd0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
27fe0 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e   Opcode: VColumn
27ff0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
28000 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61  .** Store the va
28010 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68  lue of the P2-th
28020 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68   column of.** th
28030 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72  e row of the vir
28040 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20  tual-table that 
28050 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f  the .** P1 curso
28060 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f  r is pointing to
28070 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
28080 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  3..*/.case OP_VC
28090 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74  olumn: {.  sqlit
280a0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
280b0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
280c0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
280d0 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20  .  Mem *pDest;. 
280e0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
280f0 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64   sContext;..  Vd
28100 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d  beCursor *pCur =
28110 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
28120 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
28130 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
28140 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
28150 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
28160 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
28170 70 44 65 73 74 20 3d 20 26 70 2d 3e 61 4d 65 6d  pDest = &p->aMem
28180 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
28190 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
281a0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
281b0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
281c0 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
281d0 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
281e0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  r->pVtabCursor->
281f0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
28200 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
28210 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
28220 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b  dule->xColumn );
28230 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74  .  memset(&sCont
28240 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  ext, 0, sizeof(s
28250 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a  Context));..  /*
28260 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c   The output cell
28270 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76   may already hav
28280 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63  e a buffer alloc
28290 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20  ated. Move.  ** 
282a0 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74  the current cont
282b0 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78 74  ents to sContext
282c0 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68  .s so in case th
282d0 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20  e user-function 
282e0 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74 68  .  ** can use th
282f0 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  e already alloca
28300 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74 65  ted buffer inste
28310 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67  ad of allocating
28320 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65   a .  ** new one
28330 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
28340 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f  VdbeMemMove(&sCo
28350 6e 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29 3b  ntext.s, pDest);
28360 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
28370 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d  g(&sContext.s, M
28380 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 69 66 28  EM_Null);..  if(
28390 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
283a0 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
283b0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
283c0 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
283d0 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e  ->xColumn(pCur->
283e0 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43  pVtabCursor, &sC
283f0 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29  ontext, pOp->p2)
28400 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
28410 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
28420 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  );.  p->zErrMsg 
28430 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
28440 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
28450 73 67 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 43 6f  sg = 0;..  /* Co
28460 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  py the result of
28470 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f   the function to
28480 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72   the P3 register
28490 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69  . We.  ** do thi
284a0 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  s regardless of 
284b0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
284c0 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64  n error occurred
284d0 20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20   to ensure any. 
284e0 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f   ** dynamic allo
284f0 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65  cation in sConte
28500 78 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75  xt.s (a Mem stru
28510 63 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64  ct) is  released
28520 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
28530 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
28540 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ng(&sContext.s, 
28550 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47  encoding);.  REG
28560 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
28570 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 73  >p3, pDest);.  s
28580 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
28590 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65  e(pDest, &sConte
285a0 78 74 2e 73 29 3b 0a 20 20 55 50 44 41 54 45 5f  xt.s);.  UPDATE_
285b0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
285c0 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69  st);..  if( sqli
285d0 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
285e0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  ){.    goto abor
285f0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
28600 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
28610 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
28620 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f  pDest) ){.    go
28630 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
28640 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
28650 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
28660 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
28670 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
28680 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
28690 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e  LE./* Opcode: VN
286a0 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ext P1 P2 * * *.
286b0 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69  **.** Advance vi
286c0 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74  rtual table P1 t
286d0 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69  o the next row i
286e0 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  n its result set
286f0 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20   and.** jump to 
28700 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
28710 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74   Or, if the virt
28720 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65  ual table has re
28730 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64  ached.** the end
28740 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73   of its result s
28750 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  et, then fall th
28760 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
28770 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
28780 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a  /.case OP_VNext:
28790 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
287a0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
287b0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
287c0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
287d0 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65  Module;.  int re
287e0 73 20 3d 20 30 3b 0a 0a 20 20 56 64 62 65 43 75  s = 0;..  VdbeCu
287f0 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
28800 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28810 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
28820 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
28830 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
28840 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  ow ){.    break;
28850 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
28860 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
28870 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
28880 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
28890 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ule;.  assert( p
288a0 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b  Module->xNext );
288b0 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
288c0 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64  e xNext() method
288d0 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
288e0 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20  There is no way 
288f0 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64  for the.  ** und
28900 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e  erlying implemen
28910 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e  tation to return
28920 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65   an error if one
28930 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20   occurs during. 
28940 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73   ** xNext(). Ins
28950 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f  tead, if an erro
28960 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69  r occurs, true i
28970 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69  s returned (indi
28980 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a  cating that .  *
28990 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61  * data is availa
289a0 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72  ble) and the err
289b0 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  or code returned
289c0 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72   when xColumn or
289d0 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72  .  ** some other
289e0 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20   method is next 
289f0 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73  invoked on the s
28a00 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ave virtual tabl
28a10 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20  e cursor..  */. 
28a20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
28a30 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
28a40 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
28a50 73 75 73 65 3b 0a 20 20 73 71 6c 69 74 65 33 56  suse;.  sqlite3V
28a60 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a  tabLock(pVtab);.
28a70 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
28a80 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d  d = 1;.  rc = pM
28a90 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75  odule->xNext(pCu
28aa0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
28ab0 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
28ac0 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  od = 0;.  sqlite
28ad0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
28ae0 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45  ErrMsg);.  p->zE
28af0 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
28b00 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d  ErrMsg;.  pVtab-
28b10 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
28b20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
28b30 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20  k(db, pVtab);.  
28b40 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
28b50 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70  K ){.    res = p
28b60 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75  Module->xEof(pCu
28b70 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
28b80 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
28b90 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
28ba0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
28bb0 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 69 66  to_misuse;..  if
28bc0 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a  ( !res ){.    /*
28bd0 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74   If there is dat
28be0 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  a, jump to P2 */
28bf0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
28c00 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
28c10 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
28c20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
28c30 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
28c40 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28c50 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
28c60 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
28c70 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
28c80 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
28c90 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
28ca0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
28cb0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
28cc0 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
28cd0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
28ce0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
28cf0 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
28d00 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
28d10 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
28d20 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
28d30 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
28d40 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
28d50 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
28d60 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
28d70 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
28d80 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
28d90 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 20 3d  ;.  Mem *pName =
28da0 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
28db0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56  1];.  assert( pV
28dc0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
28dd0 65 6e 61 6d 65 20 29 3b 0a 20 20 52 45 47 49 53  ename );.  REGIS
28de0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
28df0 31 2c 20 70 4e 61 6d 65 29 3b 0a 0a 20 20 53 74  1, pName);..  St
28e00 72 69 6e 67 69 66 79 28 70 4e 61 6d 65 2c 20 65  ringify(pName, e
28e10 6e 63 6f 64 69 6e 67 29 3b 0a 0a 20 20 69 66 28  ncoding);..  if(
28e20 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
28e30 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
28e40 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
28e50 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ;.  sqlite3VtabL
28e60 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 72 63  ock(pVtab);.  rc
28e70 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
28e80 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62  e->xRename(pVtab
28e90 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73  , pName->z);.  s
28ea0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
28eb0 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
28ec0 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74  p->zErrMsg = pVt
28ed0 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70  ab->zErrMsg;.  p
28ee0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
28ef0 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  0;.  sqlite3Vtab
28f00 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62  Unlock(db, pVtab
28f10 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
28f20 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
28f30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
28f40 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 62 72 65 61  _misuse;..  brea
28f50 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
28f60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28f70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
28f80 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65   Opcode: VUpdate
28f90 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
28fa0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
28fb0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
28fc0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
28fd0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
28fe0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
28ff0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
29000 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
29010 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68  ing xUpdate meth
29020 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a  od. P2 values.**
29030 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20   are contiguous 
29040 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61  memory cells sta
29050 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70  rting at P3 to p
29060 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61  ass to the xUpda
29070 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  te .** invocatio
29080 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20  n. The value in 
29090 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d  register (P3+P2-
290a0 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  1) corresponds t
290b0 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65  o the .** p2th e
290c0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72  lement of the ar
290d0 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20  gv array passed 
290e0 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a  to xUpdate..**.*
290f0 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65  * The xUpdate me
29100 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44  thod will do a D
29110 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45  ELETE or an INSE
29120 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54  RT or both..** T
29130 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65  he argv[0] eleme
29140 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73  nt (which corres
29150 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20  ponds to memory 
29160 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74  cell P3).** is t
29170 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f  he rowid of a ro
29180 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66  w to delete.  If
29190 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c   argv[0] is NULL
291a0 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c   then no .** del
291b0 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54  etion occurs.  T
291c0 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65  he argv[1] eleme
291d0 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  nt is the rowid 
291e0 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  of the new .** r
291f0 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  ow.  This can be
29200 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68   NULL to have th
29210 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
29220 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a  select the new .
29230 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73  ** rowid for its
29240 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71  elf.  The subseq
29250 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e  uent elements in
29260 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a   the array are .
29270 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  ** the values of
29280 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
29290 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49  new row..**.** I
292a0 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20  f P2==1 then no 
292b0 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72  insert is perfor
292c0 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73  med.  argv[0] is
292d0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a   the rowid of.**
292e0 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
292f0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
29300 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66  boolean flag. If
29310 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72   it is set to tr
29320 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61  ue and the xUpda
29330 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75  te call.** is su
29340 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74  ccessful, then t
29350 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
29360 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73  d by sqlite3_las
29370 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
29380 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74   .** is set to t
29390 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
293a0 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f  rowid for the ro
293b0 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e  w just inserted.
293c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64  .*/.case OP_VUpd
293d0 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ate: {.  sqlite3
293e0 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20 70  _vtab *pVtab = p
293f0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20  Op->p4.pVtab;.  
29400 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
29410 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
29420 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
29430 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  b->pModule;.  in
29440 74 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32  t nArg = pOp->p2
29450 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
29460 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42  >p4type==P4_VTAB
29470 20 29 3b 0a 20 20 69 66 28 20 70 4d 6f 64 75 6c   );.  if( pModul
29480 65 2d 3e 78 55 70 64 61 74 65 3d 3d 30 20 29 7b  e->xUpdate==0 ){
29490 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
294a0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
294b0 67 2c 20 64 62 2c 20 22 72 65 61 64 2d 6f 6e 6c  g, db, "read-onl
294c0 79 20 74 61 62 6c 65 22 29 3b 0a 20 20 20 20 72  y table");.    r
294d0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
294e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
294f0 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65  nt i;.    sqlite
29500 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20  _int64 rowid;.  
29510 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 20 3d 20    Mem **apArg = 
29520 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 4d 65  p->apArg;.    Me
29530 6d 20 2a 70 58 20 3d 20 26 70 2d 3e 61 4d 65 6d  m *pX = &p->aMem
29540 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66  [pOp->p3];.    f
29550 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
29560 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 74 6f 72  i++){.      stor
29570 65 54 79 70 65 49 6e 66 6f 28 70 58 2c 20 30 29  eTypeInfo(pX, 0)
29580 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d  ;.      apArg[i]
29590 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b   = pX;.      pX+
295a0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
295b0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
295c0 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
295d0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
295e0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
295f0 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20  bLock(pVtab);.  
29600 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
29610 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e  xUpdate(pVtab, n
29620 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77  Arg, apArg, &row
29630 69 64 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  id);.    sqlite3
29640 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
29650 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
29660 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
29670 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74  zErrMsg;.    pVt
29680 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
29690 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
296a0 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62  Unlock(db, pVtab
296b0 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  );.    if( sqlit
296c0 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
296d0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
296e0 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 69  to_misuse;.    i
296f0 66 28 20 70 4f 70 2d 3e 70 31 20 26 26 20 72 63  f( pOp->p1 && rc
29700 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
29710 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72       assert( nAr
29720 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20  g>1 && apArg[0] 
29730 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c  && (apArg[0]->fl
29740 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b  ags&MEM_Null) );
29750 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52  .      db->lastR
29760 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20  owid = rowid;.  
29770 20 20 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e    }.    p->nChan
29780 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ge++;.  }.  brea
29790 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
297a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
297b0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
297c0 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
297d0 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
297e0 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f  * Opcode: Pageco
297f0 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
29800 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
29810 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f  current number o
29820 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62  f pages in datab
29830 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79  ase P1 to memory
29840 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73   cell P2..*/.cas
29850 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20  e OP_Pagecount: 
29860 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
29870 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
29880 2a 2f 0a 20 20 69 6e 74 20 70 31 20 3d 20 70 4f  */.  int p1 = pO
29890 70 2d 3e 70 31 3b 20 0a 20 20 69 6e 74 20 6e 50  p->p1; .  int nP
298a0 61 67 65 3b 0a 20 20 50 61 67 65 72 20 2a 70 50  age;.  Pager *pP
298b0 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
298c0 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44 62  reePager(db->aDb
298d0 5b 70 31 5d 2e 70 42 74 29 3b 0a 0a 20 20 72 63  [p1].pBt);..  rc
298e0 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 50   = sqlite3PagerP
298f0 61 67 65 63 6f 75 6e 74 28 70 50 61 67 65 72 2c  agecount(pPager,
29900 20 26 6e 50 61 67 65 29 3b 0a 20 20 69 66 28 20   &nPage);.  if( 
29910 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
29920 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
29930 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
29940 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 50 61 67  pOut->u.i = nPag
29950 65 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  e;.  }.  break;.
29960 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
29970 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
29980 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  ACE./* Opcode: T
29990 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  race * * * P4 *.
299a0 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67  **.** If tracing
299b0 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20   is enabled (by 
299c0 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63  the sqlite3_trac
299d0 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20  e()) interface, 
299e0 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d  then.** the UTF-
299f0 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  8 string contain
29a00 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74  ed in P4 is emit
29a10 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65  ted on the trace
29a20 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61   callback..*/.ca
29a30 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20  se OP_Trace: {. 
29a40 20 63 68 61 72 20 2a 7a 54 72 61 63 65 20 3d 20   char *zTrace = 
29a50 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
29a60 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
29a70 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20  );.  if( zTrace 
29a80 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  ){.    if( db->x
29a90 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 64  Trace ){.      d
29aa0 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54  b->xTrace(db->pT
29ab0 72 61 63 65 41 72 67 2c 20 7a 54 72 61 63 65 29  raceArg, zTrace)
29ac0 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53  ;.    }.#ifdef S
29ad0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
29ae0 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  if( (db->flags &
29af0 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
29b00 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  )!=0 ){.      sq
29b10 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
29b20 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c  ("SQL-trace: %s\
29b30 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  n", zTrace);.   
29b40 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
29b50 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 7d  ITE_DEBUG */.  }
29b60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
29b70 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  if.../* Opcode: 
29b80 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  Noop * * * * *.*
29b90 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e  *.** Do nothing.
29ba0 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69    This instructi
29bb0 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66  on is often usef
29bc0 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20  ul as a jump.** 
29bd0 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a  destination..*/.
29be0 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20  /*.** The magic 
29bf0 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61  Explain opcode a
29c00 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64  re only inserted
29c10 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32   when explain==2
29c20 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f   (which.** is to
29c30 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58   say when the EX
29c40 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
29c50 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e   syntax is used.
29c60 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ).** This opcode
29c70 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61   records informa
29c80 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70  tion from the op
29c90 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20  timizer.  It is 
29ca0 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  the.** the same 
29cb0 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69  as a no-op.  Thi
29cc0 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61  s opcodesnever a
29cd0 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c  ppears in a real
29ce0 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a   VM program..*/.
29cf0 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20  default: {      
29d00 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72      /* This is r
29d10 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e  eally OP_Noop an
29d20 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a  d OP_Explain */.
29d30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a    break;.}../***
29d40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29d50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29d60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29d70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29d80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
29d90 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73  e cases of the s
29da0 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
29db0 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20  above this line 
29dc0 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e  should all be in
29dd0 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73  dented.** by 6 s
29de0 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20  paces.  But the 
29df0 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63  left-most 6 spac
29e00 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d  es have been rem
29e10 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20  oved to improve 
29e20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69  the.** readabili
29e30 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70  ty.  From this p
29e40 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68  oint on down, th
29e50 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  e normal indenta
29e60 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a  tion rules are.*
29e70 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a  * restored..****
29e80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29e90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
29ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d  *********/.    }
29ed0 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
29ee0 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20  OFILE.    {.    
29ef0 20 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d 20    u64 elapsed = 
29f00 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 20  sqlite3Hwtime() 
29f10 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70  - start;.      p
29f20 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c  Op->cycles += el
29f30 61 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f 70  apsed;.      pOp
29f40 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20  ->cnt++;.#if 0. 
29f50 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73         fprintf(s
29f60 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20 22  tdout, "%10llu "
29f70 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20 20  , elapsed);.    
29f80 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
29f90 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f  rintOp(stdout, o
29fa0 72 69 67 50 63 2c 20 26 70 2d 3e 61 4f 70 5b 6f  rigPc, &p->aOp[o
29fb0 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66 0a  rigPc]);.#endif.
29fc0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
29fd0 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
29fe0 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74  ng code adds not
29ff0 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75  hing to the actu
2a000 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  al functionality
2a010 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70  .    ** of the p
2a020 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f  rogram.  It is o
2a030 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65 73  nly here for tes
2a040 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69  ting and debuggi
2a050 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68  ng..    ** On th
2a060 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74  e other hand, it
2a070 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63   does burn CPU c
2a080 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65  ycles every time
2a090 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20   through.    ** 
2a0a0 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f  the evaluator lo
2a0b0 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c  op.  So we can l
2a0c0 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e  eave it out when
2a0d0 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69 6e   NDEBUG is defin
2a0e0 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64  ed..    */.#ifnd
2a0f0 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73  ef NDEBUG.    as
2a100 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20  sert( pc>=-1 && 
2a110 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69  pc<p->nOp );..#i
2a120 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2a130 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61  G.    if( p->tra
2a140 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ce ){.      if( 
2a150 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74 66 28  rc!=0 ) fprintf(
2a160 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25 64 5c  p->trace,"rc=%d\
2a170 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69 66  n",rc);.      if
2a180 28 20 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f  ( opProperty & O
2a190 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
2a1a0 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
2a1b0 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
2a1c0 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32 2c  >trace, pOp->p2,
2a1d0 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a   pOut);.      }.
2a1e0 20 20 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70        if( opProp
2a1f0 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
2a200 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  3 ){.        reg
2a210 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72  isterTrace(p->tr
2a220 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 4f  ace, pOp->p3, pO
2a230 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ut);.      }.   
2a240 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51   }.#endif  /* SQ
2a250 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65  LITE_DEBUG */.#e
2a260 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20  ndif  /* NDEBUG 
2a270 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65  */.  }  /* The e
2a280 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b  nd of the for(;;
2a290 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73  ) loop the loops
2a2a0 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73   through opcodes
2a2b0 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20   */..  /* If we 
2a2c0 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
2a2d0 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
2a2e0 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e  execution is fin
2a2f0 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20  ished with.  ** 
2a300 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65  an error of some
2a310 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65   kind..  */.vdbe
2a320 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61  _error_halt:.  a
2a330 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70  ssert( rc );.  p
2a340 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c  ->rc = rc;.  sql
2a350 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
2a360 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2a370 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20  E_IOERR_NOMEM ) 
2a380 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
2a390 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   = 1;.  rc = SQL
2a3a0 49 54 45 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f 2a  ITE_ERROR;..  /*
2a3b0 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
2a3c0 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69  y way out of thi
2a3d0 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65  s procedure.  We
2a3e0 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65   have to.  ** re
2a3f0 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78 65  lease the mutexe
2a400 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74  s on btrees that
2a410 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20 61   were acquired a
2a420 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20  t the.  ** top. 
2a430 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a  */.vdbe_return:.
2a440 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 75    sqlite3BtreeMu
2a450 74 65 78 41 72 72 61 79 4c 65 61 76 65 28 26 70  texArrayLeave(&p
2a460 2d 3e 61 4d 75 74 65 78 29 3b 0a 20 20 72 65 74  ->aMutex);.  ret
2a470 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75  urn rc;..  /* Ju
2a480 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
2a490 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c  string or blob l
2a4a0 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54  arger than SQLIT
2a4b0 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a  E_MAX_LENGTH.  *
2a4c0 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  * is encountered
2a4d0 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a  ..  */.too_big:.
2a4e0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2a4f0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2a500 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62  db, "string or b
2a510 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20  lob too big");. 
2a520 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f   rc = SQLITE_TOO
2a530 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  BIG;.  goto vdbe
2a540 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
2a550 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
2a560 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  if a malloc() fa
2a570 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d  ils..  */.no_mem
2a580 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  :.  db->mallocFa
2a590 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69  iled = 1;.  sqli
2a5a0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2a5b0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f  >zErrMsg, db, "o
2a5c0 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a  ut of memory");.
2a5d0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
2a5e0 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  MEM;.  goto vdbe
2a5f0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
2a600 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
2a610 66 6f 72 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  for an SQLITE_MI
2a620 53 55 53 45 20 65 72 72 6f 72 2e 0a 20 20 2a 2f  SUSE error..  */
2a630 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69  .abort_due_to_mi
2a640 73 75 73 65 3a 0a 20 20 72 63 20 3d 20 53 51 4c  suse:.  rc = SQL
2a650 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 2f 2a  ITE_MISUSE;.  /*
2a660 20 46 61 6c 6c 20 74 68 72 75 20 69 6e 74 6f 20   Fall thru into 
2a670 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2a680 6f 72 20 2a 2f 0a 0a 20 20 2f 2a 20 4a 75 6d 70  or */..  /* Jump
2a690 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79   to here for any
2a6a0 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66   other kind of f
2a6b0 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65  atal error.  The
2a6c0 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20   "rc" variable. 
2a6d0 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20   ** should hold 
2a6e0 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72  the error number
2a6f0 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
2a700 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73  _to_error:.  ass
2a710 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d  ert( p->zErrMsg=
2a720 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  =0 );.  if( db->
2a730 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72  mallocFailed ) r
2a740 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
2a750 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
2a760 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
2a770 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
2a780 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2a790 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
2a7a0 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
2a7b0 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
2a7c0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
2a7d0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2a7e0 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   if the sqlite3_
2a7f0 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20  interrupt() API 
2a800 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75  sets the interru
2a810 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20  pt.  ** flag..  
2a820 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
2a830 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73  interrupt:.  ass
2a840 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e  ert( db->u1.isIn
2a850 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72  terrupted );.  r
2a860 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
2a870 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  RUPT;.  p->rc = 
2a880 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74  rc;.  sqlite3Set
2a890 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2a8a0 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
2a8b0 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
2a8c0 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
2a8d0 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a              ror_halt;.}.