/ Hex Artifact Content
Login

Artifact ba87db547187693cab47a1b78e7e14b02cae3686:


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 35 31 20 32 30 30 39  e.c,v 1.851 2009
0850: 2f 30 36 2f 31 35 20 32 30 3a 34 35 3a 33 35 20  /06/15 20:45:35 
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 23 69 66 6e 64 65 66 20 53 51 4c 49  i);.#ifndef SQLI
36e0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
36f0: 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69  _POINT.  }else i
3700: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3710: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66 70  M_Real ){.    fp
3720: 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a 25  rintf(out, " r:%
3730: 67 22 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64 69  g", p->r);.#endi
3740: 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  f.  }else if( p-
3750: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
3760: 53 65 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  Set ){.    fprin
3770: 74 66 28 6f 75 74 2c 20 22 20 28 72 6f 77 73 65  tf(out, " (rowse
3780: 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  t)");.  }else{. 
3790: 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30     char zBuf[200
37a0: 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ];.    sqlite3Vd
37b0: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
37c0: 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 66  (p, zBuf);.    f
37d0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 22 29  printf(out, " ")
37e0: 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  ;.    fprintf(ou
37f0: 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a  t, "%s", zBuf);.
3800: 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69    }.}.static voi
3810: 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28  d registerTrace(
3820: 46 49 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69  FILE *out, int i
3830: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
3840: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 52 45  fprintf(out, "RE
3850: 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29  G[%d] = ", iReg)
3860: 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e  ;.  memTracePrin
3870: 74 28 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70 72  t(out, p);.  fpr
3880: 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b  intf(out, "\n");
3890: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
38a0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
38b0: 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45    define REGISTE
38c0: 52 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28  R_TRACE(R,M) if(
38d0: 70 2d 3e 74 72 61 63 65 29 72 65 67 69 73 74 65  p->trace)registe
38e0: 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c  rTrace(p->trace,
38f0: 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  R,M).#else.#  de
3900: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
3910: 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a  ACE(R,M).#endif.
3920: 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
3930: 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77  OFILE../* .** hw
3940: 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20  time.h contains 
3950: 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72  inline assembler
3960: 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d   code for implem
3970: 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d  enting .** high-
3980: 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69  performance timi
3990: 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  ng routines..*/.
39a0: 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65  #include "hwtime
39b0: 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  .h"..#endif../*.
39c0: 2a 2a 20 54 68 65 20 43 48 45 43 4b 5f 46 4f 52  ** The CHECK_FOR
39d0: 5f 49 4e 54 45 52 52 55 50 54 20 6d 61 63 72 6f  _INTERRUPT macro
39e0: 20 64 65 66 69 6e 65 64 20 68 65 72 65 20 6c 6f   defined here lo
39f0: 6f 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  oks to see if th
3a00: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74  e.** sqlite3_int
3a10: 65 72 72 75 70 74 28 29 20 72 6f 75 74 69 6e 65  errupt() routine
3a20: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
3a30: 2e 20 20 49 66 20 69 74 20 68 61 73 20 62 65 65  .  If it has bee
3a40: 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65  n, then.** proce
3a50: 73 73 69 6e 67 20 6f 66 20 74 68 65 20 56 44 42  ssing of the VDB
3a60: 45 20 70 72 6f 67 72 61 6d 20 69 73 20 69 6e 74  E program is int
3a70: 65 72 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  errupted..**.** 
3a80: 54 68 69 73 20 6d 61 63 72 6f 20 61 64 64 65 64  This macro added
3a90: 20 74 6f 20 65 76 65 72 79 20 69 6e 73 74 72 75   to every instru
3aa0: 63 74 69 6f 6e 20 74 68 61 74 20 64 6f 65 73 20  ction that does 
3ab0: 61 20 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72 20  a jump in order 
3ac0: 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20  to.** implement 
3ad0: 61 20 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74 65  a loop.  This te
3ae0: 73 74 20 75 73 65 64 20 74 6f 20 62 65 20 6f 6e  st used to be on
3af0: 20 65 76 65 72 79 20 73 69 6e 67 6c 65 20 69 6e   every single in
3b00: 73 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75  struction,.** bu
3b10: 74 20 74 68 61 74 20 6d 65 61 6e 74 20 77 65 20  t that meant we 
3b20: 6d 6f 72 65 20 74 65 73 74 69 6e 67 20 74 68 61  more testing tha
3b30: 74 20 77 65 20 6e 65 65 64 65 64 2e 20 20 42 79  t we needed.  By
3b40: 20 6f 6e 6c 79 20 74 65 73 74 69 6e 67 20 74 68   only testing th
3b50: 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d  e.** flag on jum
3b60: 70 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20  p instructions, 
3b70: 77 65 20 67 65 74 20 61 20 28 73 6d 61 6c 6c 29  we get a (small)
3b80: 20 73 70 65 65 64 20 69 6d 70 72 6f 76 65 6d 65   speed improveme
3b90: 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  nt..*/.#define C
3ba0: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
3bb0: 50 54 20 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e  PT \.   if( db->
3bc0: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
3bd0: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
3be0: 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a  e_to_interrupt;.
3bf0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
3c00: 45 42 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20  EBUG.static int 
3c10: 66 69 6c 65 45 78 69 73 74 73 28 73 71 6c 69 74  fileExists(sqlit
3c20: 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68  e3 *db, const ch
3c30: 61 72 20 2a 7a 46 69 6c 65 29 7b 0a 20 20 69 6e  ar *zFile){.  in
3c40: 74 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 6e 74  t res = 0;.  int
3c50: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
3c60: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
3c70: 45 53 54 0a 20 20 2f 2a 20 49 66 20 77 65 20 61  EST.  /* If we a
3c80: 72 65 20 63 75 72 72 65 6e 74 6c 79 20 74 65 73  re currently tes
3c90: 74 69 6e 67 20 49 4f 20 65 72 72 6f 72 73 2c 20  ting IO errors, 
3ca0: 74 68 65 6e 20 64 6f 20 6e 6f 74 20 63 61 6c 6c  then do not call
3cb0: 20 4f 73 41 63 63 65 73 73 28 29 20 74 6f 0a 20   OsAccess() to. 
3cc0: 20 2a 2a 20 74 65 73 74 20 66 6f 72 20 74 68 65   ** test for the
3cd0: 20 70 72 65 73 65 6e 63 65 20 6f 66 20 7a 46 69   presence of zFi
3ce0: 6c 65 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  le. This is beca
3cf0: 75 73 65 20 61 6e 79 20 49 4f 20 65 72 72 6f 72  use any IO error
3d00: 20 74 68 61 74 0a 20 20 2a 2a 20 6f 63 63 75 72   that.  ** occur
3d10: 73 20 68 65 72 65 20 77 69 6c 6c 20 6e 6f 74 20  s here will not 
3d20: 62 65 20 72 65 70 6f 72 74 65 64 2c 20 63 61 75  be reported, cau
3d30: 73 69 6e 67 20 74 68 65 20 74 65 73 74 20 74 6f  sing the test to
3d40: 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 65 78   fail..  */.  ex
3d50: 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
3d60: 5f 69 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e  _io_error_pendin
3d70: 67 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  g;.  if( sqlite3
3d80: 5f 69 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e  _io_error_pendin
3d90: 67 3c 3d 30 20 29 0a 23 65 6e 64 69 66 0a 20 20  g<=0 ).#endif.  
3da0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
3db0: 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c  Access(db->pVfs,
3dc0: 20 7a 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 41   zFile, SQLITE_A
3dd0: 43 43 45 53 53 5f 45 58 49 53 54 53 2c 20 26 72  CCESS_EXISTS, &r
3de0: 65 73 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 72  es);.  return (r
3df0: 65 73 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45  es && rc==SQLITE
3e00: 5f 4f 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  _OK);.}.#endif..
3e10: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
3e20: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
3e30: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
3e40: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
3e50: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
3e60: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
3e70: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
3e80: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
3e90: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
3ea0: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
3eb0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
3ec0: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
3ed0: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
3ee0: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
3ef0: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
3f00: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
3f10: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
3f20: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
3f30: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
3f40: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
3f50: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
3f60: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
3f70: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
3f80: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
3f90: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
3fa0: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
3fb0: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
3fc0: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
3fd0: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
3fe0: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
3ff0: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
4000: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
4010: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
4020: 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65  f../*.** Execute
4030: 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44   as much of a VD
4040: 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65  BE program as we
4050: 20 63 61 6e 20 74 68 65 6e 20 72 65 74 75 72 6e   can then return
4060: 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 56  ..**.** sqlite3V
4070: 64 62 65 4d 61 6b 65 52 65 61 64 79 28 29 20 6d  dbeMakeReady() m
4080: 75 73 74 20 62 65 20 63 61 6c 6c 65 64 20 62 65  ust be called be
4090: 66 6f 72 65 20 74 68 69 73 20 72 6f 75 74 69 6e  fore this routin
40a0: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
40b0: 20 63 6c 6f 73 65 20 74 68 65 20 70 72 6f 67 72   close the progr
40c0: 61 6d 20 77 69 74 68 20 61 20 66 69 6e 61 6c 20  am with a final 
40d0: 4f 50 5f 48 61 6c 74 20 61 6e 64 20 74 6f 20 73  OP_Halt and to s
40e0: 65 74 20 75 70 20 74 68 65 20 63 61 6c 6c 62 61  et up the callba
40f0: 63 6b 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 65  cks.** and the e
4100: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 70 6f 69  rror message poi
4110: 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  nter..**.** When
4120: 65 76 65 72 20 61 20 72 6f 77 20 6f 72 20 72 65  ever a row or re
4130: 73 75 6c 74 20 64 61 74 61 20 69 73 20 61 76 61  sult data is ava
4140: 69 6c 61 62 6c 65 2c 20 74 68 69 73 20 72 6f 75  ilable, this rou
4150: 74 69 6e 65 20 77 69 6c 6c 20 65 69 74 68 65 72  tine will either
4160: 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74 68 65 20 72  .** invoke the r
4170: 65 73 75 6c 74 20 63 61 6c 6c 62 61 63 6b 20 28  esult callback (
4180: 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65 29  if there is one)
4190: 20 6f 72 20 72 65 74 75 72 6e 20 77 69 74 68 0a   or return with.
41a0: 2a 2a 20 53 51 4c 49 54 45 5f 52 4f 57 2e 0a 2a  ** SQLITE_ROW..*
41b0: 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74 74 65 6d  *.** If an attem
41c0: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 6f 70  pt is made to op
41d0: 65 6e 20 61 20 6c 6f 63 6b 65 64 20 64 61 74 61  en a locked data
41e0: 62 61 73 65 2c 20 74 68 65 6e 20 74 68 69 73 20  base, then this 
41f0: 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69 6c 6c 20  routine.** will 
4200: 65 69 74 68 65 72 20 69 6e 76 6f 6b 65 20 74 68  either invoke th
4210: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
4220: 28 69 66 20 74 68 65 72 65 20 69 73 20 6f 6e 65  (if there is one
4230: 29 20 6f 72 20 69 74 20 77 69 6c 6c 0a 2a 2a 20  ) or it will.** 
4240: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55  return SQLITE_BU
4250: 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20  SY..**.** If an 
4260: 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 61 6e  error occurs, an
4270: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
4280: 73 20 77 72 69 74 74 65 6e 20 74 6f 20 6d 65 6d  s written to mem
4290: 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20  ory obtained.** 
42a0: 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  from sqlite3_mal
42b0: 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e 7a 45 72  loc() and p->zEr
42c0: 72 4d 73 67 20 69 73 20 6d 61 64 65 20 74 6f 20  rMsg is made to 
42d0: 70 6f 69 6e 74 20 74 6f 20 74 68 61 74 20 6d 65  point to that me
42e0: 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20 65 72 72  mory..** The err
42f0: 6f 72 20 63 6f 64 65 20 69 73 20 73 74 6f 72 65  or code is store
4300: 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e 64 20 74  d in p->rc and t
4310: 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75  his routine retu
4320: 72 6e 73 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  rns SQLITE_ERROR
4330: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
4340: 61 6c 6c 62 61 63 6b 20 65 76 65 72 20 72 65 74  allback ever ret
4350: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  urns non-zero, t
4360: 68 65 6e 20 74 68 65 20 70 72 6f 67 72 61 6d 20  hen the program 
4370: 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65 64 69 61  exits.** immedia
4380: 74 65 6c 79 2e 20 20 54 68 65 72 65 20 77 69 6c  tely.  There wil
4390: 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72 20 6d 65  l be no error me
43a0: 73 73 61 67 65 20 62 75 74 20 74 68 65 20 70 2d  ssage but the p-
43b0: 3e 72 63 20 66 69 65 6c 64 20 69 73 0a 2a 2a 20  >rc field is.** 
43c0: 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 41 42  set to SQLITE_AB
43d0: 4f 52 54 20 61 6e 64 20 74 68 69 73 20 72 6f 75  ORT and this rou
43e0: 74 69 6e 65 20 77 69 6c 6c 20 72 65 74 75 72 6e  tine will return
43f0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a   SQLITE_ERROR..*
4400: 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79 20 61 6c  *.** A memory al
4410: 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f 72 20 63  location error c
4420: 61 75 73 65 73 20 70 2d 3e 72 63 20 74 6f 20 62  auses p->rc to b
4430: 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  e set to SQLITE_
4440: 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69 73 0a 2a  NOMEM and this.*
4450: 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20 72 65 74  * routine to ret
4460: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
4470: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 66 61  ..**.** Other fa
4480: 74 61 6c 20 65 72 72 6f 72 73 20 72 65 74 75 72  tal errors retur
4490: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a  n SQLITE_ERROR..
44a0: 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68 69 73  **.** After this
44b0: 20 72 6f 75 74 69 6e 65 20 68 61 73 20 66 69 6e   routine has fin
44c0: 69 73 68 65 64 2c 20 73 71 6c 69 74 65 33 56 64  ished, sqlite3Vd
44d0: 62 65 46 69 6e 61 6c 69 7a 65 28 29 20 73 68 6f  beFinalize() sho
44e0: 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65 64 20 74  uld be.** used t
44f0: 6f 20 63 6c 65 61 6e 20 75 70 20 74 68 65 20 6d  o clean up the m
4500: 65 73 73 20 74 68 61 74 20 77 61 73 20 6c 65 66  ess that was lef
4510: 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a 69 6e 74  t behind..*/.int
4520: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
4530: 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20 20  (.  Vdbe *p     
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4550: 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b  * The VDBE */.){
4560: 0a 20 20 69 6e 74 20 70 63 3b 20 20 20 20 20 20  .  int pc;      
4570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4580: 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75   The program cou
4590: 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f  nter */.  Op *pO
45a0: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
45b0: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
45c0: 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69  operation */.  i
45d0: 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  nt rc = SQLITE_O
45e0: 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  K;        /* Val
45f0: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a  ue to return */.
4600: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
4610: 70 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20  p->db;       /* 
4620: 54 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  The database */.
4630: 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20    u8 encoding = 
4640: 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20  ENC(db);     /* 
4650: 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  The database enc
4660: 6f 64 69 6e 67 20 2a 2f 0a 20 20 4d 65 6d 20 2a  oding */.  Mem *
4670: 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn1 = 0;       
4680: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70        /* 1st inp
4690: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
46a0: 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20  Mem *pIn2 = 0;  
46b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e             /* 2n
46c0: 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  d input operand 
46d0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d  */.  Mem *pIn3 =
46e0: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
46f0: 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65  /* 3rd input ope
4700: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4710: 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Out = 0;        
4720: 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f       /* Output o
4730: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 38 20 6f  perand */.  u8 o
4740: 70 50 72 6f 70 65 72 74 79 3b 0a 20 20 69 6e 74  pProperty;.  int
4750: 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20   iCompare = 0;  
4760: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
4770: 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d  t of last OP_Com
4780: 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a  pare operation *
4790: 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74  /.  int *aPermut
47a0: 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  e = 0;         /
47b0: 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66  * Permutation of
47c0: 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f   columns for OP_
47d0: 43 6f 6d 70 61 72 65 20 2a 2f 0a 23 69 66 64 65  Compare */.#ifde
47e0: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
47f0: 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20   u64 start;     
4800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
4810: 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61  PU clock count a
4820: 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64  t start of opcod
4830: 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50  e */.  int origP
4840: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
4850: 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75    /* Program cou
4860: 6e 74 65 72 20 61 74 20 73 74 61 72 74 20 6f 66  nter at start of
4870: 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
4880: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
4890: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
48a0: 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 6e 50  ALLBACK.  int nP
48b0: 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 20  rogressOps = 0; 
48c0: 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20       /* Opcodes 
48d0: 65 78 65 63 75 74 65 64 20 73 69 6e 63 65 20 70  executed since p
48e0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
48f0: 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a  . */.#endif.  /*
4900: 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20  ** INSERT STACK 
4910: 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a  UNION HERE ***/.
4920: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61  .  assert( p->ma
4930: 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f  gic==VDBE_MAGIC_
4940: 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74  RUN );  /* sqlit
4950: 65 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69  e3_step() verifi
4960: 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 61 73 73  es this */.  ass
4970: 65 72 74 28 20 64 62 2d 3e 6d 61 67 69 63 3d 3d  ert( db->magic==
4980: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
4990: 59 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Y );.  sqlite3Vd
49a0: 62 65 4d 75 74 65 78 41 72 72 61 79 45 6e 74 65  beMutexArrayEnte
49b0: 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72  r(p);.  if( p->r
49c0: 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
49d0: 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  ){.    /* This h
49e0: 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c  appens if a mall
49f0: 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61  oc() inside a ca
4a00: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f  ll to sqlite3_co
4a10: 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20  lumn_text() or. 
4a20: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f     ** sqlite3_co
4a30: 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61  lumn_text16() fa
4a40: 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f  iled.  */.    go
4a50: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
4a60: 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d   assert( p->rc==
4a70: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e  SQLITE_OK || p->
4a80: 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
4a90: 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  );.  p->rc = SQL
4aa0: 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74  ITE_OK;.  assert
4ab0: 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20  ( p->explain==0 
4ac0: 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53  );.  p->pResultS
4ad0: 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75  et = 0;.  db->bu
4ae0: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
4af0: 3d 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52  = 0;.  CHECK_FOR
4b00: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 73 71  _INTERRUPT;.  sq
4b10: 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
4b20: 53 71 6c 28 70 29 3b 0a 23 69 66 64 65 66 20 53  Sql(p);.#ifdef S
4b30: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71  QLITE_DEBUG.  sq
4b40: 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
4b50: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20  Malloc();.  if( 
4b60: 70 2d 3e 70 63 3d 3d 30 20 0a 20 20 20 26 26 20  p->pc==0 .   && 
4b70: 28 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ((p->db->flags &
4b80: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
4b90: 69 6e 67 29 20 7c 7c 20 66 69 6c 65 45 78 69 73  ing) || fileExis
4ba0: 74 73 28 64 62 2c 20 22 76 64 62 65 5f 65 78 70  ts(db, "vdbe_exp
4bb0: 6c 61 69 6e 22 29 29 0a 20 20 29 7b 0a 20 20 20  lain")).  ){.   
4bc0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 72 69 6e   int i;.    prin
4bd0: 74 66 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d  tf("VDBE Program
4be0: 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20   Listing:\n");. 
4bf0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4c00: 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 66  intSql(p);.    f
4c10: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
4c20: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71  ; i++){.      sq
4c30: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
4c40: 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 70 2d 3e  (stdout, i, &p->
4c50: 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20  aOp[i]);.    }. 
4c60: 20 7d 0a 20 20 69 66 28 20 66 69 6c 65 45 78 69   }.  if( fileExi
4c70: 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f 74 72  sts(db, "vdbe_tr
4c80: 61 63 65 22 29 20 29 7b 0a 20 20 20 20 70 2d 3e  ace") ){.    p->
4c90: 74 72 61 63 65 20 3d 20 73 74 64 6f 75 74 3b 0a  trace = stdout;.
4ca0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64    }.  sqlite3End
4cb0: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
4cc0: 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d  #endif.  for(pc=
4cd0: 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54  p->pc; rc==SQLIT
4ce0: 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20  E_OK; pc++){.   
4cf0: 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26   assert( pc>=0 &
4d00: 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  & pc<p->nOp );. 
4d10: 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f     if( db->mallo
4d20: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
4d30: 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44  o_mem;.#ifdef VD
4d40: 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 6f  BE_PROFILE.    o
4d50: 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20 20  rigPc = pc;.    
4d60: 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48  start = sqlite3H
4d70: 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a  wtime();.#endif.
4d80: 20 20 20 20 70 4f 70 20 3d 20 26 70 2d 3e 61 4f      pOp = &p->aO
4d90: 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f  p[pc];..    /* O
4da0: 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e  nly allow tracin
4db0: 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  g if SQLITE_DEBU
4dc0: 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
4dd0: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
4de0: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
4df0: 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20   p->trace ){.   
4e00: 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29 7b 0a     if( pc==0 ){.
4e10: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
4e20: 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e 20 54  VDBE Execution T
4e30: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20 20 20  race:\n");.     
4e40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4e50: 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20  intSql(p);.     
4e60: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
4e70: 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d 3e 74  VdbePrintOp(p->t
4e80: 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29 3b 0a  race, pc, pOp);.
4e90: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
4ea0: 3e 74 72 61 63 65 3d 3d 30 20 26 26 20 70 63 3d  >trace==0 && pc=
4eb0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
4ec0: 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
4ed0: 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 20 20 69 66  lloc();.      if
4ee0: 28 20 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c  ( fileExists(db,
4ef0: 20 22 76 64 62 65 5f 73 71 6c 74 72 61 63 65 22   "vdbe_sqltrace"
4f00: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
4f10: 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c  ite3VdbePrintSql
4f20: 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  (p);.      }.   
4f30: 20 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e     sqlite3EndBen
4f40: 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20  ignMalloc();.   
4f50: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20   }.#endif.      
4f60: 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74  ..    /* Check t
4f70: 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64  o see if we need
4f80: 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20   to simulate an 
4f90: 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73  interrupt.  This
4fa0: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20   only happens.  
4fb0: 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20    ** if we have 
4fc0: 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62  a special test b
4fd0: 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  uild..    */.#if
4fe0: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
4ff0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
5000: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e  interrupt_count>
5010: 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
5020: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5030: 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20  nt--;.      if( 
5040: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
5050: 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20  t_count==0 ){.  
5060: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e        sqlite3_in
5070: 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20  terrupt(db);.   
5080: 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
5090: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
50a0: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
50b0: 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f 2a 20  CALLBACK.    /* 
50c0: 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73  Call the progres
50d0: 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74  s callback if it
50e0: 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61   is configured a
50f0: 6e 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20  nd the required 
5100: 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20 6f 66  number.    ** of
5110: 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62   VDBE ops have b
5120: 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69  een executed (ei
5130: 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20  ther since this 
5140: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20  invocation of.  
5150: 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
5160: 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20  Exec() or since 
5170: 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72  last time the pr
5180: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
5190: 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 20  was called)..   
51a0: 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72   ** If the progr
51b0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74  ess callback ret
51c0: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65  urns non-zero, e
51d0: 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20  xit the virtual 
51e0: 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 20  machine with.   
51f0: 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64   ** a return cod
5200: 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a  e SQLITE_ABORT..
5210: 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
5220: 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a  b->xProgress ){.
5230: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 50        if( db->nP
5240: 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50 72 6f  rogressOps==nPro
5250: 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20 20 20  gressOps ){.    
5260: 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20 20 20      int prc;.   
5270: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
5280: 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
5290: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
52a0: 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 20 20  o_misuse;.      
52b0: 20 20 70 72 63 20 3d 64 62 2d 3e 78 50 72 6f 67    prc =db->xProg
52c0: 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65  ress(db->pProgre
52d0: 73 73 41 72 67 29 3b 0a 20 20 20 20 20 20 20 20  ssArg);.        
52e0: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
52f0: 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
5300: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
5310: 73 65 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  se;.        if( 
5320: 70 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  prc!=0 ){.      
5330: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
5340: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20  INTERRUPT;.     
5350: 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65       goto vdbe_e
5360: 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20  rror_halt;.     
5370: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 50 72     }.        nPr
5380: 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20  ogressOps = 0;. 
5390: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 50 72       }.      nPr
53a0: 6f 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20  ogressOps++;.   
53b0: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
53c0: 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74 75  * Do common setu
53d0: 70 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  p processing for
53e0: 20 61 6e 79 20 6f 70 63 6f 64 65 20 74 68 61 74   any opcode that
53f0: 20 69 73 20 6d 61 72 6b 65 64 0a 20 20 20 20 2a   is marked.    *
5400: 2a 20 77 69 74 68 20 74 68 65 20 22 6f 75 74 32  * with the "out2
5410: 2d 70 72 65 72 65 6c 65 61 73 65 22 20 74 61 67  -prerelease" tag
5420: 2e 20 20 53 75 63 68 20 6f 70 63 6f 64 65 73 20  .  Such opcodes 
5430: 68 61 76 65 20 61 20 73 69 6e 67 6c 65 0a 20 20  have a single.  
5440: 20 20 2a 2a 20 6f 75 74 70 75 74 20 77 68 69 63    ** output whic
5450: 68 20 69 73 20 73 70 65 63 69 66 69 65 64 20 62  h is specified b
5460: 79 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74  y the P2 paramet
5470: 65 72 2e 20 20 54 68 65 20 50 32 20 72 65 67 69  er.  The P2 regi
5480: 73 74 65 72 0a 20 20 20 20 2a 2a 20 69 73 20 69  ster.    ** is i
5490: 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 61 20  nitialized to a 
54a0: 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  NULL..    */.   
54b0: 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20 6f 70   opProperty = op
54c0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70  codeProperty[pOp
54d0: 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20 20 69  ->opcode];.    i
54e0: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
54f0: 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52   OPFLG_OUT2_PRER
5500: 45 4c 45 41 53 45 29 21 3d 30 20 29 7b 0a 20 20  ELEASE)!=0 ){.  
5510: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5520: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
5530: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5540: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
5550: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
5560: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
5570: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
5580: 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70  eleaseExternal(p
5590: 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74  Out);.      pOut
55a0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
55b0: 6c 6c 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  ll;.      pOut->
55c0: 6e 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  n = 0;.    }else
55d0: 0a 20 0a 20 20 20 20 2f 2a 20 44 6f 20 63 6f 6d  . .    /* Do com
55e0: 6d 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 6f 70  mon setup for op
55f0: 63 6f 64 65 73 20 6d 61 72 6b 65 64 20 77 69 74  codes marked wit
5600: 68 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  h one of the fol
5610: 6c 6f 77 69 6e 67 0a 20 20 20 20 2a 2a 20 63 6f  lowing.    ** co
5620: 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 70 72  mbinations of pr
5630: 6f 70 65 72 74 69 65 73 2e 0a 20 20 20 20 2a 2a  operties..    **
5640: 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20  .    **         
5650: 20 20 69 6e 31 0a 20 20 20 20 2a 2a 20 20 20 20    in1.    **    
5660: 20 20 20 20 20 20 20 69 6e 31 20 69 6e 32 0a 20         in1 in2. 
5670: 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20     **           
5680: 69 6e 31 20 69 6e 32 20 6f 75 74 33 0a 20 20 20  in1 in2 out3.   
5690: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e   **           in
56a0: 31 20 69 6e 33 0a 20 20 20 20 2a 2a 0a 20 20 20  1 in3.    **.   
56b0: 20 2a 2a 20 56 61 72 69 61 62 6c 65 73 20 70 49   ** Variables pI
56c0: 6e 31 2c 20 70 49 6e 32 2c 20 61 6e 64 20 70 49  n1, pIn2, and pI
56d0: 6e 33 20 61 72 65 20 6d 61 64 65 20 74 6f 20 70  n3 are made to p
56e0: 6f 69 6e 74 20 74 6f 20 61 70 70 72 6f 70 72 69  oint to appropri
56f0: 61 74 65 0a 20 20 20 20 2a 2a 20 72 65 67 69 73  ate.    ** regis
5700: 74 65 72 73 20 66 6f 72 20 69 6e 70 75 74 73 2e  ters for inputs.
5710: 20 20 56 61 72 69 61 62 6c 65 20 70 4f 75 74 20    Variable pOut 
5720: 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6f 75  points to the ou
5730: 74 70 75 74 20 72 65 67 69 73 74 65 72 2e 0a 20  tput register.. 
5740: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 6f     */.    if( (o
5750: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5760: 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN1)!=0 ){.   
5770: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5780: 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p1>0 );.      as
5790: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70  sert( pOp->p1<=p
57a0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
57b0: 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn1 = &p->aMem[
57c0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 20 20 20 20  pOp->p1];.      
57d0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
57e0: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
57f0: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5800: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32  erty & OPFLG_IN2
5810: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5820: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
5830: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
5840: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ert( pOp->p2<=p-
5850: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
5860: 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn2 = &p->aMem
5870: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
5880: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5890: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29  E(pOp->p2, pIn2)
58a0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
58b0: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
58c0: 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20  G_OUT3)!=0 ){.  
58d0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
58e0: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
58f0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5900: 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
5910: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4f 75  );.          pOu
5920: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
5930: 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d  ->p3];.        }
5940: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
5950: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
5960: 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a  PFLG_IN3)!=0 ){.
5970: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5980: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
5990: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
59a0: 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
59b0: 0a 20 20 20 20 20 20 20 20 70 49 6e 33 20 3d 20  .        pIn3 = 
59c0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
59d0: 5d 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  ];.        REGIS
59e0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
59f0: 33 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 20 20  3, pIn3);.      
5a00: 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  }.    }else if( 
5a10: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
5a20: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
5a30: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5a40: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
5a50: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5a60: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5a70: 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65    pIn2 = &p->aMe
5a80: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
5a90: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5aa0: 28 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b  (pOp->p2, pIn2);
5ab0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
5ac0: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5ad0: 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20  LG_IN3)!=0 ){.  
5ae0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5af0: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p3>0 );.      a
5b00: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
5b10: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
5b20: 20 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn3 = &p->aMem
5b30: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
5b40: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5b50: 70 4f 70 2d 3e 70 33 2c 20 70 49 6e 33 29 3b 0a  pOp->p3, pIn3);.
5b60: 20 20 20 20 7d 0a 0a 20 20 20 20 73 77 69 74 63      }..    switc
5b70: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
5b80: 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {../************
5b90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
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 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77  *.** What follow
5be0: 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73  s is a massive s
5bf0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5c00: 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20  where each case 
5c10: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20  implements a.** 
5c20: 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63  separate instruc
5c30: 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74  tion in the virt
5c40: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66  ual machine.  If
5c50: 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75   we follow the u
5c60: 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74  sual.** indentat
5c70: 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  ion conventions,
5c80: 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c   each case shoul
5c90: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79  d be indented by
5ca0: 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a   6 spaces.  But.
5cb0: 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74  ** that is a lot
5cc0: 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65   of wasted space
5cd0: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72   on the left mar
5ce0: 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64  gin.  So the cod
5cf0: 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20  e within.** the 
5d00: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
5d10: 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68   will break with
5d20: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20   convention and 
5d30: 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41  be flush-left. A
5d40: 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f  nother.** big co
5d50: 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74  mment (similar t
5d60: 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c  o this one) will
5d70: 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20   mark the point 
5d80: 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72  in the code wher
5d90: 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69  e.** we transiti
5da0: 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61  on back to norma
5db0: 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a  l indentation..*
5dc0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74  *.** The formatt
5dd0: 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65  ing of each case
5de0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20   is important.  
5df0: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72  The makefile for
5e00: 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72   SQLite.** gener
5e10: 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73  ates two C files
5e20: 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64   "opcodes.h" and
5e30: 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20   "opcodes.c" by 
5e40: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a  scanning this.**
5e50: 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f   file looking fo
5e60: 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67  r lines that beg
5e70: 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50  in with "case OP
5e80: 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73  _".  The opcodes
5e90: 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c  .h files.** will
5ea0: 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20   be filled with 
5eb0: 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69  #defines that gi
5ec0: 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ve unique intege
5ed0: 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68  r values to each
5ee0: 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74  .** opcode and t
5ef0: 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c  he opcodes.c fil
5f00: 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68  e is filled with
5f10: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72   an array of str
5f20: 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61  ings where.** ea
5f30: 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  ch string is the
5f40: 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   symbolic name f
5f50: 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  or the correspon
5f60: 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66  ding opcode.  If
5f70: 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61   the.** case sta
5f80: 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77  tement is follow
5f90: 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20  ed by a comment 
5fa0: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20  of the form "/# 
5fb0: 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a  same as ... #/".
5fc0: 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20  ** that comment 
5fd0: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
5fe0: 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75  mine the particu
5ff0: 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65  lar value of the
6000: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f   opcode..**.** O
6010: 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e  ther keywords in
6020: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61   the comment tha
6030: 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63  t follows each c
6040: 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a  ase are used to.
6050: 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  ** construct the
6060: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
6070: 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e  ER value that in
6080: 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65  itializes opcode
6090: 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b  Property[]..** K
60a0: 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a  eywords include:
60b0: 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20   in1, in2, in3, 
60c0: 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c  out2_prerelease,
60d0: 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65   out2, out3.  Se
60e0: 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64  e.** the mkopcod
60f0: 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f  eh.awk script fo
6100: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
6110: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
6120: 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62  Documentation ab
6130: 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73  out VDBE opcodes
6140: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79   is generated by
6150: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66   scanning this f
6160: 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73  ile.** for lines
6170: 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e   of that contain
6180: 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61   "Opcode:".  Tha
6190: 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73  t line and all s
61a0: 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d  ubsequent.** com
61b0: 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75  ment lines are u
61c0: 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
61d0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63  ation of the opc
61e0: 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e  ode.html documen
61f0: 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a  tation.** file..
6200: 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a  **.** SUMMARY:.*
6210: 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74  *.**     Formatt
6220: 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  ing is important
6230: 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74   to scripts that
6240: 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e   scan this file.
6250: 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64  .**     Do not d
6260: 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20  eviate from the 
6270: 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65  formatting style
6280: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
6290: 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..**.**********
62a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62b0: 2a 2a 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 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ***/../* Opcode:
62f0: 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20    Goto * P2 * * 
6300: 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e  *.**.** An uncon
6310: 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f  ditional jump to
6320: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20   address P2..** 
6330: 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  The next instruc
6340: 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69  tion executed wi
6350: 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e  ll be .** the on
6360: 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72  e at index P2 fr
6370: 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
6380: 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72   of.** the progr
6390: 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  am..*/.case OP_G
63a0: 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20  oto: {          
63b0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
63c0: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
63d0: 55 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d  UPT;.  pc = pOp-
63e0: 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 - 1;.  break
63f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6400: 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a   Gosub P1 P2 * *
6410: 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
6420: 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65  he current addre
6430: 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72  ss onto register
6440: 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20   P1.** and then 
6450: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
6460: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  P2..*/.case OP_G
6470: 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20  osub: {         
6480: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6490: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
64a0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
64b0: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p1<=p->nMem 
64c0: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e  );.  pIn1 = &p->
64d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
64e0: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
64f0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
6500: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
6510: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6520: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
6530: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
6540: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6550: 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  );.  pc = pOp->p
6560: 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 - 1;.  break;.
6570: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52  }../* Opcode:  R
6580: 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a  eturn P1 * * * *
6590: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
65a0: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
65b0: 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64  ion after the ad
65c0: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
65d0: 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
65e0: 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20  _Return: {      
65f0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
6600: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
6610: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
6620: 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70 49  ;.  pc = (int)pI
6630: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b  n1->u.i;.  break
6640: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6650: 20 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20   Yield P1 * * * 
6660: 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65  *.**.** Swap the
6670: 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   program counter
6680: 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20   with the value 
6690: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
66a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64  */.case OP_Yield
66b0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
66c0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70  * in1 */.  int p
66d0: 63 44 65 73 74 3b 0a 20 20 61 73 73 65 72 74 28  cDest;.  assert(
66e0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
66f0: 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20  MEM_Dyn)==0 );. 
6700: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6710: 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74  EM_Int;.  pcDest
6720: 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e   = (int)pIn1->u.
6730: 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  i;.  pIn1->u.i =
6740: 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f   pc;.  REGISTER_
6750: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
6760: 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63 44  In1);.  pc = pcD
6770: 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  est;.  break;.}.
6780: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
6790: 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50  tIfNull  P1 P2 P
67a0: 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  3 P4 *.**.** Che
67b0: 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ck the value in 
67c0: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66  register P3.  If
67d0: 20 69 73 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   is is NULL then
67e0: 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70   Halt using.** p
67f0: 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c  arameter P1, P2,
6800: 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74 68   and P4 as if th
6810: 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20 69  is were a Halt i
6820: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20  nstruction.  If 
6830: 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
6840: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6e  register P3 is n
6850: 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
6860: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  is routine is a 
6870: 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
6880: 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20  P_HaltIfNull: { 
6890: 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20       /* in3 */. 
68a0: 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
68b0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
68c0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46   ) break;.  /* F
68d0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
68e0: 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f   OP_Halt */.}../
68f0: 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20  * Opcode:  Halt 
6900: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
6910: 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74  ** Exit immediat
6920: 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63  ely.  All open c
6930: 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20  ursors, etc are 
6940: 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61  closed.** automa
6950: 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50  tically..**.** P
6960: 31 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20  1 is the result 
6970: 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62 79  code returned by
6980: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c   sqlite3_exec(),
6990: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29   sqlite3_reset()
69a0: 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f  ,.** or sqlite3_
69b0: 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72  finalize().  For
69c0: 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20   a normal halt, 
69d0: 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53  this should be S
69e0: 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a  QLITE_OK (0)..**
69f0: 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20   For errors, it 
6a00: 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65  can be some othe
6a10: 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21  r value.  If P1!
6a20: 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20  =0 then P2 will 
6a30: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
6a40: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72  ther or not to r
6a50: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72  ollback the curr
6a60: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
6a70: 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63    Do not rollbac
6a80: 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46  k.** if P2==OE_F
6a90: 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c  ail. Do the roll
6aa0: 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52  back if P2==OE_R
6ab0: 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d  ollback.  If P2=
6ac0: 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68  =OE_Abort,.** th
6ad0: 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20  en back out all 
6ae0: 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76  changes that hav
6af0: 65 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e  e occurred durin
6b00: 67 20 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e  g this execution
6b10: 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c   of the.** VDBE,
6b20: 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c   but do not roll
6b30: 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63  back the transac
6b40: 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  tion. .**.** If 
6b50: 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74  P4 is not null t
6b60: 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72  hen it is an err
6b70: 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e  or message strin
6b80: 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69  g..**.** There i
6b90: 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61  s an implied "Ha
6ba0: 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75  lt 0 0 0" instru
6bb0: 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61  ction inserted a
6bc0: 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f  t the very end o
6bd0: 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72  f.** every progr
6be0: 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70  am.  So a jump p
6bf0: 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73  ast the last ins
6c00: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  truction of the 
6c10: 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68  program.** is th
6c20: 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74  e same as execut
6c30: 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73  ing Halt..*/.cas
6c40: 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 70  e OP_Halt: {.  p
6c50: 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  ->rc = pOp->p1;.
6c60: 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
6c70: 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
6c80: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 66 28 20   pOp->p2;.  if( 
6c90: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
6ca0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
6cb0: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
6cc0: 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34  b, "%s", pOp->p4
6cd0: 2e 7a 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  .z);.  }.  rc = 
6ce0: 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
6cf0: 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  p);.  assert( rc
6d00: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c  ==SQLITE_BUSY ||
6d10: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
6d20: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
6d30: 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70  TE_BUSY ){.    p
6d40: 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
6d50: 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
6d60: 7b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63  {.    rc = p->rc
6d70: 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20   ? SQLITE_ERROR 
6d80: 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  : SQLITE_DONE;. 
6d90: 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72   }.  goto vdbe_r
6da0: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
6db0: 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20  ode: Integer P1 
6dc0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
6dd0: 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  he 32-bit intege
6de0: 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72  r value P1 is wr
6df0: 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73  itten into regis
6e00: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
6e10: 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20  OP_Integer: {   
6e20: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
6e30: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
6e40: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
6e50: 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Int;.  pOut->u.i
6e60: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72   = pOp->p1;.  br
6e70: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6e80: 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20  e: Int64 * P2 * 
6e90: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
6ea0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
6eb0: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
6ec0: 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74  alue..** Write t
6ed0: 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
6ee0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
6ef0: 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20  ase OP_Int64: { 
6f00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
6f10: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
6f20: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6f30: 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70  4.pI64!=0 );.  p
6f40: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
6f50: 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  _Int;.  pOut->u.
6f60: 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36  i = *pOp->p4.pI6
6f70: 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  4;.  break;.}../
6f80: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a  * Opcode: Real *
6f90: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
6fa0: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
6fb0: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f   to a 64-bit flo
6fc0: 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
6fd0: 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74  e..** Write that
6fe0: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
6ff0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
7000: 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20   OP_Real: {     
7010: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
7020: 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32  s TK_FLOAT, out2
7030: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
7040: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
7050: 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72  EM_Real;.  asser
7060: 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e  t( !sqlite3IsNaN
7070: 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29  (*pOp->p4.pReal)
7080: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20   );.  pOut->r = 
7090: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a  *pOp->p4.pReal;.
70a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
70b0: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a  pcode: String8 *
70c0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
70d0: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
70e0: 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55  nul terminated U
70f0: 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69  TF-8 string. Thi
7100: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
7110: 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f  sformed .** into
7120: 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65   an OP_String be
7130: 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75  fore it is execu
7140: 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73  ted for the firs
7150: 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20  t time..*/.case 
7160: 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20  OP_String8: {   
7170: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
7180: 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32   TK_STRING, out2
7190: 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
71a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
71b0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e  .z!=0 );.  pOp->
71c0: 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69  opcode = OP_Stri
71d0: 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ng;.  pOp->p1 = 
71e0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
71f0: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66  pOp->p4.z);..#if
7200: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
7210: 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63  _UTF16.  if( enc
7220: 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54  oding!=SQLITE_UT
7230: 46 38 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  F8 ){.    sqlite
7240: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
7250: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
7260: 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
7270: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
7280: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
7290: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
72a0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
72b0: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
72c0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
72d0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
72e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61  sqlite3VdbeMemMa
72f0: 6b 65 57 72 69 74 65 61 62 6c 65 28 70 4f 75 74  keWriteable(pOut
7300: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
7310: 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  .    pOut->zMall
7320: 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74  oc = 0;.    pOut
7330: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53  ->flags |= MEM_S
7340: 74 61 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d  tatic;.    pOut-
7350: 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44  >flags &= ~MEM_D
7360: 79 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  yn;.    if( pOp-
7370: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41  >p4type==P4_DYNA
7380: 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  MIC ){.      sql
7390: 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
73a0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d  Op->p4.z);.    }
73b0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  .    pOp->p4type
73c0: 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20   = P4_DYNAMIC;. 
73d0: 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70     pOp->p4.z = p
73e0: 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d  Out->z;.    pOp-
73f0: 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20  >p1 = pOut->n;. 
7400: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64     if( pOp->p1>d
7410: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
7420: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
7430: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
7440: 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
7450: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
7460: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  IZE(pOut);.    b
7470: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
7480: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
7490: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
74a0: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
74b0: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
74c0: 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  ig;.  }.  /* Fal
74d0: 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
74e0: 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53   next case, OP_S
74f0: 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a  tring */.}.  ./*
7500: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20   Opcode: String 
7510: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
7520: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61  ** The string va
7530: 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68  lue P4 of length
7540: 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73   P1 (bytes) is s
7550: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
7560: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7570: 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20  _String: {      
7580: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7590: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
75a0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
75b0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
75c0: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
75d0: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
75e0: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
75f0: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
7600: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
7610: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
7620: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
7630: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
7640: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7650: 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20   Opcode: Null * 
7660: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
7670: 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f  rite a NULL into
7680: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
7690: 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b  .case OP_Null: {
76a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
76b0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
76c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
76d0: 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31   Opcode: Blob P1
76e0: 20 50 32 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50   P2 * P4.**.** P
76f0: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c  4 points to a bl
7700: 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79  ob of data P1 by
7710: 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65  tes long.  Store
7720: 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e   this.** blob in
7730: 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 54 68   register P2. Th
7740: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
7750: 73 20 6e 6f 74 20 63 6f 64 65 64 20 64 69 72 65  s not coded dire
7760: 63 74 6c 79 0a 2a 2a 20 62 79 20 74 68 65 20 63  ctly.** by the c
7770: 6f 6d 70 69 6c 65 72 2e 20 49 6e 73 74 65 61 64  ompiler. Instead
7780: 2c 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c  , the compiler l
7790: 61 79 65 72 20 73 70 65 63 69 66 69 65 73 0a 2a  ayer specifies.*
77a0: 2a 20 61 6e 20 4f 50 5f 48 65 78 42 6c 6f 62 20  * an OP_HexBlob 
77b0: 6f 70 63 6f 64 65 2c 20 77 69 74 68 20 74 68 65  opcode, with the
77c0: 20 68 65 78 20 73 74 72 69 6e 67 20 72 65 70 72   hex string repr
77d0: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 0a 2a 2a  esentation of.**
77e0: 20 74 68 65 20 62 6c 6f 62 20 61 73 20 50 34 2e   the blob as P4.
77f0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
7800: 74 72 61 6e 73 66 6f 72 6d 65 64 20 74 6f 20 61  transformed to a
7810: 6e 20 4f 50 5f 42 6c 6f 62 0a 2a 2a 20 74 68 65  n OP_Blob.** the
7820: 20 66 69 72 73 74 20 74 69 6d 65 20 69 74 20 69   first time it i
7830: 73 20 65 78 65 63 75 74 65 64 2e 0a 2a 2f 0a 63  s executed..*/.c
7840: 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20  ase OP_Blob: {  
7850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7860: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7870: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
7880: 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f  p->p1 <= SQLITE_
7890: 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20  MAX_LENGTH );.  
78a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
78b0: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
78c0: 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  p4.z, pOp->p1, 0
78d0: 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  , 0);.  pOut->en
78e0: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
78f0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
7900: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
7910: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7920: 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32  : Variable P1 P2
7930: 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54   P3 P4 *.**.** T
7940: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
7950: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
7960: 6d 65 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  meters P1..P1+P3
7970: 2d 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  -1 into register
7980: 73 0a 2a 2a 20 50 32 2e 2e 50 32 2b 50 33 2d 31  s.** P2..P2+P3-1
7990: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70  ..**.** If the p
79a0: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65  arameter is name
79b0: 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65  d, then its name
79c0: 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 20 61   appears in P4 a
79d0: 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54 68 65  nd P3==1..** The
79e0: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
79f0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
7a00: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
7a10: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
7a20: 61 72 69 61 62 6c 65 3a 20 7b 0a 20 20 69 6e 74  ariable: {.  int
7a30: 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p1;          /*
7a40: 20 56 61 72 69 61 62 6c 65 20 74 6f 20 63 6f 70   Variable to cop
7a50: 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20  y from */.  int 
7a60: 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p2;          /* 
7a70: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
7a80: 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20   to */.  int n; 
7a90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7aa0: 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 6c 65  ber of values le
7ab0: 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20  ft to copy */.  
7ac0: 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20  Mem *pVar;      
7ad0: 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20   /* Value being 
7ae0: 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a  transferred */..
7af0: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 20 2d    p1 = pOp->p1 -
7b00: 20 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   1;.  p2 = pOp->
7b10: 70 32 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  p2;.  n = pOp->p
7b20: 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3e  3;.  assert( p1>
7b30: 3d 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e  =0 && p1+n<=p->n
7b40: 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Var );.  assert(
7b50: 20 70 32 3e 3d 31 20 26 26 20 70 32 2b 6e 2d 31   p2>=1 && p2+n-1
7b60: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61  <=p->nMem );.  a
7b70: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7b80: 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d  ==0 || pOp->p3==
7b90: 31 20 29 3b 0a 0a 20 20 77 68 69 6c 65 28 20 6e  1 );..  while( n
7ba0: 2d 2d 20 3e 20 30 20 29 7b 0a 20 20 20 20 70 56  -- > 0 ){.    pV
7bb0: 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 31  ar = &p->aVar[p1
7bc0: 2b 2b 5d 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  ++];.    if( sql
7bd0: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
7be0: 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 20  g(pVar) ){.     
7bf0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
7c00: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 20 3d 20     }.    pOut = 
7c10: 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 2b 5d 3b 0a  &p->aMem[p2++];.
7c20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
7c30: 65 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61  emReleaseExterna
7c40: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75  l(pOut);.    pOu
7c50: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
7c60: 75 6c 6c 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ull;.    sqlite3
7c70: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
7c80: 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d  py(pOut, pVar, M
7c90: 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
7ca0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
7cb0: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 7d 0a 20  IZE(pOut);.  }. 
7cc0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7cd0: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
7ce0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f   P3 * *.**.** Mo
7cf0: 76 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  ve the values in
7d00: 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31   register P1..P1
7d10: 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a  +P3-1 over into.
7d20: 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  ** registers P2.
7d30: 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73  .P2+P3-1.  Regis
7d40: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 31 2d 31  ters P1..P1+P1-1
7d50: 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c   are.** left hol
7d60: 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74  ding a NULL.  It
7d70: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
7d80: 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73   register ranges
7d90: 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  .** P1..P1+P3-1 
7da0: 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20  and P2..P2+P3-1 
7db0: 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63  to overlap..*/.c
7dc0: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
7dd0: 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20   char *zMalloc; 
7de0: 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72    /* Holding var
7df0: 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61  iable for alloca
7e00: 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  ted memory */.  
7e10: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
7e20: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
7e30: 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20  gisters left to 
7e40: 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31  copy */.  int p1
7e50: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
7e60: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66  gister to copy f
7e70: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
7e80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
7e90: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
7ea0: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
7eb0: 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  p3;.  p1 = pOp->
7ec0: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
7ed0: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p2;.  assert( n>
7ee0: 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e  0 && p1>0 && p2>
7ef0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
7f00: 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c  1+n<=p2 || p2+n<
7f10: 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d  =p1 );..  pIn1 =
7f20: 20 26 70 2d 3e 61 4d 65 6d 5b 70 31 5d 3b 0a 20   &p->aMem[p1];. 
7f30: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
7f40: 5b 70 32 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e  [p2];.  while( n
7f50: 2d 2d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  -- ){.    assert
7f60: 28 20 70 4f 75 74 3c 3d 26 70 2d 3e 61 4d 65 6d  ( pOut<=&p->aMem
7f70: 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20  [p->nMem] );.   
7f80: 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26   assert( pIn1<=&
7f90: 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d  p->aMem[p->nMem]
7fa0: 20 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20   );.    zMalloc 
7fb0: 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b  = pOut->zMalloc;
7fc0: 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  .    pOut->zMall
7fd0: 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  oc = 0;.    sqli
7fe0: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
7ff0: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20  Out, pIn1);.    
8000: 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pIn1->zMalloc = 
8010: 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47  zMalloc;.    REG
8020: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b  ISTER_TRACE(p2++
8030: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e  , pOut);.    pIn
8040: 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  1++;.    pOut++;
8050: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
8060: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79  ./* Opcode: Copy
8070: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
8080: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
8090: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  f register P1 in
80a0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
80b0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
80c0: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
80d0: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
80e0: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
80f0: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
8100: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
8110: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
8120: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
8130: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
8140: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
8150: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73    /* in1 */.  as
8160: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
8170: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
8180: 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p2<=p->nMem );
8190: 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
81a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
81b0: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
81c0: 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
81d0: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
81e0: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
81f0: 5f 45 70 68 65 6d 29 3b 0a 20 20 44 65 65 70 68  _Ephem);.  Deeph
8200: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
8210: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
8220: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
8230: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8240: 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50   Opcode: SCopy P
8250: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
8260: 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20   Make a shallow 
8270: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
8280: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
8290: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
82a0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
82b0: 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  es a shallow cop
82c0: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
82d0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
82e0: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
82f0: 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63  blob, then the c
8300: 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f  opy is only a po
8310: 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20  inter to the.** 
8320: 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e  original and hen
8330: 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  ce if the origin
8340: 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69  al changes so wi
8350: 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20  ll the copy..** 
8360: 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72  Worse, if the or
8370: 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f  iginal is deallo
8380: 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20  cated, the copy 
8390: 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e  becomes invalid.
83a0: 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f  .** Thus the pro
83b0: 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e  gram must guaran
83c0: 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69  tee that the ori
83d0: 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63  ginal will not c
83e0: 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20  hange.** during 
83f0: 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20  the lifetime of 
8400: 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f  the copy.  Use O
8410: 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61  P_Copy to make a
8420: 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70   complete.** cop
8430: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43  y..*/.case OP_SC
8440: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
8450: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 52 45    /* in1 */.  RE
8460: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
8470: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 61  ->p1, pIn1);.  a
8480: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
8490: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
84a0: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p2<=p->nMem )
84b0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61  ;.  pOut = &p->a
84c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
84d0: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
84e0: 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  n1 );.  sqlite3V
84f0: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
8500: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
8510: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 52 45 47 49  M_Ephem);.  REGI
8520: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
8530: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65  p2, pOut);.  bre
8540: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8550: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
8560: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
8570: 65 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74  e registers P1 t
8580: 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63  hrough P1+P2-1 c
8590: 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20  ontain a single 
85a0: 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74  row of.** result
85b0: 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63  s. This opcode c
85c0: 61 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65  auses the sqlite
85d0: 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f  3_step() call to
85e0: 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69   terminate.** wi
85f0: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57  th an SQLITE_ROW
8600: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64   return code and
8610: 20 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20   it sets up the 
8620: 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20  sqlite3_stmt.** 
8630: 73 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f  structure to pro
8640: 76 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74  vide access to t
8650: 68 65 20 74 6f 70 20 50 31 20 76 61 6c 75 65 73  he top P1 values
8660: 20 61 73 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   as the result.*
8670: 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f  * row..*/.case O
8680: 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20  P_ResultRow: {. 
8690: 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e   Mem *pMem;.  in
86a0: 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t i;.  assert( p
86b0: 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f  ->nResColumn==pO
86c0: 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72  p->p2 );.  asser
86d0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
86e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
86f0: 31 2b 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d  1+pOp->p2<=p->nM
8700: 65 6d 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  em+1 );..  /* If
8710: 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e   the SQLITE_Coun
8720: 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65  tRows flag is se
8730: 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61  t in sqlite3.fla
8740: 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20  gs mask, then . 
8750: 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e   ** DML statemen
8760: 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  ts invoke this o
8770: 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20  pcode to return 
8780: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
8790: 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65  ws .  ** modifie
87a0: 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  d to the user. T
87b0: 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
87c0: 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68  way that a VM th
87d0: 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20  at.  ** opens a 
87e0: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
87f0: 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65  ction may invoke
8800: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20   this opcode..  
8810: 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20  **.  ** In case 
8820: 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73  this is such a s
8830: 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20  tatement, close 
8840: 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72  any statement tr
8850: 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f  ansaction.  ** o
8860: 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d  pened by this VM
8870: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
8880: 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  g control to the
8890: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
88a0: 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68  o.  ** ensure th
88b0: 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  at statement-tra
88c0: 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  nsactions are al
88d0: 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74  ways nested, not
88e0: 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20   overlapping..  
88f0: 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73  ** If the open s
8900: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
8910: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73  tion is not clos
8920: 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68  ed here, then th
8930: 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20  e user.  ** may 
8940: 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20  step another VM 
8950: 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f  that opens its o
8960: 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  wn statement tra
8970: 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20  nsaction. This. 
8980: 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20   ** may lead to 
8990: 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74  overlapping stat
89a0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
89b0: 6e 73 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  ns..  */.  asser
89c0: 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t( p->iStatement
89d0: 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73  ==0 || db->flags
89e0: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
89f0: 73 20 29 3b 0a 20 20 69 66 28 20 53 51 4c 49 54  s );.  if( SQLIT
8a00: 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69  E_OK!=(rc = sqli
8a10: 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74  te3VdbeCloseStat
8a20: 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49  ement(p, SAVEPOI
8a30: 4e 54 5f 52 45 4c 45 41 53 45 29 29 20 29 7b 0a  NT_RELEASE)) ){.
8a40: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
8a50: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
8a60: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
8a70: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
8a80: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
8a90: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
8aa0: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
8ab0: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
8ac0: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
8ad0: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
8ae0: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
8af0: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
8b00: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
8b10: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
8b20: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
8b30: 20 20 2a 2a 20 61 73 20 73 69 64 65 20 65 66 66    ** as side eff
8b40: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
8b50: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
8b60: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
8b70: 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p1];.  for(i=0;
8b80: 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29   i<pOp->p2; i++)
8b90: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
8ba0: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
8bb0: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
8bc0: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 26 70  storeTypeInfo(&p
8bd0: 4d 65 6d 5b 69 5d 2c 20 65 6e 63 6f 64 69 6e 67  Mem[i], encoding
8be0: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
8bf0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c  TRACE(pOp->p1+i,
8c00: 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a   &pMem[i]);.  }.
8c10: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
8c20: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
8c30: 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75  _mem;..  /* Retu
8c40: 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20  rn SQLITE_ROW.  
8c50: 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20  */.  p->pc = pc 
8c60: 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  + 1;.  rc = SQLI
8c70: 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76  TE_ROW;.  goto v
8c80: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
8c90: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74  * Opcode: Concat
8ca0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8cb0: 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74  .** Add the text
8cc0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
8cd0: 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  onto the end of 
8ce0: 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72  the text in.** r
8cf0: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73  egister P2 and s
8d00: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
8d10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
8d20: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65  ** If either the
8d30: 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61   P1 or P2 text a
8d40: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f  re NULL then sto
8d50: 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a  re NULL in P3..*
8d60: 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c  *.**   P3 = P2 |
8d70: 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  | P1.**.** It is
8d80: 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20   illegal for P1 
8d90: 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65  and P3 to be the
8da0: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20   same register. 
8db0: 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66  Sometimes,.** if
8dc0: 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20   P3 is the same 
8dd0: 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20  register as P2, 
8de0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
8df0: 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f  on is able.** to
8e00: 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28   avoid a memcpy(
8e10: 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
8e20: 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ncat: {         
8e30: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
8e40: 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32  CONCAT, in1, in2
8e50: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
8e60: 6e 42 79 74 65 3b 0a 0a 20 20 61 73 73 65 72 74  nByte;..  assert
8e70: 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a  ( pIn1!=pOut );.
8e80: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
8e90: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
8ea0: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
8eb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8ec0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
8ed0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
8ee0: 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
8ef0: 31 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  1);.  Stringify(
8f00: 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
8f10: 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  .  ExpandBlob(pI
8f20: 6e 32 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  n2);.  Stringify
8f30: 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn2, encoding)
8f40: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31  ;.  nByte = pIn1
8f50: 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20  ->n + pIn2->n;. 
8f60: 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
8f70: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
8f80: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
8f90: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
8fa0: 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65    }.  MemSetType
8fb0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53  Flag(pOut, MEM_S
8fc0: 74 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  tr);.  if( sqlit
8fd0: 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
8fe0: 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32  ut, (int)nByte+2
8ff0: 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b  , pOut==pIn2) ){
9000: 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
9010: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 75 74  ;.  }.  if( pOut
9020: 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65  !=pIn2 ){.    me
9030: 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49  mcpy(pOut->z, pI
9040: 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b  n2->z, pIn2->n);
9050: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
9060: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
9070: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
9080: 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  n);.  pOut->z[nB
9090: 79 74 65 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74  yte] = 0;.  pOut
90a0: 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30  ->z[nByte+1] = 0
90b0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
90c0: 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  |= MEM_Term;.  p
90d0: 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
90e0: 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  yte;.  pOut->enc
90f0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
9100: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
9110: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
9120: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9130: 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a 20   Add P1 P2 P3 * 
9140: 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  *.**.** Add the 
9150: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9160: 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
9170: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9180: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
9190: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
91a0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
91b0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
91c0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
91d0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
91e0: 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20  pcode: Multiply 
91f0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
9200: 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74  **.** Multiply t
9210: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9220: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
9230: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9240: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
9250: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
9260: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
9270: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
9280: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
9290: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
92a0: 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61  * Opcode: Subtra
92b0: 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ct P1 P2 P3 * *.
92c0: 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74  **.** Subtract t
92d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
92e0: 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65  ster P1 from the
92f0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
9300: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
9310: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
9320: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
9330: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
9340: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
9350: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
9360: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69  ./* Opcode: Divi
9370: 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
9380: 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65  **.** Divide the
9390: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
93a0: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
93b0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
93c0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
93d0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
93e0: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 74 68  ister P3.  If th
93f0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9400: 74 65 72 20 50 32 0a 2a 2a 20 69 73 20 7a 65 72  ter P2.** is zer
9410: 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  o, then the resu
9420: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49  lt is NULL..** I
9430: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
9440: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
9450: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
9460: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e  * Opcode: Remain
9470: 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  der P1 P2 P3 * *
9480: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74  .**.** Compute t
9490: 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74  he remainder aft
94a0: 65 72 20 69 6e 74 65 67 65 72 20 64 69 76 69 73  er integer divis
94b0: 69 6f 6e 20 6f 66 20 74 68 65 20 76 61 6c 75 65  ion of the value
94c0: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
94d0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
94e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61  in register P2 a
94f0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9500: 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a 2a 20 49  ult in P3. .** I
9510: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
9520: 65 67 69 73 74 65 72 20 50 32 20 69 73 20 7a 65  egister P2 is ze
9530: 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ro the result is
9540: 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74   NULL..** If eit
9550: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
9560: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
9570: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
9580: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
9590: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
95a0: 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69  me as TK_PLUS, i
95b0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
95c0: 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63  .case OP_Subtrac
95d0: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
95e0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49  /* same as TK_MI
95f0: 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  NUS, in1, in2, o
9600: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  ut3 */.case OP_M
9610: 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20  ultiply:        
9620: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
9630: 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69   TK_STAR, in1, i
9640: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
9650: 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20   OP_Divide:     
9660: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
9670: 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20  me as TK_SLASH, 
9680: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
9690: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e  /.case OP_Remain
96a0: 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  der: {          
96b0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
96c0: 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  EM, in1, in2, ou
96d0: 74 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67  t3 */.  int flag
96e0: 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69  s;      /* Combi
96f0: 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20  ned MEM_* flags 
9700: 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73  from both inputs
9710: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
9720: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
9730: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
9740: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
9750: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
9760: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
9770: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
9780: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
9790: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
97a0: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
97b0: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
97c0: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
97d0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
97e0: 72 61 6e 64 20 2a 2f 0a 0a 20 20 61 70 70 6c 79  rand */..  apply
97f0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
9800: 70 49 6e 31 29 3b 0a 20 20 61 70 70 6c 79 4e 75  pIn1);.  applyNu
9810: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
9820: 6e 32 29 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70  n2);.  flags = p
9830: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
9840: 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  2->flags;.  if( 
9850: 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  (flags & MEM_Nul
9860: 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  l)!=0 ) goto ari
9870: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
9880: 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70  s_null;.  if( (p
9890: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e  In1->flags & pIn
98a0: 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
98b0: 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a  nt)==MEM_Int ){.
98c0: 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75      iA = pIn1->u
98d0: 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e  .i;.    iB = pIn
98e0: 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74  2->u.i;.    swit
98f0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
9900: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
9910: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 69 42  _Add:         iB
9920: 20 2b 3d 20 69 41 3b 20 20 20 20 20 20 20 62 72   += iA;       br
9930: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
9940: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
9950: 69 42 20 2d 3d 20 69 41 3b 20 20 20 20 20 20 20  iB -= iA;       
9960: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9970: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
9980: 20 20 69 42 20 2a 3d 20 69 41 3b 20 20 20 20 20    iB *= iA;     
9990: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
99a0: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
99b0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
99c0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
99d0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
99e0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  ull;.        /* 
99f0: 44 69 76 69 64 69 6e 67 20 74 68 65 20 6c 61 72  Dividing the lar
9a00: 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 6e 65  gest possible ne
9a10: 67 61 74 69 76 65 20 36 34 2d 62 69 74 20 69 6e  gative 64-bit in
9a20: 74 65 67 65 72 20 28 31 3c 3c 36 33 29 20 62 79  teger (1<<63) by
9a30: 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 2d 31 20   .        ** -1 
9a40: 72 65 74 75 72 6e 73 20 61 6e 20 69 6e 74 65 67  returns an integ
9a50: 65 72 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20  er too large to 
9a60: 73 74 6f 72 65 20 69 6e 20 61 20 36 34 2d 62 69  store in a 64-bi
9a70: 74 20 64 61 74 61 2d 74 79 70 65 2e 20 4f 6e 0a  t data-type. On.
9a80: 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 6d 65 20          ** some 
9a90: 61 72 63 68 69 74 65 63 74 75 72 65 73 2c 20 74  architectures, t
9aa0: 68 65 20 76 61 6c 75 65 20 6f 76 65 72 66 6c 6f  he value overflo
9ab0: 77 73 20 74 6f 20 28 31 3c 3c 36 33 29 2e 20 4f  ws to (1<<63). O
9ac0: 6e 20 6f 74 68 65 72 73 2c 0a 20 20 20 20 20 20  n others,.      
9ad0: 20 20 2a 2a 20 61 20 53 49 47 46 50 45 20 69 73    ** a SIGFPE is
9ae0: 20 69 73 73 75 65 64 2e 20 54 68 65 20 66 6f 6c   issued. The fol
9af0: 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
9b00: 20 6e 6f 72 6d 61 6c 69 7a 65 73 20 74 68 69 73   normalizes this
9b10: 0a 20 20 20 20 20 20 20 20 2a 2a 20 62 65 68 61  .        ** beha
9b20: 76 69 6f 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  vior so that all
9b30: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 20 62   architectures b
9b40: 65 68 61 76 65 20 61 73 20 69 66 20 69 6e 74 65  ehave as if inte
9b50: 67 65 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  ger .        ** 
9b60: 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72 72 65  overflow occurre
9b70: 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  d..        */.  
9b80: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
9b90: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
9ba0: 5f 49 4e 54 36 34 20 29 20 69 41 20 3d 20 31 3b  _INT64 ) iA = 1;
9bb0: 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69  .        iB /= i
9bc0: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
9bd0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
9be0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
9bf0: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
9c00: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
9c10: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
9c20: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
9c30: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
9c40: 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20      iB %= iA;.  
9c50: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9c60: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
9c70: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20  Out->u.i = iB;. 
9c80: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
9c90: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
9ca0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
9cb0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
9cc0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
9cd0: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
9ce0: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
9cf0: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
9d00: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
9d10: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
9d20: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
9d30: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
9d40: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
9d50: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
9d60: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
9d70: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
9d80: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
9d90: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
9da0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
9db0: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
9dc0: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
9dd0: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
9de0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
9df0: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
9e00: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
9e10: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
9e20: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
9e30: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
9e40: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
9e50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9e60: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
9e70: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
9e80: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
9e90: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
9ea0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
9eb0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
9ec0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
9ed0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
9ee0: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
9ef0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
9f00: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
9f10: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
9f20: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
9f30: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73     if( sqlite3Is
9f40: 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20  NaN(rB) ){.     
9f50: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
9f60: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
9f70: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
9f80: 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d  >r = rB;.    Mem
9f90: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
9fa0: 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20  , MEM_Real);.   
9fb0: 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45   if( (flags & ME
9fc0: 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
9fd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49      sqlite3VdbeI
9fe0: 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70  ntegerAffinity(p
9ff0: 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Out);.    }.  }.
a000: 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d    break;..arithm
a010: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
a020: 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  ull:.  sqlite3Vd
a030: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
a040: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
a050: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53  /* Opcode: CollS
a060: 65 71 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20  eq * * P4.**.** 
a070: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
a080: 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72  to a CollSeq str
a090: 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74  uct. If the next
a0a0: 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20   call to a user 
a0b0: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61  function.** or a
a0c0: 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73  ggregate calls s
a0d0: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
a0e0: 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c  lSeq(), this col
a0f0: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
a100: 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72  will.** be retur
a110: 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ned. This is use
a120: 64 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69  d by the built-i
a130: 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61  n min(), max() a
a140: 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66  nd nullif().** f
a150: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
a160: 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73  The interface us
a170: 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d  ed by the implem
a180: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
a190: 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66  aforementioned f
a1a0: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72  unctions.** to r
a1b0: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c  etrieve the coll
a1c0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73  ation sequence s
a1d0: 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  et by this opcod
a1e0: 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  e is not availab
a1f0: 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20  le.** publicly, 
a200: 6f 6e 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e  only to user fun
a210: 63 74 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69  ctions defined i
a220: 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73  n func.c..*/.cas
a230: 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a  e OP_CollSeq: {.
a240: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
a250: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
a260: 51 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Q );.  break;.}.
a270: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63  ./* Opcode: Func
a280: 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34  tion P1 P2 P3 P4
a290: 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65   P5.**.** Invoke
a2a0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
a2b0: 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65   (P4 is a pointe
a2c0: 72 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20  r to a Function 
a2d0: 73 74 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a  structure that.*
a2e0: 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 75  * defines the fu
a2f0: 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20  nction) with P5 
a300: 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20  arguments taken 
a310: 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
a320: 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f   and.** successo
a330: 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  rs.  The result 
a340: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
a350: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
a360: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67  ister P3..** Reg
a370: 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f  ister P3 must no
a380: 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  t be one of the 
a390: 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e  function inputs.
a3a0: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33  .**.** P1 is a 3
a3b0: 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e  2-bit bitmask in
a3c0: 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
a3d0: 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67   or not each arg
a3e0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a  ument to the .**
a3f0: 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65   function was de
a400: 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63  termined to be c
a410: 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69  onstant at compi
a420: 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20  le time. If the 
a430: 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
a440: 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74  t was constant t
a450: 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20  hen bit 0 of P1 
a460: 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73 20  is set. This is 
a470: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
a480: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74  e.** whether met
a490: 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65  a data associate
a4a0: 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66 75  d with a user fu
a4b0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
a4c0: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c  using the.** sql
a4d0: 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61  ite3_set_auxdata
a4e0: 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73 61  () API may be sa
a4f0: 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e  fely retained un
a500: 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20  til the next.** 
a510: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
a520: 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  is opcode..**.**
a530: 20 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74   See also: AggSt
a540: 65 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a  ep and AggFinal.
a550: 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74  */.case OP_Funct
a560: 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  ion: {.  int i;.
a570: 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73    Mem *pArg;.  s
a580: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
a590: 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
a5a0: 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69  lue **apVal;.  i
a5b0: 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  nt n;..  n = pOp
a5c0: 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20  ->p5;.  apVal = 
a5d0: 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
a5e0: 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
a5f0: 30 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  0 );..  assert( 
a600: 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
a610: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
a620: 3d 70 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20  =p->nMem+1) );. 
a630: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
a640: 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d  <pOp->p2 || pOp-
a650: 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29  >p3>=pOp->p2+n )
a660: 3b 0a 20 20 70 41 72 67 20 3d 20 26 70 2d 3e 61  ;.  pArg = &p->a
a670: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
a680: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
a690: 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20  +, pArg++){.    
a6a0: 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b  apVal[i] = pArg;
a6b0: 0a 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e  .    storeTypeIn
a6c0: 66 6f 28 70 41 72 67 2c 20 65 6e 63 6f 64 69 6e  fo(pArg, encodin
a6d0: 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  g);.    REGISTER
a6e0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
a6f0: 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73  pArg);.  }..  as
a700: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
a710: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c  e==P4_FUNCDEF ||
a720: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
a730: 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a 20 20 69  _VDBEFUNC );.  i
a740: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
a750: 50 34 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20 20  P4_FUNCDEF ){.  
a760: 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
a770: 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20  p->p4.pFunc;.   
a780: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d   ctx.pVdbeFunc =
a790: 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
a7a0: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d   ctx.pVdbeFunc =
a7b0: 20 28 56 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d   (VdbeFunc*)pOp-
a7c0: 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20  >p4.pVdbeFunc;. 
a7d0: 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 63     ctx.pFunc = c
a7e0: 74 78 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70 46  tx.pVdbeFunc->pF
a7f0: 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  unc;.  }..  asse
a800: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
a810: 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
a820: 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70  m );.  pOut = &p
a830: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
a840: 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d  .  ctx.s.flags =
a850: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78   MEM_Null;.  ctx
a860: 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74  .s.db = db;.  ct
a870: 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  x.s.xDel = 0;.  
a880: 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20  ctx.s.zMalloc = 
a890: 30 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74  0;..  /* The out
a8a0: 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72  put cell may alr
a8b0: 65 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66  eady have a buff
a8c0: 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f  er allocated. Mo
a8d0: 76 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e  ve.  ** the poin
a8e0: 74 65 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20  ter to ctx.s so 
a8f0: 69 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72  in case the user
a900: 2d 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73  -function can us
a910: 65 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61  e.  ** the alrea
a920: 64 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  dy allocated buf
a930: 66 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61  fer instead of a
a940: 6c 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20  llocating a new 
a950: 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  one..  */.  sqli
a960: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
a970: 63 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20  ctx.s, pOut);.  
a980: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26  MemSetTypeFlag(&
a990: 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  ctx.s, MEM_Null)
a9a0: 3b 0a 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  ;..  ctx.isError
a9b0: 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e   = 0;.  if( ctx.
a9c0: 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53  pFunc->flags & S
a9d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
a9e0: 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72  OLL ){.    asser
a9f0: 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b  t( pOp>p->aOp );
aa00: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
aa10: 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f  [-1].p4type==P4_
aa20: 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61  COLLSEQ );.    a
aa30: 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
aa40: 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
aa50: 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f  q );.    ctx.pCo
aa60: 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  ll = pOp[-1].p4.
aa70: 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 69 66 28  pColl;.  }.  if(
aa80: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
aa90: 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
aaa0: 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
aab0: 3b 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d  ;.  (*ctx.pFunc-
aac0: 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c  >xFunc)(&ctx, n,
aad0: 20 61 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 73   apVal);.  if( s
aae0: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
aaf0: 62 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  b) ){.    sqlite
ab00: 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
ab10: 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74  &ctx.s);.    got
ab20: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
ab30: 69 73 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28  isuse;.  }.  if(
ab40: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
ab50: 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e  d ){.    /* Even
ab60: 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63   though a malloc
ab70: 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74  () has failed, t
ab80: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
ab90: 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  n of the.    ** 
aba0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61  user function ma
abb0: 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e  y have called an
abc0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
abd0: 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  XXX() function. 
abe0: 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20     ** to return 
abf0: 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c  a value. The fol
ac00: 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65  lowing call rele
ac10: 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63  ases any resourc
ac20: 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69  es.    ** associ
ac30: 61 74 65 64 20 77 69 74 68 20 73 75 63 68 20 61  ated with such a
ac40: 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2a 0a 20   value..    **. 
ac50: 20 20 20 2a 2a 20 4e 6f 74 65 3a 20 4d 61 79 62     ** Note: Mayb
ac60: 65 20 4d 65 6d 52 65 6c 65 61 73 65 28 29 20 73  e MemRelease() s
ac70: 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20  hould be called 
ac80: 69 66 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  if sqlite3Safety
ac90: 4f 6e 28 29 0a 20 20 20 20 2a 2a 20 66 61 69 6c  On().    ** fail
aca0: 73 20 61 6c 73 6f 20 28 74 68 65 20 69 66 28 2e  s also (the if(.
acb0: 2e 2e 29 20 73 74 61 74 65 6d 65 6e 74 20 61 62  ..) statement ab
acc0: 6f 76 65 29 2e 20 42 75 74 20 69 66 20 70 65 6f  ove). But if peo
acd0: 70 6c 65 20 61 72 65 0a 20 20 20 20 2a 2a 20 6d  ple are.    ** m
ace0: 69 73 75 73 69 6e 67 20 73 71 6c 69 74 65 2c 20  isusing sqlite, 
acf0: 74 68 65 79 20 68 61 76 65 20 62 69 67 67 65 72  they have bigger
ad00: 20 70 72 6f 62 6c 65 6d 73 20 74 68 61 6e 20 61   problems than a
ad10: 20 6c 65 61 6b 65 64 20 76 61 6c 75 65 2e 0a 20   leaked value.. 
ad20: 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
ad30: 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
ad40: 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74  &ctx.s);.    got
ad50: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20  o no_mem;.  }.. 
ad60: 20 2f 2a 20 49 66 20 61 6e 79 20 61 75 78 69 6c   /* If any auxil
ad70: 69 61 72 79 20 64 61 74 61 20 66 75 6e 63 74 69  iary data functi
ad80: 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20 63 61  ons have been ca
ad90: 6c 6c 65 64 20 62 79 20 74 68 69 73 20 75 73 65  lled by this use
ada0: 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a  r function,.  **
adb0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63 61 6c   immediately cal
adc0: 6c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  l the destructor
add0: 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61   for any non-sta
ade0: 74 69 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f  tic values..  */
adf0: 0a 20 20 69 66 28 20 63 74 78 2e 70 56 64 62 65  .  if( ctx.pVdbe
ae00: 46 75 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  Func ){.    sqli
ae10: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
ae20: 44 61 74 61 28 63 74 78 2e 70 56 64 62 65 46 75  Data(ctx.pVdbeFu
ae30: 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  nc, pOp->p1);.  
ae40: 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46    pOp->p4.pVdbeF
ae50: 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46  unc = ctx.pVdbeF
ae60: 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  unc;.    pOp->p4
ae70: 74 79 70 65 20 3d 20 50 34 5f 56 44 42 45 46 55  type = P4_VDBEFU
ae80: 4e 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  NC;.  }..  /* If
ae90: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65   the function re
aea0: 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c  turned an error,
aeb0: 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
aec0: 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78  ion */.  if( ctx
aed0: 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
aee0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
aef0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
af00: 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
af10: 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e  value_text(&ctx.
af20: 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74  s));.    rc = ct
af30: 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a  x.isError;.  }..
af40: 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65    /* Copy the re
af50: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
af60: 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tion into regist
af70: 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74  er P3 */.  sqlit
af80: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
af90: 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63  ding(&ctx.s, enc
afa0: 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65  oding);.  sqlite
afb0: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75  3VdbeMemMove(pOu
afc0: 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66  t, &ctx.s);.  if
afd0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
afe0: 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a  TooBig(pOut) ){.
aff0: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
b000: 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52  ;.  }.  REGISTER
b010: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
b020: 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
b030: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
b040: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
b050: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e  /* Opcode: BitAn
b060: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
b070: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
b080: 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68  t-wise AND of th
b090: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
b0a0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
b0b0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
b0c0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b0d0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b0e0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b0f0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b100: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b110: 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32  ode: BitOr P1 P2
b120: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61   P3 * *.**.** Ta
b130: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
b140: 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
b150: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b160: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
b170: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b180: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b190: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b1a0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b1b0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b1c0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
b1d0: 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20  ftLeft P1 P2 P3 
b1e0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  * *.**.** Shift 
b1f0: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
b200: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b210: 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20   to the left by 
b220: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
b230: 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20   bits specified 
b240: 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  by the integer i
b250: 6e 20 72 65 67 69 73 65 72 20 50 31 2e 0a 2a 2a  n regiser P1..**
b260: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
b270: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b280: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b290: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b2a0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b2b0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b2c0: 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32  ShiftRight P1 P2
b2d0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68   P3 * *.**.** Sh
b2e0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
b2f0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b300: 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68  r P2 to the righ
b310: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
b320: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
b330: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
b340: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
b350: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
b360: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b370: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b380: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b390: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b3a0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
b3b0: 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20  OP_BitAnd:      
b3c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b3d0: 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c  me as TK_BITAND,
b3e0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b3f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72  */.case OP_BitOr
b400: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b410: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b420: 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32  _BITOR, in1, in2
b430: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b440: 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20  P_ShiftLeft:    
b450: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b460: 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20  e as TK_LSHIFT, 
b470: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b480: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52  /.case OP_ShiftR
b490: 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ight: {         
b4a0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b4b0: 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  RSHIFT, in1, in2
b4c0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
b4d0: 61 3b 0a 20 20 69 36 34 20 62 3b 0a 0a 20 20 69  a;.  i64 b;..  i
b4e0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
b4f0: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
b500: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
b510: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
b520: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
b530: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 61    break;.  }.  a
b540: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
b550: 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
b560: 62 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  b = sqlite3VdbeI
b570: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
b580: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
b590: 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65  code ){.    case
b5a0: 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20   OP_BitAnd:     
b5b0: 20 61 20 26 3d 20 62 3b 20 20 20 20 20 62 72 65   a &= b;     bre
b5c0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
b5d0: 42 69 74 4f 72 3a 20 20 20 20 20 20 20 61 20 7c  BitOr:       a |
b5e0: 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  = b;     break;.
b5f0: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 68 69 66      case OP_Shif
b600: 74 4c 65 66 74 3a 20 20 20 61 20 3c 3c 3d 20 62  tLeft:   a <<= b
b610: 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ;    break;.    
b620: 64 65 66 61 75 6c 74 3a 20 20 61 73 73 65 72 74  default:  assert
b630: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
b640: 50 5f 53 68 69 66 74 52 69 67 68 74 20 29 3b 0a  P_ShiftRight );.
b650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b660: 20 20 20 20 20 20 20 20 20 61 20 3e 3e 3d 20 62           a >>= b
b670: 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  ;    break;.  }.
b680: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 61 3b    pOut->u.i = a;
b690: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
b6a0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
b6b0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
b6c0: 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20   Opcode: AddImm 
b6d0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
b6e0: 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  .** Add the cons
b6f0: 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76  tant P2 to the v
b700: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b710: 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75   P1..** The resu
b720: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20  lt is always an 
b730: 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  integer..**.** T
b740: 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69  o force any regi
b750: 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e  ster to be an in
b760: 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20  teger, just add 
b770: 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  0..*/.case OP_Ad
b780: 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  dImm: {         
b790: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 73     /* in1 */.  s
b7a0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
b7b0: 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
b7c0: 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
b7d0: 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p2;.  break;.
b7e0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  }../* Opcode: Mu
b7f0: 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20  stBeInt P1 P2 * 
b800: 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65  * *.** .** Force
b810: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b820: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
b830: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
b840: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
b850: 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P1 is not an int
b860: 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20  eger and cannot 
b870: 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
b880: 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  o an integer.** 
b890: 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73  without data los
b8a0: 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  s, then jump imm
b8b0: 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20  ediately to P2, 
b8c0: 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72  or if P2==0.** r
b8d0: 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d  aise an SQLITE_M
b8e0: 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f  ISMATCH exceptio
b8f0: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  n..*/.case OP_Mu
b900: 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20  stBeInt: {      
b910: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
b920: 6e 31 20 2a 2f 0a 20 20 61 70 70 6c 79 41 66 66  n1 */.  applyAff
b930: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
b940: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
b950: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28  encoding);.  if(
b960: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
b970: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
b980: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
b990: 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
b9a0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b  SQLITE_MISMATCH;
b9b0: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
b9c0: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
b9d0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b9e0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
b9f0: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
ba00: 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
ba10: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49  Flag(pIn1, MEM_I
ba20: 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
ba30: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
ba40: 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20  RealAffinity P1 
ba50: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  * * * *.**.** If
ba60: 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c   register P1 hol
ba70: 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f  ds an integer co
ba80: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65  nvert it to a re
ba90: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20  al value..**.** 
baa0: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
bab0: 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74  sed when extract
bac0: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
bad0: 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68  from a column th
bae0: 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61  at.** has REAL a
baf0: 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63  ffinity.  Such c
bb00: 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79  olumn values may
bb10: 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64   still be stored
bb20: 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c   as.** integers,
bb30: 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63   for space effic
bb40: 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72  iency, but after
bb50: 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77   extraction we w
bb60: 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68  ant them.** to h
bb70: 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20  ave only a real 
bb80: 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
bb90: 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20  P_RealAffinity: 
bba0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
bbb0: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69     /* in1 */.  i
bbc0: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
bbd0: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
bbe0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
bbf0: 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  alify(pIn1);.  }
bc00: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
bc10: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
bc20: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
bc30: 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a   ToText P1 * * *
bc40: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
bc50: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bc60: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 65  ster P1 to be te
bc70: 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  xt..** If the va
bc80: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
bc90: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
bca0: 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65  string using the
bcb0: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
bcc0: 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f  f printf().  Blo
bcd0: 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63  b values are unc
bce0: 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72  hanged and.** ar
bcf0: 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69 6d  e afterwards sim
bd00: 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20  ply interpreted 
bd10: 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41  as text..**.** A
bd20: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
bd30: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
bd40: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
bd50: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
bd60: 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a  .case OP_ToText:
bd70: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
bd80: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
bd90: 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a  K_TO_TEXT, in1 *
bda0: 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  /.  if( pIn1->fl
bdb0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
bdc0: 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74   break;.  assert
bdd0: 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f  ( MEM_Str==(MEM_
bde0: 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49  Blob>>3) );.  pI
bdf0: 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49  n1->flags |= (pI
be00: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c  n1->flags&MEM_Bl
be10: 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41  ob)>>3;.  applyA
be20: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
be30: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65  LITE_AFF_TEXT, e
be40: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d  ncoding);.  rc =
be50: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
be60: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
be70: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  1->flags & MEM_S
be80: 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  tr || db->malloc
be90: 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31  Failed );.  pIn1
bea0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
beb0: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
bec0: 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29  M_Blob|MEM_Zero)
bed0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
bee0: 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
bef0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
bf00: 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31 20  code: ToBlob P1 
bf10: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
bf20: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
bf30: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
bf40: 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66  be a BLOB..** If
bf50: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75   the value is nu
bf60: 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69  meric, convert i
bf70: 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 66 69  t to a string fi
bf80: 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20  rst..** Strings 
bf90: 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69 6e 74  are simply reint
bfa0: 65 72 70 72 65 74 65 64 20 61 73 20 62 6c 6f 62  erpreted as blob
bfb0: 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e 67 65  s with no change
bfc0: 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64 65 72  .** to the under
bfd0: 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a  lying data..**.*
bfe0: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
bff0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
c000: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
c010: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
c020: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c  .*/.case OP_ToBl
c030: 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ob: {           
c040: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c050: 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e  s TK_TO_BLOB, in
c060: 31 20 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d  1 */.  if( pIn1-
c070: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
c080: 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28  l ) break;.  if(
c090: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c0a0: 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
c0b0: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
c0c0: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
c0d0: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
c0e0: 67 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  g);.    assert( 
c0f0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c100: 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c  M_Str || db->mal
c110: 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
c120: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c130: 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pIn1, MEM_Blob);
c140: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
c150: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
c160: 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d  EM_TypeMask&~MEM
c170: 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50  _Blob);.  }.  UP
c180: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
c190: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
c1a0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c1b0: 54 6f 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a  ToNumeric P1 * *
c1c0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
c1d0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
c1e0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
c1f0: 6e 75 6d 65 72 69 63 20 28 65 69 74 68 65 72 20  numeric (either 
c200: 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72  an.** integer or
c210: 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e   a floating-poin
c220: 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66  t number.).** If
c230: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65   the value is te
c240: 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20  xt or blob, try 
c250: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
c260: 20 61 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a   an using the.**
c270: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61   equivalent of a
c280: 74 6f 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20  toi() or atof() 
c290: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
c2a0: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
c2b0: 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c  n .** is possibl
c2c0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
c2d0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c2e0: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c2f0: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c300: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c310: 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20  OP_ToNumeric: { 
c320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c330: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
c340: 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a  O_NUMERIC, in1 *
c350: 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
c360: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 4e 75 6c 6c  lags & (MEM_Null
c370: 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  |MEM_Int|MEM_Rea
c380: 6c 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  l))==0 ){.    sq
c390: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65  lite3VdbeMemNume
c3a0: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  rify(pIn1);.  }.
c3b0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
c3c0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
c3d0: 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  _CAST */../* Opc
c3e0: 6f 64 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20  ode: ToInt P1 * 
c3f0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
c400: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
c410: 65 67 69 73 74 65 72 20 50 31 20 62 65 20 61 6e  egister P1 be an
c420: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a   integer.  If.**
c430: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
c440: 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e  rrently a real n
c450: 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20  umber, drop its 
c460: 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e  fractional part.
c470: 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
c480: 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62   is text or blob
c490: 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  , try to convert
c4a0: 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65   it to an intege
c4b0: 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  r using the.** e
c4c0: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
c4d0: 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20  i() and store 0 
c4e0: 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65  if no such conve
c4f0: 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c  rsion is possibl
c500: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  e..**.** A NULL 
c510: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
c520: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
c530: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
c540: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c550: 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20  OP_ToInt: {     
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c570: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e  same as TK_TO_IN
c580: 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20  T, in1 */.  if( 
c590: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
c5a0: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
c5b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
c5c0: 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
c5d0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c5e0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
c5f0: 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f  E_OMIT_CAST./* O
c600: 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31  pcode: ToReal P1
c610: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
c620: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
c630: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
c640: 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   be a floating p
c650: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20  oint number..** 
c660: 49 66 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  If The value is 
c670: 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74  currently an int
c680: 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74  eger, convert it
c690: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
c6a0: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
c6b0: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
c6c0: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
c6d0: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
c6e0: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
c6f0: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
c700: 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f  .0 if no such co
c710: 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73  nversion is poss
c720: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
c730: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
c740: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
c750: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
c760: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
c770: 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20  se OP_ToReal: { 
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c790: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
c7a0: 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20  O_REAL, in1 */. 
c7b0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
c7c0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
c7d0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c7e0: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49  dbeMemRealify(pI
c7f0: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
c800: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
c810: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
c820: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
c830: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
c840: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68  **.** Compare th
c850: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
c860: 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20  ster P1 and P3. 
c870: 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28   If reg(P3)<reg(
c880: 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70  P1) then.** jump
c890: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20   to address P2. 
c8a0: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53   .**.** If the S
c8b0: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
c8c0: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
c8d0: 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67  t and either reg
c8e0: 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50  (P1) or.** reg(P
c8f0: 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  3) is NULL then 
c900: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20  take the jump.  
c910: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
c920: 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74  MPIFNULL .** bit
c930: 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66   is clear then f
c940: 61 6c 6c 20 74 68 72 75 20 69 66 20 65 69 74 68  all thru if eith
c950: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
c960: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  LL..**.** The SQ
c970: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
c980: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
c990: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
c9a0: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
c9b0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
c9c0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
c9d0: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
c9e0: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
c9f0: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
ca00: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
ca10: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
ca20: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
ca30: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
ca40: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
ca50: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
ca60: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
ca70: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
ca80: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
ca90: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
caa0: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
cab0: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
cac0: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
cad0: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
cae0: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
caf0: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
cb00: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
cb10: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
cb20: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
cb30: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
cb40: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
cb50: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
cb60: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
cb70: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
cb80: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
cb90: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
cba0: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
cbb0: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
cbc0: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
cbd0: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
cbe0: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
cbf0: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
cc00: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
cc10: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
cc20: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
cc30: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
cc40: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75  d in.** P4 is  u
cc50: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
cc60: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
cc70: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
cc80: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
cc90: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
cca0: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
ccb0: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
ccc0: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
ccd0: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
cce0: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
ccf0: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
cd00: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
cd10: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
cd20: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
cd30: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
cd40: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
cd50: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
cd60: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
cd70: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
cd80: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
cd90: 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20  ITE_STOREP2 bit 
cda0: 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
cdb0: 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20  en do not jump. 
cdc0: 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f   Instead,.** sto
cdd0: 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73  re a boolean res
cde0: 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f  ult (either 0, o
cdf0: 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e  r 1, or NULL) in
ce00: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
ce10: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50  ./* Opcode: Ne P
ce20: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
ce30: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
ce40: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
ce50: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
ce60: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
ce70: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
ce80: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
ce90: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
cea0: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
ceb0: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
cec0: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
ced0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
cee0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71  */./* Opcode: Eq
cef0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
cf00: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
cf10: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
cf20: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
cf30: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
cf40: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
cf50: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
cf60: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
cf70: 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53   are equal..** S
cf80: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
cf90: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
cfa0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
cfb0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31  /* Opcode: Le P1
cfc0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
cfd0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
cfe0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
cff0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
d000: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
d010: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
d020: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
d030: 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61  r P3 is less tha
d040: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
d050: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
d060: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
d070: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d080: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
d090: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
d0a0: 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20  * Opcode: Gt P1 
d0b0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
d0c0: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
d0d0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
d0e0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
d0f0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
d100: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
d110: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
d120: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
d130: 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  han the content 
d140: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
d150: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
d160: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
d170: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
d180: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
d190: 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ge P1 P2 P3 P4 P
d1a0: 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  5.**.** This wor
d1b0: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
d1c0: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
d1d0: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
d1e0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
d1f0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
d200: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
d210: 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
d220: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
d230: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
d240: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
d250: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
d260: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
d270: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  on..*/.case OP_E
d280: 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q:              
d290: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45   /* same as TK_E
d2a0: 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  Q, jump, in1, in
d2b0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a  3 */.case OP_Ne:
d2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d2d0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c  * same as TK_NE,
d2e0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
d2f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20  */.case OP_Lt:  
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d310: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a  same as TK_LT, j
d320: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
d330: 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20  .case OP_Le:    
d340: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d350: 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d  me as TK_LE, jum
d360: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
d370: 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20  ase OP_Gt:      
d380: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d390: 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c   as TK_GT, jump,
d3a0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
d3b0: 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20  e OP_Ge: {      
d3c0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d3d0: 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69  s TK_GE, jump, i
d3e0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
d3f0: 20 66 6c 61 67 73 3b 0a 20 20 69 6e 74 20 72 65   flags;.  int re
d400: 73 3b 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  s;.  char affini
d410: 74 79 3b 0a 0a 20 20 66 6c 61 67 73 20 3d 20 70  ty;..  flags = p
d420: 49 6e 31 2d 3e 66 6c 61 67 73 7c 70 49 6e 33 2d  In1->flags|pIn3-
d430: 3e 66 6c 61 67 73 3b 0a 0a 20 20 69 66 28 20 66  >flags;..  if( f
d440: 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  lags&MEM_Null ){
d450: 0a 20 20 20 20 2f 2a 20 49 66 20 65 69 74 68 65  .    /* If eithe
d460: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
d470: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
d480: 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c  t is always NULL
d490: 2e 0a 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d  ..    ** The jum
d4a0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
d4b0: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
d4c0: 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a  ULL bit is set..
d4d0: 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70      */.    if( p
d4e0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
d4f0: 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20  STOREP2 ){.     
d500: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
d510: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
d520: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
d530: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
d540: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
d550: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
d560: 4f 75 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  Out);.    }else 
d570: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
d580: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
d590: 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
d5a0: 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20  p->p2-1;.    }. 
d5b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
d5c0: 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d   affinity = pOp-
d5d0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46  >p5 & SQLITE_AFF
d5e0: 5f 4d 41 53 4b 3b 0a 20 20 69 66 28 20 61 66 66  _MASK;.  if( aff
d5f0: 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 61 70 70  inity ){.    app
d600: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
d610: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64   affinity, encod
d620: 69 6e 67 29 3b 0a 20 20 20 20 61 70 70 6c 79 41  ing);.    applyA
d630: 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66  ffinity(pIn3, af
d640: 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67  finity, encoding
d650: 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d  );.    if( db->m
d660: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
d670: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
d680: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
d690: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
d6a0: 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  Q || pOp->p4.pCo
d6b0: 6c 6c 3d 3d 30 20 29 3b 0a 20 20 45 78 70 61 6e  ll==0 );.  Expan
d6c0: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 45  dBlob(pIn1);.  E
d6d0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b  xpandBlob(pIn3);
d6e0: 0a 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33  .  res = sqlite3
d6f0: 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c  MemCompare(pIn3,
d700: 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70   pIn1, pOp->p4.p
d710: 43 6f 6c 6c 29 3b 0a 20 20 73 77 69 74 63 68 28  Coll);.  switch(
d720: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
d730: 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20      case OP_Eq: 
d740: 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b     res = res==0;
d750: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
d760: 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72  case OP_Ne:    r
d770: 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20  es = res!=0;    
d780: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
d790: 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d   OP_Lt:    res =
d7a0: 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65   res<0;      bre
d7b0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
d7c0: 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Le:    res = res
d7d0: 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  <=0;     break;.
d7e0: 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20      case OP_Gt: 
d7f0: 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20     res = res>0; 
d800: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
d810: 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72  default:       r
d820: 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20  es = res>=0;    
d830: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69   break;.  }..  i
d840: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
d850: 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
d860: 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d     pOut = &p->aM
d870: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
d880: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
d890: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
d8a0: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
d8b0: 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45  res;.    REGISTE
d8c0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
d8d0: 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20   pOut);.  }else 
d8e0: 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
d8f0: 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20  c = pOp->p2-1;. 
d900: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
d910: 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74  * Opcode: Permut
d920: 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  ation * * * P4 *
d930: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70  .**.** Set the p
d940: 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20  ermutation used 
d950: 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
d960: 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65  e operator to be
d970: 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66   the array.** of
d980: 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e   integers in P4.
d990: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75  .**.** The permu
d9a0: 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76  tation is only v
d9b0: 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  alid until the n
d9c0: 65 78 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ext OP_Permutati
d9d0: 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a  on, OP_Compare,.
d9e0: 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f  ** OP_Halt, or O
d9f0: 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20 20 54 79  P_ResultRow.  Ty
da00: 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
da10: 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
da20: 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64  d occur.** immed
da30: 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20  iately prior to 
da40: 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a  the OP_Compare..
da50: 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75  */.case OP_Permu
da60: 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65  tation: {.  asse
da70: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
da80: 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
da90: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
daa0: 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75  4.ai );.  aPermu
dab0: 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  te = pOp->p4.ai;
dac0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
dad0: 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20  Opcode: Compare 
dae0: 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
daf0: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 6f 20 76  .** Compare to v
db00: 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
db10: 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
db20: 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 61 6c  reg(P1+P3-1) (al
db30: 6c 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 22 41  l this.** one "A
db40: 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32  ") and in reg(P2
db50: 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20  )..reg(P2+P3-1) 
db60: 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65  ("B").  Save the
db70: 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
db80: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72  e comparison for
db90: 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74   use by the next
dba0: 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63   OP_Jump instruc
dbb0: 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  t..**.** P4 is a
dbc0: 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
dbd0: 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
dbe0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
dbf0: 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20  ces and sort.** 
dc00: 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63  orders for the c
dc10: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20  omparison.  The 
dc20: 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c  permutation appl
dc30: 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ies to registers
dc40: 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b  .** only.  The K
dc50: 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20  eyInfo elements 
dc60: 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74  are used sequent
dc70: 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ially..**.** The
dc80: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
dc90: 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e   sort comparison
dca0: 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61  , so NULLs compa
dcb0: 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c  re equal,.** NUL
dcc0: 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  Ls are less than
dcd0: 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72   numbers, number
dce0: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
dcf0: 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20  strings,.** and 
dd00: 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73  strings are less
dd10: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a   than blobs..*/.
dd20: 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a  case OP_Compare:
dd30: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e   {.  int n;.  in
dd40: 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20  t i;.  int p1;. 
dd50: 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74   int p2;.  const
dd60: 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
dd70: 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  fo;.  int idx;. 
dd80: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b   CollSeq *pColl;
dd90: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
dda0: 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65   sequence to use
ddb0: 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f   on this term */
ddc0: 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20  .  int bRev;    
ddd0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f        /* True fo
dde0: 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72  r DESCENDING sor
ddf0: 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 6e 20  t order */..  n 
de00: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65  = pOp->p3;.  pKe
de10: 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
de20: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
de30: 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
de40: 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
de50: 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
de60: 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  p1;.  assert( p1
de70: 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e  >0 && p1+n<=p->n
de80: 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 32 20 3d 20  Mem+1 );.  p2 = 
de90: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
dea0: 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c  t( p2>0 && p2+n<
deb0: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
dec0: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
ded0: 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
dee0: 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
def0: 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 52 45  e[i] : i;.    RE
df00: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b  GISTER_TRACE(p1+
df10: 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 31  idx, &p->aMem[p1
df20: 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49  +idx]);.    REGI
df30: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64  STER_TRACE(p2+id
df40: 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69  x, &p->aMem[p2+i
df50: 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74  dx]);.    assert
df60: 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  ( i<pKeyInfo->nF
df70: 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c  ield );.    pCol
df80: 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43  l = pKeyInfo->aC
df90: 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76  oll[i];.    bRev
dfa0: 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f   = pKeyInfo->aSo
dfb0: 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20  rtOrder[i];.    
dfc0: 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74  iCompare = sqlit
dfd0: 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 70 2d  e3MemCompare(&p-
dfe0: 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26  >aMem[p1+idx], &
dff0: 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c  p->aMem[p2+idx],
e000: 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28   pColl);.    if(
e010: 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20   iCompare ){.   
e020: 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69 43     if( bRev ) iC
e030: 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61  ompare = -iCompa
e040: 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  re;.      break;
e050: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65  .    }.  }.  aPe
e060: 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65  rmute = 0;.  bre
e070: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
e080: 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20  : Jump P1 P2 P3 
e090: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
e0a0: 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f  o the instructio
e0b0: 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31 2c  n at address P1,
e0c0: 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e   P2, or P3 depen
e0d0: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
e0e0: 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72  ** in the most r
e0f0: 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65  ecent OP_Compare
e100: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65   instruction the
e110: 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c   P1 vector was l
e120: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61  ess than.** equa
e130: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
e140: 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65 63   than the P2 vec
e150: 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c  tor, respectivel
e160: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75  y..*/.case OP_Ju
e170: 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mp: {           
e180: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
e190: 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b  f( iCompare<0 ){
e1a0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
e1b0: 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69  1 - 1;.  }else i
e1c0: 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29  f( iCompare==0 )
e1d0: 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
e1e0: 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
e1f0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
e200: 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  3 - 1;.  }.  bre
e210: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
e220: 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
e230: 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68   *.**.** Take th
e240: 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66  e logical AND of
e250: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
e260: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
e270: 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20  P2 and.** write 
e280: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20  the result into 
e290: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
e2a0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
e2b0: 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73  or P2 is 0 (fals
e2c0: 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
e2d0: 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a  lt is 0 even if.
e2e0: 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  ** the other inp
e2f0: 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
e300: 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20  ULL and true or 
e310: 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a  two NULLs give.*
e320: 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  * a NULL output.
e330: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
e340: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
e350: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f  *.** Take the lo
e360: 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20  gical OR of the 
e370: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
e380: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
e390: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e  .** store the an
e3a0: 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  swer in register
e3b0: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
e3c0: 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
e3d0: 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20   nonzero (true) 
e3e0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e3f0: 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65  is 1 (true).** e
e400: 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72  ven if the other
e410: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
e420: 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73   A NULL and fals
e430: 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a  e or two NULLs.*
e440: 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75  * give a NULL ou
e450: 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tput..*/.case OP
e460: 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20  _And:           
e470: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
e480: 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  _AND, in1, in2, 
e490: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
e4a0: 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  Or: {           
e4b0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
e4c0: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
e4d0: 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20  t3 */.  int v1; 
e4e0: 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61     /* Left opera
e4f0: 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31  nd:  0==FALSE, 1
e500: 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
e510: 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  WN or NULL */.  
e520: 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69  int v2;    /* Ri
e530: 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d  ght operand: 0==
e540: 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
e550: 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
e560: 4c 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 70 49 6e  LL */..  if( pIn
e570: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
e580: 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20  ull ){.    v1 = 
e590: 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
e5a0: 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v1 = sqlite3Vdbe
e5b0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
e5c0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 49 6e  0;.  }.  if( pIn
e5d0: 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  2->flags & MEM_N
e5e0: 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20  ull ){.    v2 = 
e5f0: 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
e600: 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v2 = sqlite3Vdbe
e610: 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d  IntValue(pIn2)!=
e620: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
e630: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64  ->opcode==OP_And
e640: 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
e650: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
e660: 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d  ar and_logic[] =
e670: 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31   { 0, 0, 0, 0, 1
e680: 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a  , 2, 0, 2, 2 };.
e690: 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67      v1 = and_log
e6a0: 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
e6b0: 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63  else{.    static
e6c0: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
e6d0: 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20  char or_logic[] 
e6e0: 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20  = { 0, 1, 2, 1, 
e6f0: 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b  1, 1, 2, 1, 2 };
e700: 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67  .    v1 = or_log
e710: 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
e720: 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a  .  if( v1==2 ){.
e730: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
e740: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
e750: 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  l);.  }else{.   
e760: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b   pOut->u.i = v1;
e770: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
e780: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
e790: 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
e7a0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
e7b0: 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
e7c0: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
e7d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e7e0: 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
e7f0: 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
e800: 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
e810: 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
e820: 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
e830: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e840: 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
e850: 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
e860: 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
e870: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
e880: 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
e890: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
e8a0: 54 4b 5f 4e 4f 54 2c 20 69 6e 31 20 2a 2f 0a 20  TK_NOT, in1 */. 
e8b0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
e8c0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
e8d0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
e8e0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
e8f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
e900: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
e910: 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
e920: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
e930: 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64  pOut, !sqlite3Vd
e940: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
e950: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
e960: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
e970: 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
e980: 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
e990: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
e9a0: 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
e9b0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72  n integer.  Stor
e9c0: 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f  e the.** ones-co
e9d0: 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20  mplement of the 
e9e0: 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  P1 value into re
e9f0: 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50  gister P2.  If P
ea00: 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c  1 holds.** a NUL
ea10: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e  L then store a N
ea20: 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  ULL in P2..*/.ca
ea30: 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20  se OP_BitNot: { 
ea40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ea50: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54  ame as TK_BITNOT
ea60: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 4f 75 74 20  , in1 */.  pOut 
ea70: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
ea80: 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p2];.  if( pIn1-
ea90: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
eaa0: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
eab0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
eac0: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
ead0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
eae0: 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20  mSetInt64(pOut, 
eaf0: 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  ~sqlite3VdbeIntV
eb00: 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d  alue(pIn1));.  }
eb10: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
eb20: 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32  Opcode: If P1 P2
eb30: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
eb40: 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
eb50: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
eb60: 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54  r P1 is true.  T
eb70: 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69  he value is.** i
eb80: 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
eb90: 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
eba0: 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
ebb0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
ebc0: 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
ebd0: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
ebe0: 6d 70 20 69 66 20 50 33 20 69 73 20 74 72 75 65  mp if P3 is true
ebf0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
ec00: 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a  IfNot P1 P2 P3 *
ec10: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
ec20: 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
ec30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
ec40: 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76  is False.  The v
ec50: 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f  alue is.** is co
ec60: 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66  nsidered true if
ec70: 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
ec80: 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
ec90: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
eca0: 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
ecb0: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
ecc0: 6d 70 20 69 66 20 50 33 20 69 73 20 74 72 75 65  mp if P3 is true
ecd0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecf0: 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
ed00: 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20  .case OP_IfNot: 
ed10: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
ed20: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
ed30: 6e 74 20 63 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt c;.  if( pIn1
ed40: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
ed50: 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f  ll ){.    c = pO
ed60: 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p3;.  }else{.
ed70: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
ed80: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
ed90: 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  T.    c = sqlite
eda0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
edb0: 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20  n1)!=0;.#else.  
edc0: 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
edd0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
ede0: 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20  !=0.0;.#endif.  
edf0: 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
ee00: 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20  e==OP_IfNot ) c 
ee10: 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20  = !c;.  }.  if( 
ee20: 63 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  c ){.    pc = pO
ee30: 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
ee40: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ee50: 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32  de: IsNull P1 P2
ee60: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
ee70: 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
ee80: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ee90: 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 20 20 49  r P1 is NULL.  I
eea0: 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72 0a  f P3 is greater.
eeb0: 2a 2a 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  ** than zero, th
eec0: 65 6e 20 63 68 65 63 6b 20 61 6c 6c 20 76 61 6c  en check all val
eed0: 75 65 73 20 72 65 67 28 50 31 29 2c 20 72 65 67  ues reg(P1), reg
eee0: 28 50 31 2b 31 29 2c 20 0a 2a 2a 20 72 65 67 28  (P1+1), .** reg(
eef0: 50 31 2b 32 29 2c 20 2e 2e 2e 2c 20 72 65 67 28  P1+2), ..., reg(
ef00: 50 31 2b 50 33 2d 31 29 2e 0a 2a 2f 0a 63 61 73  P1+P3-1)..*/.cas
ef10: 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20  e OP_IsNull: {  
ef20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ef30: 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20  e as TK_ISNULL, 
ef40: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
ef50: 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  nt n;..  n = pOp
ef60: 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
ef70: 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f  pOp->p3==0 || pO
ef80: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 64 6f 7b  p->p1>0 );.  do{
ef90: 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
efa0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
efb0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63  )!=0 ){.      pc
efc0: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
efd0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
efe0: 20 7d 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20   }.    pIn1++;. 
eff0: 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 3e 20 30   }while( --n > 0
f000: 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
f010: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75  /* Opcode: NotNu
f020: 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
f030: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
f040: 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
f050: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e  register P1 is n
f060: 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61  ot NULL.  .*/.ca
f070: 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b  se OP_NotNull: {
f080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f090: 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c  ame as TK_NOTNUL
f0a0: 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
f0b0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
f0c0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
f0d0: 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
f0e0: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
f0f0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
f100: 63 6f 64 65 3a 20 53 65 74 4e 75 6d 43 6f 6c 75  code: SetNumColu
f110: 6d 6e 73 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  mns * P2 * * *.*
f120: 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
f130: 20 73 65 74 73 20 74 68 65 20 6e 75 6d 62 65 72   sets the number
f140: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20   of columns for 
f150: 74 68 65 20 63 75 72 73 6f 72 20 6f 70 65 6e 65  the cursor opene
f160: 64 20 62 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c  d by the.** foll
f170: 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
f180: 6e 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41  n to P2..**.** A
f190: 6e 20 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d  n OP_SetNumColum
f1a0: 6e 73 20 69 73 20 6f 6e 6c 79 20 75 73 65 66 75  ns is only usefu
f1b0: 6c 20 69 66 20 69 74 20 6f 63 63 75 72 73 20 69  l if it occurs i
f1c0: 6d 6d 65 64 69 61 74 65 6c 79 20 62 65 66 6f 72  mmediately befor
f1d0: 65 20 0a 2a 2a 20 6f 6e 65 20 6f 66 20 74 68 65  e .** one of the
f1e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64   following opcod
f1f0: 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 4f 70  es:.**.**     Op
f200: 65 6e 52 65 61 64 0a 2a 2a 20 20 20 20 20 4f 70  enRead.**     Op
f210: 65 6e 57 72 69 74 65 0a 2a 2a 20 20 20 20 20 4f  enWrite.**     O
f220: 70 65 6e 50 73 65 75 64 6f 0a 2a 2a 0a 2a 2a 20  penPseudo.**.** 
f230: 49 66 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  If the OP_Column
f240: 20 6f 70 63 6f 64 65 20 69 73 20 74 6f 20 62 65   opcode is to be
f250: 20 65 78 65 63 75 74 65 64 20 6f 6e 20 61 20 63   executed on a c
f260: 75 72 73 6f 72 2c 20 74 68 65 6e 0a 2a 2a 20 74  ursor, then.** t
f270: 68 69 73 20 6f 70 63 6f 64 65 20 6d 75 73 74 20  his opcode must 
f280: 62 65 20 70 72 65 73 65 6e 74 20 69 6d 6d 65 64  be present immed
f290: 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20 74 68  iately before th
f2a0: 65 20 6f 70 63 6f 64 65 20 74 68 61 74 0a 2a 2a  e opcode that.**
f2b0: 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f   opens the curso
f2c0: 72 2e 0a 2a 2f 0a 23 69 66 20 30 0a 63 61 73 65  r..*/.#if 0.case
f2d0: 20 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e   OP_SetNumColumn
f2e0: 73 3a 20 7b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  s: {.  break;.}.
f2f0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
f300: 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
f310: 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  P3 P4 *.**.** In
f320: 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61  terpret the data
f330: 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
f340: 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73  points to as a s
f350: 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75  tructure built u
f360: 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65  sing.** the Make
f370: 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
f380: 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61  on.  (See the Ma
f390: 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
f3a0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a  for additional.*
f3b0: 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
f3c0: 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
f3d0: 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78  f the data.)  Ex
f3e0: 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20  tract the P2-th 
f3f0: 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74  column.** from t
f400: 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20  his record.  If 
f410: 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
f420: 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76  hat (P2+1) .** v
f430: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
f440: 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e  ord, extract a N
f450: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76  ULL..**.** The v
f460: 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69  alue extracted i
f470: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
f480: 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
f490: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e  f the column con
f4a0: 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e  tains fewer than
f4b0: 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e   P2 fields, then
f4c0: 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
f4d0: 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20    Or,.** if the 
f4e0: 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  P4 argument is a
f4f0: 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20   P4_MEM use the 
f500: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20  value of the P4 
f510: 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74  argument as.** t
f520: 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 63 61  he result..*/.ca
f530: 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a  se OP_Column: {.
f540: 20 20 75 33 32 20 70 61 79 6c 6f 61 64 53 69 7a    u32 payloadSiz
f550: 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  e;   /* Number o
f560: 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72  f bytes in the r
f570: 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 70  ecord */.  i64 p
f580: 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a  ayloadSize64; /*
f590: 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
f5a0: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
f5b0: 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  /.  int p1;     
f5c0: 20 20 20 20 20 20 20 2f 2a 20 50 31 20 76 61 6c         /* P1 val
f5d0: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
f5e0: 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20   */.  int p2;   
f5f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75           /* colu
f600: 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74  mn number to ret
f610: 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43  rieve */.  VdbeC
f620: 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a  ursor *pC;    /*
f630: 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
f640: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52 65 63   */.  char *zRec
f650: 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ;        /* Poin
f660: 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20  ter to complete 
f670: 72 65 63 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20  record-data */. 
f680: 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
f690: 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65  ;   /* The BTree
f6a0: 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32   cursor */.  u32
f6b0: 20 2a 61 54 79 70 65 3b 20 20 20 20 20 20 20 20   *aType;        
f6c0: 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64  /* aType[i] hold
f6d0: 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  s the numeric ty
f6e0: 70 65 20 6f 66 20 74 68 65 20 69 2d 74 68 20 63  pe of the i-th c
f6f0: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a  olumn */.  u32 *
f700: 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a  aOffset;      /*
f710: 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f   aOffset[i] is o
f720: 66 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f  ffset to start o
f730: 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20  f data for i-th 
f740: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
f750: 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f  nField;        /
f760: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * number of fiel
f770: 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
f780: 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
f790: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
f7a0: 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65  length of the se
f7b0: 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f  rialized data fo
f7c0: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  r the column */.
f7d0: 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
f7e0: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
f7f0: 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  nter */.  char *
f800: 7a 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20  zData;       /* 
f810: 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f  Part of the reco
f820: 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
f830: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74   */.  Mem *pDest
f840: 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72  ;        /* Wher
f850: 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65  e to write the e
f860: 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a  xtracted value *
f870: 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20  /.  Mem sMem;   
f880: 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74         /* For st
f890: 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  oring the record
f8a0: 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
f8b0: 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b 20 20 20  /.  u8 *zIdx;   
f8c0: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
f8d0: 69 6e 74 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20  into header */. 
f8e0: 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20   u8 *zEndHdr;   
f8f0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
f900: 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74  o first byte aft
f910: 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  er the header */
f920: 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20  .  u32 offset;  
f930: 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20        /* Offset 
f940: 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f  into the data */
f950: 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36 34 3b  .  u64 offset64;
f960: 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20        /* 64-bit 
f970: 6f 66 66 73 65 74 2e 20 20 36 34 20 62 69 74 73  offset.  64 bits
f980: 20 6e 65 65 64 65 64 20 74 6f 20 63 61 74 63 68   needed to catch
f990: 20 6f 76 65 72 66 6c 6f 77 20 2a 2f 0a 20 20 69   overflow */.  i
f9a0: 6e 74 20 73 7a 48 64 72 3b 20 20 20 20 20 20 20  nt szHdr;       
f9b0: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
f9c0: 20 68 65 61 64 65 72 20 73 69 7a 65 20 66 69 65   header size fie
f9d0: 6c 64 20 61 74 20 73 74 61 72 74 20 6f 66 20 72  ld at start of r
f9e0: 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 61  ecord */.  int a
f9f0: 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  vail;         /*
fa00: 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
fa10: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61   of available da
fa20: 74 61 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70  ta */...  p1 = p
fa30: 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
fa40: 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30  Op->p2;.  pC = 0
fa50: 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d  ;.  memset(&sMem
fa60: 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
fa70: 29 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  ));.  assert( p1
fa80: 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
fa90: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
faa0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
fab0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73  ->nMem );.  pDes
fac0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
fad0: 2d 3e 70 33 5d 3b 0a 20 20 4d 65 6d 53 65 74 54  ->p3];.  MemSetT
fae0: 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d  ypeFlag(pDest, M
faf0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 2f 2a 20  EM_Null);..  /* 
fb00: 54 68 69 73 20 62 6c 6f 63 6b 20 73 65 74 73 20  This block sets 
fb10: 74 68 65 20 76 61 72 69 61 62 6c 65 20 70 61 79  the variable pay
fb20: 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62 65 20 74  loadSize to be t
fb30: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
fb40: 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73 20 69 6e  of.  ** bytes in
fb50: 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a   the record..  *
fb60: 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69 73 20 73  *.  ** zRec is s
fb70: 65 74 20 74 6f 20 62 65 20 74 68 65 20 63 6f 6d  et to be the com
fb80: 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 74 68  plete text of th
fb90: 65 20 72 65 63 6f 72 64 20 69 66 20 69 74 20 69  e record if it i
fba0: 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a  s available..  *
fbb0: 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  * The complete r
fbc0: 65 63 6f 72 64 20 74 65 78 74 20 69 73 20 61 6c  ecord text is al
fbd0: 77 61 79 73 20 61 76 61 69 6c 61 62 6c 65 20 66  ways available f
fbe0: 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73  or pseudo-tables
fbf0: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 72 65 63  .  ** If the rec
fc00: 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ord is stored in
fc10: 20 61 20 63 75 72 73 6f 72 2c 20 74 68 65 20 63   a cursor, the c
fc20: 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74  omplete record t
fc30: 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62  ext.  ** might b
fc40: 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74  e available in t
fc50: 68 65 20 20 70 43 2d 3e 61 52 6f 77 20 63 61 63  he  pC->aRow cac
fc60: 68 65 2e 20 20 4f 72 20 69 74 20 6d 69 67 68 74  he.  Or it might
fc70: 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66   not be..  ** If
fc80: 20 74 68 65 20 64 61 74 61 20 69 73 20 75 6e 61   the data is una
fc90: 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20  vailable,  zRec 
fca0: 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a  is set to NULL..
fcb0: 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73    **.  ** We als
fcc0: 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20 6e 75  o compute the nu
fcd0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
fce0: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  in the record.  
fcf0: 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a  For cursors,.  *
fd00: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
fd10: 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72 65  columns is store
fd20: 64 20 69 6e 20 74 68 65 20 56 64 62 65 43 75 72  d in the VdbeCur
fd30: 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65  sor.nField eleme
fd40: 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20  nt..  */.  pC = 
fd50: 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20  p->apCsr[p1];.  
fd60: 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
fd70: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
fd80: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
fd90: 45 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  E.  assert( pC->
fda0: 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29  pVtabCursor==0 )
fdb0: 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
fdc0: 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b  C->pCursor!=0 ){
fdd0: 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f  .    /* The reco
fde0: 72 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  rd is stored in 
fdf0: 61 20 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20  a B-Tree */.    
fe00: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
fe10: 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
fe20: 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
fe30: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
fe40: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7a 52 65 63  _error;.    zRec
fe50: 20 3d 20 30 3b 0a 20 20 20 20 70 43 72 73 72 20   = 0;.    pCrsr 
fe60: 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
fe70: 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52     if( pC->nullR
fe80: 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c  ow ){.      payl
fe90: 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20  oadSize = 0;.   
fea0: 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63   }else if( pC->c
feb0: 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63  acheStatus==p->c
fec0: 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20  acheCtr ){.     
fed0: 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70   payloadSize = p
fee0: 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a  C->payloadSize;.
fef0: 20 20 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68        zRec = (ch
ff00: 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20  ar*)pC->aRow;.  
ff10: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
ff20: 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20  isIndex ){.     
ff30: 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
ff40: 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
ff50: 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20  loadSize64);.   
ff60: 20 20 20 69 66 28 20 28 70 61 79 6c 6f 61 64 53     if( (payloadS
ff70: 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d  ize64 & SQLITE_M
ff80: 41 58 5f 55 33 32 29 21 3d 28 75 36 34 29 70 61  AX_U32)!=(u64)pa
ff90: 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 7b 0a 20  yloadSize64 ){. 
ffa0: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
ffb0: 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
ffc0: 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
ffd0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
ffe0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
fff0: 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75  payloadSize = (u
10000 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  32)payloadSize64
10010 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
10020 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 44     sqlite3BtreeD
10030 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26  ataSize(pCrsr, &
10040 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20  payloadSize);.  
10050 20 20 7d 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d    }.    nField =
10060 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 7d   pC->nField;.  }
10070 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
10080 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
10090 65 20 29 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20  e );.    /* The 
100a0 72 65 63 6f 72 64 20 69 73 20 74 68 65 20 73 6f  record is the so
100b0 6c 65 20 65 6e 74 72 79 20 6f 66 20 61 20 70 73  le entry of a ps
100c0 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
100d0 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
100e0 70 43 2d 3e 6e 44 61 74 61 3b 0a 20 20 20 20 7a  pC->nData;.    z
100f0 52 65 63 20 3d 20 70 43 2d 3e 70 44 61 74 61 3b  Rec = pC->pData;
10100 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
10110 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
10120 4c 45 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  LE;.    assert( 
10130 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c  payloadSize==0 |
10140 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 20  | zRec!=0 );.   
10150 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46   nField = pC->nF
10160 69 65 6c 64 3b 0a 20 20 20 20 70 43 72 73 72 20  ield;.    pCrsr 
10170 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  = 0;.  }..  /* I
10180 66 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 69 73  f payloadSize is
10190 20 30 2c 20 74 68 65 6e 20 6a 75 73 74 20 73 74   0, then just st
101a0 6f 72 65 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20  ore a NULL */.  
101b0 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d  if( payloadSize=
101c0 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
101d0 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d  ( pDest->flags&M
101e0 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67  EM_Null );.    g
101f0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
10200 74 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  t;.  }.  assert(
10210 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49   db->aLimit[SQLI
10220 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
10230 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 61 79  >=0 );.  if( pay
10240 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29  loadSize > (u32)
10250 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
10260 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
10270 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
10280 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  big;.  }..  asse
10290 72 74 28 20 70 32 3c 6e 46 69 65 6c 64 20 29 3b  rt( p2<nField );
102a0 0a 0a 20 20 2f 2a 20 52 65 61 64 20 61 6e 64 20  ..  /* Read and 
102b0 70 61 72 73 65 20 74 68 65 20 74 61 62 6c 65 20  parse the table 
102c0 68 65 61 64 65 72 2e 20 20 53 74 6f 72 65 20 74  header.  Store t
102d0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
102e0 65 20 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e 74  e parse.  ** int
102f0 6f 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  o the record hea
10300 64 65 72 20 63 61 63 68 65 20 66 69 65 6c 64 73  der cache fields
10310 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 2e 0a   of the cursor..
10320 20 20 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20 70    */.  aType = p
10330 43 2d 3e 61 54 79 70 65 3b 0a 20 20 69 66 28 20  C->aType;.  if( 
10340 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d  pC->cacheStatus=
10350 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a  =p->cacheCtr ){.
10360 20 20 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43      aOffset = pC
10370 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65 6c  ->aOffset;.  }el
10380 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 61  se{.    assert(a
10390 54 79 70 65 29 3b 0a 20 20 20 20 61 76 61 69 6c  Type);.    avail
103a0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 61 4f   = 0;.    pC->aO
103b0 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20  ffset = aOffset 
103c0 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  = &aType[nField]
103d0 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61  ;.    pC->payloa
103e0 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53  dSize = payloadS
103f0 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  ize;.    pC->cac
10400 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
10410 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20  cheCtr;..    /* 
10420 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d  Figure out how m
10430 61 6e 79 20 62 79 74 65 73 20 61 72 65 20 69 6e  any bytes are in
10440 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
10450 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20     if( zRec ){. 
10460 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65       zData = zRe
10470 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  c;.    }else{.  
10480 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e      if( pC->isIn
10490 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  dex ){.        z
104a0 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71  Data = (char*)sq
104b0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74  lite3BtreeKeyFet
104c0 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
104d0 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
104e0 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
104f0 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74  (char*)sqlite3Bt
10500 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43 72  reeDataFetch(pCr
10510 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20  sr, &avail);.   
10520 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66     }.      /* If
10530 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61 74 61   KeyFetch()/Data
10540 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20  Fetch() managed 
10550 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74 69 72  to get the entir
10560 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20  e payload,.     
10570 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70 61 79   ** save the pay
10580 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e  load in the pC->
10590 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61  aRow cache.  Tha
105a0 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66  t will save us f
105b0 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76  rom.      ** hav
105c0 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69  ing to make addi
105d0 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20  tional calls to 
105e0 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e  fetch the conten
105f0 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20  t portion of.   
10600 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64     ** the record
10610 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
10620 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3e 3d   assert( avail>=
10630 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  0 );.      if( p
10640 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75  ayloadSize <= (u
10650 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20  32)avail ){.    
10660 20 20 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61      zRec = zData
10670 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
10680 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b  ow = (u8*)zData;
10690 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
106a0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
106b0 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
106c0 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c  }.    /* The fol
106d0 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 20 69 73  lowing assert is
106e0 20 74 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73   true in all cas
106f0 65 73 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20  es accept when. 
10700 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61     ** the databa
10710 73 65 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e  se file has been
10720 20 63 6f 72 72 75 70 74 65 64 20 65 78 74 65 72   corrupted exter
10730 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20  nally..    **   
10740 20 61 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30   assert( zRec!=0
10750 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f   || avail>=paylo
10760 61 64 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e  adSize || avail>
10770 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48  =9 ); */.    szH
10780 64 72 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32  dr = getVarint32
10790 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66 66  ((u8*)zData, off
107a0 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61  set);..    /* Ma
107b0 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75 70  ke sure a corrup
107c0 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  t database has n
107d0 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f  ot given us an o
107e0 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a  versize header..
107f0 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e      ** Do this n
10800 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f  ow to avoid an o
10810 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61  versize memory a
10820 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a  llocation..    *
10830 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e  *.    ** Type en
10840 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74  tries can be bet
10850 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74  ween 1 and 5 byt
10860 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20  es each.  But 4 
10870 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 2a  and 5 byte.    *
10880 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d  * types use so m
10890 75 63 68 20 64 61 74 61 20 73 70 61 63 65 20 74  uch data space t
108a0 68 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e  hat there can on
108b0 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64 20 33  ly be 4096 and 3
108c0 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d  2 of.    ** them
108d0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
108e0 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   So the maximum 
108f0 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65  header length re
10900 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20  sults from a.   
10910 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20   ** 3-byte type 
10920 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20  for each of the 
10930 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38  maximum of 32768
10940 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68   columns plus th
10950 72 65 65 0a 20 20 20 20 2a 2a 20 65 78 74 72 61  ree.    ** extra
10960 20 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68   bytes for the h
10970 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73  eader length its
10980 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20  elf.  32768*3 + 
10990 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 2a  3 = 98307..    *
109a0 2f 0a 20 20 20 20 69 66 28 20 6f 66 66 73 65 74  /.    if( offset
109b0 20 3e 20 39 38 33 30 37 20 29 7b 0a 20 20 20 20   > 98307 ){.    
109c0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
109d0 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
109e0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
109f0 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  _out;.    }..   
10a00 20 2f 2a 20 43 6f 6d 70 75 74 65 20 69 6e 20 6c   /* Compute in l
10a10 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  en the number of
10a20 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 77   bytes of data w
10a30 65 20 6e 65 65 64 20 74 6f 20 72 65 61 64 20 69  e need to read i
10a40 6e 20 6f 72 64 65 72 0a 20 20 20 20 2a 2a 20 74  n order.    ** t
10a50 6f 20 67 65 74 20 6e 46 69 65 6c 64 20 74 79 70  o get nField typ
10a60 65 20 76 61 6c 75 65 73 2e 20 20 6f 66 66 73 65  e values.  offse
10a70 74 20 69 73 20 61 6e 20 75 70 70 65 72 20 62 6f  t is an upper bo
10a80 75 6e 64 20 6f 6e 20 74 68 69 73 2e 20 20 42 75  und on this.  Bu
10a90 74 0a 20 20 20 20 2a 2a 20 6e 46 69 65 6c 64 20  t.    ** nField 
10aa0 6d 69 67 68 74 20 62 65 20 73 69 67 6e 69 66 69  might be signifi
10ab0 63 61 6e 74 6c 79 20 6c 65 73 73 20 74 68 61 6e  cantly less than
10ac0 20 74 68 65 20 74 72 75 65 20 6e 75 6d 62 65 72   the true number
10ad0 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20   of columns.    
10ae0 2a 2a 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c  ** in the table,
10af0 20 61 6e 64 20 69 6e 20 74 68 61 74 20 63 61 73   and in that cas
10b00 65 2c 20 35 2a 6e 46 69 65 6c 64 2b 33 20 6d 69  e, 5*nField+3 mi
10b10 67 68 74 20 62 65 20 73 6d 61 6c 6c 65 72 20 74  ght be smaller t
10b20 68 61 6e 20 6f 66 66 73 65 74 2e 0a 20 20 20 20  han offset..    
10b30 2a 2a 20 57 65 20 77 61 6e 74 20 74 6f 20 6d 69  ** We want to mi
10b40 6e 69 6d 69 7a 65 20 6c 65 6e 20 69 6e 20 6f 72  nimize len in or
10b50 64 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  der to limit the
10b60 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d   size of the mem
10b70 6f 72 79 0a 20 20 20 20 2a 2a 20 61 6c 6c 6f 63  ory.    ** alloc
10b80 61 74 69 6f 6e 2c 20 65 73 70 65 63 69 61 6c 6c  ation, especiall
10b90 79 20 69 66 20 61 20 63 6f 72 72 75 70 74 20 64  y if a corrupt d
10ba0 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73  atabase file has
10bb0 20 63 61 75 73 65 64 20 6f 66 66 73 65 74 0a 20   caused offset. 
10bc0 20 20 20 2a 2a 20 74 6f 20 62 65 20 6f 76 65 72     ** to be over
10bd0 73 69 7a 65 64 2e 20 4f 66 66 73 65 74 20 69 73  sized. Offset is
10be0 20 6c 69 6d 69 74 65 64 20 74 6f 20 39 38 33 30   limited to 9830
10bf0 37 20 61 62 6f 76 65 2e 20 20 42 75 74 20 39 38  7 above.  But 98
10c00 33 30 37 20 6d 69 67 68 74 0a 20 20 20 20 2a 2a  307 might.    **
10c10 20 73 74 69 6c 6c 20 65 78 63 65 65 64 20 52 6f   still exceed Ro
10c20 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  bson memory allo
10c30 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 6f 6e  cation limits on
10c40 20 73 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61 74   some configurat
10c50 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20  ions..    ** On 
10c60 73 79 73 74 65 6d 73 20 74 68 61 74 20 63 61 6e  systems that can
10c70 6e 6f 74 20 74 6f 6c 65 72 61 74 65 20 6c 61 72  not tolerate lar
10c80 67 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ge memory alloca
10c90 74 69 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a 35 2b  tions, nField*5+
10ca0 33 0a 20 20 20 20 2a 2a 20 77 69 6c 6c 20 6c 69  3.    ** will li
10cb0 6b 65 6c 79 20 62 65 20 6d 75 63 68 20 73 6d 61  kely be much sma
10cc0 6c 6c 65 72 20 73 69 6e 63 65 20 6e 46 69 65 6c  ller since nFiel
10cd0 64 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65  d will likely be
10ce0 20 6c 65 73 73 20 74 68 61 6e 0a 20 20 20 20 2a   less than.    *
10cf0 2a 20 32 30 20 6f 72 20 73 6f 2e 20 20 54 68 69  * 20 or so.  Thi
10d00 73 20 69 6e 73 75 72 65 73 20 74 68 61 74 20 52  s insures that R
10d10 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c  obson memory all
10d20 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 61  ocation limits a
10d30 72 65 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 65 78  re.    ** not ex
10d40 63 65 65 64 65 64 20 65 76 65 6e 20 66 6f 72 20  ceeded even for 
10d50 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
10d60 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a 2f 0a 20   files..    */. 
10d70 20 20 20 6c 65 6e 20 3d 20 6e 46 69 65 6c 64 2a     len = nField*
10d80 35 20 2b 20 33 3b 0a 20 20 20 20 69 66 28 20 6c  5 + 3;.    if( l
10d90 65 6e 20 3e 20 28 69 6e 74 29 6f 66 66 73 65 74  en > (int)offset
10da0 20 29 20 6c 65 6e 20 3d 20 28 69 6e 74 29 6f 66   ) len = (int)of
10db0 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  fset;..    /* Th
10dc0 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f 72 20  e KeyFetch() or 
10dd0 44 61 74 61 46 65 74 63 68 28 29 20 61 62 6f 76  DataFetch() abov
10de0 65 20 61 72 65 20 66 61 73 74 20 61 6e 64 20 77  e are fast and w
10df0 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e 74 69  ill get the enti
10e00 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  re.    ** record
10e10 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73 74 20   header in most 
10e20 63 61 73 65 73 2e 20 20 42 75 74 20 74 68 65 79  cases.  But they
10e30 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67 65   will fail to ge
10e40 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 20  t the complete. 
10e50 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61     ** record hea
10e60 64 65 72 20 69 66 20 74 68 65 20 72 65 63 6f 72  der if the recor
10e70 64 20 68 65 61 64 65 72 20 64 6f 65 73 20 6e 6f  d header does no
10e80 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e 67 6c  t fit on a singl
10e90 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20 69 6e  e page.    ** in
10ea0 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20 57 68   the B-Tree.  Wh
10eb0 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e 73 2c  en that happens,
10ec0 20 75 73 65 20 73 71 6c 69 74 65 33 56 64 62 65   use sqlite3Vdbe
10ed0 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 74  MemFromBtree() t
10ee0 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69 72 65  o.    ** acquire
10ef0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65   the complete he
10f00 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20 20 2a  ader text..    *
10f10 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65 63 20  /.    if( !zRec 
10f20 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20 29 7b 0a  && avail<len ){.
10f30 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73        sMem.flags
10f40 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d   = 0;.      sMem
10f50 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  .db = 0;.      r
10f60 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
10f70 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
10f80 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69  r, 0, len, pC->i
10f90 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a  sIndex, &sMem);.
10fa0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
10fb0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
10fc0 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
10fd0 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  n_out;.      }. 
10fe0 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65       zData = sMe
10ff0 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a  m.z;.    }.    z
11000 45 6e 64 48 64 72 20 3d 20 28 75 38 20 2a 29 26  EndHdr = (u8 *)&
11010 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20 20 20  zData[len];.    
11020 7a 49 64 78 20 3d 20 28 75 38 20 2a 29 26 7a 44  zIdx = (u8 *)&zD
11030 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20 20 20  ata[szHdr];..   
11040 20 2f 2a 20 53 63 61 6e 20 74 68 65 20 68 65 61   /* Scan the hea
11050 64 65 72 20 61 6e 64 20 75 73 65 20 69 74 20 74  der and use it t
11060 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 61 54  o fill in the aT
11070 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66 66 73 65  ype[] and aOffse
11080 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72 72 61 79  t[].    ** array
11090 73 2e 20 20 61 54 79 70 65 5b 69 5d 20 77 69 6c  s.  aType[i] wil
110a0 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 74 79  l contain the ty
110b0 70 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 74  pe integer for t
110c0 68 65 20 69 2d 74 68 0a 20 20 20 20 2a 2a 20 63  he i-th.    ** c
110d0 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66 66 73 65  olumn and aOffse
110e0 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69  t[i] will contai
110f0 6e 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f  n the offset fro
11100 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  m the beginning.
11110 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65      ** of the re
11120 63 6f 72 64 20 74 6f 20 74 68 65 20 73 74 61 72  cord to the star
11130 74 20 6f 66 20 74 68 65 20 64 61 74 61 20 66 6f  t of the data fo
11140 72 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d  r the i-th colum
11150 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 66 66  n.    */.    off
11160 73 65 74 36 34 20 3d 20 6f 66 66 73 65 74 3b 0a  set64 = offset;.
11170 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
11180 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20  Field; i++){.   
11190 20 20 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64     if( zIdx<zEnd
111a0 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Hdr ){.        a
111b0 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28 75 33 32  Offset[i] = (u32
111c0 29 6f 66 66 73 65 74 36 34 3b 0a 20 20 20 20 20  )offset64;.     
111d0 20 20 20 7a 49 64 78 20 2b 3d 20 67 65 74 56 61     zIdx += getVa
111e0 72 69 6e 74 33 32 28 7a 49 64 78 2c 20 61 54 79  rint32(zIdx, aTy
111f0 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  pe[i]);.        
11200 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69  offset64 += sqli
11210 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
11220 65 4c 65 6e 28 61 54 79 70 65 5b 69 5d 29 3b 0a  eLen(aType[i]);.
11230 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
11240 20 20 20 20 20 2f 2a 20 49 66 20 69 20 69 73 20       /* If i is 
11250 6c 65 73 73 20 74 68 61 74 20 6e 46 69 65 6c 64  less that nField
11260 2c 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65  , then there are
11270 20 6c 65 73 73 20 66 69 65 6c 64 73 20 69 6e 20   less fields in 
11280 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20  this.        ** 
11290 72 65 63 6f 72 64 20 74 68 61 6e 20 53 65 74 4e  record than SetN
112a0 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69 63 61  umColumns indica
112b0 74 65 64 20 74 68 65 72 65 20 61 72 65 20 63 6f  ted there are co
112c0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20 20  lumns in the.   
112d0 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e 20 53       ** table. S
112e0 65 74 20 74 68 65 20 6f 66 66 73 65 74 20 66 6f  et the offset fo
112f0 72 20 61 6e 79 20 65 78 74 72 61 20 63 6f 6c 75  r any extra colu
11300 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20  mns not present 
11310 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  in.        ** th
11320 65 20 72 65 63 6f 72 64 20 74 6f 20 30 2e 20 54  e record to 0. T
11330 68 69 73 20 74 65 6c 6c 73 20 63 6f 64 65 20 62  his tells code b
11340 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20 61 20  elow to store a 
11350 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 2a 2a 20  NULL.        ** 
11360 69 6e 73 74 65 61 64 20 6f 66 20 64 65 73 65 72  instead of deser
11370 69 61 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75 65  ializing a value
11380 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
11390 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
113a0 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20       aOffset[i] 
113b0 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
113c0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
113d0 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
113e0 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c  em);.    sMem.fl
113f0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
11400 0a 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61  .    /* If we ha
11410 76 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61  ve read more hea
11420 64 65 72 20 64 61 74 61 20 74 68 61 6e 20 77 61  der data than wa
11430 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  s contained in t
11440 68 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20 2a  he header,.    *
11450 2a 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20  * or if the end 
11460 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c  of the last fiel
11470 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20  d appears to be 
11480 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
11490 74 68 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72  the.    ** recor
114a0 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64  d, or if the end
114b0 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65   of the last fie
114c0 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ld appears to be
114d0 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a   before the end.
114e0 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65      ** of the re
114f0 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66  cord (when all f
11500 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20  ields present), 
11510 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20  then we must be 
11520 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20  dealing .    ** 
11530 77 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64  with a corrupt d
11540 61 74 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a  atabase..    */.
11550 20 20 20 20 69 66 28 20 28 7a 49 64 78 20 3e 20      if( (zIdx > 
11560 7a 45 6e 64 48 64 72 29 7c 7c 20 28 6f 66 66 73  zEndHdr)|| (offs
11570 65 74 36 34 20 3e 20 70 61 79 6c 6f 61 64 53 69  et64 > payloadSi
11580 7a 65 29 0a 20 20 20 20 20 7c 7c 20 28 7a 49 64  ze).     || (zId
11590 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66  x==zEndHdr && of
115a0 66 73 65 74 36 34 21 3d 28 75 36 34 29 70 61 79  fset64!=(u64)pay
115b0 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20  loadSize) ){.   
115c0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
115d0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
115e0 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
115f0 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  n_out;.    }.  }
11600 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63  ..  /* Get the c
11610 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  olumn informatio
11620 6e 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32  n. If aOffset[p2
11630 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  ] is non-zero, t
11640 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69  hen .  ** deseri
11650 61 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20  alize the value 
11660 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e  from the record.
11670 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20   If aOffset[p2] 
11680 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68  is zero,.  ** th
11690 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74  en there are not
116a0 20 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69   enough fields i
116b0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  n the record to 
116c0 73 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a  satisfy the.  **
116d0 20 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68   request.  In th
116e0 69 73 20 63 61 73 65 2c 20 73 65 74 20 74 68 65  is case, set the
116f0 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74   value NULL or t
11700 6f 20 50 34 20 69 66 20 50 34 20 69 73 0a 20 20  o P4 if P4 is.  
11710 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** a pointer to 
11720 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20  a Mem object..  
11730 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74  */.  if( aOffset
11740 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65  [p2] ){.    asse
11750 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
11760 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65  K );.    if( zRe
11770 63 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  c ){.      sqlit
11780 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
11790 45 78 74 65 72 6e 61 6c 28 70 44 65 73 74 29 3b  External(pDest);
117a0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
117b0 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 20  beSerialGet((u8 
117c0 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b  *)&zRec[aOffset[
117d0 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c  p2]], aType[p2],
117e0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
117f0 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20  se{.      len = 
11800 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
11810 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 70  lTypeLen(aType[p
11820 32 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  2]);.      sqlit
11830 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73  e3VdbeMemMove(&s
11840 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  Mem, pDest);.   
11850 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
11860 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
11870 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70  pCrsr, aOffset[p
11880 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49  2], len, pC->isI
11890 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20  ndex, &sMem);.  
118a0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
118b0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
118c0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
118d0 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
118e0 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e     zData = sMem.
118f0 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  z;.      sqlite3
11900 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75  VdbeSerialGet((u
11910 38 2a 29 7a 44 61 74 61 2c 20 61 54 79 70 65 5b  8*)zData, aType[
11920 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  p2], pDest);.   
11930 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e   }.    pDest->en
11940 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
11950 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70  }else{.    if( p
11960 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d  Op->p4type==P4_M
11970 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  EM ){.      sqli
11980 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
11990 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70  wCopy(pDest, pOp
119a0 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53  ->p4.pMem, MEM_S
119b0 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c 73  tatic);.    }els
119c0 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
119d0 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45   pDest->flags&ME
119e0 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a  M_Null );.    }.
119f0 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20    }..  /* If we 
11a00 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
11a10 63 61 74 65 64 20 73 70 61 63 65 20 74 6f 20 68  cated space to h
11a20 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28 69 6e  old the data (in
11a30 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65   the.  ** sqlite
11a40 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
11a50 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20  e() call above) 
11a60 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f  then transfer co
11a70 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20  ntrol of that.  
11a80 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  ** dynamically a
11a90 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f  llocated space o
11aa0 76 65 72 20 74 6f 20 74 68 65 20 70 44 65 73 74  ver to the pDest
11ab0 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a   structure..  **
11ac0 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20 61   This prevents a
11ad0 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20   memory copy..  
11ae0 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d  */.  if( sMem.zM
11af0 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73 73  alloc ){.    ass
11b00 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65  ert( sMem.z==sMe
11b10 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20  m.zMalloc );.   
11b20 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74   assert( !(pDest
11b30 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
11b40 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  n) );.    assert
11b50 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73  ( !(pDest->flags
11b60 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
11b70 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74 2d  _Str)) || pDest-
11b80 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20  >z==sMem.z );.  
11b90 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26    pDest->flags &
11ba0 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45  = ~(MEM_Ephem|ME
11bb0 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 70  M_Static);.    p
11bc0 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  Dest->flags |= M
11bd0 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44 65  EM_Term;.    pDe
11be0 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a  st->z = sMem.z;.
11bf0 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c      pDest->zMall
11c00 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f  oc = sMem.zMallo
11c10 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73  c;.  }..  rc = s
11c20 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b  qlite3VdbeMemMak
11c30 65 57 72 69 74 65 61 62 6c 65 28 70 44 65 73 74  eWriteable(pDest
11c40 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  );..op_column_ou
11c50 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  t:.  UPDATE_MAX_
11c60 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
11c70 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
11c80 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
11c90 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
11ca0 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69  * Opcode: Affini
11cb0 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ty P1 P2 * P4 *.
11cc0 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69  **.** Apply affi
11cd0 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67  nities to a rang
11ce0 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72  e of P2 register
11cf0 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  s starting with 
11d00 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P1..**.** P4 is 
11d10 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
11d20 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c   P2 characters l
11d30 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61  ong. The nth cha
11d40 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
11d50 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
11d60 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
11d70 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
11d80 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
11d90 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20  e nth.** memory 
11da0 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67  cell in the rang
11db0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66  e..*/.case OP_Af
11dc0 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 68 61 72  finity: {.  char
11dd0 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f   *zAffinity;   /
11de0 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
11df0 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
11e00 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20    Mem *pData0;  
11e10 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
11e20 67 69 73 74 65 72 20 74 6f 20 77 68 69 63 68 20  gister to which 
11e30 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
11e40 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73  y */.  Mem *pLas
11e50 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73  t;        /* Las
11e60 74 20 72 65 67 69 73 74 65 72 20 74 6f 20 77 68  t register to wh
11e70 69 63 68 20 74 6f 20 61 70 70 6c 79 20 61 66 66  ich to apply aff
11e80 69 6e 69 74 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a  inity */.  Mem *
11e90 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pRec;         /*
11ea0 20 43 75 72 72 65 6e 74 20 72 65 67 69 73 74 65   Current registe
11eb0 72 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74  r */..  zAffinit
11ec0 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
11ed0 20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d   pData0 = &p->aM
11ee0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
11ef0 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 70  Last = &pData0[p
11f00 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20 66 6f 72  Op->p2-1];.  for
11f10 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
11f20 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
11f30 2b 29 7b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c  +){.    ExpandBl
11f40 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 61 70  ob(pRec);.    ap
11f50 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63  plyAffinity(pRec
11f60 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63  , zAffinity[pRec
11f70 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69  -pData0], encodi
11f80 6e 67 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ng);.  }.  break
11f90 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
11fa0 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32  MakeRecord P1 P2
11fb0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43   P3 P4 *.**.** C
11fc0 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74  onvert P2 regist
11fd0 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
11fe0 74 68 20 50 31 20 69 6e 74 6f 20 61 20 73 69 6e  th P1 into a sin
11ff0 67 6c 65 20 65 6e 74 72 79 0a 2a 2a 20 73 75 69  gle entry.** sui
12000 74 61 62 6c 65 20 66 6f 72 20 75 73 65 20 61 73  table for use as
12010 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69   a data record i
12020 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62  n a database tab
12030 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a  le or as a key.*
12040 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20  * in an index.  
12050 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74  The details of t
12060 68 65 20 66 6f 72 6d 61 74 20 61 72 65 20 69 72  he format are ir
12070 72 65 6c 65 76 61 6e 74 20 61 73 20 6c 6f 6e 67  relevant as long
12080 20 61 73 0a 2a 2a 20 74 68 65 20 4f 50 5f 43 6f   as.** the OP_Co
12090 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20  lumn opcode can 
120a0 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72  decode the recor
120b0 64 20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65 66 65  d later..** Refe
120c0 72 20 74 6f 20 73 6f 75 72 63 65 20 63 6f 64 65  r to source code
120d0 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 74 68   comments for th
120e0 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65  e details of the
120f0 20 72 65 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d 61   record.** forma
12100 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20  t..**.** P4 may 
12110 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  be a string that
12120 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
12130 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68  s long.  The nth
12140 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
12150 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
12160 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
12170 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
12180 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
12190 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65  r the nth.** fie
121a0 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ld of the index 
121b0 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  key..**.** The m
121c0 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72  apping from char
121d0 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74  acter to affinit
121e0 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68  y is given by th
121f0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a  e SQLITE_AFF_.**
12200 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
12210 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a  in sqliteInt.h..
12220 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e  **.** If P4 is N
12230 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  ULL then all ind
12240 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74  ex fields have t
12250 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45  he affinity NONE
12260 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b  ..*/.case OP_Mak
12270 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20  eRecord: {.  u8 
12280 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20  *zNewRecord;    
12290 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20      /* A buffer 
122a0 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
122b0 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
122c0 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ord */.  Mem *pR
122d0 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
122e0 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  /* The new recor
122f0 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61  d */.  u64 nData
12300 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12310 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
12320 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
12330 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20  /.  int nHdr;   
12340 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12350 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
12360 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
12370 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20  .  i64 nByte;   
12380 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
12390 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  a space required
123a0 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64   for this record
123b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b   */.  int nZero;
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
123d0 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
123e0 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
123f0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
12400 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20  .  int nVarint; 
12410 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12420 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
12430 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33  a varint */.  u3
12440 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20  2 serial_type;  
12450 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65       /* Type fie
12460 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61  ld */.  Mem *pDa
12470 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ta0;           /
12480 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f  * First field to
12490 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74   be combined int
124a0 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  o the record */.
124b0 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20    Mem *pLast;   
124c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
124d0 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65   field of the re
124e0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  cord */.  int nF
124f0 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  ield;           
12500 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
12510 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
12520 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  rd */.  char *zA
12530 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f  ffinity;       /
12540 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73  * The affinity s
12550 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65  tring for the re
12560 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69  cord */.  int fi
12570 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
12580 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20   /* File format 
12590 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64  to use for encod
125a0 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  ing */.  int i; 
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125c0 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e  /* Space used in
125d0 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 2a 2f   zNewRecord[] */
125e0 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20  .  int len;     
125f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
12600 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
12610 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67  /..  /* Assuming
12620 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74   the record cont
12630 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74  ains N fields, t
12640 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
12650 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65   looks.  ** like
12660 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a   this:.  **.  **
12670 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
12680 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12690 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c  ---------.  ** |
126c0 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65   hdr-size | type
126d0 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e   0 | type 1 | ..
126e0 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64  . | type N-1 | d
126f0 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74  ata0 | ... | dat
12700 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d  a N-1 | .  ** --
12710 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12720 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12730 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12740 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12750 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a  ------.  **.  **
12760 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65   Data(0) is take
12770 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
12780 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d  P1.  Data(1) com
12790 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  es from register
127a0 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73   P1+1.  ** and s
127b0 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20  o froth..  **.  
127c0 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65  ** Each type fie
127d0 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72  ld is a varint r
127e0 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
127f0 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74  serial type of t
12800 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70  he .  ** corresp
12810 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d  onding data elem
12820 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33  ent (see sqlite3
12830 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29  VdbeSerialType()
12840 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d  ). The.  ** hdr-
12850 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c  size field is al
12860 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63  so a varint whic
12870 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
12880 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
12890 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  ng.  ** of the r
128a0 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a  ecord to data0..
128b0 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30    */.  nData = 0
128c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
128d0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
128e0 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
128f0 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nHdr = 0;       
12900 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12910 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
12920 73 70 61 63 65 20 2a 2f 0a 20 20 6e 42 79 74 65  space */.  nByte
12930 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
12940 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
12950 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
12960 63 6f 72 64 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20  cord */.  nZero 
12970 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
12980 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
12990 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
129a0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
129b0 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d  .  nField = pOp-
129c0 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79  >p1;.  zAffinity
129d0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
129e0 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30  assert( nField>0
129f0 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26   && pOp->p2>0 &&
12a00 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c   pOp->p2+nField<
12a10 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20  =p->nMem+1 );.  
12a20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65  pData0 = &p->aMe
12a30 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69  m[nField];.  nFi
12a40 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  eld = pOp->p2;. 
12a50 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30   pLast = &pData0
12a60 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69  [nField-1];.  fi
12a70 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d  le_format = p->m
12a80 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
12a90 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68  t;..  /* Loop th
12aa0 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e  rough the elemen
12ab0 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b  ts that will mak
12ac0 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20  e up the record 
12ad0 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f  to figure.  ** o
12ae0 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63  ut how much spac
12af0 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  e is required fo
12b00 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
12b10 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65  ..  */.  for(pRe
12b20 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d  c=pData0; pRec<=
12b30 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a  pLast; pRec++){.
12b40 20 20 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74      if( zAffinit
12b50 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79  y ){.      apply
12b60 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a  Affinity(pRec, z
12b70 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44  Affinity[pRec-pD
12b80 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29  ata0], encoding)
12b90 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
12ba0 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
12bb0 5a 65 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e  Zero && pRec->n>
12bc0 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
12bd0 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42  e3VdbeMemExpandB
12be0 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 7d  lob(pRec);.    }
12bf0 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
12c00 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
12c10 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66  rialType(pRec, f
12c20 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20  ile_format);.   
12c30 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64   len = sqlite3Vd
12c40 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
12c50 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20  serial_type);.  
12c60 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a    nData += len;.
12c70 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69      nHdr += sqli
12c80 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72  te3VarintLen(ser
12c90 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69  ial_type);.    i
12ca0 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
12cb0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
12cc0 20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20     /* Only pure 
12cd0 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42  zero-filled BLOB
12ce0 73 20 63 61 6e 20 62 65 20 69 6e 70 75 74 20 74  s can be input t
12cf0 6f 20 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20  o this Opcode.. 
12d00 20 20 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f       ** We do no
12d10 74 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69  t allow blobs wi
12d20 74 68 20 61 20 70 72 65 66 69 78 20 61 6e 64 20  th a prefix and 
12d30 61 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61  a zero-filled ta
12d40 69 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65  il. */.      nZe
12d50 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  ro += pRec->u.nZ
12d60 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ero;.    }else i
12d70 66 28 20 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20  f( len ){.      
12d80 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d  nZero = 0;.    }
12d90 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20 74  .  }..  /* Add t
12da0 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64 65  he initial heade
12db0 72 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f 74  r varint and tot
12dc0 61 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20  al the size */. 
12dd0 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74   nHdr += nVarint
12de0 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74   = sqlite3Varint
12df0 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 69 66 28  Len(nHdr);.  if(
12e00 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33   nVarint<sqlite3
12e10 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20  VarintLen(nHdr) 
12e20 29 7b 0a 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20  ){.    nHdr++;. 
12e30 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64   }.  nByte = nHd
12e40 72 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20  r+nData-nZero;. 
12e50 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
12e60 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
12e70 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
12e80 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
12e90 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
12ea0 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72  ure the output r
12eb0 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75  egister has a bu
12ec0 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67  ffer large enoug
12ed0 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a  h to store .  **
12ee0 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e   the new record.
12ef0 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   The output regi
12f00 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69  ster (pOp->p3) i
12f10 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f  s not allowed to
12f20 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20  .  ** be one of 
12f30 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
12f40 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65  ers (because the
12f50 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20   following call 
12f60 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  to.  ** sqlite3V
12f70 64 62 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75  dbeMemGrow() cou
12f80 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76  ld clobber the v
12f90 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69  alue before it i
12fa0 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20  s used)..  */.  
12fb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
12fc0 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e  pOp->p1 || pOp->
12fd0 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  p3>=pOp->p1+pOp-
12fe0 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  >p2 );.  pOut = 
12ff0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
13000 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ];.  if( sqlite3
13010 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
13020 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30 29  , (int)nByte, 0)
13030 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
13040 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52  mem;.  }.  zNewR
13050 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f  ecord = (u8 *)pO
13060 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69  ut->z;..  /* Wri
13070 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  te the record */
13080 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74  .  i = putVarint
13090 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e  32(zNewRecord, n
130a0 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52 65 63  Hdr);.  for(pRec
130b0 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70  =pData0; pRec<=p
130c0 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20  Last; pRec++){. 
130d0 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d     serial_type =
130e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
130f0 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
13100 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 69  e_format);.    i
13110 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
13120 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20  &zNewRecord[i], 
13130 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20  serial_type);   
13140 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70     /* serial typ
13150 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28 70  e */.  }.  for(p
13160 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
13170 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
13180 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64 61 74  {  /* serial dat
13190 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 73 71  a */.    i += sq
131a0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50  lite3VdbeSerialP
131b0 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  ut(&zNewRecord[i
131c0 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65 2d 69  ], (int)(nByte-i
131d0 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66 6f 72  ), pRec,file_for
131e0 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65  mat);.  }.  asse
131f0 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( i==nByte );.
13200 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
13210 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
13220 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f  =p->nMem );.  pO
13230 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
13240 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  te;.  pOut->flag
13250 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d  s = MEM_Blob | M
13260 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e  EM_Dyn;.  pOut->
13270 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20  xDel = 0;.  if( 
13280 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75  nZero ){.    pOu
13290 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65  t->u.nZero = nZe
132a0 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ro;.    pOut->fl
132b0 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b  ags |= MEM_Zero;
132c0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  .  }.  pOut->enc
132d0 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20   = SQLITE_UTF8; 
132e0 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20   /* In case the 
132f0 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e  blob is ever con
13300 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a  verted to text *
13310 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  /.  REGISTER_TRA
13320 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  CE(pOp->p3, pOut
13330 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
13340 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
13350 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
13360 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20  pcode: Count P1 
13370 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  P2 * * *.**.** S
13380 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20  tore the number 
13390 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69  of entries (an i
133a0 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e  nteger value) in
133b0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
133c0 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62  dex .** opened b
133d0 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72  y cursor P1 in r
133e0 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69  egister P2.*/.#i
133f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13400 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73  T_BTREECOUNT.cas
13410 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20  e OP_Count: {   
13420 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
13430 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36  erelease */.  i6
13440 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75  4 nEntry;.  BtCu
13450 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20  rsor *pCrsr;..  
13460 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  pCrsr = p->apCsr
13470 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72 73  [pOp->p1]->pCurs
13480 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 20  or;.  if( pCrsr 
13490 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
134a0 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43  te3BtreeCount(pC
134b0 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20  rsr, &nEntry);. 
134c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45 6e 74   }else{.    nEnt
134d0 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 4f  ry = 0;.  }.  pO
134e0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
134f0 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Int;.  pOut->u.i
13500 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65   = nEntry;.  bre
13510 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
13520 20 4f 70 63 6f 64 65 3a 20 53 74 61 74 65 6d 65   Opcode: Stateme
13530 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  nt P1 * * * *.**
13540 0a 2a 2a 20 42 65 67 69 6e 20 61 6e 20 69 6e 64  .** Begin an ind
13550 69 76 69 64 75 61 6c 20 73 74 61 74 65 6d 65 6e  ividual statemen
13560 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68  t transaction wh
13570 69 63 68 20 69 73 20 70 61 72 74 20 6f 66 20 61  ich is part of a
13580 20 6c 61 72 67 65 72 0a 2a 2a 20 74 72 61 6e 73   larger.** trans
13590 61 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 73  action.  This is
135a0 20 6e 65 65 64 65 64 20 73 6f 20 74 68 61 74 20   needed so that 
135b0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
135c0 20 63 61 6e 20 62 65 20 72 6f 6c 6c 65 64 20 62   can be rolled b
135d0 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  ack after an err
135e0 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e  or without havin
135f0 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74  g to roll back t
13600 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61  he.** entire tra
13610 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20 73  nsaction.  The s
13620 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
13630 74 69 6f 6e 20 77 69 6c 6c 20 61 75 74 6f 6d 61  tion will automa
13640 74 69 63 61 6c 6c 79 0a 2a 2a 20 63 6f 6d 6d 69  tically.** commi
13650 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  t when the VDBE 
13660 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  halts..**.** If 
13670 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
13680 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
13690 6e 74 6c 79 20 69 6e 20 61 75 74 6f 63 6f 6d 6d  ntly in autocomm
136a0 69 74 20 6d 6f 64 65 20 28 74 68 61 74 20 0a 2a  it mode (that .*
136b0 2a 20 69 73 20 74 6f 20 73 61 79 2c 20 69 66 20  * is to say, if 
136c0 69 74 20 69 73 20 69 6e 20 62 65 74 77 65 65 6e  it is in between
136d0 20 42 45 47 49 4e 20 61 6e 64 20 43 4f 4d 4d 49   BEGIN and COMMI
136e0 54 29 0a 2a 2a 20 61 6e 64 20 69 66 20 74 68 65  T).** and if the
136f0 72 65 20 61 72 65 20 6e 6f 20 6f 74 68 65 72 20  re are no other 
13700 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
13710 73 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 64 61  s on the same da
13720 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
13730 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 69 73 20  tion, then this 
13740 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 61 20 6e  operation is a n
13750 6f 2d 6f 70 2e 20 20 4e 6f 20 73 74 61 74 65 6d  o-op.  No statem
13760 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
13770 2a 2a 20 69 73 20 6e 65 65 64 65 64 20 73 69 6e  ** is needed sin
13780 63 65 20 61 6e 79 20 65 72 72 6f 72 20 63 61 6e  ce any error can
13790 20 75 73 65 20 74 68 65 20 6e 6f 72 6d 61 6c 20   use the normal 
137a0 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73  ROLLBACK process
137b0 20 74 6f 0a 2a 2a 20 75 6e 64 6f 20 63 68 61 6e   to.** undo chan
137c0 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20  ges..**.** If a 
137d0 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
137e0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
137f0 2c 20 74 68 65 6e 20 61 20 73 74 61 74 65 6d 65  , then a stateme
13800 6e 74 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a  nt journal file.
13810 2a 2a 20 77 69 6c 6c 20 62 65 20 61 6c 6c 6f 63  ** will be alloc
13820 61 74 65 64 20 61 6e 64 20 69 6e 69 74 69 61 6c  ated and initial
13830 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ized..**.** The 
13840 73 74 61 74 65 6d 65 6e 74 20 69 73 20 62 65 67  statement is beg
13850 75 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  un on the databa
13860 73 65 20 66 69 6c 65 20 77 69 74 68 20 69 6e 64  se file with ind
13870 65 78 20 50 31 2e 20 20 54 68 65 20 6d 61 69 6e  ex P1.  The main
13880 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
13890 65 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  e has an index o
138a0 66 20 30 20 61 6e 64 20 74 68 65 20 66 69 6c 65  f 0 and the file
138b0 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
138c0 61 72 79 20 74 61 62 6c 65 73 0a 2a 2a 20 68 61  ary tables.** ha
138d0 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 31 2e  s an index of 1.
138e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 61 74  .*/.case OP_Stat
138f0 65 6d 65 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69  ement: {.  int i
13900 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  ;.  Btree *pBt;.
13910 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f    if( db->autoCo
13920 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61  mmit==0 || db->a
13930 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29  ctiveVdbeCnt>1 )
13940 7b 0a 20 20 20 20 69 20 3d 20 70 4f 70 2d 3e 70  {.    i = pOp->p
13950 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  1;.    assert( i
13960 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62  >=0 && i<db->nDb
13970 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
13980 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 21 3d  db->aDb[i].pBt!=
13990 30 20 29 3b 0a 20 20 20 20 70 42 74 20 3d 20 64  0 );.    pBt = d
139a0 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20  b->aDb[i].pBt;. 
139b0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
139c0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
139d0 28 70 42 74 29 20 29 3b 0a 20 20 20 20 61 73 73  (pBt) );.    ass
139e0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
139f0 73 6b 20 26 20 28 31 3c 3c 69 29 29 21 3d 30 20  sk & (1<<i))!=0 
13a00 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 69 53  );.    if( p->iS
13a10 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20  tatement==0 ){. 
13a20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
13a30 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26  >nStatement>=0 &
13a40 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  & db->nSavepoint
13a50 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  >=0 );.      db-
13a60 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a  >nStatement++; .
13a70 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
13a80 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
13a90 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
13aa0 65 6d 65 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 20  ement;.    }.   
13ab0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
13ac0 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c  eeBeginStmt(pBt,
13ad0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b   p->iStatement);
13ae0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
13af0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
13b00 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
13b10 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
13b20 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
13b30 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
13b40 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
13b50 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
13b60 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
13b70 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
13b80 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
13b90 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
13ba0 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
13bb0 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
13bc0 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
13bd0 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
13be0 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
13bf0 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
13c00 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
13c10 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
13c40 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
13c50 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13c70 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
13c80 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
13c90 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
13ca0 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
13cb0 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
13cc0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
13cd0 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
13ce0 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
13cf0 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
13d00 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
13d10 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
13d20 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
13d30 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
13d40 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
13d50 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
13d60 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
13d70 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
13d80 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
13d90 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
13da0 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
13db0 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
13dc0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
13dd0 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
13de0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
13df0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
13e00 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
13e10 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
13e20 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
13e30 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
13e40 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
13e50 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
13e60 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
13e70 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
13e80 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41  );..  if( p1==SA
13e90 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b  VEPOINT_BEGIN ){
13ea0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69  .    if( db->wri
13eb0 74 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20  teVdbeCnt>0 ){. 
13ec0 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61       /* A new sa
13ed0 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62  vepoint cannot b
13ee0 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65  e created if the
13ef0 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
13f00 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74  ite .      ** st
13f10 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f  atements (i.e. o
13f20 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69  pen read/write i
13f30 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20  ncremental blob 
13f40 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20  handles)..      
13f50 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
13f60 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
13f70 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
13f80 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e  ot open savepoin
13f90 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  t - ".        "S
13fa0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
13fb0 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
13fc0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
13fd0 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
13fe0 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71        nName = sq
13ff0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e  lite3Strlen30(zN
14000 61 6d 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  ame);..      /* 
14010 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76  Create a new sav
14020 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65  epoint structure
14030 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20  . */.      pNew 
14040 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
14050 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
14060 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65  Savepoint)+nName
14070 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  +1);.      if( p
14080 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70  New ){.        p
14090 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68  New->zName = (ch
140a0 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20  ar *)&pNew[1];. 
140b0 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e         memcpy(pN
140c0 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  ew->zName, zName
140d0 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  , nName+1);.    
140e0 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
140f0 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20  here is no open 
14100 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
14110 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61  n mark this as a
14120 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20   special.       
14130 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e   ** "transaction
14140 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a   savepoint". */.
14150 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
14160 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
14170 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
14180 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
14190 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
141a0 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
141b0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
141c0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64  lse{.          d
141d0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b  b->nSavepoint++;
141e0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a  .        }.    .
141f0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20          /* Link 
14200 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  the new savepoin
14210 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  t into the datab
14220 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73  ase handle's lis
14230 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e  t. */.        pN
14240 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e  ew->pNext = db->
14250 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
14260 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
14270 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20  nt = pNew;.     
14280 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
14290 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74  {.    iSavepoint
142a0 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69   = 0;..    /* Fi
142b0 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76  nd the named sav
142c0 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65  epoint. If there
142d0 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65   is no such save
142e0 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20  point, then an. 
142f0 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69     ** an error i
14300 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  s returned to th
14310 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20  e user.  */.    
14320 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65  for(.      pSave
14330 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76  point = db->pSav
14340 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70  epoint; .      p
14350 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c  Savepoint && sql
14360 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76  ite3StrICmp(pSav
14370 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a  epoint->zName, z
14380 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61  Name);.      pSa
14390 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
143a0 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20  oint->pNext.    
143b0 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f  ){.      iSavepo
143c0 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  int++;.    }.   
143d0 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74   if( !pSavepoint
143e0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
143f0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
14400 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20  ErrMsg, db, "no 
14410 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20  such savepoint: 
14420 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
14430 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
14440 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20  RROR;.    }else 
14450 69 66 28 20 0a 20 20 20 20 20 20 20 20 64 62 2d  if( .        db-
14460 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20  >writeVdbeCnt>0 
14470 7c 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e  || (p1==SAVEPOIN
14480 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 64 62  T_ROLLBACK && db
14490 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
144a0 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  1) .    ){.     
144b0 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f   /* It is not po
144c0 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73  ssible to releas
144d0 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76  e (commit) a sav
144e0 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20  epoint if there 
144f0 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63  are .      ** ac
14500 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65  tive write state
14510 6d 65 6e 74 73 2e 20 49 74 20 69 73 20 6e 6f 74  ments. It is not
14520 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 6f 6c   possible to rol
14530 6c 62 61 63 6b 20 61 20 73 61 76 65 70 6f 69 6e  lback a savepoin
14540 74 0a 20 20 20 20 20 20 2a 2a 20 69 66 20 74 68  t.      ** if th
14550 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
14560 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 74  ve statements at
14570 20 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20   all..      */. 
14580 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
14590 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
145a0 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20  g, db, .        
145b0 22 63 61 6e 6e 6f 74 20 25 73 20 73 61 76 65 70  "cannot %s savep
145c0 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65  oint - SQL state
145d0 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
145e0 73 22 2c 0a 20 20 20 20 20 20 20 20 28 70 31 3d  s",.        (p1=
145f0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
14600 41 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63 6b 22  ACK ? "rollback"
14610 3a 20 22 72 65 6c 65 61 73 65 22 29 0a 20 20 20  : "release").   
14620 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d     );.      rc =
14630 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
14640 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20    }else{..      
14650 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  /* Determine whe
14660 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73  ther or not this
14670 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
14680 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  n savepoint. If 
14690 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  so,.      ** and
146a0 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
146b0 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e  SE command, then
146c0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
146d0 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20  nsaction .      
146e0 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e  ** is committed.
146f0 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20   .      */.     
14700 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69   int isTransacti
14710 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  on = pSavepoint-
14720 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d  >pNext==0 && db-
14730 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
14740 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69  vepoint;.      i
14750 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  f( isTransaction
14760 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
14770 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
14780 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
14790 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  mit = 1;.       
147a0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
147b0 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
147c0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
147d0 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
147e0 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
147f0 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
14800 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
14810 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
14820 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
14830 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
14840 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
14850 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
14860 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20  avepoint = 0;.  
14870 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63        rc = p->rc
14880 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
14890 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
148a0 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
148b0 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
148c0 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  - 1;.        for
148d0 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
148e0 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
148f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
14900 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64  BtreeSavepoint(d
14910 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
14920 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
14930 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72  .          if( r
14940 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
14950 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f              goto
14960 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
14970 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ror;.          }
14980 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
14990 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
149a0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26  OINT_ROLLBACK &&
149b0 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49   (db->flags&SQLI
149c0 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
149d0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
149e0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
149f0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
14a00 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  s(db);.         
14a10 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
14a20 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
14a30 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  0);.        }.  
14a40 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
14a50 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  * Regardless of 
14a60 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
14a70 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c  a RELEASE or ROL
14a80 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61  LBACK, destroy a
14a90 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ll .      ** sav
14aa0 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69  epoints nested i
14ab0 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76  nside of the sav
14ac0 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
14ad0 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20  rated on. */.   
14ae0 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53     while( db->pS
14af0 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70  avepoint!=pSavep
14b00 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  oint ){.        
14b10 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65  pTmp = db->pSave
14b20 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
14b30 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
14b40 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  pTmp->pNext;.   
14b50 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
14b60 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20  ee(db, pTmp);.  
14b70 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
14b80 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  oint--;.      }.
14b90 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20  .      /* If it 
14ba0 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68  is a RELEASE, th
14bb0 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73  en destroy the s
14bc0 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
14bd0 70 65 72 61 74 65 64 20 6f 6e 20 74 6f 6f 20 2a  perated on too *
14be0 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
14bf0 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
14c00 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
14c10 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
14c20 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
14c30 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
14c40 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
14c50 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
14c60 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
14c70 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
14c80 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
14c90 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
14ca0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
14cb0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
14cc0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
14cd0 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62  }.    }.  }..  b
14ce0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
14cf0 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50  de: AutoCommit P
14d00 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
14d10 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73   Set the databas
14d20 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
14d30 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30  ag to P1 (1 or 0
14d40 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65  ). If P2 is true
14d50 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61  , roll.** back a
14d60 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74  ny currently act
14d70 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61  ive btree transa
14d80 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65  ctions. If there
14d90 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a   are any active.
14da0 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72  ** VMs (apart fr
14db0 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68  om this one), th
14dc0 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61  en a ROLLBACK fa
14dd0 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66  ils.  A COMMIT f
14de0 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65  ails if.** there
14df0 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
14e00 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76  ing VMs or activ
14e10 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73  e VMs that use s
14e20 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a  hared cache..**.
14e30 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
14e40 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56  ion causes the V
14e50 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61  M to halt..*/.ca
14e60 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74  se OP_AutoCommit
14e70 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65  : {.  int desire
14e80 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69  dAutoCommit;.  i
14e90 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20  nt iRollback;.  
14ea0 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20  int turnOnAC;.. 
14eb0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
14ec0 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  it = pOp->p1;.  
14ed0 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d  iRollback = pOp-
14ee0 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20  >p2;.  turnOnAC 
14ef0 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  = desiredAutoCom
14f00 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f  mit && !db->auto
14f10 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74  Commit;.  assert
14f20 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
14f30 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65  mit==1 || desire
14f40 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  dAutoCommit==0 )
14f50 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
14f60 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
14f70 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30   || iRollback==0
14f80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
14f90 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
14fa0 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73  0 );  /* At leas
14fb0 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73  t this one VM is
14fc0 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66   active */..  if
14fd0 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52  ( turnOnAC && iR
14fe0 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 61  ollback && db->a
14ff0 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29  ctiveVdbeCnt>1 )
15000 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
15010 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
15020 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41  lements a ROLLBA
15030 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  CK and other VMs
15040 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c   are.    ** stil
15050 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61  l running, and a
15060 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
15070 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61  active, return a
15080 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69  n error indicati
15090 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74  ng.    ** that t
150a0 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
150b0 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
150c0 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  . .    */.    sq
150d0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
150e0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
150f0 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
15100 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
15110 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
15120 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
15130 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d  ress");.    rc =
15140 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
15150 7d 65 6c 73 65 20 69 66 28 20 74 75 72 6e 4f 6e  }else if( turnOn
15160 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b  AC && !iRollback
15170 20 26 26 20 64 62 2d 3e 77 72 69 74 65 56 64 62   && db->writeVdb
15180 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 2f 2a  eCnt>1 ){.    /*
15190 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
151a0 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20  tion implements 
151b0 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68  a COMMIT and oth
151c0 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69  er VMs are writi
151d0 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e  ng.    ** return
151e0 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61   an error indica
151f0 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74  ting that the ot
15200 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d  her VMs must com
15210 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20  plete first. .  
15220 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
15230 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
15240 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
15250 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61  ot commit transa
15260 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20  ction - ".      
15270 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
15280 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
15290 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
152a0 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69  _BUSY;.  }else i
152b0 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  f( desiredAutoCo
152c0 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f  mmit!=db->autoCo
152d0 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20  mmit ){.    if( 
152e0 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20  iRollback ){.   
152f0 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72     assert( desir
15300 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
15310 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
15320 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b  RollbackAll(db);
15330 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
15340 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d  ommit = 1;.    }
15350 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
15360 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
15370 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
15380 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71  it;.      if( sq
15390 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
153a0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
153b0 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  .        p->pc =
153c0 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d   pc;.        db-
153d0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
153e0 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f  8)(1-desiredAuto
153f0 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20  Commit);.       
15400 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
15410 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
15420 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
15430 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  urn;.      }.   
15440 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64   }.    assert( d
15450 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30  b->nStatement==0
15460 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
15470 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64  loseSavepoints(d
15480 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72  b);.    if( p->r
15490 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
154a0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
154b0 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73  E_DONE;.    }els
154c0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
154d0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
154e0 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  }.    goto vdbe_
154f0 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b  return;.  }else{
15500 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
15510 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
15520 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28  g, db,.        (
15530 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  !desiredAutoComm
15540 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72  it)?"cannot star
15550 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
15560 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
15570 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20  tion":(.        
15580 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e  (iRollback)?"can
15590 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e  not rollback - n
155a0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
155b0 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20   active":.      
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61               "ca
155d0 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f  nnot commit - no
155e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
155f0 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20  active"));.     
15600 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51      .    rc = SQ
15610 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
15620 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
15630 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69  pcode: Transacti
15640 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  on P1 P2 * * *.*
15650 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61  *.** Begin a tra
15660 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20 74  nsaction.  The t
15670 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73 20  ransaction ends 
15680 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72  when a Commit or
15690 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63   Rollback.** opc
156a0 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ode is encounter
156b0 65 64 2e 20 20 44 65 70 65 6e 64 69 6e 67 20 6f  ed.  Depending o
156c0 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  n the ON CONFLIC
156d0 54 20 73 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a  T setting, the.*
156e0 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69  * transaction mi
156f0 67 68 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c  ght also be roll
15700 65 64 20 62 61 63 6b 20 69 66 20 61 6e 20 65 72  ed back if an er
15710 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
15720 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ed..**.** P1 is 
15730 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
15740 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f   database file o
15750 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e  n which the tran
15760 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74  saction is.** st
15770 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20  arted.  Index 0 
15780 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
15790 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e  base file and in
157a0 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20  dex 1 is the.** 
157b0 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
157c0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
157d0 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72   Indices of 2 or
157e0 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66   more are used f
157f0 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64  or.** attached d
15800 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
15810 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P2 is non-zer
15820 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d  o, then a write-
15830 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
15840 74 61 72 74 65 64 2e 20 20 41 20 52 45 53 45 52  tarted.  A RESER
15850 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f  VED lock is.** o
15860 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64  btained on the d
15870 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 65  atabase file whe
15880 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
15890 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
158a0 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70  .  No.** other p
158b0 72 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72 74  rocess can start
158c0 20 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20 74   another write t
158d0 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c 65  ransaction while
158e0 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f   this transactio
158f0 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79  n is.** underway
15900 2e 20 20 53 74 61 72 74 69 6e 67 20 61 20 77 72  .  Starting a wr
15910 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
15920 61 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20 72  also creates a r
15930 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
15940 20 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61 6e   A.** write tran
15950 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
15960 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 61  started before a
15970 6e 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62  ny changes can b
15980 65 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a  e made to the.**
15990 20 64 61 74 61 62 61 73 65 2e 20 20 49 66 20 50   database.  If P
159a0 32 20 69 73 20 32 20 6f 72 20 67 72 65 61 74 65  2 is 2 or greate
159b0 72 20 74 68 65 6e 20 61 6e 20 45 58 43 4c 55 53  r then an EXCLUS
159c0 49 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c 73 6f  IVE lock is also
159d0 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f 6e 20   obtained.** on 
159e0 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  the file..**.** 
159f0 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74  If P2 is zero, t
15a00 68 65 6e 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20  hen a read-lock 
15a10 69 73 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74  is obtained on t
15a20 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
15a30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61  ..*/.case OP_Tra
15a40 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e  nsaction: {.  in
15a50 74 20 69 3b 0a 20 20 42 74 72 65 65 20 2a 70 42  t i;.  Btree *pB
15a60 74 3b 0a 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70  t;..  i = pOp->p
15a70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  1;.  assert( i>=
15a80 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 20 29  0 && i<db->nDb )
15a90 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
15aa0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
15ab0 69 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20  i))!=0 );.  pBt 
15ac0 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  = db->aDb[i].pBt
15ad0 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  ;..  if( pBt ){.
15ae0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
15af0 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
15b00 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  pBt, pOp->p2);. 
15b10 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
15b20 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
15b30 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
15b40 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
15b50 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
15b60 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
15b70 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  rn;.    }.    if
15b80 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
15b90 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 45  && rc!=SQLITE_RE
15ba0 41 44 4f 4e 4c 59 20 2f 2a 20 26 26 20 72 63 21  ADONLY /* && rc!
15bb0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 2a 2f 20  =SQLITE_BUSY */ 
15bc0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
15bd0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15be0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
15bf0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
15c00 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
15c10 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
15c20 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
15c30 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
15c40 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
15c50 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
15c60 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20  er P2..** P3==1 
15c70 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
15c80 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73  rsion.  P3==2 is
15c90 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
15ca0 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69  rmat..** P3==3 i
15cb0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
15cc0 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
15cd0 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
15ce0 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
15cf0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
15d00 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
15d10 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
15d20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
15d30 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
15d40 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  tables..**.** Th
15d50 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65  ere must be a re
15d60 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad-lock on the d
15d70 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20  atabase (either 
15d80 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  a transaction.**
15d90 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
15da0 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62   or there must b
15db0 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  e an open cursor
15dc0 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63  ) before.** exec
15dd0 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  uting this instr
15de0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
15df0 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b  OP_ReadCookie: {
15e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15e10 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
15e20 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61  e */.  int iMeta
15e30 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
15e40 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 69  nt iCookie;..  i
15e50 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
15e60 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70  iCookie = pOp->p
15e70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  3;.  assert( pOp
15e80 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p3<SQLITE_N_BT
15e90 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
15ea0 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
15eb0 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
15ec0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
15ed0 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a  [iDb].pBt!=0 );.
15ee0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
15ef0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44  reeMask & (1<<iD
15f00 62 29 29 21 3d 30 20 29 3b 0a 0a 20 20 72 63 20  b))!=0 );..  rc 
15f10 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  = sqlite3BtreeGe
15f20 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
15f30 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c  b].pBt, iCookie,
15f40 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
15f50 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
15f60 4d 65 74 61 3b 0a 20 20 4d 65 6d 53 65 74 54 79  Meta;.  MemSetTy
15f70 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
15f80 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
15f90 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
15fa0 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
15fb0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
15fc0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
15fd0 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74  register P3 (int
15fe0 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
15ff0 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20  nteger).** into 
16000 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
16010 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
16020 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73    P2==1 is the s
16030 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
16040 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65  .** P2==2 is the
16050 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
16060 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72  . P2==3 is the r
16070 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
16080 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c   cache .** size,
16090 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
160a0 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69  P1==0 is the mai
160b0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
160c0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
160d0 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69   .** database fi
160e0 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
160f0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
16100 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73  s..**.** A trans
16110 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
16120 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78  tarted before ex
16130 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63  ecuting this opc
16140 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
16150 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  SetCookie: {    
16160 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44     /* in3 */.  D
16170 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74  b *pDb;.  assert
16180 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
16190 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
161a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
161b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
161c0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
161d0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
161e0 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
161f0 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20  1))!=0 );.  pDb 
16200 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
16210 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
16220 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
16230 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
16240 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a  tegerify(pIn3);.
16250 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
16260 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
16270 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
16280 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
16290 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
162a0 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
162b0 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e  Op->p2, (int)pIn
162c0 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70  3->u.i);.  if( p
162d0 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43  Op->p2==BTREE_SC
162e0 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a  HEMA_VERSION ){.
162f0 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20      /* When the 
16300 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
16310 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68  anges, record th
16320 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74  e new cookie int
16330 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70  ernally */.    p
16340 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68  Db->pSchema->sch
16350 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e  ema_cookie = (in
16360 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn3->u.i;.   
16370 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
16380 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
16390 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  es;.  }else if( 
163a0 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46  pOp->p2==BTREE_F
163b0 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20  ILE_FORMAT ){.  
163c0 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e    /* Record chan
163d0 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20  ges in the file 
163e0 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44  format */.    pD
163f0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
16400 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49  _format = (u8)pI
16410 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69  n3->u.i;.  }.  i
16420 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
16430 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
16440 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
16450 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
16460 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
16470 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
16480 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
16490 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
164a0 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
164b0 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
164c0 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 0a 20 20  ents(db);.  }.  
164d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
164e0 6f 64 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69  ode: VerifyCooki
164f0 65 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20  e P1 P2 *.**.** 
16500 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20  Check the value 
16510 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74 61 62 61  of global databa
16520 73 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  se parameter num
16530 62 65 72 20 30 20 28 74 68 65 0a 2a 2a 20 73 63  ber 0 (the.** sc
16540 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 20 61 6e  hema version) an
16550 64 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69  d make sure it i
16560 73 20 65 71 75 61 6c 20 74 6f 20 50 32 2e 20 20  s equal to P2.  
16570 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 64 61  .** P1 is the da
16580 74 61 62 61 73 65 20 6e 75 6d 62 65 72 20 77 68  tabase number wh
16590 69 63 68 20 69 73 20 30 20 66 6f 72 20 74 68 65  ich is 0 for the
165a0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
165b0 69 6c 65 0a 2a 2a 20 61 6e 64 20 31 20 66 6f 72  ile.** and 1 for
165c0 20 74 68 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e   the file holdin
165d0 67 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  g temporary tabl
165e0 65 73 20 61 6e 64 20 73 6f 6d 65 20 68 69 67 68  es and some high
165f0 65 72 20 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f 72  er number.** for
16600 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
16610 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ases..**.** The 
16620 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69  cookie changes i
16630 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65  ts value wheneve
16640 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
16650 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a  chema changes..*
16660 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
16670 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
16680 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65  ct when that the
16690 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e   cookie has chan
166a0 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20  ged.** and that 
166b0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
166c0 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72  ess needs to rer
166d0 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 0a  ead the schema..
166e0 2a 2a 0a 2a 2a 20 45 69 74 68 65 72 20 61 20 74  **.** Either a t
166f0 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73  ransaction needs
16700 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 73 74   to have been st
16710 61 72 74 65 64 20 6f 72 20 61 6e 20 4f 50 5f 4f  arted or an OP_O
16720 70 65 6e 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20  pen needs.** to 
16730 62 65 20 65 78 65 63 75 74 65 64 20 28 74 6f 20  be executed (to 
16740 65 73 74 61 62 6c 69 73 68 20 61 20 72 65 61 64  establish a read
16750 20 6c 6f 63 6b 29 20 62 65 66 6f 72 65 20 74 68   lock) before th
16760 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20  is opcode is.** 
16770 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65  invoked..*/.case
16780 20 4f 50 5f 56 65 72 69 66 79 43 6f 6f 6b 69 65   OP_VerifyCookie
16790 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b  : {.  int iMeta;
167a0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20  .  Btree *pBt;. 
167b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
167c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
167d0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
167e0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
167f0 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29  k & (1<<pOp->p1)
16800 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  )!=0 );.  pBt = 
16810 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
16820 2e 70 42 74 3b 0a 20 20 69 66 28 20 70 42 74 20  .pBt;.  if( pBt 
16830 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
16840 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
16850 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d  pBt, BTREE_SCHEM
16860 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20  A_VERSION, (u32 
16870 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 7d 65 6c  *)&iMeta);.  }el
16880 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  se{.    rc = SQL
16890 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 69 4d 65 74  ITE_OK;.    iMet
168a0 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  a = 0;.  }.  if(
168b0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
168c0 26 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32  & iMeta!=pOp->p2
168d0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
168e0 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
168f0 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
16900 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
16910 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74  bStrDup(db, "dat
16920 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
16930 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20   changed");.    
16940 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  /* If the schema
16950 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65  -cookie from the
16960 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
16970 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69  atches the cooki
16980 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64  e .    ** stored
16990 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d   with the in-mem
169a0 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69  ory representati
169b0 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  on of the schema
169c0 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20  , do.    ** not 
169d0 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
169e0 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  a from the datab
169f0 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a  ase file..    **
16a00 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75  .    ** If virtu
16a10 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e  al-tables are in
16a20 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f   use, this is no
16a30 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69  t just an optimi
16a40 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f  zation..    ** O
16a50 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73  ften, v-tables s
16a60 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20  tore their data 
16a70 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  in other SQLite 
16a80 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20  tables, which.  
16a90 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64    ** are queried
16aa0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65   from within xNe
16ab0 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76  xt() and other v
16ac0 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75  -table methods u
16ad0 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70  sing.    ** prep
16ae0 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66  ared queries. If
16af0 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73   such a query is
16b00 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65   out-of-date, we
16b10 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a   do not want to.
16b20 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74      ** discard t
16b30 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
16b40 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20  ma, as the user 
16b50 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  code implementin
16b60 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74  g the.    ** v-t
16b70 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20  able would have 
16b80 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20  to be ready for 
16b90 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
16ba0 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c   structure itsel
16bb0 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69  f.    ** to be i
16bc0 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65  nvalidated whene
16bd0 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ver sqlite3_step
16be0 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  () is called fro
16bf0 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a  m within .    **
16c00 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f   a v-table metho
16c10 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
16c20 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  ( db->aDb[pOp->p
16c30 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  1].pSchema->sche
16c40 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61  ma_cookie!=iMeta
16c50 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
16c60 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63  3ResetInternalSc
16c70 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31  hema(db, pOp->p1
16c80 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  );.    }..    sq
16c90 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
16ca0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
16cb0 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
16cc0 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
16cd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
16ce0 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
16cf0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
16d00 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d  .** Open a read-
16d10 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20  only cursor for 
16d20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
16d30 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  le whose root pa
16d40 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61  ge is.** P2 in a
16d50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
16d60 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69   The database fi
16d70 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  le is determined
16d80 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d   by P3. .** P3==
16d90 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e  0 means the main
16da0 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31   database, P3==1
16db0 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62   means the datab
16dc0 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a  ase used for .**
16dd0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
16de0 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e  s, and P3>1 mean
16df0 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65  s used the corre
16e00 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65  sponding attache
16e10 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20  d.** database.  
16e20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72  Give the new cur
16e30 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65  sor an identifie
16e40 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31  r of P1.  The P1
16e50 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20  .** values need 
16e60 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75  not be contiguou
16e70 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c  s but all P1 val
16e80 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d  ues should be sm
16e90 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  all integers..**
16ea0 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
16eb0 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67  for P1 to be neg
16ec0 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ative..**.** If 
16ed0 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74  P5!=0 then use t
16ee0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
16ef0 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68 65  gister P2 as the
16f00 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a   root page, not.
16f10 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
16f20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a  P2 itself..**.**
16f30 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61   There will be a
16f40 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68   read lock on th
16f50 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65  e database whene
16f60 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a  ver there is an.
16f70 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20  ** open cursor. 
16f80 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
16f90 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72   was unlocked pr
16fa0 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74  ior to this inst
16fb0 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20  ruction.** then 
16fc0 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61  a read lock is a
16fd0 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74 20  cquired as part 
16fe0 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  of this instruct
16ff0 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20  ion.  A read.** 
17000 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65  lock allows othe
17010 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72  r processes to r
17020 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
17030 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a   but prohibits.*
17040 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63  * any other proc
17050 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69  ess from modifyi
17060 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  ng the database.
17070 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20    The read lock 
17080 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77  is.** released w
17090 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20  hen all cursors 
170a0 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20  are closed.  If 
170b0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
170c0 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20   attempts.** to 
170d0 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  get a read lock 
170e0 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73  but fails, the s
170f0 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73  cript terminates
17100 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49   with an.** SQLI
17110 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f  TE_BUSY error co
17120 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  de..**.** The P4
17130 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
17140 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
17150 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
17160 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
17170 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
17180 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
17190 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
171a0 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
171b0 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
171c0 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
171d0 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
171e0 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
171f0 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
17200 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
17210 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
17220 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
17230 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
17240 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
17250 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
17260 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
17270 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65   table..**.** Se
17280 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65  e also OpenWrite
17290 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
172a0 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20  OpenWrite P1 P2 
172b0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f  P3 P4 P5.**.** O
172c0 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
172d0 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
172e0 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
172f0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
17300 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
17310 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
17320 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
17330 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
17340 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
17350 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
17360 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
17370 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
17380 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
17390 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
173a0 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
173b0 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
173c0 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
173d0 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
173e0 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
173f0 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
17400 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
17410 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
17420 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
17430 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
17440 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
17450 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
17460 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
17470 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
17480 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
17490 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
174a0 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
174b0 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
174c0 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
174d0 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
174e0 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
174f0 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
17500 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
17510 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
17520 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
17530 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
17540 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
17550 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
17560 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
17570 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
17580 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
17590 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
175a0 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
175b0 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
175c0 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
175d0 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
175e0 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
175f0 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20  _OpenRead:.case 
17600 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a  OP_OpenWrite: {.
17610 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
17620 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
17630 6f 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  o;.  int i;.  in
17640 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b  t p2;.  int iDb;
17650 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
17660 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
17670 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
17680 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 69 6e 74    Db *pDb;.  int
17690 20 66 6c 61 67 73 3b 0a 0a 20 20 6e 46 69 65 6c   flags;..  nFiel
176a0 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66  d = 0;.  pKeyInf
176b0 6f 20 3d 20 30 3b 0a 20 20 69 20 3d 20 70 4f 70  o = 0;.  i = pOp
176c0 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
176d0 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f  ->p2;.  iDb = pO
176e0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
176f0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
17700 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
17710 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
17720 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30  k & (1<<iDb))!=0
17730 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
17740 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20  >aDb[iDb];.  pX 
17750 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73  = pDb->pBt;.  as
17760 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20  sert( pX!=0 );. 
17770 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
17780 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
17790 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 31  {.    wrFlag = 1
177a0 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70  ;.    if( pDb->p
177b0 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
177c0 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74  mat < p->minWrit
177d0 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20  eFileFormat ){. 
177e0 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65       p->minWrite
177f0 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62  FileFormat = pDb
17800 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
17810 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20  format;.    }.  
17820 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61  }else{.    wrFla
17830 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  g = 0;.  }.  if(
17840 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
17850 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a  assert( p2>0 );.
17860 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d      assert( p2<=
17870 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 70  p->nMem );.    p
17880 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In2 = &p->aMem[p
17890 32 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  2];.    sqlite3V
178a0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
178b0 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d  (pIn2);.    p2 =
178c0 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b   (int)pIn2->u.i;
178d0 0a 20 20 20 20 69 66 28 20 70 32 3c 32 20 29 20  .    if( p2<2 ) 
178e0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
178f0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
17900 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
17910 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17920 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73  .    }.  }.  ass
17930 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20 69  ert( i>=0 );.  i
17940 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
17950 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20  P4_KEYINFO ){.  
17960 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
17970 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
17980 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63     pKeyInfo->enc
17990 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20   = ENC(p->db);. 
179a0 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79     nField = pKey
179b0 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b 0a  Info->nField+1;.
179c0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
179d0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
179e0 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  2 ){.    nField 
179f0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d  = pOp->p4.i;.  }
17a00 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
17a10 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c 20 6e  teCursor(p, i, n
17a20 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a  Field, iDb, 1);.
17a30 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20    if( pCur==0 ) 
17a40 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
17a50 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  Cur->nullRow = 1
17a60 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
17a70 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20  BtreeCursor(pX, 
17a80 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79  p2, wrFlag, pKey
17a90 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72  Info, pCur->pCur
17aa0 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b  sor);.  pCur->pK
17ab0 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
17ac0 6f 3b 0a 0a 20 20 73 77 69 74 63 68 28 20 72 63  o;..  switch( rc
17ad0 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c   ){.    case SQL
17ae0 49 54 45 5f 42 55 53 59 3a 20 7b 0a 20 20 20 20  ITE_BUSY: {.    
17af0 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
17b00 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
17b10 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
17b20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
17b30 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
17b40 63 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20  case SQLITE_OK: 
17b50 7b 0a 20 20 20 20 20 20 66 6c 61 67 73 20 3d 20  {.      flags = 
17b60 73 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67  sqlite3BtreeFlag
17b70 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29  s(pCur->pCursor)
17b80 3b 0a 20 20 20 20 20 20 2f 2a 20 53 61 6e 69 74  ;.      /* Sanit
17b90 79 20 63 68 65 63 6b 69 6e 67 2e 20 20 4f 6e 6c  y checking.  Onl
17ba0 79 20 74 68 65 20 6c 6f 77 65 72 20 66 6f 75 72  y the lower four
17bb0 20 62 69 74 73 20 6f 66 20 74 68 65 20 66 6c 61   bits of the fla
17bc0 67 73 20 62 79 74 65 20 73 68 6f 75 6c 64 0a 20  gs byte should. 
17bd0 20 20 20 20 20 2a 2a 20 62 65 20 75 73 65 64 2e       ** be used.
17be0 20 20 42 69 74 20 33 20 28 6d 61 73 6b 20 30 78    Bit 3 (mask 0x
17bf0 30 38 29 20 69 73 20 75 6e 70 72 65 64 69 63 74  08) is unpredict
17c00 61 62 6c 65 2e 20 20 54 68 65 20 6c 6f 77 65 72  able.  The lower
17c10 20 33 20 62 69 74 73 0a 20 20 20 20 20 20 2a 2a   3 bits.      **
17c20 20 28 6d 61 73 6b 20 30 78 30 37 29 20 73 68 6f   (mask 0x07) sho
17c30 75 6c 64 20 62 65 20 65 69 74 68 65 72 20 35 20  uld be either 5 
17c40 28 69 6e 74 6b 65 79 2b 6c 65 61 66 64 61 74 61  (intkey+leafdata
17c50 20 66 6f 72 20 74 61 62 6c 65 73 29 20 6f 72 0a   for tables) or.
17c60 20 20 20 20 20 20 2a 2a 20 32 20 28 7a 65 72 6f        ** 2 (zero
17c70 64 61 74 61 20 66 6f 72 20 69 6e 64 69 63 65 73  data for indices
17c80 29 2e 20 20 49 66 20 74 68 65 73 65 20 63 6f 6e  ).  If these con
17c90 64 69 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20  ditions are not 
17ca0 6d 65 74 20 69 74 20 63 61 6e 0a 20 20 20 20 20  met it can.     
17cb0 20 2a 2a 20 6f 6e 6c 79 20 6d 65 61 6e 20 74 68   ** only mean th
17cc0 61 74 20 77 65 20 61 72 65 20 64 65 61 6c 69 6e  at we are dealin
17cd0 67 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74  g with a corrupt
17ce0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20   database file. 
17cf0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
17d00 28 20 28 66 6c 61 67 73 20 26 20 30 78 66 30 29  ( (flags & 0xf0)
17d10 21 3d 30 20 7c 7c 20 28 28 66 6c 61 67 73 20 26  !=0 || ((flags &
17d20 20 30 78 30 37 29 21 3d 35 20 26 26 20 28 66 6c   0x07)!=5 && (fl
17d30 61 67 73 20 26 20 30 78 30 37 29 21 3d 32 29 20  ags & 0x07)!=2) 
17d40 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
17d50 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
17d60 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  KPT;.        got
17d70 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
17d80 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
17d90 20 20 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c      pCur->isTabl
17da0 65 20 3d 20 28 66 6c 61 67 73 20 26 20 42 54 52  e = (flags & BTR
17db0 45 45 5f 49 4e 54 4b 45 59 29 21 3d 30 20 3f 31  EE_INTKEY)!=0 ?1
17dc0 3a 30 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e  :0;.      pCur->
17dd0 69 73 49 6e 64 65 78 20 3d 20 28 66 6c 61 67 73  isIndex = (flags
17de0 20 26 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54   & BTREE_ZERODAT
17df0 41 29 21 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20  A)!=0 ?1:0;.    
17e00 20 20 2f 2a 20 49 66 20 50 34 3d 3d 30 20 69 74    /* If P4==0 it
17e10 20 6d 65 61 6e 73 20 77 65 20 61 72 65 20 65 78   means we are ex
17e20 70 65 63 74 65 64 20 74 6f 20 6f 70 65 6e 20 61  pected to open a
17e30 20 74 61 62 6c 65 2e 20 20 49 66 20 50 34 21 3d   table.  If P4!=
17e40 30 20 74 68 65 6e 0a 20 20 20 20 20 20 2a 2a 20  0 then.      ** 
17e50 77 65 20 65 78 70 65 63 74 20 74 6f 20 62 65 20  we expect to be 
17e60 6f 70 65 6e 69 6e 67 20 61 6e 20 69 6e 64 65 78  opening an index
17e70 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f  .  If this is no
17e80 74 20 77 68 61 74 20 68 61 70 70 65 6e 65 64 2c  t what happened,
17e90 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74  .      ** then t
17ea0 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63  he database is c
17eb0 6f 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2f 0a  orrupt.      */.
17ec0 20 20 20 20 20 20 69 66 28 20 28 70 43 75 72 2d        if( (pCur-
17ed0 3e 69 73 54 61 62 6c 65 20 26 26 20 70 4f 70 2d  >isTable && pOp-
17ee0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
17ef0 4e 46 4f 29 0a 20 20 20 20 20 20 20 7c 7c 20 28  NFO).       || (
17f00 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 26 26  pCur->isIndex &&
17f10 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34   pOp->p4type!=P4
17f20 5f 4b 45 59 49 4e 46 4f 29 20 29 7b 0a 20 20 20  _KEYINFO) ){.   
17f30 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
17f40 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
17f50 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
17f60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17f70 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
17f80 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  eak;.    }.    c
17f90 61 73 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59  ase SQLITE_EMPTY
17fa0 3a 20 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e  : {.      pCur->
17fb0 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70  isTable = pOp->p
17fc0 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46  4type!=P4_KEYINF
17fd0 4f 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69  O;.      pCur->i
17fe0 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e  sIndex = !pCur->
17ff0 69 73 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 70  isTable;.      p
18000 43 75 72 2d 3e 70 43 75 72 73 6f 72 20 3d 20 30  Cur->pCursor = 0
18010 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
18020 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 62 72  ITE_OK;.      br
18030 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  eak;.    }.    d
18040 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
18050 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18060 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
18070 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
18080 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70  * Opcode: OpenEp
18090 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20  hemeral P1 P2 * 
180a0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  P4 *.**.** Open 
180b0 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20  a new cursor P1 
180c0 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  to a transient t
180d0 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
180e0 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70  sor is always op
180f0 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20  ened read/write 
18100 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20  even if .** the 
18110 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
18120 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65   read-only.  The
18130 20 74 72 61 6e 73 69 65 6e 74 20 6f 72 20 76 69   transient or vi
18140 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  rtual.** table i
18150 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
18160 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
18170 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
18180 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  d..**.** P2 is t
18190 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
181a0 75 6d 6e 73 20 69 6e 20 74 68 65 20 76 69 72 74  umns in the virt
181b0 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  ual table..** Th
181c0 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20  e cursor points 
181d0 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65  to a BTree table
181e0 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f   if P4==0 and to
181f0 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a   a BTree index.*
18200 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30  * if P4 is not 0
18210 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
18220 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20  NULL, it points 
18230 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  to a KeyInfo str
18240 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64  ucture.** that d
18250 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61  efines the forma
18260 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65  t of keys in the
18270 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68   index..**.** Th
18280 69 73 20 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e  is opcode was on
18290 63 65 20 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65  ce called OpenTe
182a0 6d 70 2e 20 20 42 75 74 20 74 68 61 74 20 63 72  mp.  But that cr
182b0 65 61 74 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69  eated.** confusi
182c0 6f 6e 20 62 65 63 61 75 73 65 20 74 68 65 20 74  on because the t
182d0 65 72 6d 20 22 74 65 6d 70 20 74 61 62 6c 65 22  erm "temp table"
182e0 2c 20 6d 69 67 68 74 20 72 65 66 65 72 20 65 69  , might refer ei
182f0 74 68 65 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d  ther.** to a TEM
18300 50 20 74 61 62 6c 65 20 61 74 20 74 68 65 20 53  P table at the S
18310 51 4c 20 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20  QL level, or to 
18320 61 20 74 61 62 6c 65 20 6f 70 65 6e 65 64 20 62  a table opened b
18330 79 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65  y.** this opcode
18340 2e 20 20 54 68 65 6e 20 74 68 69 73 20 6f 70 63  .  Then this opc
18350 6f 64 65 20 77 61 73 20 63 61 6c 6c 20 4f 70 65  ode was call Ope
18360 6e 56 69 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a  nVirtual.  But.*
18370 2a 20 74 68 61 74 20 63 72 65 61 74 65 64 20 63  * that created c
18380 6f 6e 66 75 73 69 6f 6e 20 77 69 74 68 20 74 68  onfusion with th
18390 65 20 77 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d  e whole virtual-
183a0 74 61 62 6c 65 20 69 64 65 61 2e 0a 2a 2f 0a 63  table idea..*/.c
183b0 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
183c0 65 72 61 6c 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  eral: {.  int i;
183d0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
183e0 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  Cx;.  static con
183f0 73 74 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73  st int openFlags
18400 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45   = .      SQLITE
18410 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20  _OPEN_READWRITE 
18420 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
18430 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20  PEN_CREATE |.   
18440 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45     SQLITE_OPEN_E
18450 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20  XCLUSIVE |.     
18460 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c   SQLITE_OPEN_DEL
18470 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20  ETEONCLOSE |.   
18480 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54     SQLITE_OPEN_T
18490 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20 20  RANSIENT_DB;..  
184a0 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  i = pOp->p1;.  a
184b0 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20  ssert( i>=0 );. 
184c0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
184d0 75 72 73 6f 72 28 70 2c 20 69 2c 20 70 4f 70 2d  ursor(p, i, pOp-
184e0 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69  >p2, -1, 1);.  i
184f0 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
18500 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
18510 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72  nullRow = 1;.  r
18520 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
18530 46 61 63 74 6f 72 79 28 64 62 2c 20 30 2c 20 31  Factory(db, 0, 1
18540 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  , SQLITE_DEFAULT
18550 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45  _TEMP_CACHE_SIZE
18560 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 0a 20 20 20  , openFlags,.   
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 20 20 20 20 20 20 20 20 26 70 43 78 2d 3e 70 42          &pCx->pB
18590 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  t);.  if( rc==SQ
185a0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
185b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
185c0 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e  BeginTrans(pCx->
185d0 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69  pBt, 1);.  }.  i
185e0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
185f0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20   ){.    /* If a 
18600 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20  transient index 
18610 69 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65  is required, cre
18620 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e  ate it by callin
18630 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  g.    ** sqlite3
18640 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
18650 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45  () with the BTRE
18660 45 5f 5a 45 52 4f 44 41 54 41 20 66 6c 61 67 20  E_ZERODATA flag 
18670 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70  before.    ** op
18680 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74  ening it. If a t
18690 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69  ransient table i
186a0 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74  s required, just
186b0 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20   use the.    ** 
186c0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
186d0 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74 68  eated table with
186e0 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e   root-page 1 (an
186f0 20 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a   INTKEY table)..
18700 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70      */.    if( p
18710 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 20  Op->p4.pKeyInfo 
18720 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e  ){.      int pgn
18730 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  o;.      assert(
18740 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
18750 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20  _KEYINFO );.    
18760 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
18770 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
18780 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Cx->pBt, &pgno, 
18790 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 3b  BTREE_ZERODATA);
187a0 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
187b0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
187c0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
187d0 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
187e0 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   );.        rc =
187f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
18800 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67  sor(pCx->pBt, pg
18810 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20 20 20  no, 1, .        
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18830 20 20 20 20 20 20 20 20 28 4b 65 79 49 6e 66 6f          (KeyInfo
18840 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 78  *)pOp->p4.z, pCx
18850 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
18860 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
18870 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
18880 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 70 43  Info;.        pC
18890 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  x->pKeyInfo->enc
188a0 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20   = ENC(p->db);. 
188b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78       }.      pCx
188c0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20  ->isTable = 0;. 
188d0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
188e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
188f0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
18900 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31  , MASTER_ROOT, 1
18910 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f  , 0, pCx->pCurso
18920 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69  r);.      pCx->i
18930 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20  sTable = 1;.    
18940 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 49  }.  }.  pCx->isI
18950 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e 69 73 54  ndex = !pCx->isT
18960 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  able;.  break;.}
18970 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
18980 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33  nPseudo P1 P2 P3
18990 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20   * *.**.** Open 
189a0 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
189b0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
189c0 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
189d0 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
189e0 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
189f0 20 41 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20   Any attempt to 
18a00 77 72 69 74 65 20 61 20 73 65 63 6f 6e 64 20 72  write a second r
18a10 6f 77 20 6f 66 20 64 61 74 61 20 63 61 75 73 65  ow of data cause
18a20 73 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 72  s the.** first r
18a30 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64  ow to be deleted
18a40 2e 20 20 41 6c 6c 20 64 61 74 61 20 69 73 20 64  .  All data is d
18a50 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65 20  eleted when the 
18a60 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6c 6f  cursor is.** clo
18a70 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65  sed..**.** A pse
18a80 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65  udo-table create
18a90 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
18aa0 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20 68   is useful for h
18ab0 6f 6c 64 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 45  olding the.** NE
18ac0 57 20 6f 72 20 4f 4c 44 20 74 61 62 6c 65 73 20  W or OLD tables 
18ad0 69 6e 20 61 20 74 72 69 67 67 65 72 2e 20 20 41  in a trigger.  A
18ae0 6c 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  lso used to hold
18af0 20 74 68 65 20 61 20 73 69 6e 67 6c 65 0a 2a 2a   the a single.**
18b00 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
18b10 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
18b20 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
18b30 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
18b40 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
18b50 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
18b60 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
18b70 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
18b80 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 65 78 65  OP_Insert is exe
18b90 63 75 74 65 64 20 74 6f 20 69 6e 73 65 72 74 20  cuted to insert 
18ba0 61 20 72 6f 77 20 69 6e 20 74 6f 20 74 68 65 20  a row in to the 
18bb0 70 73 65 75 64 6f 20 74 61 62 6c 65 2c 0a 2a 2a  pseudo table,.**
18bc0 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
18bd0 65 20 63 75 72 73 6f 72 20 6d 61 79 20 6f 72 20  e cursor may or 
18be0 6d 61 79 20 6e 6f 74 20 6d 61 6b 65 20 69 74 27  may not make it'
18bf0 73 20 6f 77 6e 20 63 6f 70 79 20 6f 66 20 74 68  s own copy of th
18c00 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72 6f  e.** original ro
18c10 77 20 64 61 74 61 2e 20 49 66 20 50 32 20 69 73  w data. If P2 is
18c20 20 30 2c 20 74 68 65 6e 20 74 68 65 20 70 73 65   0, then the pse
18c30 75 64 6f 2d 74 61 62 6c 65 20 77 69 6c 6c 20 63  udo-table will c
18c40 6f 70 79 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69  opy the.** origi
18c50 6e 61 6c 20 72 6f 77 20 64 61 74 61 2e 20 4f 74  nal row data. Ot
18c60 68 65 72 77 69 73 65 2c 20 61 20 70 6f 69 6e 74  herwise, a point
18c70 65 72 20 74 6f 20 74 68 65 20 6f 72 69 67 69 6e  er to the origin
18c80 61 6c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 0a 2a  al memory cell.*
18c90 2a 20 69 73 20 73 74 6f 72 65 64 2e 20 49 6e 20  * is stored. In 
18ca0 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 76  this case, the v
18cb0 64 62 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  dbe program must
18cc0 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65   ensure that the
18cd0 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   .** memory cell
18ce0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
18cf0 72 6f 77 20 64 61 74 61 20 69 73 20 6e 6f 74 20  row data is not 
18d00 6f 76 65 72 77 72 69 74 74 65 6e 20 75 6e 74 69  overwritten unti
18d10 6c 20 74 68 65 0a 2a 2a 20 70 73 65 75 64 6f 20  l the.** pseudo 
18d20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 20  table is closed 
18d30 28 6f 72 20 61 20 6e 65 77 20 72 6f 77 20 69 73  (or a new row is
18d40 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 69   inserted into i
18d50 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  t)..**.** P3 is 
18d60 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69  the number of fi
18d70 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
18d80 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65  rds that will be
18d90 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68   stored by.** th
18da0 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  e pseudo-table..
18db0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50  */.case OP_OpenP
18dc0 73 65 75 64 6f 3a 20 7b 0a 20 20 69 6e 74 20 69  seudo: {.  int i
18dd0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
18de0 70 43 78 3b 0a 0a 20 20 69 20 3d 20 70 4f 70 2d  pCx;..  i = pOp-
18df0 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
18e00 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
18e10 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
18e20 20 69 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c   i, pOp->p3, -1,
18e30 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   0);.  if( pCx==
18e40 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
18e50 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
18e60 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75  = 1;.  pCx->pseu
18e70 64 6f 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70  doTable = 1;.  p
18e80 43 78 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54  Cx->ephemPseudoT
18e90 61 62 6c 65 20 3d 20 28 75 38 29 70 4f 70 2d 3e  able = (u8)pOp->
18ea0 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62  p2;.  pCx->isTab
18eb0 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69  le = 1;.  pCx->i
18ec0 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62 72  sIndex = 0;.  br
18ed0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
18ee0 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20  e: Close P1 * * 
18ef0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20  * *.**.** Close 
18f00 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75  a cursor previou
18f10 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31  sly opened as P1
18f20 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a  .  If P1 is not.
18f30 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ** currently ope
18f40 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  n, this instruct
18f50 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ion is a no-op..
18f60 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65  */.case OP_Close
18f70 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69  : {.  int i;.  i
18f80 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73   = pOp->p1;.  as
18f90 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
18fa0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
18fb0 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
18fc0 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73  ursor(p, p->apCs
18fd0 72 5b 69 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  r[i]);.  p->apCs
18fe0 72 5b 69 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61  r[i] = 0;.  brea
18ff0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19000 20 53 65 65 6b 47 65 20 50 31 20 50 32 20 50 33   SeekGe P1 P2 P3
19010 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63   P4 *.**.** If c
19020 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
19030 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
19040 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
19050 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
19060 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
19070 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
19080 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
19090 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
190a0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
190b0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
190c0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
190d0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
190e0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
190f0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
19100 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
19110 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
19120 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
19130 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
19140 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
19150 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
19160 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
19170 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
19180 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
19190 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
191a0 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
191b0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
191c0 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
191d0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
191e0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
191f0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
19200 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
19210 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c   Distinct, SeekL
19220 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c  t, SeekGt, SeekL
19230 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
19240 53 65 65 6b 47 74 20 50 31 20 50 32 20 50 33 20  SeekGt P1 P2 P3 
19250 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
19260 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
19270 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
19280 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
19290 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
192a0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
192b0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
192c0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
192d0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
192e0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
192f0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
19300 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
19310 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
19320 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
19330 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
19340 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
19350 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
19360 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
19370 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
19380 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
19390 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
193a0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
193b0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
193c0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
193d0 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68  cords greater th
193e0 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
193f0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
19400 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
19410 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
19420 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
19430 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
19440 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekLt, SeekGe, S
19450 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
19460 64 65 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32  de: SeekLt P1 P2
19470 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20   P3 P4 * .**.** 
19480 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
19490 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
194a0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
194b0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
194c0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
194d0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
194e0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
194f0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
19500 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
19510 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
19520 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
19530 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
19540 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
19550 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
19560 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
19570 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
19580 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
19590 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
195a0 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
195b0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
195c0 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
195d0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
195e0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
195f0 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e  ecords less than
19600 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
19610 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
19620 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
19630 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
19640 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
19650 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
19660 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
19670 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
19680 3a 20 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50  : SeekLe P1 P2 P
19690 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  3 P4 *.**.** If 
196a0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
196b0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
196c0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
196d0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
196e0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
196f0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
19700 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
19710 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
19720 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
19730 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
19740 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
19750 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
19760 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
19770 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
19780 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
19790 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
197a0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
197b0 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
197c0 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
197d0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
197e0 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
197f0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
19800 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
19810 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a  are no records .
19820 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  ** less than or 
19830 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
19840 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
19850 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
19860 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
19870 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
19880 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
19890 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
198a0 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20   SeekLt.*/.case 
198b0 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20  OP_SeekLt:      
198c0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
198d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
198e0 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  e:         /* ju
198f0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
19900 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20  OP_SeekGe:      
19910 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
19920 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
19930 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  t: {       /* ju
19940 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
19950 20 69 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20   i;.  int res;. 
19960 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43   int oc;.  VdbeC
19970 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70  ursor *pC;.  Unp
19980 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
19990 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69   int nField;.  i
199a0 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a  64 iKey;      /*
199b0 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72   The rowid we ar
199c0 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a  e to seek to */.
199d0 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .  i = pOp->p1;.
199e0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
199f0 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
19a00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
19a10 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d  >p2!=0 );.  pC =
19a20 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
19a30 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
19a40 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73  .  if( pC->pCurs
19a50 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 6f 63 20  or!=0 ){.    oc 
19a60 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
19a70 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
19a80 20 30 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   0;.    if( pC->
19a90 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20  isTable ){.     
19aa0 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61   /* The input va
19ab0 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20  lue in P3 might 
19ac0 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20  be of any type: 
19ad0 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73  integer, real, s
19ae0 74 72 69 6e 67 2c 0a 20 20 20 20 20 20 2a 2a 20  tring,.      ** 
19af0 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20  blob, or NULL.  
19b00 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20  But it needs to 
19b10 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  be an integer be
19b20 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20  fore we can do. 
19b30 20 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b       ** the seek
19b40 2c 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e 20  , so covert it. 
19b50 2a 2f 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75  */.      applyNu
19b60 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
19b70 6e 33 29 3b 0a 20 20 20 20 20 20 69 4b 65 79 20  n3);.      iKey 
19b80 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
19b90 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20 20  Value(pIn3);.   
19ba0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
19bb0 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20  lid = 0;..      
19bc0 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
19bd0 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20  ue could not be 
19be0 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
19bf0 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75  n integer withou
19c00 74 0a 20 20 20 20 20 20 2a 2a 20 6c 6f 73 73 20  t.      ** loss 
19c10 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  of information, 
19c20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f  then special pro
19c30 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69  cessing is requi
19c40 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  red... */.      
19c50 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
19c60 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
19c70 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 70  {.        if( (p
19c80 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
19c90 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
19ca0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
19cb0 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74   P3 value cannot
19cc0 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
19cd0 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61  to any kind of a
19ce0 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20   number,.       
19cf0 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73     ** then the s
19d00 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  eek is not possi
19d10 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20  ble, so jump to 
19d20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  P2 */.          
19d30 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
19d40 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
19d50 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
19d60 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20 72 65       /* If we re
19d70 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20  ach this point, 
19d80 74 68 65 6e 20 74 68 65 20 50 33 20 76 61 6c 75  then the P3 valu
19d90 65 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61  e must be a floa
19da0 74 69 6e 67 0a 20 20 20 20 20 20 20 20 2a 2a 20  ting.        ** 
19db0 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 20 2a 2f  point number. */
19dc0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
19dd0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
19de0 4d 45 4d 5f 52 65 61 6c 29 21 3d 30 20 29 3b 0a  MEM_Real)!=0 );.
19df0 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65  .        if( iKe
19e00 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  y==SMALLEST_INT6
19e10 34 20 26 26 20 28 70 49 6e 33 2d 3e 72 3c 28 64  4 && (pIn3->r<(d
19e20 6f 75 62 6c 65 29 69 4b 65 79 20 7c 7c 20 70 49  ouble)iKey || pI
19e30 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a 20 20 20 20  n3->r>0) ){.    
19e40 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 33 20        /* The P3 
19e50 76 61 6c 75 65 20 69 73 20 74 6f 20 6c 61 72 67  value is to larg
19e60 65 20 69 6e 20 6d 61 67 6e 69 74 75 64 65 20 74  e in magnitude t
19e70 6f 20 62 65 20 65 78 70 72 65 73 73 65 64 20 61  o be expressed a
19e80 73 20 61 6e 0a 20 20 20 20 20 20 20 20 20 20 2a  s an.          *
19e90 2a 20 69 6e 74 65 67 65 72 2e 20 2a 2f 0a 20 20  * integer. */.  
19ea0 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b          res = 1;
19eb0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
19ec0 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20 20 20 20  In3->r<0 ){.    
19ed0 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3d 3d          if( oc==
19ee0 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d  OP_SeekGt || oc=
19ef0 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20  =OP_SeekGe ){.  
19f00 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
19f10 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72   sqlite3BtreeFir
19f20 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  st(pC->pCursor, 
19f30 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20  &res);.         
19f40 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
19f50 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
19f60 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
19f70 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
19f80 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
19f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
19fa0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c   oc==OP_SeekLt |
19fb0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20  | oc==OP_SeekLe 
19fc0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
19fd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19fe0 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73  eeLast(pC->pCurs
19ff0 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1a000 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
1a010 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1a020 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1a030 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
1a040 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a    }.          }.
1a050 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 65            if( re
1a060 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  s ){.           
1a070 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1a080 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  1;.          }. 
1a090 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
1a0a0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66          }else if
1a0b0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20  ( oc==OP_SeekLt 
1a0c0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65  || oc==OP_SeekGe
1a0d0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
1a0e0 20 55 73 65 20 74 68 65 20 63 65 69 6c 69 6e 67   Use the ceiling
1a0f0 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63  () function to c
1a100 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74  onvert real->int
1a110 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66   */.          if
1a120 28 20 70 49 6e 33 2d 3e 72 20 3e 20 28 64 6f 75  ( pIn3->r > (dou
1a130 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2b  ble)iKey ) iKey+
1a140 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  +;.        }else
1a150 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55  {.          /* U
1a160 73 65 20 74 68 65 20 66 6c 6f 6f 72 28 29 20 66  se the floor() f
1a170 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65  unction to conve
1a180 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a  rt real->int */.
1a190 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1a1a0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20  ( oc==OP_SeekLe 
1a1b0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74  || oc==OP_SeekGt
1a1c0 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66   );.          if
1a1d0 28 20 70 49 6e 33 2d 3e 72 20 3c 20 28 64 6f 75  ( pIn3->r < (dou
1a1e0 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65 79 2d  ble)iKey ) iKey-
1a1f0 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  -;.        }.   
1a200 20 20 20 7d 20 0a 20 20 20 20 20 20 72 63 20 3d     } .      rc =
1a210 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1a220 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1a230 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34  pCursor, 0, (u64
1a240 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b  )iKey, 0, &res);
1a250 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1a260 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1a270 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1a280 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1a290 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72     }.      if( r
1a2a0 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
1a2b0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1a2c0 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70  d = 1;.        p
1a2d0 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69  C->lastRowid = i
1a2e0 4b 65 79 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  Key;.      }.   
1a2f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 46   }else{.      nF
1a300 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
1a310 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1a320 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1a330 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 20 20 61  INT32 );.      a
1a340 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
1a350 29 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49  );.      r.pKeyI
1a360 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
1a370 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65  fo;.      r.nFie
1a380 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64  ld = (u16)nField
1a390 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 63 3d 3d  ;.      if( oc==
1a3a0 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d  OP_SeekGt || oc=
1a3b0 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20  =OP_SeekLe ){.  
1a3c0 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20        r.flags = 
1a3d0 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59  UNPACKED_INCRKEY
1a3e0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
1a3f0 20 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d         r.flags =
1a400 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
1a410 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61    r.aMem = &p->a
1a420 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1a430 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1a440 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1a450 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1a460 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
1a470 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1a480 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1a490 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1a4a0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a4b0 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e      }.      pC->
1a4c0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1a4d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1a4e0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1a4f0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1a500 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1a510 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51  STALE;.#ifdef SQ
1a520 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
1a530 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
1a540 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  nt++;.#endif.   
1a550 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
1a560 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Ge || oc==OP_See
1a570 6b 47 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  kGt ){.      if(
1a580 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d   res<0 || (res==
1a590 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  0 && oc==OP_Seek
1a5a0 47 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  Gt) ){.        r
1a5b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1a5c0 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Next(pC->pCursor
1a5d0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
1a5e0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1a5f0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1a600 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a610 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1a620 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
1a630 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1a640 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
1a650 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
1a660 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f     assert( oc==O
1a670 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d  P_SeekLt || oc==
1a680 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20  OP_SeekLe );.   
1a690 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20     if( res>0 || 
1a6a0 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1a6b0 50 5f 53 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20  P_SeekLt) ){.   
1a6c0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1a6d0 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
1a6e0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1a6f0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1a700 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1a710 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a720 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1a730 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1a740 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
1a750 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 72 65  e{.        /* re
1a760 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74  s might be negat
1a770 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ive because the 
1a780 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20  table is empty. 
1a790 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20   Check to.      
1a7a0 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73    ** see if this
1a7b0 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20   is the case..  
1a7c0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
1a7d0 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74   res = sqlite3Bt
1a7e0 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73  reeEof(pC->pCurs
1a7f0 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
1a800 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
1a810 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
1a820 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
1a830 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1a840 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
1a850 20 69 66 28 20 21 70 43 2d 3e 70 73 65 75 64 6f   if( !pC->pseudo
1a860 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
1a870 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65  This happens whe
1a880 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  n attempting to 
1a890 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33  open the sqlite3
1a8a0 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20  _master table.  
1a8b0 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63    ** for read ac
1a8c0 63 65 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c  cess returns SQL
1a8d0 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68  ITE_EMPTY. In th
1a8e0 69 73 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20  is case always. 
1a8f0 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a     ** take the j
1a900 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65 72 65  ump (since there
1a910 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1a920 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20  in the table).. 
1a930 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70     */.    pc = p
1a940 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1a950 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1a960 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50  pcode: Seek P1 P
1a970 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  2 * * *.**.** P1
1a980 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c   is an open tabl
1a990 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  e cursor and P2 
1a9a0 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67  is a rowid integ
1a9b0 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20  er.  Arrange.** 
1a9c0 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73  for P1 to move s
1a9d0 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1a9e0 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69   to the rowid gi
1a9f0 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a  ven by P2..**.**
1aa00 20 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c   This is actuall
1aa10 79 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  y a deferred see
1aa20 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
1aa30 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
1aa40 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
1aa50 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
1aa60 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
1aa70 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
1aa80 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
1aa90 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
1aaa0 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20  appens..*/.case 
1aab0 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a  OP_Seek: {    /*
1aac0 20 69 6e 32 20 2a 2f 0a 20 20 69 6e 74 20 69 3b   in2 */.  int i;
1aad0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1aae0 43 3b 0a 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70  C;..  i = pOp->p
1aaf0 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  1;.  assert( i>=
1ab00 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
1ab10 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1ab20 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72  pCsr[i];.  asser
1ab30 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
1ab40 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1ab50 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1ab60 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1ab70 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
1ab80 20 30 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65   0;.    pC->move
1ab90 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74  toTarget = sqlit
1aba0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
1abb0 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f  In2);.    pC->ro
1abc0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1abd0 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
1abe0 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a  Moveto = 1;.  }.
1abf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f    break;.}.  ../
1ac00 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20  * Opcode: Found 
1ac10 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1ac20 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 68  ** Register P3 h
1ac30 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
1ac40 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
1ac50 65 63 6f 72 64 2e 20 20 50 31 20 69 73 20 61 6e  ecord.  P1 is an
1ac60 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 61 6e   index..** If an
1ac70 20 65 6e 74 72 79 20 74 68 61 74 20 6d 61 74 63   entry that matc
1ac80 68 65 73 20 74 68 65 20 76 61 6c 75 65 20 69 6e  hes the value in
1ac90 20 72 65 67 69 73 74 65 72 20 70 33 20 65 78 69   register p3 exi
1aca0 73 74 73 20 69 6e 20 50 31 20 74 68 65 6e 0a 2a  sts in P1 then.*
1acb0 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49  * jump to P2.  I
1acc0 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 64  f the P3 value d
1acd0 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e  oes not match an
1ace0 79 20 65 6e 74 72 79 20 69 6e 20 50 31 0a 2a 2a  y entry in P1.**
1acf0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e   then fall thru.
1ad00 20 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20    The P1 cursor 
1ad10 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
1ad20 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67   at the matching
1ad30 20 65 6e 74 72 79 0a 2a 2a 20 69 66 20 69 74 20   entry.** if it 
1ad40 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  exists..**.** Th
1ad50 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
1ad60 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
1ad70 65 6e 74 20 74 68 65 20 49 4e 20 6f 70 65 72 61  ent the IN opera
1ad80 74 6f 72 20 77 68 65 72 65 20 74 68 65 0a 2a 2a  tor where the.**
1ad90 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20   left-hand side 
1ada0 69 73 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  is a SELECT stat
1adb0 65 6d 65 6e 74 2e 20 20 50 31 20 6d 61 79 20 62  ement.  P1 may b
1adc0 65 20 61 20 74 72 75 65 20 69 6e 64 65 78 2c 20  e a true index, 
1add0 6f 72 20 69 74 0a 2a 2a 20 6d 61 79 20 62 65 20  or it.** may be 
1ade0 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
1adf0 78 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  x that holds the
1ae00 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
1ae10 53 45 4c 45 43 54 0a 2a 2a 20 73 74 61 74 65 6d  SELECT.** statem
1ae20 65 6e 74 2e 20 20 20 54 68 69 73 20 69 6e 73 74  ent.   This inst
1ae30 72 75 63 74 69 6f 6e 20 69 73 20 61 6c 73 6f 20  ruction is also 
1ae40 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
1ae50 74 20 74 68 65 0a 2a 2a 20 44 49 53 54 49 4e 43  t the.** DISTINC
1ae60 54 20 6b 65 79 77 6f 72 64 20 69 6e 20 53 45 4c  T keyword in SEL
1ae70 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ECT statements..
1ae80 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
1ae90 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66  uction checks if
1aea0 20 69 6e 64 65 78 20 50 31 20 63 6f 6e 74 61 69   index P1 contai
1aeb0 6e 73 20 61 20 72 65 63 6f 72 64 20 66 6f 72 20  ns a record for 
1aec0 77 68 69 63 68 20 0a 2a 2a 20 74 68 65 20 66 69  which .** the fi
1aed0 72 73 74 20 4e 20 73 65 72 69 61 6c 69 7a 65 64  rst N serialized
1aee0 20 76 61 6c 75 65 73 20 65 78 61 63 74 6c 79 20   values exactly 
1aef0 6d 61 74 63 68 20 74 68 65 20 4e 20 73 65 72 69  match the N seri
1af00 61 6c 69 7a 65 64 20 76 61 6c 75 65 73 0a 2a 2a  alized values.**
1af10 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   in the record i
1af20 6e 20 72 65 67 69 73 74 65 72 20 50 33 2c 20 77  n register P3, w
1af30 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 74 6f  here N is the to
1af40 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 76 61  tal number of va
1af50 6c 75 65 73 20 69 6e 0a 2a 2a 20 74 68 65 20 50  lues in.** the P
1af60 33 20 72 65 63 6f 72 64 20 28 74 68 65 20 50 33  3 record (the P3
1af70 20 72 65 63 6f 72 64 20 69 73 20 61 20 70 72 65   record is a pre
1af80 66 69 78 20 6f 66 20 74 68 65 20 50 31 20 72 65  fix of the P1 re
1af90 63 6f 72 64 29 2e 20 0a 2a 2a 0a 2a 2a 20 53 65  cord). .**.** Se
1afa0 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
1afb0 2c 20 49 73 55 6e 69 71 75 65 2c 20 4e 6f 74 45  , IsUnique, NotE
1afc0 78 69 73 74 73 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  xists.*/./* Opco
1afd0 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
1afe0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1aff0 52 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  Register P3 hold
1b000 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
1b010 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
1b020 72 64 2e 20 20 50 31 20 69 73 0a 2a 2a 20 61 6e  rd.  P1 is.** an
1b030 20 69 6e 64 65 78 2e 20 20 49 66 20 6e 6f 20 65   index.  If no e
1b040 6e 74 72 79 20 65 78 69 73 74 73 20 69 6e 20 50  ntry exists in P
1b050 31 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 74  1 that matches t
1b060 68 65 20 62 6c 6f 62 20 74 68 65 6e 20 6a 75 6d  he blob then jum
1b070 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 20 49 66 20  p.** to P2.  If 
1b080 61 6e 20 65 6e 74 72 79 20 64 6f 65 73 20 65 78  an entry does ex
1b090 69 73 74 69 6e 67 2c 20 66 61 6c 6c 20 74 68 72  isting, fall thr
1b0a0 6f 75 67 68 2e 20 20 54 68 65 20 63 75 72 73 6f  ough.  The curso
1b0b0 72 20 69 73 20 6c 65 66 74 0a 2a 2a 20 70 6f 69  r is left.** poi
1b0c0 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 65 6e 74  nting to the ent
1b0d0 72 79 20 74 68 61 74 20 6d 61 74 63 68 65 73 2e  ry that matches.
1b0e0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1b0f0 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
1b100 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63  s, IsUnique.*/.c
1b110 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a  ase OP_NotFound:
1b120 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1b130 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  in3 */.case OP_F
1b140 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
1b150 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1b160 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 61 6c   int i;.  int al
1b170 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 56  readyExists;.  V
1b180 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1b190 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
1b1a0 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78  ckedRecord *pIdx
1b1b0 4b 65 79 3b 0a 20 20 63 68 61 72 20 61 54 65 6d  Key;.  char aTem
1b1c0 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65  pRec[ROUND8(size
1b1d0 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  of(UnpackedRecor
1b1e0 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d  d)) + sizeof(Mem
1b1f0 29 2a 33 20 2b 20 37 5d 3b 0a 0a 20 20 69 20 3d  )*3 + 7];..  i =
1b200 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 6c 72 65   pOp->p1;.  alre
1b210 61 64 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20  adyExists = 0;. 
1b220 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
1b230 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
1b240 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
1b250 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69  Csr[i]!=0 );.  i
1b260 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73  f( (pC = p->apCs
1b270 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 21 3d  r[i])->pCursor!=
1b280 30 20 29 7b 0a 0a 20 20 20 20 61 73 73 65 72 74  0 ){..    assert
1b290 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
1b2a0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1b2b0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1b2c0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 70 49  M_Blob );.    pI
1b2d0 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56  dxKey = sqlite3V
1b2e0 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28  dbeRecordUnpack(
1b2f0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49  pC->pKeyInfo, pI
1b300 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 0a  n3->n, pIn3->z,.
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b330 20 20 20 20 20 20 61 54 65 6d 70 52 65 63 2c 20        aTempRec, 
1b340 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29  sizeof(aTempRec)
1b350 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b  );.    if( pIdxK
1b360 65 79 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 67  ey==0 ){.      g
1b370 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
1b380 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  }.    if( pOp->o
1b390 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
1b3a0 29 7b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79  ){.      pIdxKey
1b3b0 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43  ->flags |= UNPAC
1b3c0 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
1b3d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d  ;.    }.    rc =
1b3e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1b3f0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1b400 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79  pCursor, pIdxKey
1b410 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1b420 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65     sqlite3VdbeDe
1b430 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63 6f  leteUnpackedReco
1b440 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20 20  rd(pIdxKey);.   
1b450 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1b460 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72 65 61  OK ){.      brea
1b470 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c 72  k;.    }.    alr
1b480 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65  eadyExists = (re
1b490 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e 64  s==0);.    pC->d
1b4a0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1b4b0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
1b4c0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1b4d0 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  TALE;.  }.  if( 
1b4e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1b4f0 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69 66 28  Found ){.    if(
1b500 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29   alreadyExists )
1b510 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1b520 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
1b530 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69 73  if( !alreadyExis
1b540 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  ts ) pc = pOp->p
1b550 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
1b560 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1b570 3a 20 49 73 55 6e 69 71 75 65 20 50 31 20 50 32  : IsUnique P1 P2
1b580 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43   P3 P4 *.**.** C
1b590 75 72 73 6f 72 20 50 31 20 69 73 20 6f 70 65 6e  ursor P1 is open
1b5a0 20 6f 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 53   on an index.  S
1b5b0 6f 20 69 74 20 68 61 73 20 6e 6f 20 64 61 74 61  o it has no data
1b5c0 20 61 6e 64 20 69 74 73 20 6b 65 79 20 63 6f 6e   and its key con
1b5d0 73 69 73 74 73 20 0a 2a 2a 20 6f 66 20 61 20 72  sists .** of a r
1b5e0 65 63 6f 72 64 20 67 65 6e 65 72 61 74 65 64 20  ecord generated 
1b5f0 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  by OP_MakeRecord
1b600 20 77 68 65 72 65 20 74 68 65 20 6c 61 73 74 20   where the last 
1b610 66 69 65 6c 64 20 69 73 20 74 68 65 20 0a 2a 2a  field is the .**
1b620 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 65 6e   rowid of the en
1b630 74 72 79 20 74 68 61 74 20 74 68 65 20 69 6e 64  try that the ind
1b640 65 78 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a  ex refers to..**
1b650 0a 2a 2a 20 54 68 65 20 50 33 20 72 65 67 69 73  .** The P3 regis
1b660 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  ter contains an 
1b670 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
1b680 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74 68 69 73  umber. Call this
1b690 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d 62   record .** numb
1b6a0 65 72 20 52 2e 20 52 65 67 69 73 74 65 72 20 50  er R. Register P
1b6b0 34 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  4 is the first i
1b6c0 6e 20 61 20 73 65 74 20 6f 66 20 4e 20 63 6f 6e  n a set of N con
1b6d0 74 69 67 75 6f 75 73 20 72 65 67 69 73 74 65 72  tiguous register
1b6e0 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20 75  s.** that make u
1b6f0 70 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  p an unpacked in
1b700 64 65 78 20 6b 65 79 20 74 68 61 74 20 63 61 6e  dex key that can
1b710 20 62 65 20 75 73 65 64 20 77 69 74 68 20 63 75   be used with cu
1b720 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  rsor P1..** The 
1b730 76 61 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20 62  value of N can b
1b740 65 20 69 6e 66 65 72 72 65 64 20 66 72 6f 6d 20  e inferred from 
1b750 74 68 65 20 63 75 72 73 6f 72 2e 20 4e 20 69 6e  the cursor. N in
1b760 63 6c 75 64 65 73 20 74 68 65 20 72 6f 77 69 64  cludes the rowid
1b770 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70 65 6e 64  .** value append
1b780 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  ed to the end of
1b790 20 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f 72   the index recor
1b7a0 64 2e 20 54 68 69 73 20 72 6f 77 69 64 20 76 61  d. This rowid va
1b7b0 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d 61  lue may.** or ma
1b7c0 79 20 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d  y not be the sam
1b7d0 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49 66  e as R..**.** If
1b7e0 20 61 6e 79 20 6f 66 20 74 68 65 20 4e 20 72 65   any of the N re
1b7f0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
1b800 67 20 77 69 74 68 20 72 65 67 69 73 74 65 72 20  g with register 
1b810 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  P4 contains a NU
1b820 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75 6d  LL.** value, jum
1b830 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1b840 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72   P2..**.** Other
1b850 77 69 73 65 2c 20 74 68 69 73 20 69 6e 73 74 72  wise, this instr
1b860 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66  uction checks if
1b870 20 63 75 72 73 6f 72 20 50 31 20 63 6f 6e 74 61   cursor P1 conta
1b880 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a 20  ins an entry.** 
1b890 77 68 65 72 65 20 74 68 65 20 66 69 72 73 74 20  where the first 
1b8a0 28 4e 2d 31 29 20 66 69 65 6c 64 73 20 6d 61 74  (N-1) fields mat
1b8b0 63 68 20 62 75 74 20 74 68 65 20 72 6f 77 69 64  ch but the rowid
1b8c0 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 65 6e   value at the en
1b8d0 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64 65  d.** of the inde
1b8e0 78 20 65 6e 74 72 79 20 69 73 20 6e 6f 74 20 52  x entry is not R
1b8f0 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
1b900 20 73 75 63 68 20 65 6e 74 72 79 2c 20 63 6f 6e   such entry, con
1b910 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74 6f  trol jumps.** to
1b920 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
1b930 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20   Otherwise, the 
1b940 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e  rowid of the con
1b950 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 0a 2a  flicting index.*
1b960 2a 20 65 6e 74 72 79 20 69 73 20 63 6f 70 69 65  * entry is copie
1b970 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  d to register P3
1b980 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61 6c   and control fal
1b990 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
1b9a0 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
1b9b0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
1b9c0 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1b9d0 20 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75 6e   NotExists, Foun
1b9e0 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 55  d.*/.case OP_IsU
1b9f0 6e 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20 20  nique: {        
1ba00 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1ba10 20 20 75 31 36 20 69 69 3b 0a 20 20 56 64 62 65    u16 ii;.  Vdbe
1ba20 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42  Cursor *pCx;.  B
1ba30 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1ba40 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 0a 20 20    u16 nField;.  
1ba50 4d 65 6d 20 2a 61 4d 65 6d 3b 0a 20 20 55 6e 70  Mem *aMem;.  Unp
1ba60 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20  ackedRecord r;  
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba80 2f 2a 20 42 2d 54 72 65 65 20 69 6e 64 65 78 20  /* B-Tree index 
1ba90 73 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a 20 20  search key */.  
1baa0 69 36 34 20 52 3b 20 20 20 20 20 20 20 20 20 20  i64 R;          
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bac0 20 20 20 2f 2a 20 52 6f 77 69 64 20 73 74 6f 72     /* Rowid stor
1bad0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
1bae0 33 20 2a 2f 0a 0a 20 20 61 4d 65 6d 20 3d 20 26  3 */..  aMem = &
1baf0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e  p->aMem[pOp->p4.
1bb00 69 5d 3b 0a 20 20 2f 2a 20 41 73 73 65 72 74 20  i];.  /* Assert 
1bb10 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20  that the values 
1bb20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 50 31  of parameters P1
1bb30 20 61 6e 64 20 50 34 20 61 72 65 20 69 6e 20 72   and P4 are in r
1bb40 61 6e 67 65 2e 20 2a 2f 0a 20 20 61 73 73 65 72  ange. */.  asser
1bb50 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
1bb60 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73  P4_INT32 );.  as
1bb70 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e  sert( pOp->p4.i>
1bb80 30 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d  0 && pOp->p4.i<=
1bb90 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73 73  p->nMem );.  ass
1bba0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1bbb0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1bbc0 75 72 73 6f 72 20 29 3b 0a 0a 20 20 2f 2a 20 46  ursor );..  /* F
1bbd0 69 6e 64 20 74 68 65 20 69 6e 64 65 78 20 63 75  ind the index cu
1bbe0 72 73 6f 72 2e 20 2a 2f 0a 20 20 70 43 78 20 3d  rsor. */.  pCx =
1bbf0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1bc00 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1bc10 78 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  x->deferredMovet
1bc20 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 78 2d 3e 73  o==0 );.  pCx->s
1bc30 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20  eekResult = 0;. 
1bc40 20 70 43 78 2d 3e 63 61 63 68 65 53 74 61 74 75   pCx->cacheStatu
1bc50 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1bc60 0a 20 20 70 43 72 73 72 20 3d 20 70 43 78 2d 3e  .  pCrsr = pCx->
1bc70 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 49  pCursor;..  /* I
1bc80 66 20 61 6e 79 20 6f 66 20 74 68 65 20 76 61 6c  f any of the val
1bc90 75 65 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 61  ues are NULL, ta
1bca0 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 2a 2f 0a  ke the jump. */.
1bcb0 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 78 2d 3e    nField = pCx->
1bcc0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
1bcd0 3b 0a 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69  ;.  for(ii=0; ii
1bce0 3c 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  <nField; ii++){.
1bcf0 20 20 20 20 69 66 28 20 61 4d 65 6d 5b 69 69 5d      if( aMem[ii]
1bd00 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  .flags & MEM_Nul
1bd10 6c 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  l ){.      pc = 
1bd20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1bd30 20 20 20 70 43 72 73 72 20 3d 20 30 3b 0a 20 20     pCrsr = 0;.  
1bd40 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
1bd50 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 28  .  }.  assert( (
1bd60 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 2e 66 6c 61  aMem[nField].fla
1bd70 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
1bd80 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 72 73  0 );..  if( pCrs
1bd90 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 50  r!=0 ){.    /* P
1bda0 6f 70 75 6c 61 74 65 20 74 68 65 20 69 6e 64 65  opulate the inde
1bdb0 78 20 73 65 61 72 63 68 20 6b 65 79 2e 20 2a 2f  x search key. */
1bdc0 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
1bdd0 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 3b  = pCx->pKeyInfo;
1bde0 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
1bdf0 6e 46 69 65 6c 64 20 2b 20 31 3b 0a 20 20 20 20  nField + 1;.    
1be00 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
1be10 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48  ED_PREFIX_SEARCH
1be20 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 61  ;.    r.aMem = a
1be30 4d 65 6d 3b 0a 0a 20 20 20 20 2f 2a 20 45 78 74  Mem;..    /* Ext
1be40 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 6f  ract the value o
1be50 66 20 52 20 66 72 6f 6d 20 72 65 67 69 73 74 65  f R from registe
1be60 72 20 50 33 2e 20 2a 2f 0a 20 20 20 20 73 71 6c  r P3. */.    sql
1be70 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
1be80 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 20  erify(pIn3);.   
1be90 20 52 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a   R = pIn3->u.i;.
1bea0 0a 20 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74  .    /* Search t
1beb0 68 65 20 42 2d 54 72 65 65 20 69 6e 64 65 78 2e  he B-Tree index.
1bec0 20 49 66 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 69   If no conflicti
1bed0 6e 67 20 72 65 63 6f 72 64 20 69 73 20 66 6f 75  ng record is fou
1bee0 6e 64 2c 20 6a 75 6d 70 0a 20 20 20 20 2a 2a 20  nd, jump.    ** 
1bef0 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  to P2. Otherwise
1bf00 2c 20 63 6f 70 79 20 74 68 65 20 72 6f 77 69 64  , copy the rowid
1bf10 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74   of the conflict
1bf20 69 6e 67 20 72 65 63 6f 72 64 20 74 6f 0a 20 20  ing record to.  
1bf30 20 20 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33    ** register P3
1bf40 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
1bf50 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
1bf60 73 74 72 75 63 74 69 6f 6e 2e 20 20 2a 2f 0a 20  struction.  */. 
1bf70 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1bf80 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1bf90 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c  ed(pCrsr, &r, 0,
1bfa0 20 30 2c 20 26 70 43 78 2d 3e 73 65 65 6b 52 65   0, &pCx->seekRe
1bfb0 73 75 6c 74 29 3b 0a 20 20 20 20 69 66 28 20 28  sult);.    if( (
1bfc0 72 2e 66 6c 61 67 73 20 26 20 55 4e 50 41 43 4b  r.flags & UNPACK
1bfd0 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43 48  ED_PREFIX_SEARCH
1bfe0 29 20 7c 7c 20 72 2e 72 6f 77 69 64 3d 3d 52 20  ) || r.rowid==R 
1bff0 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
1c000 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d  p->p2 - 1;.    }
1c010 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 6e 33  else{.      pIn3
1c020 2d 3e 75 2e 69 20 3d 20 72 2e 72 6f 77 69 64 3b  ->u.i = r.rowid;
1c030 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
1c040 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1c050 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50  : NotExists P1 P
1c060 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55  2 P3 * *.**.** U
1c070 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
1c080 66 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  f register P3 as
1c090 20 61 20 69 6e 74 65 67 65 72 20 6b 65 79 2e 20   a integer key. 
1c0a0 20 49 66 20 61 20 72 65 63 6f 72 64 20 0a 2a 2a   If a record .**
1c0b0 20 77 69 74 68 20 74 68 61 74 20 6b 65 79 20 64   with that key d
1c0c0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e  oes not exist in
1c0d0 20 74 61 62 6c 65 20 6f 66 20 50 31 2c 20 74 68   table of P1, th
1c0e0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  en jump to P2. .
1c0f0 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64  ** If the record
1c100 20 64 6f 65 73 20 65 78 69 73 74 2c 20 74 68 65   does exist, the
1c110 6e 20 66 61 6c 6c 20 74 68 72 75 2e 20 20 54 68  n fall thru.  Th
1c120 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74  e cursor is left
1c130 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f   .** pointing to
1c140 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69   the record if i
1c150 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20  t exists..**.** 
1c160 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  The difference b
1c170 65 74 77 65 65 6e 20 74 68 69 73 20 6f 70 65 72  etween this oper
1c180 61 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f 75  ation and NotFou
1c190 6e 64 20 69 73 20 74 68 61 74 20 74 68 69 73 0a  nd is that this.
1c1a0 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61 73 73  ** operation ass
1c1b0 75 6d 65 73 20 74 68 65 20 6b 65 79 20 69 73 20  umes the key is 
1c1c0 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74  an integer and t
1c1d0 68 61 74 20 50 31 20 69 73 20 61 20 74 61 62 6c  hat P1 is a tabl
1c1e0 65 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f 74  e whereas.** Not
1c1f0 46 6f 75 6e 64 20 61 73 73 75 6d 65 73 20 6b 65  Found assumes ke
1c200 79 20 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  y is a blob cons
1c210 74 72 75 63 74 65 64 20 66 72 6f 6d 20 4d 61 6b  tructed from Mak
1c220 65 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20 50  eRecord and.** P
1c230 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a  1 is an index..*
1c240 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1c250 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1c260 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65  IsUnique.*/.case
1c270 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b   OP_NotExists: {
1c280 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1c290 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 3b   in3 */.  int i;
1c2a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1c2b0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
1c2c0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
1c2d0 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20  .  u64 iKey;..  
1c2e0 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  i = pOp->p1;.  a
1c2f0 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
1c300 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1c310 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
1c320 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28  r[i]!=0 );.  if(
1c330 20 28 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20   (pCrsr = (pC = 
1c340 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43  p->apCsr[i])->pC
1c350 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20  ursor)!=0 ){.   
1c360 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 73   res = 0;.    as
1c370 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1c380 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
1c390 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70     assert( p->ap
1c3a0 43 73 72 5b 69 5d 2d 3e 69 73 54 61 62 6c 65 20  Csr[i]->isTable 
1c3b0 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 69 6e  );.    iKey = in
1c3c0 74 54 6f 4b 65 79 28 70 49 6e 33 2d 3e 75 2e 69  tToKey(pIn3->u.i
1c3d0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
1c3e0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1c3f0 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c  packed(pCrsr, 0,
1c400 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b   iKey, 0, &res);
1c410 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77  .    pC->lastRow
1c420 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a  id = pIn3->u.i;.
1c430 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1c440 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31  alid = res==0 ?1
1c450 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c  :0;.    pC->null
1c460 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  Row = 0;.    pC-
1c470 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1c480 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
1c490 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1c4a0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  to = 0;.    if( 
1c4b0 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  res!=0 ){.      
1c4c0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1c4d0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1c4e0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1c4f0 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ==0 );.    }.   
1c500 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1c510 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69  = res;.  }else i
1c520 66 28 20 21 70 43 2d 3e 70 73 65 75 64 6f 54 61  f( !pC->pseudoTa
1c530 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  ble ){.    /* Th
1c540 69 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20  is happens when 
1c550 61 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 6f 70  an attempt to op
1c560 65 6e 20 61 20 72 65 61 64 20 63 75 72 73 6f 72  en a read cursor
1c570 20 6f 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   on the .    ** 
1c580 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
1c590 62 6c 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ble returns SQLI
1c5a0 54 45 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f  TE_EMPTY..    */
1c5b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1c5c0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
1c5d0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1c5e0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1c5f0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d  ->rowidIsValid==
1c600 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65  0 );.    pC->see
1c610 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d  kResult = 0;.  }
1c620 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1c630 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
1c640 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1c650 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74  ** Find the next
1c660 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65   available seque
1c670 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  nce number for c
1c680 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69  ursor P1..** Wri
1c690 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  te the sequence 
1c6a0 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69  number into regi
1c6b0 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ster P2..** The 
1c6c0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1c6d0 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  on the cursor is
1c6e0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74   incremented aft
1c6f0 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72  er this.** instr
1c700 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73  uction.  .*/.cas
1c710 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b  e OP_Sequence: {
1c720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1c730 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1c740 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
1c750 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e  p1;.  assert( i>
1c760 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
1c770 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1c780 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29  p->apCsr[i]!=0 )
1c790 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1c7a0 70 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e 73 65 71  p->apCsr[i]->seq
1c7b0 43 6f 75 6e 74 2b 2b 3b 0a 20 20 4d 65 6d 53 65  Count++;.  MemSe
1c7c0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
1c7d0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
1c7e0 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
1c7f0 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32  : NewRowid P1 P2
1c800 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65   P3 * *.**.** Ge
1c810 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20  t a new integer 
1c820 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61  record number (a
1c830 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73  .k.a "rowid") us
1c840 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f  ed as the key to
1c850 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65   a table..** The
1c860 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
1c870 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
1c880 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69   used as a key i
1c890 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
1c8a0 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72  * table that cur
1c8b0 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
1c8c0 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  .  The new recor
1c8d0 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74  d number is writ
1c8e0 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74  ten.** written t
1c8f0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
1c900 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65  *.** If P3>0 the
1c910 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74  n P3 is a regist
1c920 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  er that holds th
1c930 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
1c940 75 73 6c 79 0a 2a 2a 20 67 65 6e 65 72 61 74 65  usly.** generate
1c950 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
1c960 20 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20    No new record 
1c970 6e 75 6d 62 65 72 73 20 61 72 65 20 61 6c 6c 6f  numbers are allo
1c980 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 0a 2a  wed to be less.*
1c990 2a 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75  * than this valu
1c9a0 65 2e 20 20 57 68 65 6e 20 74 68 69 73 20 76 61  e.  When this va
1c9b0 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20  lue reaches its 
1c9c0 6d 61 78 69 6d 75 6d 2c 20 61 20 53 51 4c 49 54  maximum, a SQLIT
1c9d0 45 5f 46 55 4c 4c 0a 2a 2a 20 65 72 72 6f 72 20  E_FULL.** error 
1c9e0 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 20 54  is generated.  T
1c9f0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69  he P3 register i
1ca00 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
1ca10 68 65 20 67 65 6e 65 72 61 74 65 64 0a 2a 2a 20  he generated.** 
1ca20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20  record number.  
1ca30 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73  This P3 mechanis
1ca40 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c  m is used to hel
1ca50 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  p implement the.
1ca60 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ** AUTOINCREMENT
1ca70 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73   feature..*/.cas
1ca80 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b  e OP_NewRowid: {
1ca90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1caa0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1cab0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 36 34 20  .  int i;.  i64 
1cac0 76 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  v;.  VdbeCursor 
1cad0 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
1cae0 20 20 69 6e 74 20 72 78 3b 0a 20 20 69 6e 74 20    int rx;.  int 
1caf0 63 6e 74 3b 0a 20 20 69 36 34 20 78 3b 0a 20 20  cnt;.  i64 x;.  
1cb00 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 0a 20 20 69 20  Mem *pMem;..  i 
1cb10 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 76 20 3d  = pOp->p1;.  v =
1cb20 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   0;.  res = 0;. 
1cb30 20 72 78 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rx = SQLITE_OK;
1cb40 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1cb50 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1cb60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1cb70 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20  apCsr[i]!=0 );. 
1cb80 20 69 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70   if( (pC = p->ap
1cb90 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72  Csr[i])->pCursor
1cba0 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  ==0 ){.    /* Th
1cbb0 65 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a  e zero initializ
1cbc0 61 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61  ation above is a
1cbd0 6c 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65  ll that is neede
1cbe0 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  d */.  }else{.  
1cbf0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f    /* The next ro
1cc00 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75  wid or record nu
1cc10 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20  mber (different 
1cc20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61  terms for the sa
1cc30 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29  me.    ** thing)
1cc40 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20   is obtained in 
1cc50 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72  a two-step algor
1cc60 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
1cc70 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74   ** First we att
1cc80 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
1cc90 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
1cca0 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20  g rowid and add 
1ccb0 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68  one.    ** to th
1ccc0 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  at.  But if the 
1ccd0 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
1cce0 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64   rowid is alread
1ccf0 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20  y the maximum.  
1cd00 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e    ** positive in
1cd10 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74  teger, we have t
1cd20 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  o fall through t
1cd30 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  o the second.   
1cd40 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69   ** probabilisti
1cd50 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20  c algorithm.    
1cd60 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65  **.    ** The se
1cd70 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69  cond algorithm i
1cd80 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f  s to select a ro
1cd90 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  wid at random an
1cda0 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  d see if.    ** 
1cdb0 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  it already exist
1cdc0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
1cdd0 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   If it does not 
1cde0 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20  exist, we have. 
1cdf0 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e     ** succeeded.
1ce00 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20    If the random 
1ce10 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74  rowid does exist
1ce20 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65  , we select a ne
1ce30 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64  w one.    ** and
1ce40 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74   try again, up t
1ce50 6f 20 31 30 30 30 20 74 69 6d 65 73 2e 0a 20 20  o 1000 times..  
1ce60 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 6f 72 20    **.    ** For 
1ce70 61 20 74 61 62 6c 65 20 77 69 74 68 20 6c 65 73  a table with les
1ce80 73 20 74 68 61 6e 20 32 20 62 69 6c 6c 69 6f 6e  s than 2 billion
1ce90 20 65 6e 74 72 69 65 73 2c 20 74 68 65 20 70 72   entries, the pr
1cea0 6f 62 61 62 69 6c 69 74 79 0a 20 20 20 20 2a 2a  obability.    **
1ceb0 20 6f 66 20 6e 6f 74 20 66 69 6e 64 69 6e 67 20   of not finding 
1cec0 61 20 75 6e 75 73 65 64 20 72 6f 77 69 64 20 69  a unused rowid i
1ced0 73 20 61 62 6f 75 74 20 31 2e 30 65 2d 33 30 30  s about 1.0e-300
1cee0 2e 20 20 54 68 69 73 20 69 73 20 61 20 0a 20 20  .  This is a .  
1cef0 20 20 2a 2a 20 6e 6f 6e 2d 7a 65 72 6f 20 70 72    ** non-zero pr
1cf00 6f 62 61 62 69 6c 69 74 79 2c 20 62 75 74 20 69  obability, but i
1cf10 74 20 69 73 20 73 74 69 6c 6c 20 76 61 6e 69 73  t is still vanis
1cf20 68 69 6e 67 6c 79 20 73 6d 61 6c 6c 20 61 6e 64  hingly small and
1cf30 20 73 68 6f 75 6c 64 0a 20 20 20 20 2a 2a 20 6e   should.    ** n
1cf40 65 76 65 72 20 63 61 75 73 65 20 61 20 70 72 6f  ever cause a pro
1cf50 62 6c 65 6d 2e 20 20 59 6f 75 20 61 72 65 20 6d  blem.  You are m
1cf60 75 63 68 2c 20 6d 75 63 68 20 6d 6f 72 65 20 6c  uch, much more l
1cf70 69 6b 65 6c 79 20 74 6f 20 68 61 76 65 20 61 0a  ikely to have a.
1cf80 20 20 20 20 2a 2a 20 68 61 72 64 77 61 72 65 20      ** hardware 
1cf90 66 61 69 6c 75 72 65 20 74 68 61 6e 20 66 6f 72  failure than for
1cfa0 20 74 68 69 73 20 61 6c 67 6f 72 69 74 68 6d 20   this algorithm 
1cfb0 74 6f 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 0a  to fail..    **.
1cfc0 20 20 20 20 2a 2a 20 54 68 65 20 61 6e 61 6c 79      ** The analy
1cfd0 73 69 73 20 69 6e 20 74 68 65 20 70 72 65 76 69  sis in the previ
1cfe0 6f 75 73 20 70 61 72 61 67 72 61 70 68 20 61 73  ous paragraph as
1cff0 73 75 6d 65 73 20 74 68 61 74 20 79 6f 75 20 68  sumes that you h
1d000 61 76 65 20 61 20 67 6f 6f 64 0a 20 20 20 20 2a  ave a good.    *
1d010 2a 20 73 6f 75 72 63 65 20 6f 66 20 72 61 6e 64  * source of rand
1d020 6f 6d 20 6e 75 6d 62 65 72 73 2e 20 20 49 73 20  om numbers.  Is 
1d030 61 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69  a library functi
1d040 6f 6e 20 6c 69 6b 65 20 6c 72 61 6e 64 34 38 28  on like lrand48(
1d050 29 0a 20 20 20 20 2a 2a 20 67 6f 6f 64 20 65 6e  ).    ** good en
1d060 6f 75 67 68 3f 20 20 4d 61 79 62 65 2e 20 4d 61  ough?  Maybe. Ma
1d070 79 62 65 20 6e 6f 74 2e 20 49 74 27 73 20 68 61  ybe not. It's ha
1d080 72 64 20 74 6f 20 6b 6e 6f 77 20 77 68 65 74 68  rd to know wheth
1d090 65 72 20 74 68 65 72 65 0a 20 20 20 20 2a 2a 20  er there.    ** 
1d0a0 6d 69 67 68 74 20 62 65 20 73 75 62 74 6c 65 20  might be subtle 
1d0b0 62 75 67 73 20 69 73 20 73 6f 6d 65 20 69 6d 70  bugs is some imp
1d0c0 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20  lementations of 
1d0d0 6c 72 61 6e 64 34 38 28 29 20 74 68 61 74 0a 20  lrand48() that. 
1d0e0 20 20 20 2a 2a 20 63 6f 75 6c 64 20 63 61 75 73     ** could caus
1d0f0 65 20 70 72 6f 62 6c 65 6d 73 2e 20 54 6f 20 61  e problems. To a
1d100 76 6f 69 64 20 75 6e 63 65 72 74 61 69 6e 74 79  void uncertainty
1d110 2c 20 53 51 4c 69 74 65 20 75 73 65 73 20 69 74  , SQLite uses it
1d120 73 20 6f 77 6e 20 0a 20 20 20 20 2a 2a 20 72 61  s own .    ** ra
1d130 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65  ndom number gene
1d140 72 61 74 6f 72 20 62 61 73 65 64 20 6f 6e 20 74  rator based on t
1d150 68 65 20 52 43 34 20 61 6c 67 6f 72 69 74 68 6d  he RC4 algorithm
1d160 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1d170 54 6f 20 70 72 6f 6d 6f 74 65 20 6c 6f 63 61 6c  To promote local
1d180 69 74 79 20 6f 66 20 72 65 66 65 72 65 6e 63 65  ity of reference
1d190 20 66 6f 72 20 72 65 70 65 74 69 74 69 76 65 20   for repetitive 
1d1a0 69 6e 73 65 72 74 73 2c 20 74 68 65 0a 20 20 20  inserts, the.   
1d1b0 20 2a 2a 20 66 69 72 73 74 20 66 65 77 20 61 74   ** first few at
1d1c0 74 65 6d 70 74 73 20 61 74 20 63 68 6f 6f 73 69  tempts at choosi
1d1d0 6e 67 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69  ng a random rowi
1d1e0 64 20 70 69 63 6b 20 76 61 6c 75 65 73 20 6a 75  d pick values ju
1d1f0 73 74 20 61 20 6c 69 74 74 6c 65 0a 20 20 20 20  st a little.    
1d200 2a 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74  ** larger than t
1d210 68 65 20 70 72 65 76 69 6f 75 73 20 72 6f 77 69  he previous rowi
1d220 64 2e 20 20 54 68 69 73 20 68 61 73 20 62 65 65  d.  This has bee
1d230 6e 20 73 68 6f 77 6e 20 65 78 70 65 72 69 6d 65  n shown experime
1d240 6e 74 61 6c 6c 79 0a 20 20 20 20 2a 2a 20 74 6f  ntally.    ** to
1d250 20 64 6f 75 62 6c 65 20 74 68 65 20 73 70 65 65   double the spee
1d260 64 20 6f 66 20 74 68 65 20 43 4f 50 59 20 6f 70  d of the COPY op
1d270 65 72 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a  eration..    */.
1d280 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20      cnt = 0;.   
1d290 20 69 66 28 20 28 73 71 6c 69 74 65 33 42 74 72   if( (sqlite3Btr
1d2a0 65 65 46 6c 61 67 73 28 70 43 2d 3e 70 43 75 72  eeFlags(pC->pCur
1d2b0 73 6f 72 29 26 28 42 54 52 45 45 5f 49 4e 54 4b  sor)&(BTREE_INTK
1d2c0 45 59 7c 42 54 52 45 45 5f 5a 45 52 4f 44 41 54  EY|BTREE_ZERODAT
1d2d0 41 29 29 20 21 3d 0a 20 20 20 20 20 20 20 20 20  A)) !=.         
1d2e0 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 20 29 7b   BTREE_INTKEY ){
1d2f0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
1d300 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
1d310 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1d320 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1d330 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
1d340 28 20 28 73 71 6c 69 74 65 33 42 74 72 65 65 46  ( (sqlite3BtreeF
1d350 6c 61 67 73 28 70 43 2d 3e 70 43 75 72 73 6f 72  lags(pC->pCursor
1d360 29 20 26 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  ) & BTREE_INTKEY
1d370 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  )!=0 );.    asse
1d380 72 74 28 20 28 73 71 6c 69 74 65 33 42 74 72 65  rt( (sqlite3Btre
1d390 65 46 6c 61 67 73 28 70 43 2d 3e 70 43 75 72 73  eFlags(pC->pCurs
1d3a0 6f 72 29 20 26 20 42 54 52 45 45 5f 5a 45 52 4f  or) & BTREE_ZERO
1d3b0 44 41 54 41 29 3d 3d 30 20 29 3b 0a 0a 23 69 66  DATA)==0 );..#if
1d3c0 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54  def SQLITE_32BIT
1d3d0 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e  _ROWID.#   defin
1d3e0 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66  e MAX_ROWID 0x7f
1d3f0 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20  ffffff.#else.   
1d400 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65   /* Some compile
1d410 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
1d420 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74  t constants of t
1d430 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66  he form 0x7fffff
1d440 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20  ffffffffff..    
1d450 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61  ** Others compla
1d460 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66  in about 0x7ffff
1d470 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20  ffffffffffffLL. 
1d480 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
1d490 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a  acro seems.    *
1d4a0 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65  * to provide the
1d4b0 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20   constant while 
1d4c0 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69  making all compi
1d4d0 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20  lers happy..    
1d4e0 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  */.#   define MA
1d4f0 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20  X_ROWID  (i64)( 
1d500 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66  (((u64)0x7ffffff
1d510 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30  f)<<32) | (u64)0
1d520 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64  xffffffff ).#end
1d530 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d  if..    if( !pC-
1d540 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1d550 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  ){.      v = sql
1d560 69 74 65 33 42 74 72 65 65 47 65 74 43 61 63 68  ite3BtreeGetCach
1d570 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72  edRowid(pC->pCur
1d580 73 6f 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20  sor);.      if( 
1d590 76 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  v==0 ){.        
1d5a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d5b0 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f  eLast(pC->pCurso
1d5c0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1d5d0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1d5e0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
1d5f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d600 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1d610 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
1d620 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20  res ){.         
1d630 20 76 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20   v = 1;.        
1d640 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1d650 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
1d660 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  Size(pC->pCursor
1d670 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20  , &v);.         
1d680 20 76 20 3d 20 6b 65 79 54 6f 49 6e 74 28 76 29   v = keyToInt(v)
1d690 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
1d6a0 76 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a  v==MAX_ROWID ){.
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e              pC->
1d6c0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d  useRandomRowid =
1d6d0 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65   1;.          }e
1d6e0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
1d6f0 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20   v++;.          
1d700 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
1d710 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c    }..#ifndef SQL
1d720 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
1d730 52 45 4d 45 4e 54 0a 20 20 20 20 20 20 69 66 28  REMENT.      if(
1d740 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
1d750 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1d760 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
1d770 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 20 2f 2a 20  <=p->nMem ); /* 
1d780 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
1d790 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 20 20 20  mory cell */.   
1d7a0 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 2d 3e       pMem = &p->
1d7b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 09  aMem[pOp->p3];..
1d7c0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
1d7d0 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20  Op->p3, pMem);. 
1d7e0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
1d7f0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1d800 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 61  pMem);.        a
1d810 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
1d820 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
1d830 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29  0 );  /* mem(P3)
1d840 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
1d850 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  r */.        if(
1d860 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f   pMem->u.i==MAX_
1d870 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65  ROWID || pC->use
1d880 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
1d890 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
1d8a0 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20 20  LITE_FULL;.     
1d8b0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1d8c0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1d8d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1d8e0 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b  if( v<pMem->u.i+
1d8f0 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76  1 ){.          v
1d900 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31   = pMem->u.i + 1
1d910 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1d920 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20      pMem->u.i = 
1d930 76 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  v;.      }.#endi
1d940 66 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  f..      sqlite3
1d950 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f  BtreeSetCachedRo
1d960 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  wid(pC->pCursor,
1d970 20 76 3c 4d 41 58 5f 52 4f 57 49 44 20 3f 20 76   v<MAX_ROWID ? v
1d980 2b 31 20 3a 20 30 29 3b 0a 20 20 20 20 7d 0a 20  +1 : 0);.    }. 
1d990 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61     if( pC->useRa
1d9a0 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
1d9b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1d9c0 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 53 51 4c  p3==0 );  /* SQL
1d9d0 49 54 45 5f 46 55 4c 4c 20 6d 75 73 74 20 68 61  ITE_FULL must ha
1d9e0 76 65 20 6f 63 63 75 72 72 65 64 20 70 72 69 6f  ve occurred prio
1d9f0 72 20 74 6f 20 74 68 69 73 20 2a 2f 0a 20 20 20  r to this */.   
1da00 20 20 20 76 20 3d 20 64 62 2d 3e 70 72 69 6f 72     v = db->prior
1da10 4e 65 77 52 6f 77 69 64 3b 0a 20 20 20 20 20 20  NewRowid;.      
1da20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64  cnt = 0;.      d
1da30 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63  o{.        if( c
1da40 6e 74 3d 3d 30 20 26 26 20 28 76 26 30 78 66 66  nt==0 && (v&0xff
1da50 66 66 66 66 29 3d 3d 76 20 29 7b 0a 20 20 20 20  ffff)==v ){.    
1da60 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20        v++;.     
1da70 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1da80 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64      sqlite3_rand
1da90 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29  omness(sizeof(v)
1daa0 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20  , &v);.         
1dab0 20 69 66 28 20 63 6e 74 3c 35 20 29 20 76 20 26   if( cnt<5 ) v &
1dac0 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20  = 0xffffff;.    
1dad0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
1dae0 28 20 76 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ( v==0 ) continu
1daf0 65 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20 69  e;.        x = i
1db00 6e 74 54 6f 4b 65 79 28 76 29 3b 0a 20 20 20 20  ntToKey(v);.    
1db10 20 20 20 20 72 78 20 3d 20 73 71 6c 69 74 65 33      rx = sqlite3
1db20 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1db30 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1db40 20 30 2c 20 28 75 36 34 29 78 2c 20 30 2c 20 26   0, (u64)x, 0, &
1db50 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 63 6e  res);.        cn
1db60 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c  t++;.      }whil
1db70 65 28 20 63 6e 74 3c 31 30 30 20 26 26 20 72 78  e( cnt<100 && rx
1db80 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
1db90 65 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64  es==0 );.      d
1dba0 62 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64  b->priorNewRowid
1dbb0 20 3d 20 76 3b 0a 20 20 20 20 20 20 69 66 28 20   = v;.      if( 
1dbc0 72 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rx==SQLITE_OK &&
1dbd0 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
1dbe0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
1dbf0 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  ULL;.        got
1dc00 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1dc10 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
1dc20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69    }.    pC->rowi
1dc30 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1dc40 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1dc50 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1dc60 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1dc70 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1dc80 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
1dc90 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
1dca0 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1dcb0 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
1dcc0 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
1dcd0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1dce0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65  **.** Write an e
1dcf0 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61  ntry into the ta
1dd00 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31  ble of cursor P1
1dd10 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69  .  A new entry i
1dd20 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20  s.** created if 
1dd30 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61  it doesn't alrea
1dd40 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20  dy exist or the 
1dd50 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73  data for an exis
1dd60 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73  ting.** entry is
1dd70 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54   overwritten.  T
1dd80 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76  he data is the v
1dd90 61 6c 75 65 20 73 74 6f 72 65 64 20 72 65 67 69  alue stored regi
1dda0 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
1ddb0 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
1ddc0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1ddd0 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
1dde0 74 0a 2a 2a 20 62 65 20 61 6e 20 69 6e 74 65 67  t.** be an integ
1ddf0 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  er..**.** If the
1de00 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
1de10 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
1de20 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
1de30 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
1de40 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
1de50 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20  otherwise not). 
1de60 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
1de70 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66  ASTROWID flag of
1de80 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74   P5 is set,.** t
1de90 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f  hen rowid is sto
1dea0 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65  red for subseque
1deb0 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65  nt return by the
1dec0 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74  .** sqlite3_last
1ded0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
1dee0 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77  function (otherw
1def0 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69  ise it is unmodi
1df00 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 61 72  fied)..**.** Par
1df10 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
1df20 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20  int to a string 
1df30 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1df40 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a  able-name, or.**
1df50 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
1df60 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   it is not NULL,
1df70 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
1df80 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74  -hook .** (sqlit
1df90 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
1dfa0 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66  ck) is invoked f
1dfb0 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
1dfc0 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
1dfd0 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
1dfe0 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
1dff0 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
1e000 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
1e010 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
1e020 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
1e030 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
1e040 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
1e050 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
1e060 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
1e070 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
1e080 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
1e090 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
1e0a0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
1e0b0 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
1e0c0 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
1e0d0 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
1e0e0 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
1e0f0 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
1e100 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1e110 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
1e120 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
1e130 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
1e140 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
1e150 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
1e160 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73  ..*/.case OP_Ins
1e170 65 72 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44  ert: {.  Mem *pD
1e180 61 74 61 3b 0a 20 20 4d 65 6d 20 2a 70 4b 65 79  ata;.  Mem *pKey
1e190 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  ;.  i64 iKey;   
1e1a0 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52  /* The integer R
1e1b0 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20  OWID or key for 
1e1c0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
1e1d0 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 69   inserted */.  i
1e1e0 6e 74 20 69 3b 0a 20 20 56 64 62 65 43 75 72 73  nt i;.  VdbeCurs
1e1f0 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 6e 5a  or *pC;.  int nZ
1e200 65 72 6f 3b 0a 20 20 69 6e 74 20 73 65 65 6b 52  ero;.  int seekR
1e210 65 73 75 6c 74 3b 0a 20 20 63 6f 6e 73 74 20 63  esult;.  const c
1e220 68 61 72 20 2a 7a 44 62 3b 0a 20 20 63 6f 6e 73  har *zDb;.  cons
1e230 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 0a 20 20  t char *zTbl;.  
1e240 69 6e 74 20 6f 70 3b 0a 0a 20 20 70 44 61 74 61  int op;..  pData
1e250 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
1e260 3e 70 32 5d 3b 0a 20 20 70 4b 65 79 20 3d 20 26  >p2];.  pKey = &
1e270 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
1e280 3b 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ;.  i = pOp->p1;
1e290 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1e2a0 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1e2b0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1e2c0 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  sr[i];.  assert(
1e2d0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1e2e0 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1e2f0 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f  =0 || pC->pseudo
1e300 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
1e310 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
1e320 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
1e330 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1e340 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  e );.  REGISTER_
1e350 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
1e360 44 61 74 61 29 3b 0a 20 20 52 45 47 49 53 54 45  Data);.  REGISTE
1e370 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
1e380 20 70 4b 65 79 29 3b 0a 0a 20 20 69 4b 65 79 20   pKey);..  iKey 
1e390 3d 20 69 6e 74 54 6f 4b 65 79 28 70 4b 65 79 2d  = intToKey(pKey-
1e3a0 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70  >u.i);.  if( pOp
1e3b0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
1e3c0 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
1e3d0 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ge++;.  if( pOp-
1e3e0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53  >p5 & OPFLAG_LAS
1e3f0 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73  TROWID ) db->las
1e400 74 52 6f 77 69 64 20 3d 20 70 4b 65 79 2d 3e 75  tRowid = pKey->u
1e410 2e 69 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  .i;.  if( pData-
1e420 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
1e430 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e  l ){.    pData->
1e440 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61  z = 0;.    pData
1e450 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  ->n = 0;.  }else
1e460 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
1e470 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  ata->flags & (ME
1e480 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20  M_Blob|MEM_Str) 
1e490 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 43 2d  );.  }.  if( pC-
1e4a0 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a  >pseudoTable ){.
1e4b0 20 20 20 20 69 66 28 20 21 70 43 2d 3e 65 70 68      if( !pC->eph
1e4c0 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20 29 7b  emPseudoTable ){
1e4d0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
1e4e0 46 72 65 65 28 64 62 2c 20 70 43 2d 3e 70 44 61  Free(db, pC->pDa
1e4f0 74 61 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ta);.    }.    p
1e500 43 2d 3e 69 4b 65 79 20 3d 20 69 4b 65 79 3b 0a  C->iKey = iKey;.
1e510 20 20 20 20 70 43 2d 3e 6e 44 61 74 61 20 3d 20      pC->nData = 
1e520 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 20 20 69 66  pData->n;.    if
1e530 28 20 70 44 61 74 61 2d 3e 7a 3d 3d 70 44 61 74  ( pData->z==pDat
1e540 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 7c 7c 20 70 43  a->zMalloc || pC
1e550 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62  ->ephemPseudoTab
1e560 6c 65 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e  le ){.      pC->
1e570 70 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a  pData = pData->z
1e580 3b 0a 20 20 20 20 20 20 69 66 28 20 21 70 43 2d  ;.      if( !pC-
1e590 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c  >ephemPseudoTabl
1e5a0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44 61  e ){.        pDa
1e5b0 74 61 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  ta->flags &= ~ME
1e5c0 4d 5f 44 79 6e 3b 0a 20 20 20 20 20 20 20 20 70  M_Dyn;.        p
1e5d0 44 61 74 61 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  Data->flags |= M
1e5e0 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 20 20  EM_Ephem;.      
1e5f0 20 20 70 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63    pData->zMalloc
1e600 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
1e610 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
1e620 43 2d 3e 70 44 61 74 61 20 3d 20 73 71 6c 69 74  C->pData = sqlit
1e630 65 33 4d 61 6c 6c 6f 63 28 20 70 43 2d 3e 6e 44  e3Malloc( pC->nD
1e640 61 74 61 2b 32 20 29 3b 0a 20 20 20 20 20 20 69  ata+2 );.      i
1e650 66 28 20 21 70 43 2d 3e 70 44 61 74 61 20 29 20  f( !pC->pData ) 
1e660 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
1e670 20 20 20 6d 65 6d 63 70 79 28 70 43 2d 3e 70 44     memcpy(pC->pD
1e680 61 74 61 2c 20 70 44 61 74 61 2d 3e 7a 2c 20 70  ata, pData->z, p
1e690 43 2d 3e 6e 44 61 74 61 29 3b 0a 20 20 20 20 20  C->nData);.     
1e6a0 20 70 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e   pC->pData[pC->n
1e6b0 44 61 74 61 5d 20 3d 20 30 3b 0a 20 20 20 20 20  Data] = 0;.     
1e6c0 20 70 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e   pC->pData[pC->n
1e6d0 44 61 74 61 2b 31 5d 20 3d 20 30 3b 0a 20 20 20  Data+1] = 0;.   
1e6e0 20 7d 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52   }.    pC->nullR
1e6f0 6f 77 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  ow = 0;.  }else{
1e700 0a 20 20 20 20 73 65 65 6b 52 65 73 75 6c 74 20  .    seekResult 
1e710 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
1e720 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
1e730 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
1e740 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 20 20 69  sult : 0);.    i
1e750 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
1e760 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
1e770 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74      nZero = pDat
1e780 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  a->u.nZero;.    
1e790 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 5a 65  }else{.      nZe
1e7a0 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  ro = 0;.    }.  
1e7b0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
1e7c0 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
1e7d0 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20  >pCursor, 0);.  
1e7e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1e7f0 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43  reeInsert(pC->pC
1e800 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a  ursor, 0, iKey,.
1e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e820 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74              pDat
1e830 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20  a->z, pData->n, 
1e840 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20  nZero,.         
1e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e860 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46     pOp->p5 & OPF
1e870 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65 65 6b  LAG_APPEND, seek
1e880 52 65 73 75 6c 74 0a 20 20 20 20 29 3b 0a 20 20  Result.    );.  
1e890 7d 0a 20 20 0a 20 20 70 43 2d 3e 72 6f 77 69 64  }.  .  pC->rowid
1e8a0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
1e8b0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1e8c0 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
1e8d0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1e8e0 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
1e8f0 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
1e900 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
1e910 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
1e920 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
1e930 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
1e940 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
1e950 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
1e960 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
1e970 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70  ;.    zTbl = pOp
1e980 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d  ->p4.z;.    op =
1e990 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
1e9a0 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20  LAG_ISUPDATE) ? 
1e9b0 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20  SQLITE_UPDATE : 
1e9c0 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a  SQLITE_INSERT);.
1e9d0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1e9e0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64  isTable );.    d
1e9f0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
1ea00 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
1ea10 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c  g, op, zDb, zTbl
1ea20 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73  , iKey);.    ass
1ea30 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
1ea40 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
1ea50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
1ea60 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20  lete P1 P2 * P4 
1ea70 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74  *.**.** Delete t
1ea80 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69  he record at whi
1ea90 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  ch the P1 cursor
1eaa0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
1eab0 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  inting..**.** Th
1eac0 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
1ead0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1eae0 74 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78  t either the nex
1eaf0 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
1eb00 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
1eb10 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
1eb20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
1eb30 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
1eb40 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
1eb50 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
1eb60 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
1eb70 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69   no-op.  Hence i
1eb80 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74  t is OK to delet
1eb90 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72  e.** a record fr
1eba0 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78  om within an Nex
1ebb0 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66  t loop..**.** If
1ebc0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
1ebd0 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69  NGE flag of P2 i
1ebe0 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
1ebf0 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
1ec00 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
1ec10 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
1ec20 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73  t)..**.** P1 mus
1ec30 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d  t not be pseudo-
1ec40 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74  table.  It has t
1ec50 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c  o be a real tabl
1ec60 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70  e with.** multip
1ec70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49  le rows..**.** I
1ec80 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
1ec90 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65  , then it is the
1eca0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
1ecb0 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a  le that P1 is.**
1ecc0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54   pointing to.  T
1ecd0 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77  he update hook w
1ece0 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20  ill be invoked, 
1ecf0 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a  if it exists..**
1ed00 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
1ed10 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63  LL then the P1 c
1ed20 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20  ursor must have 
1ed30 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a  been positioned.
1ed40 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46  ** using OP_NotF
1ed50 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e  ound prior to in
1ed60 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  voking this opco
1ed70 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  de..*/.case OP_D
1ed80 65 6c 65 74 65 3a 20 7b 0a 20 20 69 6e 74 20 69  elete: {.  int i
1ed90 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20  ;.  i64 iKey;.  
1eda0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1edb0 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .  i = pOp->p1;.
1edc0 20 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73    iKey = 0;.  as
1edd0 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1ede0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1edf0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
1ee00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1ee10 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1ee20 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1ee30 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20    /* Only valid 
1ee40 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c  for real tables,
1ee50 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73   no pseudotables
1ee60 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   */..  /* If the
1ee70 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c   update-hook wil
1ee80 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65  l be invoked, se
1ee90 74 20 69 4b 65 79 20 74 6f 20 74 68 65 20 72 6f  t iKey to the ro
1eea0 77 69 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20  wid of the.  ** 
1eeb0 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74 65  row being delete
1eec0 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62  d..  */.  if( db
1eed0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
1eee0 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
1eef0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
1ef00 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
1ef10 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77   assert( pC->row
1ef20 69 64 49 73 56 61 6c 69 64 20 29 3b 20 20 2f 2a  idIsValid );  /*
1ef30 20 6c 61 73 74 52 6f 77 69 64 20 73 65 74 20 62   lastRowid set b
1ef40 79 20 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e 6f  y previous OP_No
1ef50 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69 4b  tFound */.    iK
1ef60 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77  ey = pC->lastRow
1ef70 69 64 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20  id;.  }..  rc = 
1ef80 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
1ef90 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
1efa0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1efb0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1efc0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53  .  sqlite3BtreeS
1efd0 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43  etCachedRowid(pC
1efe0 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20  ->pCursor, 0);. 
1eff0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f000 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75  eeDelete(pC->pCu
1f010 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63  rsor);.  pC->cac
1f020 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1f030 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
1f040 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
1f050 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
1f060 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
1f070 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
1f080 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
1f090 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
1f0a0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1f0b0 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43  zDb = db->aDb[pC
1f0c0 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20  ->iDb].zName;.  
1f0d0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1f0e0 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  bl = pOp->p4.z;.
1f0f0 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
1f100 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
1f110 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
1f120 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c  ELETE, zDb, zTbl
1f130 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73  , iKey);.    ass
1f140 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
1f150 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
1f160 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p2 & OPFLAG_NC
1f170 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
1f180 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ge++;.  break;.}
1f190 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
1f1a0 65 74 43 6f 75 6e 74 20 50 31 20 2a 20 2a 0a 2a  etCount P1 * *.*
1f1b0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1f1c0 20 72 65 73 65 74 73 20 74 68 65 20 56 4d 73 20   resets the VMs 
1f1d0 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20  internal change 
1f1e0 63 6f 75 6e 74 65 72 20 74 6f 20 30 2e 20 49 66  counter to 0. If
1f1f0 20 50 31 20 69 73 20 74 72 75 65 2c 0a 2a 2a 20   P1 is true,.** 
1f200 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  then the value o
1f210 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  f the change cou
1f220 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74  nter is copied t
1f230 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
1f240 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20  andle.** change 
1f250 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65  counter (returne
1f260 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20  d by subsequent 
1f270 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33  calls to sqlite3
1f280 5f 63 68 61 6e 67 65 73 28 29 29 0a 2a 2a 20 62  _changes()).** b
1f290 65 66 6f 72 65 20 69 74 20 69 73 20 72 65 73 65  efore it is rese
1f2a0 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  t. This is used 
1f2b0 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
1f2c0 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ams..*/.case OP_
1f2d0 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20  ResetCount: {.  
1f2e0 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
1f2f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
1f300 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
1f310 6e 43 68 61 6e 67 65 29 3b 0a 20 20 7d 0a 20 20  nChange);.  }.  
1f320 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
1f330 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1f340 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
1f350 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1f360 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
1f370 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
1f380 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f  lete row data fo
1f390 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
1f3a0 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
1f3b0 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
1f3c0 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20  e data.  .** It 
1f3d0 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f  is just copied o
1f3e0 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
1f3f0 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
1f400 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
1f410 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
1f420 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ile..**.** If th
1f430 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
1f440 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   be pointing to 
1f450 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74  a valid row (not
1f460 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20   a NULL row).** 
1f470 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  of a real table,
1f480 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
1f490 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ble..*/./* Opcod
1f4a0 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20  e: RowKey P1 P2 
1f4b0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
1f4c0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
1f4d0 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
1f4e0 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73  row key for curs
1f4f0 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
1f500 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
1f510 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
1f520 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69  .  .** The key i
1f530 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  s copied onto th
1f540 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65 78  e P3 register ex
1f550 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
1f560 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
1f570 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
1f580 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
1f590 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
1f5a0 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
1f5b0 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
1f5c0 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
1f5d0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
1f5e0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1f5f0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79  /.case OP_RowKey
1f600 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74  :.case OP_RowDat
1f610 61 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  a: {.  int i;.  
1f620 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1f630 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1f640 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69 36  r;.  u32 n;.  i6
1f650 34 20 6e 36 34 3b 0a 0a 20 20 69 20 3d 20 70 4f  4 n64;..  i = pO
1f660 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 20 3d 20  p->p1;.  pOut = 
1f670 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
1f680 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68  ];..  /* Note th
1f690 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f  at RowKey and Ro
1f6a0 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79  wData are really
1f6b0 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
1f6c0 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f  e instruction */
1f6d0 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1f6e0 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1f6f0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1f700 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  sr[i];.  assert(
1f710 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20   pC->isTable || 
1f720 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1f730 52 6f 77 4b 65 79 20 29 3b 0a 20 20 61 73 73 65  RowKey );.  asse
1f740 72 74 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  rt( pC->isIndex 
1f750 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
1f760 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20  OP_RowData );.  
1f770 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1f780 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e  .  assert( pC->n
1f790 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61  ullRow==0 );.  a
1f7a0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1f7b0 6f 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61  oTable==0 );.  a
1f7c0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1f7d0 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  or!=0 );.  pCrsr
1f7e0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
1f7f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1f800 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
1f810 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  C);.  if( rc ) g
1f820 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1f830 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 43  _error;.  if( pC
1f840 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20  ->isIndex ){.   
1f850 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73   assert( !pC->is
1f860 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 73 71 6c  Table );.    sql
1f870 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
1f880 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20  (pCrsr, &n64);. 
1f890 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61     if( n64>db->a
1f8a0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
1f8b0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
1f8c0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
1f8d0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20  ;.    }.    n = 
1f8e0 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73  (u32)n64;.  }els
1f8f0 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  e{.    sqlite3Bt
1f900 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
1f910 72 2c 20 26 6e 29 3b 0a 20 20 20 20 69 66 28 20  r, &n);.    if( 
1f920 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  n>(u32)db->aLimi
1f930 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
1f940 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
1f950 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
1f960 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71    }.  }.  if( sq
1f970 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
1f980 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a  (pOut, n, 0) ){.
1f990 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
1f9a0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  .  }.  pOut->n =
1f9b0 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   n;.  MemSetType
1f9c0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42  Flag(pOut, MEM_B
1f9d0 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  lob);.  if( pC->
1f9e0 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72  isIndex ){.    r
1f9f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1fa00 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  Key(pCrsr, 0, n,
1fa10 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c   pOut->z);.  }el
1fa20 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
1fa30 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43  ite3BtreeData(pC
1fa40 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
1fa50 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >z);.  }.  pOut-
1fa60 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
1fa70 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
1fa80 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
1fa90 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f   cast to text */
1faa0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
1fab0 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
1fac0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1fad0 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32  ode: Rowid P1 P2
1fae0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f   * * *.**.** Sto
1faf0 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  re in register P
1fb00 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
1fb10 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66  ch is the key of
1fb20 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
1fb30 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63   that.** P1 is c
1fb40 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74  urrently point t
1fb50 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20  o..**.** P1 can 
1fb60 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64  be either an ord
1fb70 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61  inary table or a
1fb80 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
1fb90 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a   There used to.*
1fba0 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20  * be a separate 
1fbb0 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65  OP_VRowid opcode
1fbc0 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69   for use with vi
1fbd0 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75  rtual tables, bu
1fbe0 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70  t this.** one op
1fbf0 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66  code now works f
1fc00 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79  or both table ty
1fc10 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pes..*/.case OP_
1fc20 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
1fc30 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1fc40 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
1fc50 20 69 6e 74 20 69 3b 0a 20 20 56 64 62 65 43 75   int i;.  VdbeCu
1fc60 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
1fc70 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  v;.  sqlite3_vta
1fc80 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
1fc90 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
1fca0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 69 20   *pModule;..  i 
1fcb0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
1fcc0 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
1fcd0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1fce0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b  C = p->apCsr[i];
1fcf0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1fd00 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75   );.  if( pC->nu
1fd10 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 2f 2a 20  llRow ){.    /* 
1fd20 44 6f 20 6e 6f 74 68 69 6e 67 20 73 6f 20 74 68  Do nothing so th
1fd30 61 74 20 72 65 67 5b 50 32 5d 20 72 65 6d 61 69  at reg[P2] remai
1fd40 6e 73 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 62  ns NULL */.    b
1fd50 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66  reak;.  }else if
1fd60 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
1fd70 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20  veto ){.    v = 
1fd80 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
1fd90 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  ;.  }else if( pC
1fda0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b  ->pseudoTable ){
1fdb0 0a 20 20 20 20 76 20 3d 20 6b 65 79 54 6f 49 6e  .    v = keyToIn
1fdc0 74 28 70 43 2d 3e 69 4b 65 79 29 3b 0a 23 69 66  t(pC->iKey);.#if
1fdd0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1fde0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
1fdf0 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 56  }else if( pC->pV
1fe00 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20 20  tabCursor ){.   
1fe10 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56 74   pVtab = pC->pVt
1fe20 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
1fe30 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  .    pModule = p
1fe40 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
1fe50 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75     assert( pModu
1fe60 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20  le->xRowid );.  
1fe70 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
1fe80 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
1fe90 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
1fea0 69 73 75 73 65 3b 0a 20 20 20 20 72 63 20 3d 20  isuse;.    rc = 
1feb0 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28  pModule->xRowid(
1fec0 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c  pC->pVtabCursor,
1fed0 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65   &v);.    sqlite
1fee0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
1fef0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
1ff00 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
1ff10 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56  >zErrMsg;.    pV
1ff20 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
1ff30 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
1ff40 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
1ff50 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ff60 6f 5f 6d 69 73 75 73 65 3b 0a 23 65 6e 64 69 66  o_misuse;.#endif
1ff70 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
1ff80 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
1ff90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
1ffa0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
1ffb0 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
1ffc0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
1ffd0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1ffe0 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
1fff0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b  >rowidIsValid ){
20000 0a 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c  .      v = pC->l
20010 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65  astRowid;.    }e
20020 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
20030 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
20040 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 );.      sqlit
20050 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
20060 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
20070 0a 20 20 20 20 20 20 76 20 3d 20 6b 65 79 54 6f  .      v = keyTo
20080 49 6e 74 28 76 29 3b 0a 20 20 20 20 7d 0a 20 20  Int(v);.    }.  
20090 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
200a0 76 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  v;.  MemSetTypeF
200b0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
200c0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
200d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52  /* Opcode: NullR
200e0 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ow P1 * * * *.**
200f0 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72  .** Move the cur
20100 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c  sor P1 to a null
20110 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f   row.  Any OP_Co
20120 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a  lumn operations.
20130 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68  ** that occur wh
20140 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69  ile the cursor i
20150 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f  s on the null ro
20160 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a  w will always.**
20170 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a   write a NULL..*
20180 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f  /.case OP_NullRo
20190 77 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  w: {.  int i;.  
201a0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
201b0 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .  i = pOp->p1;.
201c0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
201d0 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
201e0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
201f0 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  r[i];.  assert( 
20200 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e  pC!=0 );.  pC->n
20210 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
20220 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
20230 20 30 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43   0;.  if( pC->pC
20240 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  ursor ){.    sql
20250 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75  ite3BtreeClearCu
20260 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72  rsor(pC->pCursor
20270 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
20280 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61  }../* Opcode: La
20290 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
202a0 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
202b0 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
202c0 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74  r Column or Next
202d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
202e0 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
202f0 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65  er to the last e
20300 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
20310 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
20320 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
20330 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
20340 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
20350 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
20360 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
20370 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
20380 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
20390 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
203a0 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
203b0 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
203c0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
203d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74  .*/.case OP_Last
203e0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
203f0 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 0a 20  mp */.  int i;. 
20400 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20410 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
20420 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
20430 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20    i = pOp->p1;. 
20440 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
20450 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
20460 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
20470 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  [i];.  assert( p
20480 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
20490 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
204a0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
204b0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
204c0 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
204d0 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d  sr, &res);.  pC-
204e0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
204f0 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  es;.  pC->deferr
20500 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
20510 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
20520 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
20530 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
20540 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73  STALE;.  if( res
20550 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b   && pOp->p2>0 ){
20560 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
20570 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
20580 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
20590 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
205a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
205b0 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
205c0 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
205d0 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
205e0 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
205f0 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
20600 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
20610 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
20620 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
20630 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
20640 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
20650 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
20660 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
20670 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
20680 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
20690 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
206a0 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
206b0 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
206c0 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
206d0 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
206e0 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
206f0 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
20700 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
20710 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
20720 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
20730 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
20740 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
20750 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
20760 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
20770 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
20780 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
20790 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
207a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a  */.case OP_Sort:
207b0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
207c0 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  p */.#ifdef SQLI
207d0 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65  TE_TEST.  sqlite
207e0 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a  3_sort_count++;.
207f0 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
20800 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66  _count--;.#endif
20810 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
20820 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
20830 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a  _SORT-1]++;.  /*
20840 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
20850 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
20860 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
20870 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ind P1 P2 * * *.
20880 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
20890 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
208a0 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
208b0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
208c0 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
208d0 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
208e0 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
208f0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
20900 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
20910 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
20920 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
20930 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
20940 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
20950 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
20960 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
20970 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
20980 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
20990 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
209a0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
209b0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
209c0 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  wind: {        /
209d0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
209e0 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  i;.  VdbeCursor 
209f0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
20a00 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
20a10 73 3b 0a 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70  s;..  i = pOp->p
20a20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  1;.  assert( i>=
20a30 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
20a40 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
20a50 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72  pCsr[i];.  asser
20a60 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
20a70 28 20 28 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  ( (pCrsr = pC->p
20a80 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20  Cursor)!=0 ){.  
20a90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
20aa0 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20  reeFirst(pCrsr, 
20ab0 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61  &res);.    pC->a
20ac0 74 46 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 20  tFirst = res==0 
20ad0 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65  ?1:0;.    pC->de
20ae0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
20af0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
20b00 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
20b10 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77  ALE;.    pC->row
20b20 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
20b30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 73 20   }else{.    res 
20b40 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e  = 1;.  }.  pC->n
20b50 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
20b60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
20b70 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
20b80 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28  <p->nOp );.  if(
20b90 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
20ba0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
20bb0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
20bc0 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31   Opcode: Next P1
20bd0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
20be0 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50  Advance cursor P
20bf0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
20c00 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20  nts to the next 
20c10 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
20c20 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
20c30 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
20c40 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65  e are no more ke
20c50 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
20c60 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
20c70 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
20c80 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
20c90 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
20ca0 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20  sor advance was 
20cb0 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a  successful,.** j
20cc0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
20cd0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  to P2..**.** The
20ce0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
20cf0 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
20d00 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
20d10 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  o-table..**.** S
20d20 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f  ee also: Prev.*/
20d30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
20d40 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
20d50 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f  ** Back up curso
20d60 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
20d70 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72  points to the pr
20d80 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20  evious key/data 
20d90 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
20da0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
20db0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70  If there is no p
20dc0 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75  revious key/valu
20dd0 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
20de0 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
20df0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
20e00 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
20e10 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61  if the cursor ba
20e20 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73  ckup was success
20e30 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
20e40 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
20e50 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
20e60 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
20e70 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
20e80 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
20e90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65  ..*/.case OP_Pre
20ea0 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  v:          /* j
20eb0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
20ec0 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ext: {        /*
20ed0 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
20ee0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
20ef0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
20f00 69 6e 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43  int res;..  CHEC
20f10 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b  K_FOR_INTERRUPT;
20f20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20f30 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
20f40 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
20f50 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
20f60 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
20f70 43 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61  C==0 ){.    brea
20f80 6b 3b 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65  k;  /* See ticke
20f90 74 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20  t #2273 */.  }. 
20fa0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
20fb0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
20fc0 70 43 72 73 72 20 29 3b 0a 20 20 72 65 73 20 3d  pCrsr );.  res =
20fd0 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   1;.  assert( pC
20fe0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
20ff0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f  ==0 );.  rc = pO
21000 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
21010 78 74 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65  xt ? sqlite3Btre
21020 65 4e 65 78 74 28 70 43 72 73 72 2c 20 26 72 65  eNext(pCrsr, &re
21030 73 29 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20  s) :.           
21040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21050 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 50     sqlite3BtreeP
21060 72 65 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26  revious(pCrsr, &
21070 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  res);.  pC->null
21080 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
21090 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
210a0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
210b0 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
210c0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
210d0 20 2d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f   - 1;.    if( pO
210e0 70 2d 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e  p->p5 ) p->aCoun
210f0 74 65 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b  ter[pOp->p5-1]++
21100 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
21110 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33  TEST.    sqlite3
21120 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
21130 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43  .#endif.  }.  pC
21140 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
21150 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
21160 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e  /* Opcode: IdxIn
21170 73 65 72 74 20 50 31 20 50 32 20 50 33 20 2a 20  sert P1 P2 P3 * 
21180 50 35 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P5.**.** Registe
21190 72 20 50 32 20 68 6f 6c 64 73 20 61 20 53 51 4c  r P2 holds a SQL
211a0 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
211b0 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
211c0 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
211d0 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
211e0 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
211f0 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69  ey.** into the i
21200 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66  ndex P1.  Data f
21210 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
21220 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  nil..**.** P3 is
21230 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f   a flag that pro
21240 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20  vides a hint to 
21250 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72  the b-tree layer
21260 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e   that this.** in
21270 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74  sert is likely t
21280 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a  o be an append..
21290 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
212a0 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
212b0 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
212c0 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
212d0 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
212e0 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
212f0 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nsert..*/.case O
21300 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20  P_IdxInsert: {  
21310 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
21320 20 20 69 6e 74 20 69 3b 0a 20 20 56 64 62 65 43    int i;.  VdbeC
21330 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
21340 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
21350 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73  int nKey;.  cons
21360 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20  t char *zKey;.. 
21370 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
21380 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
21390 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
213a0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
213b0 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 61 73  sr[i]!=0 );.  as
213c0 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67  sert( pIn2->flag
213d0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
213e0 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 28    if( (pCrsr = (
213f0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
21400 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29  )->pCursor)!=0 )
21410 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
21420 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
21430 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42      rc = ExpandB
21440 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 20 20 69  lob(pIn2);.    i
21450 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
21460 20 29 7b 0a 20 20 20 20 20 20 6e 4b 65 79 20 3d   ){.      nKey =
21470 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20   pIn2->n;.      
21480 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a  zKey = pIn2->z;.
21490 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
214a0 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
214b0 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c  rsr, zKey, nKey,
214c0 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e   "", 0, 0, pOp->
214d0 70 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28  p3, .          (
214e0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
214f0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
21500 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
21510 74 20 3a 20 30 29 0a 20 20 20 20 20 20 29 3b 0a  t : 0).      );.
21520 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
21530 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
21540 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d  ==0 );.      pC-
21550 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
21560 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
21570 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
21580 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
21590 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
215a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  * *.**.** The co
215b0 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69  ntent of P3 regi
215c0 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61  sters starting a
215d0 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f  t register P2 fo
215e0 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65  rm.** an unpacke
215f0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69  d index key. Thi
21600 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73  s opcode removes
21610 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d   that entry from
21620 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f   the .** index o
21630 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
21640 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P1..*/.case OP_I
21650 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 6e  dxDelete: {.  in
21660 74 20 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  t i;.  VdbeCurso
21670 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
21680 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 69 20 3d  r *pCrsr;..  i =
21690 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65   pOp->p1;.  asse
216a0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
216b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
216c0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
216d0 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
216e0 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
216f0 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
21700 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
21710 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30  ( p->apCsr[i]!=0
21720 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72   );.  if( (pCrsr
21730 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73   = (pC = p->apCs
21740 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21  r[i])->pCursor)!
21750 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65  =0 ){.    int re
21760 73 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52  s;.    UnpackedR
21770 65 63 6f 72 64 20 72 3b 0a 20 20 20 20 72 2e 70  ecord r;.    r.p
21780 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
21790 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
217a0 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
217b0 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73  >p3;.    r.flags
217c0 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d 65 6d   = 0;.    r.aMem
217d0 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
217e0 3e 70 32 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73  >p2];.    rc = s
217f0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
21800 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
21810 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
21820 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
21830 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
21840 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
21850 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
21860 74 65 28 70 43 72 73 72 29 3b 0a 20 20 20 20 7d  te(pCrsr);.    }
21870 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
21880 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
21890 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61  =0 );.    pC->ca
218a0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
218b0 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 62  E_STALE;.  }.  b
218c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
218d0 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20  de: IdxRowid P1 
218e0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
218f0 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
21900 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
21910 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61   which is the la
21920 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
21930 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65  record at.** the
21940 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65   end of the inde
21950 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f  x key pointed to
21960 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20   by cursor P1.  
21970 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f  This integer sho
21980 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f  uld be.** the ro
21990 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
219a0 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20   entry to which 
219b0 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79  this index entry
219c0 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53   points..**.** S
219d0 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20  ee also: Rowid, 
219e0 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63  MakeRecord..*/.c
219f0 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a  ase OP_IdxRowid:
21a00 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
21a10 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
21a20 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 0a 20  se */.  int i;. 
21a30 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
21a40 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
21a50 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b  pC;.  i64 rowid;
21a60 0a 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ..  i = pOp->p1;
21a70 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
21a80 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
21a90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
21aa0 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20  apCsr[i]!=0 );. 
21ab0 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 28 70   if( (pCrsr = (p
21ac0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29  C = p->apCsr[i])
21ad0 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b  ->pCursor)!=0 ){
21ae0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
21af0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
21b00 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72  o(pC);.    if( r
21b10 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
21b20 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
21b30 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
21b40 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
21b50 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
21b60 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
21b70 20 20 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c      if( !pC->nul
21b80 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 72 63  lRow ){.      rc
21b90 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
21ba0 78 52 6f 77 69 64 28 70 43 72 73 72 2c 20 26 72  xRowid(pCrsr, &r
21bb0 6f 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28  owid);.      if(
21bc0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
21bd0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
21be0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
21bf0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
21c00 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
21c10 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
21c20 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20        pOut->u.i 
21c30 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
21c40 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
21c50 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
21c60 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
21c70 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
21c80 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
21c90 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
21ca0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
21cb0 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
21cc0 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49  t omits the ROWI
21cd0 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
21ce0 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
21cf0 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
21d00 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
21d10 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
21d20 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
21d30 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
21d40 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
21d50 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
21d60 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
21d70 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
21d80 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
21d90 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
21da0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
21db0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
21dc0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
21dd0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
21de0 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74   non-zero then t
21df0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20  he key value is 
21e00 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20  increased by an 
21e10 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f  epsilon .** prio
21e20 72 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  r to the compari
21e30 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20  son.  This make 
21e40 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20  the opcode work 
21e50 6c 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70  like IdxGT excep
21e60 74 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65  t.** that if the
21e70 20 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74   key from regist
21e80 65 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69  er P3 is a prefi
21e90 78 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20  x of the key in 
21ea0 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74  the cursor,.** t
21eb0 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c  he result is fal
21ec0 73 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f  se whereas it wo
21ed0 75 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68  uld be true with
21ee0 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70   IdxGT..*/./* Op
21ef0 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50  code: IdxLT P1 P
21f00 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
21f10 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
21f20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
21f30 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
21f40 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
21f50 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
21f60 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
21f70 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
21f80 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
21f90 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
21fa0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
21fb0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
21fc0 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
21fd0 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
21fe0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
21ff0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
22000 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
22010 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
22020 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
22030 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
22040 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
22050 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
22060 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
22070 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
22080 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
22090 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
220a0 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20  on prior .** to 
220b0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
220c0 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20   This makes the 
220d0 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
220e0 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20   IdxLE..*/.case 
220f0 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
22100 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
22110 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
22120 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
22130 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
22140 20 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72   i;.  VdbeCursor
22150 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
22160 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
22170 64 20 72 3b 0a 0a 20 20 69 20 3d 20 70 4f 70 2d  d r;..  i = pOp-
22180 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
22190 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
221a0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
221b0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20   p->apCsr[i]!=0 
221c0 29 3b 0a 20 20 69 66 28 20 28 70 43 20 3d 20 70  );.  if( (pC = p
221d0 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75  ->apCsr[i])->pCu
221e0 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 61  rsor!=0 ){.    a
221f0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
22200 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
22210 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
22220 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
22230 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  5==1 );.    asse
22240 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
22250 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
22260 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
22270 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
22280 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
22290 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 69  pOp->p4.i;.    i
222a0 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
222b0 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e      r.flags = UN
222c0 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c  PACKED_INCRKEY |
222d0 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45   UNPACKED_IGNORE
222e0 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 65 6c 73  _ROWID;.    }els
222f0 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  e{.      r.flags
22300 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f   = UNPACKED_IGNO
22310 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 0a  RE_ROWID;.    }.
22320 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d      r.aMem = &p-
22330 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
22340 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22350 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72  VdbeIdxKeyCompar
22360 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b  e(pC, &r, &res);
22370 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
22380 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
22390 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d 72  {.      res = -r
223a0 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  es;.    }else{. 
223b0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
223c0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
223d0 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73 2b  GE );.      res+
223e0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
223f0 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20   res>0 ){.      
22400 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
22410 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   ;.    }.  }.  b
22420 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
22430 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50  de: Destroy P1 P
22440 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
22450 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20  elete an entire 
22460 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
22470 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
22480 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64  ot page in the d
22490 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20  atabase.** file 
224a0 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a  is given by P1..
224b0 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
224c0 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20  being destroyed 
224d0 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
224e0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
224f0 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33  P3==0.  If.** P3
22500 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
22510 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
22520 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
22530 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
22540 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
22550 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
22560 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
22570 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
22580 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41  ABLE..**.** If A
22590 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61  UTOVACUUM is ena
225a0 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20  bled then it is 
225b0 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e  possible that an
225c0 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a  other root page.
225d0 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65  ** might be move
225e0 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79  d into the newly
225f0 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61   deleted root pa
22600 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ge in order to k
22610 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20  eep all.** root 
22620 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73  pages contiguous
22630 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
22640 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  g of the databas
22650 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a  e.  The former.*
22660 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  * value of the r
22670 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f  oot page that mo
22680 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20  ved - its value 
22690 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20  before the move 
226a0 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73  occurred -.** is
226b0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
226c0 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70  ter P2.  If no p
226d0 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74  age .** movement
226e0 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62   was required (b
226f0 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
22700 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77   being dropped w
22710 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74  as already .** t
22720 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
22730 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
22740 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
22750 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
22760 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  2..** If AUTOVAC
22770 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20  UUM is disabled 
22780 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73  then a zero is s
22790 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
227a0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
227b0 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63  also: Clear.*/.c
227c0 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20  ase OP_Destroy: 
227d0 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72  {     /* out2-pr
227e0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
227f0 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20  t iMoved;.  int 
22800 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56  iCnt;.  Vdbe *pV
22810 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  dbe;.  int iDb;.
22820 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22830 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
22840 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66  .  iCnt = 0;.  f
22850 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64  or(pVdbe=db->pVd
22860 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65  be; pVdbe; pVdbe
22870 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74 29   = pVdbe->pNext)
22880 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62 65 2d  {.    if( pVdbe-
22890 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47  >magic==VDBE_MAG
228a0 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d  IC_RUN && pVdbe-
228b0 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20  >inVtabMethod<2 
228c0 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20  && pVdbe->pc>=0 
228d0 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b  ){.      iCnt++;
228e0 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65  .    }.  }.#else
228f0 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61 63  .  iCnt = db->ac
22900 74 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65 6e  tiveVdbeCnt;.#en
22910 64 69 66 0a 20 20 69 66 28 20 69 43 6e 74 3e 31  dif.  if( iCnt>1
22920 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
22930 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
22940 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
22950 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c   OE_Abort;.  }el
22960 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f  se{.    iDb = pO
22970 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72  p->p3;.    asser
22980 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20  t( iCnt==1 );.  
22990 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
229a0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44  reeMask & (1<<iD
229b0 62 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63  b))!=0 );.    rc
229c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
229d0 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ropTable(db->aDb
229e0 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  [iDb].pBt, pOp->
229f0 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20  p1, &iMoved);.  
22a00 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
22a10 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
22a20 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
22a30 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66   iMoved;.#ifndef
22a40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
22a50 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20  OVACUUM.    if( 
22a60 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
22a70 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20   iMoved!=0 ){.  
22a80 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50      sqlite3RootP
22a90 61 67 65 4d 6f 76 65 64 28 26 64 62 2d 3e 61 44  ageMoved(&db->aD
22aa0 62 5b 69 44 62 5d 2c 20 69 4d 6f 76 65 64 2c 20  b[iDb], iMoved, 
22ab0 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a  pOp->p1);.    }.
22ac0 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
22ad0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
22ae0 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33  : Clear P1 P2 P3
22af0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
22b00 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  l contents of th
22b10 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
22b20 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
22b30 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20  root page.** in 
22b40 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
22b50 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
22b60 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44  .  But, unlike D
22b70 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a  estroy, do not.*
22b80 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62  * remove the tab
22b90 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d  le or index from
22ba0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
22bb0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  le..**.** The ta
22bc0 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20  ble being clear 
22bd0 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
22be0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
22bf0 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32  P2==0.  If.** P2
22c00 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
22c10 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
22c20 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
22c30 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
22c40 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
22c50 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
22c60 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
22c70 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
22c80 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ABLE..**.** If t
22c90 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e  he P3 value is n
22ca0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
22cb0 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64  e table referred
22cc0 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a   to must be an.*
22cd0 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28  * intkey table (
22ce0 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f  an SQL table, no
22cf0 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20  t an index). In 
22d00 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f  this case the ro
22d10 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75  w change .** cou
22d20 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
22d30 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
22d40 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
22d50 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
22d60 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73  ed. .** If P3 is
22d70 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
22d80 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ro, then the val
22d90 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ue stored in reg
22da0 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61  ister P3 is.** a
22db0 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  lso incremented 
22dc0 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
22dd0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
22de0 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
22df0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
22e00 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73  : Destroy.*/.cas
22e10 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20  e OP_Clear: {.  
22e20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20  int nChange;. . 
22e30 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20   nChange = 0;.  
22e40 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
22e50 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
22e60 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63  >p2))!=0 );.  rc
22e70 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
22e80 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20  learTable(.     
22e90 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32   db->aDb[pOp->p2
22ea0 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
22eb0 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61  (pOp->p3 ? &nCha
22ec0 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20  nge : 0).  );.  
22ed0 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
22ee0 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d     p->nChange +=
22ef0 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66   nChange;.    if
22f00 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20  ( pOp->p3>0 ){. 
22f10 20 20 20 20 20 70 2d 3e 61 4d 65 6d 5b 70 4f 70       p->aMem[pOp
22f20 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68  ->p3].u.i += nCh
22f30 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ange;.    }.  }.
22f40 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22f50 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62  pcode: CreateTab
22f60 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  le P1 P2 * * *.*
22f70 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
22f80 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65  new table in the
22f90 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
22fa0 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
22fb0 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69  in the.** auxili
22fc0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
22fd0 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
22fe0 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
22ff0 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
23000 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f  .  Write the roo
23010 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t page number of
23020 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
23030 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
23040 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  P2.**.** The dif
23050 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
23060 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69  a table and an i
23070 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41  ndex is this:  A
23080 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68   table must.** h
23090 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74  ave a 4-byte int
230a0 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e  eger key and can
230b0 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20   have arbitrary 
230c0 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a  data.  An index.
230d0 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72  ** has an arbitr
230e0 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64  ary key but no d
230f0 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ata..**.** See a
23100 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78  lso: CreateIndex
23110 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .*/./* Opcode: C
23120 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32  reateIndex P1 P2
23130 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c   * * *.**.** All
23140 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65  ocate a new inde
23150 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  x in the main da
23160 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
23170 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
23180 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
23190 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
231a0 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
231b0 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
231c0 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
231d0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
231e0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
231f0 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
23200 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
23210 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74  * See documentat
23220 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65  ion on OP_Create
23230 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69  Table for additi
23240 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
23250 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  ..*/.case OP_Cre
23260 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20  ateIndex:       
23270 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
23280 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20  release */.case 
23290 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20  OP_CreateTable: 
232a0 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
232b0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
232c0 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69  .  int pgno;.  i
232d0 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a  nt flags;.  Db *
232e0 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30  pDb;..  pgno = 0
232f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
23300 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
23310 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
23320 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
23330 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
23340 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62  p1))!=0 );.  pDb
23350 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
23360 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23370 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
23380 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
23390 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  ==OP_CreateTable
233a0 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73   ){.    /* flags
233b0 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
233c0 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20   */.    flags = 
233d0 42 54 52 45 45 5f 4c 45 41 46 44 41 54 41 7c 42  BTREE_LEAFDATA|B
233e0 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d  TREE_INTKEY;.  }
233f0 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20  else{.    flags 
23400 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41  = BTREE_ZERODATA
23410 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
23420 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
23430 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26  able(pDb->pBt, &
23440 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20  pgno, flags);.  
23450 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f  pOut->u.i = pgno
23460 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
23470 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
23480 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
23490 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53  * Opcode: ParseS
234a0 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20 50 34  chema P1 P2 * P4
234b0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e   *.**.** Read an
234c0 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72  d parse all entr
234d0 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ies from the SQL
234e0 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
234f0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a   of database P1.
23500 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68  ** that match th
23510 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50  e WHERE clause P
23520 34 2e 20 20 50 32 20 69 73 20 74 68 65 20 22 66  4.  P2 is the "f
23530 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20 41 6c  orce" flag.   Al
23540 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20 70  ways do.** the p
23550 61 72 73 69 6e 67 20 69 66 20 50 32 20 69 73 20  arsing if P2 is 
23560 74 72 75 65 2e 20 20 49 66 20 50 32 20 69 73 20  true.  If P2 is 
23570 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68 69 73  false, then this
23580 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a 2a   routine is a.**
23590 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 73 63   no-op if the sc
235a0 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75 72 72  hema is not curr
235b0 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20 49  ently loaded.  I
235c0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
235d0 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73 65  f P2.** is false
235e0 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53  , the SQLITE_MAS
235f0 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f 6e 6c  TER table is onl
23600 79 20 70 61 72 73 65 64 20 69 66 20 74 68 65 20  y parsed if the 
23610 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20 73  rest of the.** s
23620 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64 79  chema is already
23630 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74 68 65   loaded into the
23640 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a 2a   symbol table..*
23650 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
23660 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72   invokes the par
23670 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  ser to create a 
23680 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68  new virtual mach
23690 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e  ine,.** then run
236a0 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61  s the new virtua
236b0 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69  l machine.  It i
236c0 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72  s thus a re-entr
236d0 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  ant opcode..*/.c
236e0 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65  ase OP_ParseSche
236f0 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b  ma: {.  int iDb;
23700 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
23710 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a  Master;.  char *
23720 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61  zSql;.  InitData
23730 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 69 44   initData;..  iD
23740 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
23750 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
23760 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
23770 0a 20 20 2f 2a 20 49 66 20 70 4f 70 2d 3e 70 32  .  /* If pOp->p2
23780 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68 69 73   is 0, then this
23790 20 6f 70 63 6f 64 65 20 69 73 20 62 65 69 6e 67   opcode is being
237a0 20 65 78 65 63 75 74 65 64 20 74 6f 20 72 65 61   executed to rea
237b0 64 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20  d a.  ** single 
237c0 72 6f 77 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65  row, for example
237d0 20 74 68 65 20 72 6f 77 20 63 6f 72 72 65 73 70   the row corresp
237e0 6f 6e 64 69 6e 67 20 74 6f 20 61 20 6e 65 77 20  onding to a new 
237f0 69 6e 64 65 78 0a 20 20 2a 2a 20 63 72 65 61 74  index.  ** creat
23800 65 64 20 62 79 20 74 68 69 73 20 56 44 42 45 2c  ed by this VDBE,
23810 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74 65   from the sqlite
23820 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 20 49  _master table. I
23830 74 20 6f 6e 6c 79 0a 20 20 2a 2a 20 64 6f 65 73  t only.  ** does
23840 20 74 68 69 73 20 69 66 20 74 68 65 20 63 6f 72   this if the cor
23850 72 65 73 70 6f 6e 64 69 6e 67 20 69 6e 2d 6d 65  responding in-me
23860 6d 6f 72 79 20 73 63 68 65 6d 61 20 69 73 20 63  mory schema is c
23870 75 72 72 65 6e 74 6c 79 0a 20 20 2a 2a 20 6c 6f  urrently.  ** lo
23880 61 64 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  aded. Otherwise,
23890 20 74 68 65 20 6e 65 77 20 69 6e 64 65 78 20 64   the new index d
238a0 65 66 69 6e 69 74 69 6f 6e 20 63 61 6e 20 62 65  efinition can be
238b0 20 6c 6f 61 64 65 64 20 61 6c 6f 6e 67 0a 20 20   loaded along.  
238c0 2a 2a 20 77 69 74 68 20 74 68 65 20 72 65 73 74  ** with the rest
238d0 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 77   of the schema w
238e0 68 65 6e 20 69 74 20 69 73 20 72 65 71 75 69 72  hen it is requir
238f0 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 41 6c  ed..  **.  ** Al
23900 74 68 6f 75 67 68 20 74 68 65 20 6d 75 74 65 78  though the mutex
23910 20 6f 6e 20 74 68 65 20 42 74 53 68 61 72 65 64   on the BtShared
23920 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 72   object that cor
23930 72 65 73 70 6f 6e 64 73 20 74 6f 0a 20 20 2a 2a  responds to.  **
23940 20 64 61 74 61 62 61 73 65 20 69 44 62 20 28 74   database iDb (t
23950 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  he database cont
23960 61 69 6e 69 6e 67 20 74 68 65 20 73 71 6c 69 74  aining the sqlit
23970 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20  e_master table. 
23980 20 2a 2a 20 72 65 61 64 20 62 79 20 74 68 69 73   ** read by this
23990 20 69 6e 73 74 72 75 63 74 69 6f 6e 29 20 69 73   instruction) is
239a0 20 63 75 72 72 65 6e 74 6c 79 20 68 65 6c 64 2c   currently held,
239b0 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79   it is necessary
239c0 20 74 6f 0a 20 20 2a 2a 20 6f 62 74 61 69 6e 20   to.  ** obtain 
239d0 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 61  the mutexes on a
239e0 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
239f0 62 61 73 65 73 20 62 65 66 6f 72 65 20 63 68 65  bases before che
23a00 63 6b 69 6e 67 20 69 66 0a 20 20 2a 2a 20 74 68  cking if.  ** th
23a10 65 20 73 63 68 65 6d 61 20 6f 66 20 69 44 62 20  e schema of iDb 
23a20 69 73 20 6c 6f 61 64 65 64 2e 20 54 68 69 73 20  is loaded. This 
23a30 69 73 20 62 65 63 61 75 73 65 2c 20 61 74 20 74  is because, at t
23a40 68 65 20 73 74 61 72 74 20 6f 66 0a 20 20 2a 2a  he start of.  **
23a50 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65   the sqlite3_exe
23a60 63 28 29 20 63 61 6c 6c 20 62 65 6c 6f 77 2c 20  c() call below, 
23a70 53 51 4c 69 74 65 20 77 69 6c 6c 20 69 6e 76 6f  SQLite will invo
23a80 6b 65 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  ke .  ** sqlite3
23a90 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 29 2e  BtreeEnterAll().
23aa0 20 49 66 20 61 6c 6c 20 6d 75 74 65 78 65 73 20   If all mutexes 
23ab0 61 72 65 20 6e 6f 74 20 61 6c 72 65 61 64 79 20  are not already 
23ac0 68 65 6c 64 2c 20 74 68 65 0a 20 20 2a 2a 20 69  held, the.  ** i
23ad0 44 62 20 6d 75 74 65 78 20 6d 61 79 20 62 65 20  Db mutex may be 
23ae0 74 65 6d 70 6f 72 61 72 69 6c 79 20 72 65 6c 65  temporarily rele
23af0 61 73 65 64 20 74 6f 20 61 76 6f 69 64 20 64 65  ased to avoid de
23b00 61 64 6c 6f 63 6b 2e 20 49 66 20 0a 20 20 2a 2a  adlock. If .  **
23b10 20 74 68 69 73 20 68 61 70 70 65 6e 73 2c 20 74   this happens, t
23b20 68 65 6e 20 73 6f 6d 65 20 6f 74 68 65 72 20 74  hen some other t
23b30 68 72 65 61 64 20 6d 61 79 20 64 65 6c 65 74 65  hread may delete
23b40 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 0a   the in-memory .
23b50 20 20 2a 2a 20 73 63 68 65 6d 61 20 6f 66 20 64    ** schema of d
23b60 61 74 61 62 61 73 65 20 69 44 62 20 62 65 66 6f  atabase iDb befo
23b70 72 65 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  re the SQL state
23b80 6d 65 6e 74 20 72 75 6e 73 2e 20 54 68 65 20 73  ment runs. The s
23b90 63 68 65 6d 61 0a 20 20 2a 2a 20 77 69 6c 6c 20  chema.  ** will 
23ba0 6e 6f 74 20 62 65 20 72 65 6c 6f 61 64 65 64 20  not be reloaded 
23bb0 62 65 63 75 61 73 65 20 74 68 65 20 64 62 2d 3e  becuase the db->
23bc0 69 6e 69 74 2e 62 75 73 79 20 66 6c 61 67 20 69  init.busy flag i
23bd0 73 20 73 65 74 2e 20 54 68 69 73 0a 20 20 2a 2a  s set. This.  **
23be0 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20 61   can result in a
23bf0 20 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a   "no such table:
23c00 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20   sqlite_master" 
23c10 6f 72 20 22 6d 61 6c 66 6f 72 6d 65 64 0a 20 20  or "malformed.  
23c20 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
23c30 6d 61 22 20 65 72 72 6f 72 20 62 65 69 6e 67 20  ma" error being 
23c40 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
23c50 75 73 65 72 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  user..  */.  ass
23c60 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
23c70 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e  eHoldsMutex(db->
23c80 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b  aDb[iDb].pBt) );
23c90 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 45  .  sqlite3BtreeE
23ca0 6e 74 65 72 41 6c 6c 28 64 62 29 3b 0a 20 20 69  nterAll(db);.  i
23cb0 66 28 20 70 4f 70 2d 3e 70 32 20 7c 7c 20 44 62  f( pOp->p2 || Db
23cc0 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
23cd0 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
23ce0 61 64 65 64 29 20 29 7b 0a 20 20 20 20 7a 4d 61  aded) ){.    zMa
23cf0 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41  ster = SCHEMA_TA
23d00 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e  BLE(iDb);.    in
23d10 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a  itData.db = db;.
23d20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62      initData.iDb
23d30 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20   = pOp->p1;.    
23d40 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73  initData.pzErrMs
23d50 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b  g = &p->zErrMsg;
23d60 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
23d70 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20  te3MPrintf(db,. 
23d80 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
23d90 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71  me, rootpage, sq
23da0 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57  l FROM '%q'.%s W
23db0 48 45 52 45 20 25 73 22 2c 0a 20 20 20 20 20 20  HERE %s",.      
23dc0 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
23dd0 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
23de0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
23df0 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
23e00 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
23e10 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OMEM;.    }else{
23e20 0a 20 20 20 20 20 20 28 76 6f 69 64 29 73 71 6c  .      (void)sql
23e30 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
23e40 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
23e50 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d   db->init.busy==
23e60 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  0 );.      db->i
23e70 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20  nit.busy = 1;.  
23e80 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20      initData.rc 
23e90 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
23ea0 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e     assert( !db->
23eb0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
23ec0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
23ed0 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
23ee0 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  , sqlite3InitCal
23ef0 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61  lback, &initData
23f00 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
23f10 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc==SQLITE_OK ) 
23f20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63  rc = initData.rc
23f30 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ;.      sqlite3D
23f40 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b  bFree(db, zSql);
23f50 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
23f60 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 20 20  busy = 0;.      
23f70 28 76 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66  (void)sqlite3Saf
23f80 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20 20 20 7d  etyOn(db);.    }
23f90 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74  .  }.  sqlite3Bt
23fa0 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b  reeLeaveAll(db);
23fb0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
23fc0 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67  E_NOMEM ){.    g
23fd0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
23fe0 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69    break;  .}..#i
23ff0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
24000 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20  E_OMIT_ANALYZE) 
24010 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
24020 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52 29 0a  TE_OMIT_PARSER).
24030 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41  /* Opcode: LoadA
24040 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a  nalysis P1 * * *
24050 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68   *.**.** Read th
24060 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
24070 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  able for databas
24080 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68  e P1 and load th
24090 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20  e content.** of 
240a0 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20  that table into 
240b0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64  the internal ind
240c0 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ex hash table.  
240d0 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a  This will cause.
240e0 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  ** the analysis 
240f0 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
24100 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75  preparing all su
24110 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73  bsequent queries
24120 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61  ..*/.case OP_Loa
24130 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61  dAnalysis: {.  a
24140 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
24150 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
24160 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73  >nDb );.  rc = s
24170 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
24180 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ad(db, pOp->p1);
24190 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
241a0 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
241b0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
241c0 4c 59 5a 45 29 20 26 26 20 21 64 65 66 69 6e 65  LYZE) && !define
241d0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
241e0 52 53 45 52 29 20 20 2a 2f 0a 0a 2f 2a 20 4f 70  RSER)  */../* Op
241f0 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20  code: DropTable 
24200 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
24210 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
24220 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
24230 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
24240 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
24250 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ** the table nam
24260 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
24270 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
24280 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61  alled after a ta
24290 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ble.** is droppe
242a0 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
242b0 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
242c0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
242d0 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
242e0 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
242f0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
24300 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
24310 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74  Table: {.  sqlit
24320 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
24330 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e  eTable(db, pOp->
24340 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
24350 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
24360 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78  pcode: DropIndex
24370 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
24380 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
24390 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
243a0 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
243b0 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
243c0 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61  .** the index na
243d0 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
243e0 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
243f0 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20  called after an 
24400 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70  index.** is drop
24410 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ped in order to 
24420 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
24430 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
24440 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
24450 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
24460 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
24470 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
24480 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
24490 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
244a0 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
244b0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
244c0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
244d0 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
244e0 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
244f0 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
24500 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
24510 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
24520 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
24530 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
24540 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
24550 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
24560 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
24570 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
24580 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72  is dropped in or
24590 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
245a0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
245b0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
245c0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
245d0 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
245e0 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
245f0 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72  e OP_DropTrigger
24600 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
24610 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
24620 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ger(db, pOp->p1,
24630 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
24640 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
24650 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
24660 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a  TEGRITY_CHECK./*
24670 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69   Opcode: Integri
24680 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20  tyCk P1 P2 P3 * 
24690 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61  P5.**.** Do an a
246a0 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63  nalysis of the c
246b0 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61  urrently open da
246c0 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69  tabase.  Store i
246d0 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  n.** register P1
246e0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20   the text of an 
246f0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65  error message de
24700 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f  scribing any pro
24710 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20  blems..** If no 
24720 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75  problems are fou
24730 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  nd, store a NULL
24740 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
24750 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
24760 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
24770 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
24780 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72  er of allowed er
24790 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74  rors..** At most
247a0 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20   reg(P3) errors 
247b0 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64  will be reported
247c0 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
247d0 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69  rds, the analysi
247e0 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20  s stops as soon 
247f0 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72  as reg(P1) error
24800 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20  s are .** seen. 
24810 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61   Reg(P1) is upda
24820 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d  ted with the num
24830 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
24840 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  maining..**.** T
24850 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
24860 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  bers of all tabl
24870 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
24880 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a  se are integer.*
24890 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28  * stored in reg(
248a0 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20  P1), reg(P1+1), 
248b0 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20  reg(P1+2), .... 
248c0 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61   There are P2 ta
248d0 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a  bles.** total..*
248e0 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
248f0 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63  t zero, the chec
24900 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65  k is done on the
24910 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
24920 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74  ase.** file, not
24930 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
24940 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
24950 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
24960 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
24970 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68  the integrity_ch
24980 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63  eck pragma..*/.c
24990 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79  ase OP_Integrity
249a0 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f  Ck: {.  int nRoo
249b0 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t;      /* Numbe
249c0 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63  r of tables to c
249d0 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f  heck.  (Number o
249e0 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a  f root pages.) *
249f0 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20  /.  int *aRoot; 
24a00 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
24a10 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73  rootpage numbers
24a20 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62   for tables to b
24a30 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69  e checked */.  i
24a40 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f  nt j;          /
24a50 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
24a60 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
24a70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
24a80 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64   errors reported
24a90 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
24aa0 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
24ab0 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72   the error repor
24ac0 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72  t */.  Mem *pnEr
24ad0 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  r;     /* Regist
24ae0 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b  er keeping track
24af0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
24b00 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f  ning */.  .  nRo
24b10 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ot = pOp->p2;.  
24b20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20  assert( nRoot>0 
24b30 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c  );.  aRoot = sql
24b40 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
24b50 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a  db, sizeof(int)*
24b60 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69  (nRoot+1) );.  i
24b70 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f  f( aRoot==0 ) go
24b80 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73  to no_mem;.  ass
24b90 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
24ba0 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
24bb0 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  em );.  pnErr = 
24bc0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
24bd0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  ];.  assert( (pn
24be0 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Err->flags & MEM
24bf0 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Int)!=0 );.  as
24c00 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
24c10 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
24c20 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
24c30 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65    pIn1 = &p->aMe
24c40 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
24c50 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20  r(j=0; j<nRoot; 
24c60 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b  j++){.    aRoot[
24c70 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65  j] = (int)sqlite
24c80 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70  3VdbeIntValue(&p
24c90 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61  In1[j]);.  }.  a
24ca0 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61  Root[j] = 0;.  a
24cb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64  ssert( pOp->p5<d
24cc0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
24cd0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
24ce0 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 35 29  k & (1<<pOp->p5)
24cf0 29 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71  )!=0 );.  z = sq
24d00 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72  lite3BtreeIntegr
24d10 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62  ityCheck(db->aDb
24d20 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61  [pOp->p5].pBt, a
24d30 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20  Root, nRoot,.   
24d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
24d60 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26  nt)pnErr->u.i, &
24d70 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  nErr);.  sqlite3
24d80 44 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74  DbFree(db, aRoot
24d90 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20  );.  pnErr->u.i 
24da0 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74  -= nErr;.  sqlit
24db0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
24dc0 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45  (pIn1);.  if( nE
24dd0 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  rr==0 ){.    ass
24de0 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d  ert( z==0 );.  }
24df0 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b  else if( z==0 ){
24e00 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
24e10 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
24e20 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
24e30 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c  Str(pIn1, z, -1,
24e40 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71   SQLITE_UTF8, sq
24e50 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d  lite3_free);.  }
24e60 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
24e70 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
24e80 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
24e90 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20  eEncoding(pIn1, 
24ea0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
24eb0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
24ec0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
24ed0 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
24ee0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
24ef0 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  tAdd P1 P2 * * *
24f00 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68  .**.** Insert th
24f10 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
24f20 68 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72  held by register
24f30 20 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65   P2 into a boole
24f40 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64  an index.** held
24f50 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
24f60 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74  .**.** An assert
24f70 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20  ion fails if P2 
24f80 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
24f90 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  r..*/.case OP_Ro
24fa0 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20  wSetAdd: {      
24fb0 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d   /* in2 */.  Mem
24fc0 20 2a 70 49 64 78 3b 0a 20 20 4d 65 6d 20 2a 70   *pIdx;.  Mem *p
24fd0 56 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Val;.  assert( p
24fe0 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
24ff0 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p1<=p->nMem );.
25000 20 20 70 49 64 78 20 3d 20 26 70 2d 3e 61 4d 65    pIdx = &p->aMe
25010 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
25020 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
25030 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e  && pOp->p2<=p->n
25040 4d 65 6d 20 29 3b 0a 20 20 70 56 61 6c 20 3d 20  Mem );.  pVal = 
25050 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
25060 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 56  ];.  assert( (pV
25070 61 6c 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  al->flags & MEM_
25080 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  Int)!=0 );.  if(
25090 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20 26 20   (pIdx->flags & 
250a0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
250b0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
250c0 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
250d0 64 78 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  dx);.    if( (pI
250e0 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  dx->flags & MEM_
250f0 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
25100 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
25110 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
25120 65 72 74 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77  ert(pIdx->u.pRow
25130 53 65 74 2c 20 70 56 61 6c 2d 3e 75 2e 69 29 3b  Set, pVal->u.i);
25140 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
25150 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65  Opcode: RowSetRe
25160 61 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ad P1 P2 P3 * *.
25170 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68  **.** Extract th
25180 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
25190 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e   from boolean in
251a0 64 65 78 20 50 31 20 61 6e 64 20 70 75 74 20 74  dex P1 and put t
251b0 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a  hat value into.*
251c0 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  * register P3.  
251d0 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69  Or, if boolean i
251e0 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69 74 69  ndex P1 is initi
251f0 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76  ally empty, leav
25200 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65  e P3.** unchange
25210 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e  d and jump to in
25220 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
25230 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52  .case OP_RowSetR
25240 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  ead: {       /* 
25250 6a 75 6d 70 2c 20 6f 75 74 33 20 2a 2f 0a 20 20  jump, out3 */.  
25260 4d 65 6d 20 2a 70 49 64 78 3b 0a 20 20 69 36 34  Mem *pIdx;.  i64
25270 20 76 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20   val;.  assert( 
25280 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
25290 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
252a0 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  .  CHECK_FOR_INT
252b0 45 52 52 55 50 54 3b 0a 20 20 70 49 64 78 20 3d  ERRUPT;.  pIdx =
252c0 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
252d0 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d  1];.  pOut = &p-
252e0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
252f0 20 20 69 66 28 20 28 70 49 64 78 2d 3e 66 6c 61    if( (pIdx->fla
25300 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
25310 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
25320 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 64  e3RowSetNext(pId
25330 78 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76  x->u.pRowSet, &v
25340 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20  al)==0.  ){.    
25350 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69  /* The boolean i
25360 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f  ndex is empty */
25370 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
25380 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 64 78 29  MemSetNull(pIdx)
25390 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
253a0 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
253b0 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20  .    /* A value 
253c0 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20  was pulled from 
253d0 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  the index */.   
253e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
253f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
25400 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 73 71  ->nMem );.    sq
25410 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
25420 6e 74 36 34 28 70 4f 75 74 2c 20 76 61 6c 29 3b  nt64(pOut, val);
25430 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
25440 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
25450 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20  etTest P1 P2 P3 
25460 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P4.**.** Registe
25470 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20  r P3 is assumed 
25480 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74  to hold a 64-bit
25490 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
254a0 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  If register P1.*
254b0 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77  * contains a Row
254c0 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  Set object and t
254d0 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  hat RowSet objec
254e0 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68  t contains.** th
254f0 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20  e value held in 
25500 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69  P3, jump to regi
25510 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69  ster P2. Otherwi
25520 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a  se, insert the.*
25530 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20  * integer in P3 
25540 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20  into the RowSet 
25550 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20  and continue on 
25560 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f  to the.** next o
25570 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pcode..**.** The
25580 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
25590 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20  s optimized for 
255a0 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73  the case where s
255b0 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a  uccessive sets.*
255c0 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77  * of integers, w
255d0 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f  here each set co
255e0 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63  ntains no duplic
255f0 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a  ates. Each set.*
25600 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69  * of values is i
25610 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75  dentified by a u
25620 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20  nique P4 value. 
25630 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a  The first set.**
25640 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30   must have P4==0
25650 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20  , the final set 
25660 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20  P4=-1.  P4 must 
25670 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a  be either -1 or.
25680 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e  ** non-negative.
25690 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69    For non-negati
256a0 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20  ve values of P4 
256b0 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34  only the lower 4
256c0 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67  .** bits are sig
256d0 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nificant..**.** 
256e0 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69  This allows opti
256f0 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77  mizations: (a) w
25700 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20  hen P4==0 there 
25710 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65  is no need to te
25720 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74  st.** the rowset
25730 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20   object for P3, 
25740 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  as it is guarant
25750 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61  eed not to conta
25760 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68  in it,.** (b) wh
25770 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20  en P4==-1 there 
25780 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e  is no need to in
25790 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20  sert the value, 
257a0 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65  as it will.** ne
257b0 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f  ver be tested fo
257c0 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20  r, and (c) when 
257d0 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20  a value that is 
257e0 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73  part of set X is
257f0 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68  .** inserted, th
25800 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
25810 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20  o search to see 
25820 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  if the same valu
25830 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  e was.** previou
25840 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20  sly inserted as 
25850 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f  part of set X (o
25860 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72  nly if it was pr
25870 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65  eviously.** inse
25880 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
25890 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e  some other set).
258a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
258b0 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20  etTest: {       
258c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
258d0 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
258e0 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20  */.  int iSet;. 
258f0 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20   int exists;..  
25900 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  iSet = pOp->p4.i
25910 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
25920 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
25930 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
25940 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74  e is anything ot
25950 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65  her than a rowse
25960 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f  t object in memo
25970 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a  ry cell P1,.  **
25980 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61   delete it now a
25990 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31  nd initialize P1
259a0 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72   with an empty r
259b0 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28  owset.  */.  if(
259c0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
259d0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
259e0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
259f0 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
25a00 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  n1);.    if( (pI
25a10 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
25a20 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
25a30 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20  o no_mem;.  }.. 
25a40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
25a50 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
25a60 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74  ;.  assert( iSet
25a70 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20  ==-1 || iSet>=0 
25a80 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b  );.  if( iSet ){
25a90 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71  .    exists = sq
25aa0 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
25ab0 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
25ac0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ae0 20 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f 20   (u8)(iSet>=0 ? 
25af0 69 53 65 74 20 26 20 30 78 66 20 3a 20 30 78 66  iSet & 0xf : 0xf
25b00 66 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  f),.            
25b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20     pIn3->u.i);. 
25b30 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29 7b     if( exists ){
25b40 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
25b50 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
25b60 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
25b70 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b    if( iSet>=0 ){
25b80 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53  .    sqlite3RowS
25b90 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
25ba0 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e  .pRowSet, pIn3->
25bb0 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  u.i);.  }.  brea
25bc0 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
25bd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
25be0 45 52 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  ER./* Opcode: Co
25bf0 6e 74 65 78 74 50 75 73 68 20 2a 20 2a 20 2a 20  ntextPush * * * 
25c00 0a 2a 2a 0a 2a 2a 20 53 61 76 65 20 74 68 65 20  .**.** Save the 
25c10 63 75 72 72 65 6e 74 20 56 64 62 65 20 63 6f 6e  current Vdbe con
25c20 74 65 78 74 20 73 75 63 68 20 74 68 61 74 20 69  text such that i
25c30 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65  t can be restore
25c40 64 20 62 79 20 61 20 43 6f 6e 74 65 78 74 50 6f  d by a ContextPo
25c50 70 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 54 68 65  p.** opcode. The
25c60 20 63 6f 6e 74 65 78 74 20 73 74 6f 72 65 73 20   context stores 
25c70 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20  the last insert 
25c80 72 6f 77 20 69 64 2c 20 74 68 65 20 6c 61 73 74  row id, the last
25c90 20 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67   statement chang
25ca0 65 0a 2a 2a 20 63 6f 75 6e 74 2c 20 61 6e 64 20  e.** count, and 
25cb0 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74  the current stat
25cc0 65 6d 65 6e 74 20 63 68 61 6e 67 65 20 63 6f 75  ement change cou
25cd0 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  nt..*/.case OP_C
25ce0 6f 6e 74 65 78 74 50 75 73 68 3a 20 7b 0a 20 20  ontextPush: {.  
25cf0 69 6e 74 20 69 3b 0a 20 20 43 6f 6e 74 65 78 74  int i;.  Context
25d00 20 2a 70 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 69   *pContext;..  i
25d10 20 3d 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61   = p->contextSta
25d20 63 6b 54 6f 70 2b 2b 3b 0a 20 20 61 73 73 65 72  ckTop++;.  asser
25d30 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20 2f 2a 20  t( i>=0 );.  /* 
25d40 46 49 58 20 4d 45 3a 20 54 68 69 73 20 73 68 6f  FIX ME: This sho
25d50 75 6c 64 20 62 65 20 61 6c 6c 6f 63 61 74 65 64  uld be allocated
25d60 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
25d70 76 64 62 65 20 61 74 20 63 6f 6d 70 69 6c 65 2d  vdbe at compile-
25d80 74 69 6d 65 20 2a 2f 0a 20 20 69 66 28 20 69 3e  time */.  if( i>
25d90 3d 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b  =p->contextStack
25da0 44 65 70 74 68 20 29 7b 0a 20 20 20 20 70 2d 3e  Depth ){.    p->
25db0 63 6f 6e 74 65 78 74 53 74 61 63 6b 44 65 70 74  contextStackDept
25dc0 68 20 3d 20 69 2b 31 3b 0a 20 20 20 20 70 2d 3e  h = i+1;.    p->
25dd0 63 6f 6e 74 65 78 74 53 74 61 63 6b 20 3d 20 73  contextStack = s
25de0 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
25df0 72 46 72 65 65 28 64 62 2c 20 70 2d 3e 63 6f 6e  rFree(db, p->con
25e00 74 65 78 74 53 74 61 63 6b 2c 0a 20 20 20 20 20  textStack,.     
25e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e30 20 20 20 20 20 73 69 7a 65 6f 66 28 43 6f 6e 74       sizeof(Cont
25e40 65 78 74 29 2a 28 69 2b 31 29 29 3b 0a 20 20 20  ext)*(i+1));.   
25e50 20 69 66 28 20 70 2d 3e 63 6f 6e 74 65 78 74 53   if( p->contextS
25e60 74 61 63 6b 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  tack==0 ) goto n
25e70 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 43 6f  o_mem;.  }.  pCo
25e80 6e 74 65 78 74 20 3d 20 26 70 2d 3e 63 6f 6e 74  ntext = &p->cont
25e90 65 78 74 53 74 61 63 6b 5b 69 5d 3b 0a 20 20 70  extStack[i];.  p
25ea0 43 6f 6e 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77  Context->lastRow
25eb0 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
25ec0 69 64 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e  id;.  pContext->
25ed0 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68  nChange = p->nCh
25ee0 61 6e 67 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ange;.  break;.}
25ef0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  ../* Opcode: Con
25f00 74 65 78 74 50 6f 70 20 2a 20 2a 20 2a 20 0a 2a  textPop * * * .*
25f10 2a 0a 2a 2a 20 52 65 73 74 6f 72 65 20 74 68 65  *.** Restore the
25f20 20 56 64 62 65 20 63 6f 6e 74 65 78 74 20 74 6f   Vdbe context to
25f30 20 74 68 65 20 73 74 61 74 65 20 69 74 20 77 61   the state it wa
25f40 73 20 69 6e 20 77 68 65 6e 20 63 6f 6e 74 65 78  s in when contex
25f50 74 50 75 73 68 20 77 61 73 20 6c 61 73 74 0a 2a  tPush was last.*
25f60 2a 20 65 78 65 63 75 74 65 64 2e 20 54 68 65 20  * executed. The 
25f70 63 6f 6e 74 65 78 74 20 73 74 6f 72 65 73 20 74  context stores t
25f80 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20 72  he last insert r
25f90 6f 77 20 69 64 2c 20 74 68 65 20 6c 61 73 74 20  ow id, the last 
25fa0 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 63 68 61  statement.** cha
25fb0 6e 67 65 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74  nge count, and t
25fc0 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  he current state
25fd0 6d 65 6e 74 20 63 68 61 6e 67 65 20 63 6f 75 6e  ment change coun
25fe0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  t..*/.case OP_Co
25ff0 6e 74 65 78 74 50 6f 70 3a 20 7b 0a 20 20 43 6f  ntextPop: {.  Co
26000 6e 74 65 78 74 20 2a 70 43 6f 6e 74 65 78 74 3b  ntext *pContext;
26010 0a 20 20 70 43 6f 6e 74 65 78 74 20 3d 20 26 70  .  pContext = &p
26020 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b 2d  ->contextStack[-
26030 2d 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b  -p->contextStack
26040 54 6f 70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  Top];.  assert( 
26050 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54  p->contextStackT
26060 6f 70 3e 3d 30 20 29 3b 0a 20 20 64 62 2d 3e 6c  op>=0 );.  db->l
26070 61 73 74 52 6f 77 69 64 20 3d 20 70 43 6f 6e 74  astRowid = pCont
26080 65 78 74 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a  ext->lastRowid;.
26090 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70    p->nChange = p
260a0 43 6f 6e 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65  Context->nChange
260b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
260c0 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
260d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
260e0 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  ER */..#ifndef S
260f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
26100 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f  NCREMENT./* Opco
26110 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32  de: MemMax P1 P2
26120 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74   * * *.**.** Set
26130 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
26140 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
26150 20 6d 61 78 69 6d 75 6d 20 6f 66 20 69 74 73 20   maximum of its 
26160 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 2a 2a  current value.**
26170 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69   and the value i
26180 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
26190 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
261a0 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20  ction throws an 
261b0 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d  error if the mem
261c0 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20  ory cell is not 
261d0 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20  initially.** an 
261e0 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
261f0 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20   OP_MemMax: {   
26200 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32       /* in1, in2
26210 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
26220 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
26230 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
26240 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
26250 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49  (pIn2);.  if( pI
26260 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e  n1->u.i<pIn2->u.
26270 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e  i){.    pIn1->u.
26280 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  i = pIn2->u.i;. 
26290 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
262a0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
262b0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
262c0 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
262d0 20 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a   IfPos P1 P2 * *
262e0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20   *.**.** If the 
262f0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
26300 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65  r P1 is 1 or gre
26310 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32  ater, jump to P2
26320 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  ..**.** It is il
26330 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
26340 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
26350 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
26360 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
26370 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
26380 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
26390 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
263a0 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
263b0 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b  case OP_IfPos: {
263c0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
263d0 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
263e0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
263f0 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
26400 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20  In1->u.i>0 ){.  
26410 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
26420 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
26430 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26440 49 66 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20  IfNeg P1 P2 * * 
26450 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  *.**.** If the v
26460 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
26470 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P1 is less than
26480 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50   zero, jump to P
26490 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20  2. .**.** It is 
264a0 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74  illegal to use t
264b0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
264c0 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68  on a register th
264d0 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63  at does.** not c
264e0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
264f0 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  r.  An assertion
26500 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75   fault will resu
26510 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a  lt if you try..*
26520 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a  /.case OP_IfNeg:
26530 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
26540 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65  p, in1 */.  asse
26550 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
26560 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28  MEM_Int );.  if(
26570 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a   pIn1->u.i<0 ){.
26580 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
26590 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
265a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
265b0 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a  : IfZero P1 P2 *
265c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   * *.**.** If th
265d0 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
265e0 74 65 72 20 50 31 20 69 73 20 65 78 61 63 74 6c  ter P1 is exactl
265f0 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  y 0, jump to P2.
26600 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c   .**.** It is il
26610 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
26620 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
26630 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
26640 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
26650 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
26660 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
26670 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
26680 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
26690 63 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20  case OP_IfZero: 
266a0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
266b0 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  , in1 */.  asser
266c0 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
266d0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20  EM_Int );.  if( 
266e0 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a  pIn1->u.i==0 ){.
266f0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
26700 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
26710 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26720 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
26730 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
26740 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66  ecute the step f
26750 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
26760 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a  ggregate.  The.*
26770 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  * function has P
26780 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50  5 arguments.   P
26790 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
267a0 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a  o the FuncDef.**
267b0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
267c0 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75  specifies the fu
267d0 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67  nction.  Use reg
267e0 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74  ister.** P3 as t
267f0 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  he accumulator..
26800 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
26810 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
26820 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
26830 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
26840 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65  cessors..*/.case
26850 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20   OP_AggStep: {. 
26860 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
26870 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
26880 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c  Mem *pRec;.  sql
26890 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78  ite3_context ctx
268a0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
268b0 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20  e **apVal;..  n 
268c0 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
268d0 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70  ert( n>=0 );.  p
268e0 52 65 63 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Rec = &p->aMem[p
268f0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c  Op->p2];.  apVal
26900 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61   = p->apArg;.  a
26910 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20  ssert( apVal || 
26920 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d  n==0 );.  for(i=
26930 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65  0; i<n; i++, pRe
26940 63 2b 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b  c++){.    apVal[
26950 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 73  i] = pRec;.    s
26960 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 52 65  toreTypeInfo(pRe
26970 63 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  c, encoding);.  
26980 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20  }.  ctx.pFunc = 
26990 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
269a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
269b0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
269c0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78 2e  ->nMem );.  ctx.
269d0 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 70  pMem = pMem = &p
269e0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
269f0 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20  .  pMem->n++;.  
26a00 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45  ctx.s.flags = ME
26a10 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e  M_Null;.  ctx.s.
26a20 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a  z = 0;.  ctx.s.z
26a30 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74  Malloc = 0;.  ct
26a40 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  x.s.xDel = 0;.  
26a50 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20  ctx.s.db = db;. 
26a60 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30   ctx.isError = 0
26a70 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20  ;.  ctx.pColl = 
26a80 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
26a90 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  nc->flags & SQLI
26aa0 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
26ab0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
26ac0 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20  pOp>p->aOp );.  
26ad0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
26ae0 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ].p4type==P4_COL
26af0 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65  LSEQ );.    asse
26b00 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
26b10 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
26b20 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20  ;.    ctx.pColl 
26b30 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f  = pOp[-1].p4.pCo
26b40 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70  ll;.  }.  (ctx.p
26b50 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74  Func->xStep)(&ct
26b60 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20  x, n, apVal);.  
26b70 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
26b80 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
26b90 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
26ba0 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
26bb0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
26bc0 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20  t(&ctx.s));.    
26bd0 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
26be0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
26bf0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
26c00 74 78 2e 73 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  tx.s);.  break;.
26c10 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
26c20 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
26c30 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  4 *.**.** Execut
26c40 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20  e the finalizer 
26c50 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
26c60 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69  aggregate.  P1 i
26c70 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20  s.** the memory 
26c80 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73  location that is
26c90 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
26ca0 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61   for the aggrega
26cb0 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  te..**.** P2 is 
26cc0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
26cd0 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
26ce0 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
26cf0 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
26d00 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
26d10 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
26d20 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
26d30 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
26d40 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
26d50 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
26d60 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
26d70 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
26d80 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
26d90 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
26da0 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
26db0 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
26dc0 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
26dd0 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
26de0 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63  the degenerate c
26df0 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
26e00 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
26e10 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
26e20 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73  y called..*/.cas
26e30 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b  e OP_AggFinal: {
26e40 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
26e50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
26e60 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
26e70 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20  >nMem );.  pMem 
26e80 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
26e90 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
26ea0 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28  pMem->flags & ~(
26eb0 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67  MEM_Null|MEM_Agg
26ec0 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ))==0 );.  rc = 
26ed0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69  sqlite3VdbeMemFi
26ee0 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70  nalize(pMem, pOp
26ef0 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69  ->p4.pFunc);.  i
26f00 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  f( rc==SQLITE_ER
26f10 52 4f 52 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ROR ){.    sqlit
26f20 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
26f30 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
26f40 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
26f50 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20  _text(pMem));.  
26f60 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
26f70 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d  hangeEncoding(pM
26f80 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  em, encoding);. 
26f90 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
26fa0 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66  SIZE(pMem);.  if
26fb0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
26fc0 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a  TooBig(pMem) ){.
26fd0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
26fe0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
26ff0 0a 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ...#if !defined(
27000 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
27010 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UM) && !defined(
27020 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
27030 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  CH)./* Opcode: V
27040 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a  acuum * * * * *.
27050 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65  **.** Vacuum the
27060 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
27070 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
27080 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20  ill cause other 
27090 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69  virtual.** machi
270a0 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65  nes to be create
270b0 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d  d and run.  It m
270c0 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64  ay not be called
270d0 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20   from within.** 
270e0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  a transaction..*
270f0 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d  /.case OP_Vacuum
27100 3a 20 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  : {.  if( sqlite
27110 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
27120 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
27130 74 6f 5f 6d 69 73 75 73 65 3b 20 0a 20 20 72 63  to_misuse; .  rc
27140 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63   = sqlite3RunVac
27150 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  uum(&p->zErrMsg,
27160 20 64 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69   db);.  if( sqli
27170 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
27180 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
27190 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 62 72  _to_misuse;.  br
271a0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
271b0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
271c0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
271d0 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  UM)./* Opcode: I
271e0 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20  ncrVacuum P1 P2 
271f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66  * * *.**.** Perf
27200 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65  orm a single ste
27210 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65  p of the increme
27220 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63  ntal vacuum proc
27230 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20  edure on.** the 
27240 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  P1 database. If 
27250 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66  the vacuum has f
27260 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f  inished, jump to
27270 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
27280 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
27290 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
272a0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
272b0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
272c0 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20  IncrVacuum: {   
272d0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
272e0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
272f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
27300 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
27310 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
27320 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
27330 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29  k & (1<<pOp->p1)
27340 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  )!=0 );.  pBt = 
27350 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
27360 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .pBt;.  rc = sql
27370 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63  ite3BtreeIncrVac
27380 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20  uum(pBt);.  if( 
27390 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
273a0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
273b0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20  >p2 - 1;.    rc 
273c0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
273d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
273e0 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  if../* Opcode: E
273f0 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a  xpire P1 * * * *
27400 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65  .**.** Cause pre
27410 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65  compiled stateme
27420 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78  nts to become ex
27430 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65  pired. An expire
27440 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66  d statement.** f
27450 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72  ails with an err
27460 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54  or code of SQLIT
27470 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20 69  E_SCHEMA if it i
27480 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64 20  s ever executed 
27490 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33  .** (via sqlite3
274a0 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a  _step())..** .**
274b0 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
274c0 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
274d0 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
274e0 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
274f0 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
27500 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
27510 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
27520 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74  tement is affect
27530 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ed. .*/.case OP_
27540 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20  Expire: {.  if( 
27550 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  !pOp->p1 ){.    
27560 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
27570 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
27580 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
27590 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
275a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
275b0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
275c0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
275d0 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61  HE./* Opcode: Ta
275e0 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33  bleLock P1 P2 P3
275f0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61   P4 *.**.** Obta
27600 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70  in a lock on a p
27610 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e  articular table.
27620 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
27630 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  n is only used w
27640 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65  hen.** the share
27650 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20  d-cache feature 
27660 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a  is enabled. .**.
27670 2a 2a 20 49 66 20 50 31 20 69 73 20 20 74 68 65  ** If P1 is  the
27680 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
27690 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65  tabase in sqlite
276a0 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64  3.aDb[] of the d
276b0 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68  atabase.** on wh
276c0 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20  ich the lock is 
276d0 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61  acquired.  A rea
276e0 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65  dlock is obtaine
276f0 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a  d if P3==0 or.**
27700 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66   a write lock if
27710 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32   P3==1..**.** P2
27720 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f   contains the ro
27730 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74  ot-page of the t
27740 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a  able to lock..**
27750 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20  .** P4 contains 
27760 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
27770 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
27780 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e  le being locked.
27790 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a   This is only.**
277a0 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
277b0 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  e an error messa
277c0 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63  ge if the lock c
277d0 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65  annot be obtaine
277e0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61  d..*/.case OP_Ta
277f0 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 69 6e 74  bleLock: {.  int
27800 20 70 31 3b 0a 20 20 75 38 20 69 73 57 72 69 74   p1;.  u8 isWrit
27810 65 4c 6f 63 6b 3b 0a 0a 20 20 70 31 20 3d 20 70  eLock;..  p1 = p
27820 4f 70 2d 3e 70 31 3b 20 0a 20 20 69 73 57 72 69  Op->p1; .  isWri
27830 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70  teLock = (u8)pOp
27840 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
27850 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
27860 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
27870 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
27880 20 28 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a   (1<<p1))!=0 );.
27890 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74    assert( isWrit
278a0 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72  eLock==0 || isWr
278b0 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20  iteLock==1 );.  
278c0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
278d0 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61  eLockTable(db->a
278e0 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d  Db[p1].pBt, pOp-
278f0 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b  >p2, isWriteLock
27900 29 3b 0a 20 20 69 66 28 20 28 72 63 26 30 78 46  );.  if( (rc&0xF
27910 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  F)==SQLITE_LOCKE
27920 44 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  D ){.    const c
27930 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34  har *z = pOp->p4
27940 2e 7a 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53  .z;.    sqlite3S
27950 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
27960 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62  rMsg, db, "datab
27970 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
27980 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20  ked: %s", z);.  
27990 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
279a0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
279b0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20  IT_SHARED_CACHE 
279c0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
279d0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
279e0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
279f0 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20  VBegin * * * P4 
27a00 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  *.**.** P4 may b
27a10 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  e a pointer to a
27a20 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
27a30 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c  tructure. If so,
27a40 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42   call the .** xB
27a50 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20  egin method for 
27a60 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  that table..**.*
27a70 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20  * Also, whether 
27a80 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74  or not P4 is set
27a90 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69  , check that thi
27aa0 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63  s is not being c
27ab0 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69  alled from.** wi
27ac0 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20  thin a callback 
27ad0 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
27ae0 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f  le xSync() metho
27af0 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65  d. If it is, the
27b00 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77   error.** code w
27b10 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51  ill be set to SQ
27b20 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a  LITE_LOCKED..*/.
27b30 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20  case OP_VBegin: 
27b40 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
27b50 20 2a 70 56 74 61 62 3b 0a 20 20 70 56 74 61 62   *pVtab;.  pVtab
27b60 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
27b70 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
27b80 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
27b90 74 61 62 29 3b 0a 20 20 69 66 28 20 70 56 74 61  tab);.  if( pVta
27ba0 62 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  b ){.    sqlite3
27bb0 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
27bc0 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
27bd0 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
27be0 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74  zErrMsg;.    pVt
27bf0 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
27c00 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
27c10 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
27c20 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
27c30 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
27c40 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
27c50 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
27c60 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a 20  e: VCreate P1 * 
27c70 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
27c80 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
27c90 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
27ca0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 43  n database P1. C
27cb0 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20  all the xCreate 
27cc0 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68  method.** for th
27cd0 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
27ce0 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a  e OP_VCreate: {.
27cf0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
27d00 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c  abCallCreate(db,
27d10 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
27d20 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67  4.z, &p->zErrMsg
27d30 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
27d40 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
27d50 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
27d60 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
27d70 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
27d80 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
27d90 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a   VDestroy P1 * *
27da0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
27db0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
27dc0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
27dd0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43   database P1.  C
27de0 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79  all the xDestroy
27df0 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68   method.** of th
27e00 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
27e10 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b  e OP_VDestroy: {
27e20 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
27e30 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73  od = 2;.  rc = s
27e40 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
27e50 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70  stroy(db, pOp->p
27e60 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
27e70 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
27e80 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
27e90 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
27ea0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
27eb0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
27ec0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
27ed0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
27ee0 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a  de: VOpen P1 * *
27ef0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
27f00 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
27f10 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
27f20 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
27f30 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
27f40 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  ..** P1 is a cur
27f50 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  sor number.  Thi
27f60 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61  s opcode opens a
27f70 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76   cursor to the v
27f80 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
27f90 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20  and stores that 
27fa0 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f  cursor in P1..*/
27fb0 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20  .case OP_VOpen: 
27fc0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
27fd0 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pCur;.  sqlite3_
27fe0 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
27ff0 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
28000 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
28010 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
28020 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70  e *pModule;..  p
28030 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62  Cur = 0;.  pVtab
28040 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56  Cursor = 0;.  pV
28050 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
28060 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
28070 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65   (sqlite3_module
28080 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   *)pVtab->pModul
28090 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74 61  e;.  assert(pVta
280a0 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20  b && pModule);. 
280b0 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
280c0 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
280d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
280e0 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f  suse;.  rc = pMo
280f0 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61  dule->xOpen(pVta
28100 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72 29  b, &pVtabCursor)
28110 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
28120 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
28130 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  );.  p->zErrMsg 
28140 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
28150 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
28160 73 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71  sg = 0;.  if( sq
28170 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
28180 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
28190 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
281a0 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72  if( SQLITE_OK==r
281b0 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74  c ){.    /* Init
281c0 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76  ialize sqlite3_v
281d0 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20  tab_cursor base 
281e0 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74  class */.    pVt
281f0 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20  abCursor->pVtab 
28200 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a  = pVtab;..    /*
28210 20 49 6e 69 74 69 61 6c 69 73 65 20 76 64 62 65   Initialise vdbe
28220 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a   cursor object *
28230 2f 0a 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c  /.    pCur = all
28240 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
28250 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30  Op->p1, 0, -1, 0
28260 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72 20  );.    if( pCur 
28270 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70  ){.      pCur->p
28280 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74  VtabCursor = pVt
28290 61 62 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20  abCursor;.      
282a0 70 43 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20  pCur->pModule = 
282b0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
282c0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20  ab->pModule;.   
282d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
282e0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
282f0 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c   1;.      pModul
28300 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43  e->xClose(pVtabC
28310 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
28320 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
28330 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
28340 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
28350 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
28360 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
28370 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
28380 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33  VFilter P1 P2 P3
28390 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69   P4 *.**.** P1 i
283a0 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65  s a cursor opene
283b0 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20  d using VOpen.  
283c0 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73  P2 is an address
283d0 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a   to jump to if.*
283e0 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72  * the filtered r
283f0 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
28400 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  ty..**.** P4 is 
28410 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
28420 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73   string that was
28430 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
28440 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20  e xBestIndex.** 
28450 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
28460 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72  dule.  The inter
28470 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
28480 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65   P4 string is le
28490 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64  ft.** to the mod
284a0 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
284b0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
284c0 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
284d0 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
284e0 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
284f0 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a  table specified.
28500 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69  ** by P1.  The i
28510 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61  nteger query pla
28520 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78  n parameter to x
28530 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64  Filter is stored
28540 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
28550 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  P3. Register P3+
28560 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67  1 stores the arg
28570 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62  c parameter to b
28580 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a  e passed to the.
28590 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  ** xFilter metho
285a0 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b  d. Registers P3+
285b0 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65  2..P3+1+argc are
285c0 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64   the argc.** add
285d0 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65  itional paramete
285e0 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73  rs which are pas
285f0 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65  sed to.** xFilte
28600 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73  r as argv. Regis
28610 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73  ter P3+2 becomes
28620 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61   argv[0] when pa
28630 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e  ssed to xFilter.
28640 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73  .**.** A jump is
28650 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74   made to P2 if t
28660 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66  he result set af
28670 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f  ter filtering wo
28680 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f  uld be empty..*/
28690 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72  .case OP_VFilter
286a0 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
286b0 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69  .  int nArg;.  i
286c0 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e  nt iQuery;.  con
286d0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
286e0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
286f0 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d  m *pQuery;.  Mem
28700 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74   *pArgc;.  sqlit
28710 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
28720 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73  pVtabCursor;.  s
28730 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
28740 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ab;.  VdbeCursor
28750 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65   *pCur;.  int re
28760 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65  s;.  int i;.  Me
28770 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51  m **apArg;..  pQ
28780 75 65 72 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  uery = &p->aMem[
28790 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67  pOp->p3];.  pArg
287a0 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a  c = &pQuery[1];.
287b0 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
287c0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 52 45  r[pOp->p1];.  RE
287d0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
287e0 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20  ->p3, pQuery);. 
287f0 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
28800 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
28810 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43  pVtabCursor = pC
28820 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b  ur->pVtabCursor;
28830 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61 62  .  pVtab = pVtab
28840 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
28850 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
28860 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a  ->pModule;..  /*
28870 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20   Grab the index 
28880 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20  number and argc 
28890 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
288a0 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d  assert( (pQuery-
288b0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21  >flags&MEM_Int)!
288c0 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61  =0 && pArgc->fla
288d0 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
288e0 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72   nArg = (int)pAr
288f0 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72  gc->u.i;.  iQuer
28900 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d  y = (int)pQuery-
28910 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  >u.i;..  /* Invo
28920 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  ke the xFilter m
28930 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20  ethod */.  {.   
28940 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70   res = 0;.    ap
28950 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
28960 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69      for(i = 0; i
28970 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
28980 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70     apArg[i] = &p
28990 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20  Argc[i+1];.     
289a0 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 61   storeTypeInfo(a
289b0 70 41 72 67 5b 69 5d 2c 20 30 29 3b 0a 20 20 20  pArg[i], 0);.   
289c0 20 7d 0a 0a 20 20 20 20 69 66 28 20 73 71 6c 69   }..    if( sqli
289d0 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
289e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
289f0 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20  e_to_misuse;.   
28a00 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
28a10 28 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e  (pVtab);.    p->
28a20 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31  inVtabMethod = 1
28a30 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
28a40 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61  le->xFilter(pVta
28a50 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c  bCursor, iQuery,
28a60 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67   pOp->p4.z, nArg
28a70 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70 2d  , apArg);.    p-
28a80 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
28a90 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  0;.    sqlite3Db
28aa0 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
28ab0 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72  Msg);.    p->zEr
28ac0 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45  rMsg = pVtab->zE
28ad0 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62  rrMsg;.    pVtab
28ae0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
28af0 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e     sqlite3VtabUn
28b00 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b  lock(db, pVtab);
28b10 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
28b20 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
28b30 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78  res = pModule->x
28b40 45 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29  Eof(pVtabCursor)
28b50 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
28b60 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
28b70 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
28b80 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
28b90 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a  .    if( res ){.
28ba0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
28bb0 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  p2 - 1;.    }.  
28bc0 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  }.  pCur->nullRo
28bd0 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b  w = 0;..  break;
28be0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
28bf0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
28c00 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
28c10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
28c20 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
28c30 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31  code: VColumn P1
28c40 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
28c50 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65   Store the value
28c60 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f   of the P2-th co
28c70 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72  lumn of.** the r
28c80 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ow of the virtua
28c90 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  l-table that the
28ca0 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69   .** P1 cursor i
28cb0 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e  s pointing to in
28cc0 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
28cd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75  */.case OP_VColu
28ce0 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  mn: {.  sqlite3_
28cf0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
28d00 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
28d10 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
28d20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71  Mem *pDest;.  sq
28d30 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43  lite3_context sC
28d40 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43  ontext;..  VdbeC
28d50 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
28d60 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
28d70 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
28d80 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
28d90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28da0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
28db0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65  p->nMem );.  pDe
28dc0 73 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  st = &p->aMem[pO
28dd0 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 70 43  p->p3];.  if( pC
28de0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
28df0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
28e00 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b  mSetNull(pDest);
28e10 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
28e20 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
28e30 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
28e40 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
28e50 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
28e60 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
28e70 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20  e->xColumn );.  
28e80 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74  memset(&sContext
28e90 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e  , 0, sizeof(sCon
28ea0 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68  text));..  /* Th
28eb0 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61  e output cell ma
28ec0 79 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61  y already have a
28ed0 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65   buffer allocate
28ee0 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65  d. Move.  ** the
28ef0 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74   current content
28f00 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20  s to sContext.s 
28f10 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75  so in case the u
28f20 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20  ser-function .  
28f30 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61  ** can use the a
28f40 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
28f50 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20   buffer instead 
28f60 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20  of allocating a 
28f70 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20  .  ** new one.. 
28f80 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
28f90 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65  eMemMove(&sConte
28fa0 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20  xt.s, pDest);.  
28fb0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26  MemSetTypeFlag(&
28fc0 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f  sContext.s, MEM_
28fd0 4e 75 6c 6c 29 3b 0a 0a 20 20 69 66 28 20 73 71  Null);..  if( sq
28fe0 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
28ff0 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
29000 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
29010 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
29020 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74  Column(pCur->pVt
29030 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74  abCursor, &sCont
29040 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  ext, pOp->p2);. 
29050 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
29060 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
29070 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
29080 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
29090 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20   pVtab->zErrMsg 
290a0 3d 20 30 3b 0a 0a 20 20 2f 2a 20 43 6f 70 79 20  = 0;..  /* Copy 
290b0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
290c0 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68  e function to th
290d0 65 20 50 33 20 72 65 67 69 73 74 65 72 2e 20 57  e P3 register. W
290e0 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72  e.  ** do this r
290f0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
29100 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
29110 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74 6f  rror occurred to
29120 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a   ensure any.  **
29130 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74   dynamic allocat
29140 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e  ion in sContext.
29150 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29  s (a Mem struct)
29160 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20   is  released.. 
29170 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
29180 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
29190 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63  &sContext.s, enc
291a0 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54  oding);.  REGIST
291b0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
291c0 2c 20 70 44 65 73 74 29 3b 0a 20 20 73 71 6c 69  , pDest);.  sqli
291d0 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
291e0 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e  Dest, &sContext.
291f0 73 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  s);.  UPDATE_MAX
29200 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
29210 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
29220 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a  SafetyOn(db) ){.
29230 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
29240 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
29250 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  }.  if( sqlite3V
29260 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65  dbeMemTooBig(pDe
29270 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  st) ){.    goto 
29280 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62  too_big;.  }.  b
29290 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
292a0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
292b0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
292c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
292d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
292e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74  /* Opcode: VNext
292f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
29300 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75  ** Advance virtu
29310 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74  al table P1 to t
29320 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69  he next row in i
29330 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e  ts result set an
29340 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73  d.** jump to ins
29350 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72  truction P2.  Or
29360 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c  , if the virtual
29370 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68   table has reach
29380 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  ed.** the end of
29390 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c   its result set,
293a0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
293b0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
293c0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
293d0 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20  ase OP_VNext: { 
293e0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73    /* jump */.  s
293f0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
29400 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
29410 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
29420 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  ule;.  int res;.
29430 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
29440 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a  ur;..  res = 0;.
29450 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
29460 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
29470 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61  sert( pCur->pVta
29480 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  bCursor );.  if(
29490 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
294a0 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
294b0 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
294c0 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56  >pVtabCursor->pV
294d0 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
294e0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
294f0 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
29500 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20  le->xNext );..  
29510 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e  /* Invoke the xN
29520 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20  ext() method of 
29530 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72  the module. Ther
29540 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20  e is no way for 
29550 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79  the.  ** underly
29560 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ing implementati
29570 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  on to return an 
29580 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63  error if one occ
29590 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20  urs during.  ** 
295a0 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64  xNext(). Instead
295b0 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  , if an error oc
295c0 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65  curs, true is re
295d0 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69  turned (indicati
295e0 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61  ng that .  ** da
295f0 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29  ta is available)
29600 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63   and the error c
29610 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65  ode returned whe
29620 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a  n xColumn or.  *
29630 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74  * some other met
29640 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f  hod is next invo
29650 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20  ked on the save 
29660 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75  virtual table cu
29670 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  rsor..  */.  if(
29680 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
29690 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
296a0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
296b0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ;.  sqlite3VtabL
296c0 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 70 2d  ock(pVtab);.  p-
296d0 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
296e0 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  1;.  rc = pModul
296f0 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70  e->xNext(pCur->p
29700 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70  VtabCursor);.  p
29710 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
29720 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46   0;.  sqlite3DbF
29730 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
29740 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73  sg);.  p->zErrMs
29750 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
29760 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72  sg;.  pVtab->zEr
29770 72 4d 73 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69  rMsg = 0;.  sqli
29780 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62  te3VtabUnlock(db
29790 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
297a0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
297b0 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75  .    res = pModu
297c0 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70  le->xEof(pCur->p
297d0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d  VtabCursor);.  }
297e0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
297f0 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
29800 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
29810 69 73 75 73 65 3b 0a 0a 20 20 69 66 28 20 21 72  isuse;..  if( !r
29820 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  es ){.    /* If 
29830 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a  there is data, j
29840 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
29850 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
29860 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
29870 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
29880 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
29890 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
298a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
298b0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
298c0 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20  ode: VRename P1 
298d0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
298e0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
298f0 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
29900 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
29910 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
29920 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
29930 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
29940 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52  corresponding xR
29950 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68  ename method. Th
29960 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65  e value.** in re
29970 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73  gister P1 is pas
29980 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65  sed as the zName
29990 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
299a0 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
299b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e  .*/.case OP_VRen
299c0 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ame: {.  sqlite3
299d0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
299e0 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70  Mem *pName;..  p
299f0 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
29a00 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20  Vtab;.  pName = 
29a10 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
29a20 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74  ];.  assert( pVt
29a30 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
29a40 6e 61 6d 65 20 29 3b 0a 20 20 52 45 47 49 53 54  name );.  REGIST
29a50 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
29a60 2c 20 70 4e 61 6d 65 29 3b 0a 0a 20 20 53 74 72  , pName);..  Str
29a70 69 6e 67 69 66 79 28 70 4e 61 6d 65 2c 20 65 6e  ingify(pName, en
29a80 63 6f 64 69 6e 67 29 3b 0a 0a 20 20 69 66 28 20  coding);..  if( 
29a90 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
29aa0 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
29ab0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
29ac0 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  .  sqlite3VtabLo
29ad0 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 72 63 20  ck(pVtab);.  rc 
29ae0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
29af0 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c  ->xRename(pVtab,
29b00 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71   pName->z);.  sq
29b10 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
29b20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70  p->zErrMsg);.  p
29b30 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61  ->zErrMsg = pVta
29b40 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56  b->zErrMsg;.  pV
29b50 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
29b60 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 55  ;.  sqlite3VtabU
29b70 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29  nlock(db, pVtab)
29b80 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ;.  if( sqlite3S
29b90 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f  afetyOn(db) ) go
29ba0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
29bb0 6d 69 73 75 73 65 3b 0a 0a 20 20 62 72 65 61 6b  misuse;..  break
29bc0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
29bd0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29be0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
29bf0 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20  Opcode: VUpdate 
29c00 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
29c10 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
29c20 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
29c30 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
29c40 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
29c50 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
29c60 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
29c70 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
29c80 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  ng xUpdate metho
29c90 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20  d. P2 values.** 
29ca0 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d  are contiguous m
29cb0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72  emory cells star
29cc0 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61  ting at P3 to pa
29cd0 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74  ss to the xUpdat
29ce0 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  e .** invocation
29cf0 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72  . The value in r
29d00 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31  egister (P3+P2-1
29d10 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
29d20 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c   the .** p2th el
29d30 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67  ement of the arg
29d40 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74  v array passed t
29d50 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a  o xUpdate..**.**
29d60 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74   The xUpdate met
29d70 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45  hod will do a DE
29d80 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52  LETE or an INSER
29d90 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68  T or both..** Th
29da0 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e  e argv[0] elemen
29db0 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70  t (which corresp
29dc0 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63  onds to memory c
29dd0 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68  ell P3).** is th
29de0 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77  e rowid of a row
29df0 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20   to delete.  If 
29e00 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20  argv[0] is NULL 
29e10 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65  then no .** dele
29e20 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68  tion occurs.  Th
29e30 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e  e argv[1] elemen
29e40 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  t is the rowid o
29e50 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  f the new .** ro
29e60 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20  w.  This can be 
29e70 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65  NULL to have the
29e80 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
29e90 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a  elect the new .*
29ea0 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65  * rowid for itse
29eb0 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75  lf.  The subsequ
29ec0 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20  ent elements in 
29ed0 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a  the array are .*
29ee0 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  * the values of 
29ef0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e  columns in the n
29f00 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66  ew row..**.** If
29f10 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69   P2==1 then no i
29f20 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d  nsert is perform
29f30 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20  ed.  argv[0] is 
29f40 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20  the rowid of.** 
29f50 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
29f60 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62  .**.** P1 is a b
29f70 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20  oolean flag. If 
29f80 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75  it is set to tru
29f90 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74  e and the xUpdat
29fa0 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63  e call.** is suc
29fb0 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68  cessful, then th
29fc0 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
29fd0 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74   by sqlite3_last
29fe0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
29ff0 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68  .** is set to th
2a000 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  e value of the r
2a010 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77  owid for the row
2a020 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a   just inserted..
2a030 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61  */.case OP_VUpda
2a040 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te: {.  sqlite3_
2a050 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73  vtab *pVtab;.  s
2a060 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2a070 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41  Module;.  int nA
2a080 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  rg;.  int i;.  s
2a090 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69  qlite_int64 rowi
2a0a0 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  d;.  Mem **apArg
2a0b0 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20  ;.  Mem *pX;..  
2a0c0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
2a0d0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
2a0e0 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
2a0f0 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
2a100 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f  ule;.  nArg = pO
2a110 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
2a120 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
2a130 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 70  _VTAB );.  if( p
2a140 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 3d  Module->xUpdate=
2a150 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2a160 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2a170 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 72 65 61  ErrMsg, db, "rea
2a180 64 2d 6f 6e 6c 79 20 74 61 62 6c 65 22 29 3b 0a  d-only table");.
2a190 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2a1a0 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ERROR;.  }else{.
2a1b0 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61      apArg = p->a
2a1c0 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26  pArg;.    pX = &
2a1d0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
2a1e0 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
2a1f0 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
2a200 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f     storeTypeInfo
2a210 28 70 58 2c 20 30 29 3b 0a 20 20 20 20 20 20 61  (pX, 0);.      a
2a220 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20  pArg[i] = pX;.  
2a230 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a      pX++;.    }.
2a240 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
2a250 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
2a260 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2a270 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 73 71 6c  _misuse;.    sql
2a280 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 70 56 74  ite3VtabLock(pVt
2a290 61 62 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  ab);.    rc = pM
2a2a0 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70  odule->xUpdate(p
2a2b0 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72  Vtab, nArg, apAr
2a2c0 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  g, &rowid);.    
2a2d0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2a2e0 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
2a2f0 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
2a300 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
2a310 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d      pVtab->zErrM
2a320 73 67 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  sg = 0;.    sqli
2a330 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62  te3VtabUnlock(db
2a340 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
2a350 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
2a360 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  n(db) ) goto abo
2a370 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
2a380 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
2a390 31 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f  1 && rc==SQLITE_
2a3a0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  OK ){.      asse
2a3b0 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70  rt( nArg>1 && ap
2a3c0 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67  Arg[0] && (apArg
2a3d0 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  [0]->flags&MEM_N
2a3e0 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62  ull) );.      db
2a3f0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f  ->lastRowid = ro
2a400 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  wid;.    }.    p
2a410 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d  ->nChange++;.  }
2a420 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2a430 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2a440 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2a450 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49  /..#ifndef  SQLI
2a460 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
2a470 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  AGMAS./* Opcode:
2a480 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32   Pagecount P1 P2
2a490 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
2a4a0 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e  te the current n
2a4b0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
2a4c0 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  n database P1 to
2a4d0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e   memory cell P2.
2a4e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65  .*/.case OP_Page
2a4f0 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  count: {        
2a500 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
2a510 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
2a520 70 31 3b 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b  p1;.  int nPage;
2a530 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
2a540 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  ;..  p1 = pOp->p
2a550 31 3b 20 0a 20 20 70 50 61 67 65 72 20 3d 20 73  1; .  pPager = s
2a560 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
2a570 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74  (db->aDb[p1].pBt
2a580 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2a590 33 50 61 67 65 72 50 61 67 65 63 6f 75 6e 74 28  3PagerPagecount(
2a5a0 70 50 61 67 65 72 2c 20 26 6e 50 61 67 65 29 3b  pPager, &nPage);
2a5b0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2a5c0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 4f 75 74  E_OK ){.    pOut
2a5d0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
2a5e0 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
2a5f0 20 3d 20 6e 50 61 67 65 3b 0a 20 20 7d 0a 20 20   = nPage;.  }.  
2a600 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2a610 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a620 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70  OMIT_TRACE./* Op
2a630 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20  code: Trace * * 
2a640 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  * P4 *.**.** If 
2a650 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c  tracing is enabl
2a660 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69 74  ed (by the sqlit
2a670 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65  e3_trace()) inte
2a680 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74  rface, then.** t
2a690 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  he UTF-8 string 
2a6a0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20  contained in P4 
2a6b0 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68  is emitted on th
2a6c0 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
2a6d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61  ..*/.case OP_Tra
2a6e0 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54  ce: {.  char *zT
2a6f0 72 61 63 65 3b 0a 0a 20 20 7a 54 72 61 63 65 20  race;..  zTrace 
2a700 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
2a710 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
2a720 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63  ql);.  if( zTrac
2a730 65 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  e ){.    if( db-
2a740 3e 78 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20  >xTrace ){.     
2a750 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e   db->xTrace(db->
2a760 70 54 72 61 63 65 41 72 67 2c 20 7a 54 72 61 63  pTraceArg, zTrac
2a770 65 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66  e);.    }.#ifdef
2a780 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2a790 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73    if( (db->flags
2a7a0 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61   & SQLITE_SqlTra
2a7b0 63 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ce)!=0 ){.      
2a7c0 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
2a7d0 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25  tf("SQL-trace: %
2a7e0 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20  s\n", zTrace);. 
2a7f0 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
2a800 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20  QLITE_DEBUG */. 
2a810 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2a820 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ndif.../* Opcode
2a830 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a  : Noop * * * * *
2a840 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e  .**.** Do nothin
2a850 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63  g.  This instruc
2a860 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73  tion is often us
2a870 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a  eful as a jump.*
2a880 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a  * destination..*
2a890 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69  /./*.** The magi
2a8a0 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65  c Explain opcode
2a8b0 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74   are only insert
2a8c0 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d  ed when explain=
2a8d0 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20  =2 (which.** is 
2a8e0 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20  to say when the 
2a8f0 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
2a900 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65  AN syntax is use
2a910 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  d.).** This opco
2a920 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72  de records infor
2a930 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  mation from the 
2a940 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69  optimizer.  It i
2a950 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d  s the.** the sam
2a960 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54  e as a no-op.  T
2a970 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72  his opcodesnever
2a980 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65   appears in a re
2a990 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a  al VM program..*
2a9a0 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20  /.default: {    
2a9b0 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
2a9c0 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20   really OP_Noop 
2a9d0 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a  and OP_Explain *
2a9e0 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  /.  break;.}../*
2a9f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aa00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aa10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aa20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aa30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
2aa40 54 68 65 20 63 61 73 65 73 20 6f 66 20 74 68 65  The cases of the
2aa50 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
2aa60 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e  t above this lin
2aa70 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20  e should all be 
2aa80 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36  indented.** by 6
2aa90 20 73 70 61 63 65 73 2e 20 20 42 75 74 20 74 68   spaces.  But th
2aaa0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70  e left-most 6 sp
2aab0 61 63 65 73 20 68 61 76 65 20 62 65 65 6e 20 72  aces have been r
2aac0 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76  emoved to improv
2aad0 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69  e the.** readabi
2aae0 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73  lity.  From this
2aaf0 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20   point on down, 
2ab00 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e  the normal inden
2ab10 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65  tation rules are
2ab20 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a  .** restored..**
2ab30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20  ***********/.   
2ab80 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f   }..#ifdef VDBE_
2ab90 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20  PROFILE.    {.  
2aba0 20 20 20 20 75 36 34 20 65 6c 61 70 73 65 64 20      u64 elapsed 
2abb0 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
2abc0 29 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20  ) - start;.     
2abd0 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20   pOp->cycles += 
2abe0 65 6c 61 70 73 65 64 3b 0a 20 20 20 20 20 20 70  elapsed;.      p
2abf0 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30  Op->cnt++;.#if 0
2ac00 0a 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66  .        fprintf
2ac10 28 73 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75  (stdout, "%10llu
2ac20 20 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20 20   ", elapsed);.  
2ac30 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2ac40 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
2ac50 20 6f 72 69 67 50 63 2c 20 26 70 2d 3e 61 4f 70   origPc, &p->aOp
2ac60 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69  [origPc]);.#endi
2ac70 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  f.    }.#endif..
2ac80 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
2ac90 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e  wing code adds n
2aca0 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63  othing to the ac
2acb0 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69  tual functionali
2acc0 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ty.    ** of the
2acd0 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73   program.  It is
2ace0 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74   only here for t
2acf0 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67  esting and debug
2ad00 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20  ging..    ** On 
2ad10 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20  the other hand, 
2ad20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55  it does burn CPU
2ad30 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69   cycles every ti
2ad40 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a  me through.    *
2ad50 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20  * the evaluator 
2ad60 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e  loop.  So we can
2ad70 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68   leave it out wh
2ad80 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66  en NDEBUG is def
2ad90 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
2ada0 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20  ndef NDEBUG.    
2adb0 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26  assert( pc>=-1 &
2adc0 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a  & pc<p->nOp );..
2add0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2ade0 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74  BUG.    if( p->t
2adf0 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66  race ){.      if
2ae00 28 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74  ( rc!=0 ) fprint
2ae10 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25  f(p->trace,"rc=%
2ae20 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20  d\n",rc);.      
2ae30 69 66 28 20 6f 70 50 72 6f 70 65 72 74 79 20 26  if( opProperty &
2ae40 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52   OPFLG_OUT2_PRER
2ae50 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
2ae60 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28    registerTrace(
2ae70 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70  p->trace, pOp->p
2ae80 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  2, pOut);.      
2ae90 7d 0a 20 20 20 20 20 20 69 66 28 20 6f 70 50 72  }.      if( opPr
2aea0 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f  operty & OPFLG_O
2aeb0 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72  UT3 ){.        r
2aec0 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e  egisterTrace(p->
2aed0 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20  trace, pOp->p3, 
2aee0 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pOut);.      }. 
2aef0 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20     }.#endif  /* 
2af00 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
2af10 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55  #endif  /* NDEBU
2af20 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65  G */.  }  /* The
2af30 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28   end of the for(
2af40 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f  ;;) loop the loo
2af50 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64  ps through opcod
2af60 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77  es */..  /* If w
2af70 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  e reach this poi
2af80 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  nt, it means tha
2af90 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66  t execution is f
2afa0 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a  inished with.  *
2afb0 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f  * an error of so
2afc0 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64  me kind..  */.vd
2afd0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20  be_error_halt:. 
2afe0 20 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20   assert( rc );. 
2aff0 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73   p->rc = rc;.  s
2b000 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
2b010 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2b020 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20  ITE_IOERR_NOMEM 
2b030 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ) db->mallocFail
2b040 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53  ed = 1;.  rc = S
2b050 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 0a 20 20  QLITE_ERROR;..  
2b060 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  /* This is the o
2b070 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74  nly way out of t
2b080 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20  his procedure.  
2b090 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20  We have to.  ** 
2b0a0 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65  release the mute
2b0b0 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68  xes on btrees th
2b0c0 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64  at were acquired
2b0d0 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70   at the.  ** top
2b0e0 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e  . */.vdbe_return
2b0f0 3a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  :.  sqlite3Btree
2b100 4d 75 74 65 78 41 72 72 61 79 4c 65 61 76 65 28  MutexArrayLeave(
2b110 26 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20 20 72  &p->aMutex);.  r
2b120 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20  eturn rc;..  /* 
2b130 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20  Jump to here if 
2b140 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
2b150 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c   larger than SQL
2b160 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20  ITE_MAX_LENGTH. 
2b170 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72   ** is encounter
2b180 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67  ed..  */.too_big
2b190 3a 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  :.  sqlite3SetSt
2b1a0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2b1b0 2c 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72  , db, "string or
2b1c0 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b   blob too big");
2b1d0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54  .  rc = SQLITE_T
2b1e0 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64  OOBIG;.  goto vd
2b1f0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
2b200 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
2b210 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  e if a malloc() 
2b220 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d  fails..  */.no_m
2b230 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63  em:.  db->malloc
2b240 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71  Failed = 1;.  sq
2b250 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2b260 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2b270 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29  "out of memory")
2b280 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
2b290 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64  NOMEM;.  goto vd
2b2a0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
2b2b0 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
2b2c0 65 20 66 6f 72 20 61 6e 20 53 51 4c 49 54 45 5f  e for an SQLITE_
2b2d0 4d 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 20 20  MISUSE error..  
2b2e0 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
2b2f0 6d 69 73 75 73 65 3a 0a 20 20 72 63 20 3d 20 53  misuse:.  rc = S
2b300 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
2b310 2f 2a 20 46 61 6c 6c 20 74 68 72 75 20 69 6e 74  /* Fall thru int
2b320 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2b330 72 72 6f 72 20 2a 2f 0a 0a 20 20 2f 2a 20 4a 75  rror */..  /* Ju
2b340 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61  mp to here for a
2b350 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66  ny other kind of
2b360 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54   fatal error.  T
2b370 68 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65  he "rc" variable
2b380 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c  .  ** should hol
2b390 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62  d the error numb
2b3a0 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  er..  */.abort_d
2b3b0 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61  ue_to_error:.  a
2b3c0 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73  ssert( p->zErrMs
2b3d0 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62  g==0 );.  if( db
2b3e0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
2b3f0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
2b400 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  EM;.  if( rc!=SQ
2b410 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
2b420 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
2b430 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2b440 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
2b450 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
2b460 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  ));.  }.  goto v
2b470 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
2b480 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
2b490 72 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  re if the sqlite
2b4a0 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50  3_interrupt() AP
2b4b0 49 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72  I sets the inter
2b4c0 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a  rupt.  ** flag..
2b4d0 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
2b4e0 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61  o_interrupt:.  a
2b4f0 73 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73  ssert( db->u1.is
2b500 49 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20  Interrupted );. 
2b510 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
2b520 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20  ERRUPT;.  p->rc 
2b530 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53  = rc;.  sqlite3S
2b540 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2b550 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
2b560 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
2b570 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  ));.  goto vdbe_
2b580 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a        error_halt;.}.