/ Hex Artifact Content
Login

Artifact e16028ce7912f9b4d9fc61de16aa79a40d156408:


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 36 35 20 32 30 30 39  e.c,v 1.865 2009
0850: 2f 30 36 2f 32 36 20 31 35 3a 31 34 3a 35 35 20  /06/26 15:14:55 
0860: 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e  drh Exp $.*/.#in
0870: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 49 6e 74  clude "sqliteInt
0880: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
0890: 62 65 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  beInt.h"../*.** 
08a0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6c  The following gl
08b0: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73  obal variable is
08c0: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 76 65   incremented eve
08d0: 72 79 20 74 69 6d 65 20 61 20 63 75 72 73 6f 72  ry time a cursor
08e0: 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69 74 68 65  .** moves, eithe
08f0: 72 20 62 79 20 74 68 65 20 4f 50 5f 53 65 65 6b  r by the OP_Seek
0900: 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20 6f 72 20  XX, OP_Next, or 
0910: 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64 65 73 2e  OP_Prev opcodes.
0920: 20 20 54 68 65 20 74 65 73 74 0a 2a 2a 20 70 72    The test.** pr
0930: 6f 63 65 64 75 72 65 73 20 75 73 65 20 74 68 69  ocedures use thi
0940: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f  s information to
0950: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
0960: 69 6e 64 69 63 65 73 20 61 72 65 0a 2a 2a 20 77  indices are.** w
0970: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0980: 2e 20 20 54 68 69 73 20 76 61 72 69 61 62 6c 65  .  This variable
0990: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
09a0: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a 2a   other than to.*
09b0: 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74 68  * help verify th
09c0: 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74  e correct operat
09d0: 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61  ion of the libra
09e0: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
09f0: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0a00: 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
0a10: 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a  nt = 0;.#endif..
0a20: 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69 73 20  /*.** When this 
0a30: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0a40: 69 73 20 70 6f 73 69 74 69 76 65 2c 20 69 74 20  is positive, it 
0a50: 67 65 74 73 20 64 65 63 72 65 6d 65 6e 74 65 64  gets decremented
0a60: 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a 2a 2a 20   once before.** 
0a70: 65 61 63 68 20 69 6e 73 74 72 75 63 74 69 6f 6e  each instruction
0a80: 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20 20 57   in the VDBE.  W
0a90: 68 65 6e 20 72 65 61 63 68 65 73 20 7a 65 72 6f  hen reaches zero
0aa0: 2c 20 74 68 65 20 75 31 2e 69 73 49 6e 74 65 72  , the u1.isInter
0ab0: 72 75 70 74 65 64 0a 2a 2a 20 66 69 65 6c 64 20  rupted.** field 
0ac0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 20 73  of the sqlite3 s
0ad0: 74 72 75 63 74 75 72 65 20 69 73 20 73 65 74 20  tructure is set 
0ae0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 69 6d 75  in order to simu
0af0: 6c 61 74 65 20 61 6e 64 20 69 6e 74 65 72 72 75  late and interru
0b00: 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  pt..**.** This f
0b10: 61 63 69 6c 69 74 79 20 69 73 20 75 73 65 64 20  acility is used 
0b20: 66 6f 72 20 74 65 73 74 69 6e 67 20 70 75 72 70  for testing purp
0b30: 6f 73 65 73 20 6f 6e 6c 79 2e 20 20 49 74 20 64  oses only.  It d
0b40: 6f 65 73 20 6e 6f 74 20 66 75 6e 63 74 69 6f 6e  oes not function
0b50: 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72 64 69 6e 61  .** in an ordina
0b60: 72 79 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  ry build..*/.#if
0b70: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0b80: 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  int sqlite3_inte
0b90: 72 72 75 70 74 5f 63 6f 75 6e 74 20 3d 20 30 3b  rrupt_count = 0;
0ba0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0bb0: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0bc0: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0bd0: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65  mented each type
0be0: 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
0bf0: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
0c00: 65 64 2e 20 20 54 68 65 20 74 65 73 74 20 70 72  ed.  The test pr
0c10: 6f 63 65 64 75 72 65 73 20 75 73 65 20 74 68 69  ocedures use thi
0c20: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f  s information to
0c30: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 0a   make sure that.
0c40: 2a 2a 20 73 6f 72 74 69 6e 67 20 69 73 20 6f 63  ** sorting is oc
0c50: 63 75 72 72 69 6e 67 20 6f 72 20 6e 6f 74 20 6f  curring or not o
0c60: 63 63 75 72 72 69 6e 67 20 61 74 20 61 70 70 72  ccurring at appr
0c70: 6f 70 72 69 61 74 65 20 74 69 6d 65 73 2e 20 20  opriate times.  
0c80: 20 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a   This variable.*
0c90: 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  * has no functio
0ca0: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20  n other than to 
0cb0: 68 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20  help verify the 
0cc0: 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f  correct operatio
0cd0: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72  n of the.** libr
0ce0: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0cf0: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0d00: 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
0d10: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0d20: 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c  *.** The next gl
0d30: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 72 65  obal variable re
0d40: 63 6f 72 64 73 20 74 68 65 20 73 69 7a 65 20 6f  cords the size o
0d50: 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 4d 45  f the largest ME
0d60: 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72 20 4d 45 4d  M_Blob.** or MEM
0d70: 5f 53 74 72 20 74 68 61 74 20 68 61 73 20 62 65  _Str that has be
0d80: 65 6e 20 75 73 65 64 20 62 79 20 61 20 56 44 42  en used by a VDB
0d90: 45 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 74  E opcode.  The t
0da0: 65 73 74 20 70 72 6f 63 65 64 75 72 65 73 0a 2a  est procedures.*
0db0: 2a 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72  * use this infor
0dc0: 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73  mation to make s
0dd0: 75 72 65 20 74 68 61 74 20 74 68 65 20 7a 65 72  ure that the zer
0de0: 6f 2d 62 6c 6f 62 20 66 75 6e 63 74 69 6f 6e 61  o-blob functiona
0df0: 6c 69 74 79 0a 2a 2a 20 69 73 20 77 6f 72 6b 69  lity.** is worki
0e00: 6e 67 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 20  ng correctly.   
0e10: 54 68 69 73 20 76 61 72 69 61 62 6c 65 20 68 61  This variable ha
0e20: 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 6f 74  s no function ot
0e30: 68 65 72 20 74 68 61 6e 20 74 6f 0a 2a 2a 20 68  her than to.** h
0e40: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0e50: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0e60: 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e   of the library.
0e70: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
0e80: 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74  E_TEST.int sqlit
0e90: 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20  e3_max_blobsize 
0ea0: 3d 20 30 3b 0a 73 74 61 74 69 63 20 76 6f 69 64  = 0;.static void
0eb0: 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69   updateMaxBlobsi
0ec0: 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66  ze(Mem *p){.  if
0ed0: 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d  ( (p->flags & (M
0ee0: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
0ef0: 29 21 3d 30 20 26 26 20 70 2d 3e 6e 3e 73 71 6c  )!=0 && p->n>sql
0f00: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
0f10: 65 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  e ){.    sqlite3
0f20: 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20 3d 20  _max_blobsize = 
0f30: 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64  p->n;.  }.}.#end
0f40: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61  if../*.** Test a
0f50: 20 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65   register to see
0f60: 20 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74   if it exceeds t
0f70: 68 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d  he current maxim
0f80: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a  um blob size..**
0f90: 20 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63   If it does, rec
0fa0: 6f 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69  ord the new maxi
0fb0: 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a  mum blob size..*
0fc0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
0fd0: 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64  LITE_TEST) && !d
0fe0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
0ff0: 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29  IT_BUILTIN_TEST)
1000: 0a 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45  .# define UPDATE
1010: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29  _MAX_BLOBSIZE(P)
1020: 20 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73    updateMaxBlobs
1030: 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  ize(P).#else.# d
1040: 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58  efine UPDATE_MAX
1050: 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e  _BLOBSIZE(P).#en
1060: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65  dif../*.** Conve
1070: 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65 67  rt the given reg
1080: 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72  ister into a str
1090: 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74 20  ing if it isn't 
10a0: 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20  one.** already. 
10b0: 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  Return non-zero 
10c0: 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  if a malloc() fa
10d0: 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ils..*/.#define 
10e0: 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63  Stringify(P, enc
10f0: 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e  ) \.   if(((P)->
1100: 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d  flags&(MEM_Str|M
1110: 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20  EM_Blob))==0 && 
1120: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
1130: 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 29 29 20  ringify(P,enc)) 
1140: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1150: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1160: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1170: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1180: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1190: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
11a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
11b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
11c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
11d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
11e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
11f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1200: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1210: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1220: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1230: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1240: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1250: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1260: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1270: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1280: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1290: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
12a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
12b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
12c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
12d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
12e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
12f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1300: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1310: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1320: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1330: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 6e 20 4d  string into an M
1340: 45 4d 5f 44 79 6e 20 73 74 72 69 6e 67 2e 0a 2a  EM_Dyn string..*
1350: 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70 68 65  /.#define Deephe
1360: 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20  meralize(P) \.  
1370: 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73   if( ((P)->flags
1380: 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c  &MEM_Ephem)!=0 \
1390: 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74  .       && sqlit
13a0: 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69  e3VdbeMemMakeWri
13b0: 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74  teable(P) ){ got
13c0: 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 0a 2a  o no_mem;}../*.*
13d0: 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 56 64  * Call sqlite3Vd
13e0: 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
13f0: 29 20 6f 6e 20 74 68 65 20 73 75 70 70 6c 69 65  ) on the supplie
1400: 64 20 76 61 6c 75 65 20 28 74 79 70 65 20 4d 65  d value (type Me
1410: 6d 2a 29 0a 2a 2a 20 50 20 69 66 20 72 65 71 75  m*).** P if requ
1420: 69 72 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ired..*/.#define
1430: 20 45 78 70 61 6e 64 42 6c 6f 62 28 50 29 20 28   ExpandBlob(P) (
1440: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1450: 5a 65 72 6f 29 3f 73 71 6c 69 74 65 33 56 64 62  Zero)?sqlite3Vdb
1460: 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 50  eMemExpandBlob(P
1470: 29 3a 30 29 0a 0a 2f 2a 0a 2a 2a 20 41 72 67 75  ):0)../*.** Argu
1480: 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69 6e 74 73  ment pMem points
1490: 20 61 74 20 61 20 72 65 67 69 73 74 65 72 20 74   at a register t
14a0: 68 61 74 20 77 69 6c 6c 20 62 65 20 70 61 73 73  hat will be pass
14b0: 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73 65 72 2d  ed to a.** user-
14c0: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
14d0: 20 6f 72 20 72 65 74 75 72 6e 65 64 20 74 6f 20   or returned to 
14e0: 74 68 65 20 75 73 65 72 20 61 73 20 74 68 65 20  the user as the 
14f0: 72 65 73 75 6c 74 20 6f 66 20 61 20 71 75 65 72  result of a quer
1500: 79 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  y..** The second
1510: 20 61 72 67 75 6d 65 6e 74 2c 20 27 64 62 5f 65   argument, 'db_e
1520: 6e 63 27 20 69 73 20 74 68 65 20 74 65 78 74 20  nc' is the text 
1530: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
1540: 20 74 68 65 20 76 64 62 65 20 66 6f 72 0a 2a 2a   the vdbe for.**
1550: 20 72 65 67 69 73 74 65 72 20 76 61 72 69 61 62   register variab
1560: 6c 65 73 2e 20 20 54 68 69 73 20 72 6f 75 74 69  les.  This routi
1570: 6e 65 20 73 65 74 73 20 74 68 65 20 70 4d 65 6d  ne sets the pMem
1580: 2d 3e 65 6e 63 20 61 6e 64 20 70 4d 65 6d 2d 3e  ->enc and pMem->
1590: 74 79 70 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65  type.** variable
15a0: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  s used by the sq
15b0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29 20  lite3_value_*() 
15c0: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 64 65  routines..*/.#de
15d0: 66 69 6e 65 20 73 74 6f 72 65 54 79 70 65 49 6e  fine storeTypeIn
15e0: 66 6f 28 41 2c 42 29 20 5f 73 74 6f 72 65 54 79  fo(A,B) _storeTy
15f0: 70 65 49 6e 66 6f 28 41 29 0a 73 74 61 74 69 63  peInfo(A).static
1600: 20 76 6f 69 64 20 5f 73 74 6f 72 65 54 79 70 65   void _storeType
1610: 49 6e 66 6f 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  Info(Mem *pMem){
1620: 0a 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20 70  .  int flags = p
1630: 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  Mem->flags;.  if
1640: 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ( flags & MEM_Nu
1650: 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  ll ){.    pMem->
1660: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 4e 55  type = SQLITE_NU
1670: 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  LL;.  }.  else i
1680: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  f( flags & MEM_I
1690: 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  nt ){.    pMem->
16a0: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 49 4e  type = SQLITE_IN
16b0: 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20 65 6c 73  TEGER;.  }.  els
16c0: 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45  e if( flags & ME
16d0: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 4d  M_Real ){.    pM
16e0: 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54  em->type = SQLIT
16f0: 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20 65  E_FLOAT;.  }.  e
1700: 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20  lse if( flags & 
1710: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 70  MEM_Str ){.    p
1720: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
1730: 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65 6c 73 65  TE_TEXT;.  }else
1740: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
1750: 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b 0a   = SQLITE_BLOB;.
1760: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f    }.}../*.** Pro
1770: 70 65 72 74 69 65 73 20 6f 66 20 6f 70 63 6f 64  perties of opcod
1780: 65 73 2e 20 20 54 68 65 20 4f 50 46 4c 47 5f 49  es.  The OPFLG_I
1790: 4e 49 54 49 41 4c 49 5a 45 52 20 6d 61 63 72 6f  NITIALIZER macro
17a0: 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 62   is.** created b
17b0: 79 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  y mkopcodeh.awk 
17c0: 64 75 72 69 6e 67 20 63 6f 6d 70 69 6c 61 74 69  during compilati
17d0: 6f 6e 2e 20 20 44 61 74 61 20 69 73 20 6f 62 74  on.  Data is obt
17e0: 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 74 68  ained.** from th
17f0: 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 6c 6c 6f  e comments follo
1800: 77 69 6e 67 20 74 68 65 20 22 63 61 73 65 20 4f  wing the "case O
1810: 50 5f 78 78 78 78 3a 22 20 73 74 61 74 65 6d 65  P_xxxx:" stateme
1820: 6e 74 73 20 69 6e 0a 2a 2a 20 74 68 69 73 20 66  nts in.** this f
1830: 69 6c 65 2e 20 20 0a 2a 2f 0a 73 74 61 74 69 63  ile.  .*/.static
1840: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
1850: 63 68 61 72 20 6f 70 63 6f 64 65 50 72 6f 70 65  char opcodePrope
1860: 72 74 79 5b 5d 20 3d 20 4f 50 46 4c 47 5f 49 4e  rty[] = OPFLG_IN
1870: 49 54 49 41 4c 49 5a 45 52 3b 0a 0a 2f 2a 0a 2a  ITIALIZER;../*.*
1880: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
1890: 20 61 6e 20 6f 70 63 6f 64 65 20 68 61 73 20 61   an opcode has a
18a0: 6e 79 20 6f 66 20 74 68 65 20 4f 50 46 4c 47 5f  ny of the OPFLG_
18b0: 78 78 78 20 70 72 6f 70 65 72 74 69 65 73 0a 2a  xxx properties.*
18c0: 2a 20 73 70 65 63 69 66 69 65 64 20 62 79 20 6d  * specified by m
18d0: 61 73 6b 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ask..*/.int sqli
18e0: 74 65 33 56 64 62 65 4f 70 63 6f 64 65 48 61 73  te3VdbeOpcodeHas
18f0: 50 72 6f 70 65 72 74 79 28 69 6e 74 20 6f 70 63  Property(int opc
1900: 6f 64 65 2c 20 69 6e 74 20 6d 61 73 6b 29 7b 0a  ode, int mask){.
1910: 20 20 61 73 73 65 72 74 28 20 6f 70 63 6f 64 65    assert( opcode
1920: 3e 30 20 26 26 20 6f 70 63 6f 64 65 3c 28 69 6e  >0 && opcode<(in
1930: 74 29 73 69 7a 65 6f 66 28 6f 70 63 6f 64 65 50  t)sizeof(opcodeP
1940: 72 6f 70 65 72 74 79 29 20 29 3b 0a 20 20 72 65  roperty) );.  re
1950: 74 75 72 6e 20 28 6f 70 63 6f 64 65 50 72 6f 70  turn (opcodeProp
1960: 65 72 74 79 5b 6f 70 63 6f 64 65 5d 26 6d 61 73  erty[opcode]&mas
1970: 6b 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  k)!=0;.}../*.** 
1980: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
1990: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
19a0: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
19b0: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
19c0: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
19d0: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
19e0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
19f0: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
1a00: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
1a10: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
1a20: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
1a30: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
1a40: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
1a50: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1a60: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
1a70: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1a80: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
1a90: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
1aa0: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
1ab0: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1ac0: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1ad0: 20 20 2f 2a 20 57 68 65 6e 20 64 61 74 61 62 61    /* When databa
1ae0: 73 65 20 74 68 65 20 63 75 72 73 6f 72 20 62 65  se the cursor be
1af0: 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20  longs to, or -1 
1b00: 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72 65 65  */.  int isBtree
1b10: 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20 54 72  Cursor     /* Tr
1b20: 75 65 20 66 6f 72 20 42 2d 54 72 65 65 20 76 73  ue for B-Tree vs
1b30: 2e 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 6f  . pseudo-table o
1b40: 72 20 76 74 61 62 20 2a 2f 0a 29 7b 0a 20 20 2f  r vtab */.){.  /
1b50: 2a 20 46 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72  * Find the memor
1b60: 79 20 63 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c  y cell that will
1b70: 20 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72   be used to stor
1b80: 65 20 74 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65  e the blob of me
1b90: 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75 69 72  mory.  ** requir
1ba0: 65 64 20 66 6f 72 20 74 68 69 73 20 56 64 62 65  ed for this Vdbe
1bb0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1bc0: 2e 20 49 74 20 69 73 20 63 6f 6e 76 65 6e 69 65  . It is convenie
1bd0: 6e 74 20 74 6f 20 75 73 65 20 61 20 0a 20 20 2a  nt to use a .  *
1be0: 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79 20 63 65  * vdbe memory ce
1bf0: 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20 74 68 65  ll to manage the
1c00: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1c10: 6f 6e 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  on required for 
1c20: 61 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f  a.  ** VdbeCurso
1c30: 72 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  r structure for 
1c40: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65  the following re
1c50: 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a  asons:.  **.  **
1c60: 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63     * Sometimes c
1c70: 75 72 73 6f 72 20 6e 75 6d 62 65 72 73 20 61 72  ursor numbers ar
1c80: 65 20 75 73 65 64 20 66 6f 72 20 61 20 63 6f 75  e used for a cou
1c90: 70 6c 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  ple of different
1ca0: 0a 20 20 2a 2a 20 20 20 20 20 70 75 72 70 6f 73  .  **     purpos
1cb0: 65 73 20 69 6e 20 61 20 76 64 62 65 20 70 72 6f  es in a vdbe pro
1cc0: 67 72 61 6d 2e 20 54 68 65 20 64 69 66 66 65 72  gram. The differ
1cd0: 65 6e 74 20 75 73 65 73 20 6d 69 67 68 74 20 72  ent uses might r
1ce0: 65 71 75 69 72 65 0a 20 20 2a 2a 20 20 20 20 20  equire.  **     
1cf0: 64 69 66 66 65 72 65 6e 74 20 73 69 7a 65 64 20  different sized 
1d00: 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d  allocations. Mem
1d10: 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f 76 69 64  ory cells provid
1d20: 65 20 67 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20  e growable.  ** 
1d30: 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e      allocations.
1d40: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57  .  **.  **   * W
1d50: 68 65 6e 20 75 73 69 6e 67 20 45 4e 41 42 4c 45  hen using ENABLE
1d60: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
1d70: 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  NT, memory cell 
1d80: 62 75 66 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a  buffers can.  **
1d90: 20 20 20 20 20 62 65 20 66 72 65 65 64 20 6c 61       be freed la
1da0: 7a 69 6c 79 20 76 69 61 20 74 68 65 20 73 71 6c  zily via the sql
1db0: 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  ite3_release_mem
1dc0: 6f 72 79 28 29 20 41 50 49 2e 20 54 68 69 73 0a  ory() API. This.
1dd0: 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a    **     minimiz
1de0: 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  es the number of
1df0: 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61   malloc calls ma
1e00: 64 65 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  de by the system
1e10: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d 65 6d 6f  ..  **.  ** Memo
1e20: 72 79 20 63 65 6c 6c 73 20 66 6f 72 20 63 75 72  ry cells for cur
1e30: 73 6f 72 73 20 61 72 65 20 61 6c 6c 6f 63 61 74  sors are allocat
1e40: 65 64 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66  ed at the top of
1e50: 20 74 68 65 20 61 64 64 72 65 73 73 0a 20 20 2a   the address.  *
1e60: 2a 20 73 70 61 63 65 2e 20 4d 65 6d 6f 72 79 20  * space. Memory 
1e70: 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 29 20 63  cell (p->nMem) c
1e80: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 63 75  orresponds to cu
1e90: 72 73 6f 72 20 30 2e 20 53 70 61 63 65 20 66 6f  rsor 0. Space fo
1ea0: 72 0a 20 20 2a 2a 20 63 75 72 73 6f 72 20 31 20  r.  ** cursor 1 
1eb0: 69 73 20 6d 61 6e 61 67 65 64 20 62 79 20 6d 65  is managed by me
1ec0: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1ed0: 65 6d 2d 31 29 2c 20 65 74 63 2e 0a 20 20 2a 2f  em-1), etc..  */
1ee0: 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 26  .  Mem *pMem = &
1ef0: 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d  p->aMem[p->nMem-
1f00: 69 43 75 72 5d 3b 0a 0a 20 20 69 6e 74 20 6e 42  iCur];..  int nB
1f10: 79 74 65 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  yte;.  VdbeCurso
1f20: 72 20 2a 70 43 78 20 3d 20 30 3b 0a 20 20 6e 42  r *pCx = 0;.  nB
1f30: 79 74 65 20 3d 20 0a 20 20 20 20 20 20 73 69 7a  yte = .      siz
1f40: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 20  eof(VdbeCursor) 
1f50: 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74 72 65  + .      (isBtre
1f60: 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42  eCursor?sqlite3B
1f70: 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29  treeCursorSize()
1f80: 3a 30 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e  :0) + .      2*n
1f90: 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32  Field*sizeof(u32
1fa0: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43  );..  assert( iC
1fb0: 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  ur<p->nCursor );
1fc0: 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b  .  if( p->apCsr[
1fd0: 69 43 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c  iCur] ){.    sql
1fe0: 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
1ff0: 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69  or(p, p->apCsr[i
2000: 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70  Cur]);.    p->ap
2010: 43 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20  Csr[iCur] = 0;. 
2020: 20 7d 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f   }.  if( SQLITE_
2030: 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d  OK==sqlite3VdbeM
2040: 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79  emGrow(pMem, nBy
2050: 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d  te, 0) ){.    p-
2060: 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70  >apCsr[iCur] = p
2070: 43 78 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72  Cx = (VdbeCursor
2080: 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d  *)pMem->z;.    m
2090: 65 6d 73 65 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30  emset(pMem->z, 0
20a0: 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 70 43  , nByte);.    pC
20b0: 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20  x->iDb = iDb;.  
20c0: 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20    pCx->nField = 
20d0: 6e 46 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20  nField;.    if( 
20e0: 6e 46 69 65 6c 64 20 29 7b 0a 20 20 20 20 20 20  nField ){.      
20f0: 70 43 78 2d 3e 61 54 79 70 65 20 3d 20 28 75 33  pCx->aType = (u3
2100: 32 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a  2 *)&pMem->z[siz
2110: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 5d  eof(VdbeCursor)]
2120: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
2130: 69 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b  isBtreeCursor ){
2140: 0a 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72  .      pCx->pCur
2150: 73 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a  sor = (BtCursor*
2160: 29 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65  ).          &pMe
2170: 6d 2d 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65  m->z[sizeof(Vdbe
2180: 43 75 72 73 6f 72 29 2b 32 2a 6e 46 69 65 6c 64  Cursor)+2*nField
2190: 2a 73 69 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20  *sizeof(u32)];. 
21a0: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
21b0: 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  n pCx;.}../*.** 
21c0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61  Try to convert a
21d0: 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75   value into a nu
21e0: 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61  meric representa
21f0: 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a  tion if we can.*
2200: 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20  * do so without 
2210: 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
2220: 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
2230: 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73 74 72  ords, if the str
2240: 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b  ing.** looks lik
2250: 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76  e a number, conv
2260: 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75  ert it into a nu
2270: 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65  mber.  If it doe
2280: 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69  s not.** look li
2290: 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61  ke a number, lea
22a0: 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a  ve it alone..*/.
22b0: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
22c0: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
22d0: 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20 69  (Mem *pRec){.  i
22e0: 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20  f( (pRec->flags 
22f0: 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  & (MEM_Real|MEM_
2300: 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Int))==0 ){.    
2310: 69 6e 74 20 72 65 61 6c 6e 75 6d 3b 0a 20 20 20  int realnum;.   
2320: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
2330: 75 6c 54 65 72 6d 69 6e 61 74 65 28 70 52 65 63  ulTerminate(pRec
2340: 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63  );.    if( (pRec
2350: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29  ->flags&MEM_Str)
2360: 0a 20 20 20 20 20 20 20 20 20 26 26 20 73 71 6c  .         && sql
2370: 69 74 65 33 49 73 4e 75 6d 62 65 72 28 70 52 65  ite3IsNumber(pRe
2380: 63 2d 3e 7a 2c 20 26 72 65 61 6c 6e 75 6d 2c 20  c->z, &realnum, 
2390: 70 52 65 63 2d 3e 65 6e 63 29 20 29 7b 0a 20 20  pRec->enc) ){.  
23a0: 20 20 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20      i64 value;. 
23b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
23c0: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
23d0: 52 65 63 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Rec, SQLITE_UTF8
23e0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 21 72 65  );.      if( !re
23f0: 61 6c 6e 75 6d 20 26 26 20 73 71 6c 69 74 65 33  alnum && sqlite3
2400: 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20  Atoi64(pRec->z, 
2410: 26 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 20  &value) ){.     
2420: 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 76     pRec->u.i = v
2430: 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 4d 65  alue;.        Me
2440: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 52 65  mSetTypeFlag(pRe
2450: 63 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  c, MEM_Int);.   
2460: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2470: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2480: 52 65 61 6c 69 66 79 28 70 52 65 63 29 3b 0a 20  Realify(pRec);. 
2490: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
24a0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73  .}../*.** Proces
24b0: 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e  sing is determin
24c0: 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74  e by the affinit
24d0: 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a  y parameter:.**.
24e0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ** SQLITE_AFF_IN
24f0: 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45  TEGER:.** SQLITE
2500: 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51  _AFF_REAL:.** SQ
2510: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
2520: 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63  :.**    Try to c
2530: 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61  onvert pRec to a
2540: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2550: 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a  entation or a .*
2560: 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  *    floating-po
2570: 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  int representati
2580: 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72  on if an integer
2590: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a   representation.
25a0: 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73  **    is not pos
25b0: 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61  sible.  Note tha
25c0: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65  t the integer re
25d0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a  presentation is.
25e0: 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65  **    always pre
25f0: 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20  ferred, even if 
2600: 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20  the affinity is 
2610: 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a  REAL, because.**
2620: 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72      an integer r
2630: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2640: 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69   more space effi
2650: 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a  cient on disk..*
2660: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
2670: 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76  TEXT:.**    Conv
2680: 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65  ert pRec to a te
2690: 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  xt representatio
26a0: 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  n..**.** SQLITE_
26b0: 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20  AFF_NONE:.**    
26c0: 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20  No-op.  pRec is 
26d0: 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74  unchanged..*/.st
26e0: 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41  atic void applyA
26f0: 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a  ffinity(.  Mem *
2700: 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f  pRec,          /
2710: 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61  * The value to a
2720: 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f  pply affinity to
2730: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
2740: 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65  ity,      /* The
2750: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
2760: 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20  applied */.  u8 
2770: 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20  enc             
2780: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78   /* Use this tex
2790: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b  t encoding */.){
27a0: 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  .  if( affinity=
27b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
27c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
27d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
27e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
27f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2800: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2810: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2820: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2830: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2840: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2850: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2860: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2870: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2880: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2890: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
28a0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
28b0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
28c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
28d0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
28e0: 20 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20   enc);.    }.   
28f0: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20   pRec->flags &= 
2900: 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49  ~(MEM_Real|MEM_I
2910: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  nt);.  }else if(
2920: 20 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49 54   affinity!=SQLIT
2930: 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20  E_AFF_NONE ){.  
2940: 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69    assert( affini
2950: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  ty==SQLITE_AFF_I
2960: 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69  NTEGER || affini
2970: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  ty==SQLITE_AFF_R
2980: 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  EAL.            
2990: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
29a0: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
29b0: 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d   );.    applyNum
29c0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
29d0: 63 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63  c);.    if( pRec
29e0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
29f0: 61 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  al ){.      sqli
2a00: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
2a10: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
2a20: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
2a30: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2a40: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2a50: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2a60: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2a70: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2a80: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2a90: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2aa0: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2ab0: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2ac0: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2ad0: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2ae0: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2af0: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2b00: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2b10: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2b20: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2b30: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2b40: 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  gument..**.** Th
2b50: 69 73 20 69 73 20 61 6e 20 45 58 50 45 52 49 4d  is is an EXPERIM
2b60: 45 4e 54 41 4c 20 61 70 69 20 61 6e 64 20 69 73  ENTAL api and is
2b70: 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e   subject to chan
2b80: 67 65 20 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a 2a  ge or removal..*
2b90: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61  /.int sqlite3_va
2ba0: 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65  lue_numeric_type
2bb0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
2bc0: 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d  pVal){.  Mem *pM
2bd0: 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b  em = (Mem*)pVal;
2be0: 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  .  applyNumericA
2bf0: 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a 20  ffinity(pMem);. 
2c00: 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70   storeTypeInfo(p
2c10: 4d 65 6d 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  Mem, 0);.  retur
2c20: 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a  n pMem->type;.}.
2c30: 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20  ./*.** Exported 
2c40: 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79  version of apply
2c50: 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73  Affinity(). This
2c60: 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71   one works on sq
2c70: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a  lite3_value*, .*
2c80: 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e  * not the intern
2c90: 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f  al Mem* type..*/
2ca0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2cb0: 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
2cc0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
2cd0: 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66   *pVal, .  u8 af
2ce0: 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e  finity, .  u8 en
2cf0: 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69  c.){.  applyAffi
2d00: 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c  nity((Mem *)pVal
2d10: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29  , affinity, enc)
2d20: 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
2d30: 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57  TE_DEBUG./*.** W
2d40: 72 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69  rite a nice stri
2d50: 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
2d60: 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  n of the content
2d70: 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a  s of cell pMem.*
2d80: 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42  * into buffer zB
2d90: 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e  uf, length nBuf.
2da0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2db0: 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69  VdbeMemPrettyPri
2dc0: 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68  nt(Mem *pMem, ch
2dd0: 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61  ar *zBuf){.  cha
2de0: 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a  r *zCsr = zBuf;.
2df0: 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e    int f = pMem->
2e00: 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63  flags;..  static
2e10: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e   const char *con
2e20: 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20  st encnames[] = 
2e30: 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22  {"(X)", "(8)", "
2e40: 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29  (16LE)", "(16BE)
2e50: 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d  "};..  if( f&MEM
2e60: 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74  _Blob ){.    int
2e70: 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a   i;.    char c;.
2e80: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
2e90: 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  Dyn ){.      c =
2ea0: 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'z';.      asse
2eb0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
2ec0: 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  atic|MEM_Ephem))
2ed0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
2ee0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61   if( f & MEM_Sta
2ef0: 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  tic ){.      c =
2f00: 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65   't';.      asse
2f10: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79  rt( (f & (MEM_Dy
2f20: 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30  n|MEM_Ephem))==0
2f30: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   );.    }else if
2f40: 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20  ( f & MEM_Ephem 
2f50: 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27  ){.      c = 'e'
2f60: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2f70: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
2f80: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
2f90: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2fa0: 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d    c = 's';.    }
2fb0: 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ..    sqlite3_sn
2fc0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
2fd0: 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20  , "%c", c);.    
2fe0: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
2ff0: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3000: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3010: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
3020: 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a  %d[", pMem->n);.
3030: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3040: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3050: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  );.    for(i=0; 
3060: 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e  i<16 && i<pMem->
3070: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73  n; i++){.      s
3080: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3090: 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58  100, zCsr, "%02X
30a0: 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a  ", ((int)pMem->z
30b0: 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20  [i] & 0xFF));.  
30c0: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
30d0: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
30e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72  );.    }.    for
30f0: 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c  (i=0; i<16 && i<
3100: 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20  pMem->n; i++){. 
3110: 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d       char z = pM
3120: 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20  em->z[i];.      
3130: 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32  if( z<32 || z>12
3140: 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e  6 ) *zCsr++ = '.
3150: 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a  ';.      else *z
3160: 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d  Csr++ = z;.    }
3170: 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ..    sqlite3_sn
3180: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3190: 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65  , "]%s", encname
31a0: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
31b0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
31c0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
31d0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
31e0: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
31f0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3200: 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a  (100, zCsr,"+%dz
3210: 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29  ",pMem->u.nZero)
3220: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3230: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3240: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3250: 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20   *zCsr = '\0';. 
3260: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3270: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e  EM_Str ){.    in
3280: 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66  t j, k;.    zBuf
3290: 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69  [0] = ' ';.    i
32a0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
32b0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
32c0: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
32d0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
32e0: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
32f0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3300: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3310: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42  atic ){.      zB
3320: 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20  uf[1] = 't';.   
3330: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3340: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3350: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3360: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3370: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
3380: 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20  zBuf[1] = 'e';. 
3390: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
33a0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
33b0: 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Dyn))==0 );.  
33c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
33d0: 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20  Buf[1] = 's';.  
33e0: 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20    }.    k = 2;. 
33f0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3400: 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b  ntf(100, &zBuf[k
3410: 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e  ], "%d", pMem->n
3420: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3430: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3440: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3450: 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20  k++] = '[';.    
3460: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26  for(j=0; j<15 &&
3470: 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29   j<pMem->n; j++)
3480: 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70  {.      u8 c = p
3490: 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20  Mem->z[j];.     
34a0: 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20   if( c>=0x20 && 
34b0: 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20  c<0x7f ){.      
34c0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b    zBuf[k++] = c;
34d0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
34e0: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
34f0: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20  = '.';.      }. 
3500: 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b     }.    zBuf[k+
3510: 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71  +] = ']';.    sq
3520: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3530: 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63  00,&zBuf[k], enc
3540: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3550: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3560: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3570: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3580: 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a  k++] = 0;.  }.}.
3590: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
35a0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
35b0: 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75  * Print the valu
35c0: 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20  e of a register 
35d0: 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70  for tracing purp
35e0: 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20  oses:.*/.static 
35f0: 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69  void memTracePri
3600: 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65  nt(FILE *out, Me
3610: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  m *p){.  if( p->
3620: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
3630: 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28   ){.    fprintf(
3640: 6f 75 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20  out, " NULL");. 
3650: 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66   }else if( (p->f
3660: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
3670: 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f  MEM_Str))==(MEM_
3680: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a  Int|MEM_Str) ){.
3690: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
36a0: 20 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e   " si:%lld", p->
36b0: 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  u.i);.  }else if
36c0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
36d0: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69  _Int ){.    fpri
36e0: 6e 74 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c  ntf(out, " i:%ll
36f0: 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66  d", p->u.i);.#if
3700: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3710: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
3720: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3730: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
3740: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3750: 75 74 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ut, " r:%g", p->
3760: 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c  r);.#endif.  }el
3770: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3780: 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a  & MEM_RowSet ){.
3790: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
37a0: 20 22 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20   " (rowset)");. 
37b0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72   }else{.    char
37c0: 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20   zBuf[200];.    
37d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
37e0: 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75  ettyPrint(p, zBu
37f0: 66 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28  f);.    fprintf(
3800: 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66  out, " ");.    f
3810: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22  printf(out, "%s"
3820: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73  , zBuf);.  }.}.s
3830: 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69 73  tatic void regis
3840: 74 65 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f  terTrace(FILE *o
3850: 75 74 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65  ut, int iReg, Me
3860: 6d 20 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66  m *p){.  fprintf
3870: 28 6f 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d  (out, "REG[%d] =
3880: 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d   ", iReg);.  mem
3890: 54 72 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20  TracePrint(out, 
38a0: 70 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75  p);.  fprintf(ou
38b0: 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64  t, "\n");.}.#end
38c0: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
38d0: 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e  E_DEBUG.#  defin
38e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
38f0: 28 52 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63  (R,M) if(p->trac
3900: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
3910: 70 2d 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65  p->trace,R,M).#e
3920: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45  lse.#  define RE
3930: 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d  GISTER_TRACE(R,M
3940: 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65  ).#endif...#ifde
3950: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a  f VDBE_PROFILE..
3960: 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20  /* .** hwtime.h 
3970: 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20  contains inline 
3980: 61 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66  assembler code f
3990: 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  or implementing 
39a0: 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d  .** high-perform
39b0: 61 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74  ance timing rout
39c0: 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  ines..*/.#includ
39d0: 65 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65  e "hwtime.h"..#e
39e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
39f0: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3a00: 55 50 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65  UPT macro define
3a10: 64 20 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20  d here looks to 
3a20: 73 65 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71  see if the.** sq
3a30: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
3a40: 29 20 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65  ) routine has be
3a50: 65 6e 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69  en called.  If i
3a60: 74 20 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e  t has been, then
3a70: 0a 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f  .** processing o
3a80: 66 20 74 68 65 20 56 44 42 45 20 70 72 6f 67 72  f the VDBE progr
3a90: 61 6d 20 69 73 20 69 6e 74 65 72 72 75 70 74 65  am is interrupte
3aa0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  d..**.** This ma
3ab0: 63 72 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65  cro added to eve
3ac0: 72 79 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ry instruction t
3ad0: 68 61 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20  hat does a jump 
3ae0: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69  in order to.** i
3af0: 6d 70 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e  mplement a loop.
3b00: 20 20 54 68 69 73 20 74 65 73 74 20 75 73 65 64    This test used
3b10: 20 74 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20   to be on every 
3b20: 73 69 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69  single instructi
3b30: 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20  on,.** but that 
3b40: 6d 65 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65  meant we more te
3b50: 73 74 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65  sting that we ne
3b60: 65 64 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74  eded.  By only t
3b70: 65 73 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c  esting the.** fl
3b80: 61 67 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72  ag on jump instr
3b90: 75 63 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20  uctions, we get 
3ba0: 61 20 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20  a (small) speed 
3bb0: 69 6d 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a  improvement..*/.
3bc0: 23 64 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f  #define CHECK_FO
3bd0: 52 5f 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20  R_INTERRUPT \.  
3be0: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
3bf0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
3c00: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
3c10: 74 65 72 72 75 70 74 3b 0a 0a 23 69 66 64 65 66  terrupt;..#ifdef
3c20: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 73 74   SQLITE_DEBUG.st
3c30: 61 74 69 63 20 69 6e 74 20 66 69 6c 65 45 78 69  atic int fileExi
3c40: 73 74 73 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  sts(sqlite3 *db,
3c50: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
3c60: 6c 65 29 7b 0a 20 20 69 6e 74 20 72 65 73 20 3d  le){.  int res =
3c70: 20 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   0;.  int rc = S
3c80: 51 4c 49 54 45 5f 4f 4b 3b 0a 23 69 66 64 65 66  QLITE_OK;.#ifdef
3c90: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 2f   SQLITE_TEST.  /
3ca0: 2a 20 49 66 20 77 65 20 61 72 65 20 63 75 72 72  * If we are curr
3cb0: 65 6e 74 6c 79 20 74 65 73 74 69 6e 67 20 49 4f  ently testing IO
3cc0: 20 65 72 72 6f 72 73 2c 20 74 68 65 6e 20 64 6f   errors, then do
3cd0: 20 6e 6f 74 20 63 61 6c 6c 20 4f 73 41 63 63 65   not call OsAcce
3ce0: 73 73 28 29 20 74 6f 0a 20 20 2a 2a 20 74 65 73  ss() to.  ** tes
3cf0: 74 20 66 6f 72 20 74 68 65 20 70 72 65 73 65 6e  t for the presen
3d00: 63 65 20 6f 66 20 7a 46 69 6c 65 2e 20 54 68 69  ce of zFile. Thi
3d10: 73 20 69 73 20 62 65 63 61 75 73 65 20 61 6e 79  s is because any
3d20: 20 49 4f 20 65 72 72 6f 72 20 74 68 61 74 0a 20   IO error that. 
3d30: 20 2a 2a 20 6f 63 63 75 72 73 20 68 65 72 65 20   ** occurs here 
3d40: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 70 6f  will not be repo
3d50: 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68  rted, causing th
3d60: 65 20 74 65 73 74 20 74 6f 20 66 61 69 6c 2e 0a  e test to fail..
3d70: 20 20 2a 2f 0a 20 20 65 78 74 65 72 6e 20 69 6e    */.  extern in
3d80: 74 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72  t sqlite3_io_err
3d90: 6f 72 5f 70 65 6e 64 69 6e 67 3b 0a 20 20 69 66  or_pending;.  if
3da0: 28 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72  ( sqlite3_io_err
3db0: 6f 72 5f 70 65 6e 64 69 6e 67 3c 3d 30 20 29 0a  or_pending<=0 ).
3dc0: 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20  #endif.    rc = 
3dd0: 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28  sqlite3OsAccess(
3de0: 64 62 2d 3e 70 56 66 73 2c 20 7a 46 69 6c 65 2c  db->pVfs, zFile,
3df0: 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 45   SQLITE_ACCESS_E
3e00: 58 49 53 54 53 2c 20 26 72 65 73 29 3b 0a 20 20  XISTS, &res);.  
3e10: 72 65 74 75 72 6e 20 28 72 65 73 20 26 26 20 72  return (res && r
3e20: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d  c==SQLITE_OK);.}
3e30: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
3e40: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
3e50: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
3e60: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
3e70: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
3e80: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
3e90: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
3ea0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
3eb0: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
3ec0: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
3ed0: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
3ee0: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
3ef0: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
3f00: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
3f10: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
3f20: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
3f30: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
3f40: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
3f50: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
3f60: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
3f70: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
3f80: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
3f90: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
3fa0: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
3fb0: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
3fc0: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
3fd0: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
3fe0: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
3ff0: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
4000: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
4010: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
4020: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
4030: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
4040: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
4050: 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63  * Execute as muc
4060: 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67  h of a VDBE prog
4070: 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68  ram as we can th
4080: 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a  en return..**.**
4090: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
40a0: 52 65 61 64 79 28 29 20 6d 75 73 74 20 62 65 20  Ready() must be 
40b0: 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68  called before th
40c0: 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  is routine in or
40d0: 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20  der to.** close 
40e0: 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68  the program with
40f0: 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74   a final OP_Halt
4100: 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74   and to set up t
4110: 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20  he callbacks.** 
4120: 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65  and the error me
4130: 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a  ssage pointer..*
4140: 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20  *.** Whenever a 
4150: 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61  row or result da
4160: 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  ta is available,
4170: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
4180: 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76  ll either.** inv
4190: 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20 63  oke the result c
41a0: 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72  allback (if ther
41b0: 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74  e is one) or ret
41c0: 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  urn with.** SQLI
41d0: 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66  TE_ROW..**.** If
41e0: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
41f0: 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f  ade to open a lo
4200: 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20 74  cked database, t
4210: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
4220: 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20  .** will either 
4230: 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20  invoke the busy 
4240: 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65  callback (if the
4250: 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74  re is one) or it
4260: 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20   will.** return 
4270: 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a  SQLITE_BUSY..**.
4280: 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f  ** If an error o
4290: 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20  ccurs, an error 
42a0: 6d 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74  message is writt
42b0: 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74  en to memory obt
42c0: 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71  ained.** from sq
42d0: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61  lite3_malloc() a
42e0: 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73  nd p->zErrMsg is
42f0: 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74   made to point t
4300: 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a  o that memory..*
4310: 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65  * The error code
4320: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d   is stored in p-
4330: 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75  >rc and this rou
4340: 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c  tine returns SQL
4350: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
4360: 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b   If the callback
4370: 20 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f   ever returns no
4380: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
4390: 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a   program exits.*
43a0: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  * immediately.  
43b0: 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f  There will be no
43c0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62   error message b
43d0: 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65  ut the p->rc fie
43e0: 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  ld is.** set to 
43f0: 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64  SQLITE_ABORT and
4400: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
4410: 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ll return SQLITE
4420: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20  _ERROR..**.** A 
4430: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
4440: 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73 20 70  n error causes p
4450: 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20 74  ->rc to be set t
4460: 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61  o SQLITE_NOMEM a
4470: 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69  nd this.** routi
4480: 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c  ne to return SQL
4490: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
44a0: 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72 72   Other fatal err
44b0: 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ors return SQLIT
44c0: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41  E_ERROR..**.** A
44d0: 66 74 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e  fter this routin
44e0: 65 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  e has finished, 
44f0: 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c  sqlite3VdbeFinal
4500: 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a  ize() should be.
4510: 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e  ** used to clean
4520: 20 75 70 20 74 68 65 20 6d 65 73 73 20 74 68 61   up the mess tha
4530: 74 20 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e  t was left behin
4540: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
4550: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
4560: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
4570: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
4580: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  DBE */.){.  int 
4590: 70 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pc;             
45a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72         /* The pr
45b0: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f  ogram counter */
45c0: 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20  .  Op *pOp;     
45d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
45e0: 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69   Current operati
45f0: 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d  on */.  int rc =
4600: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4610: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4620: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4630: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4640: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4650: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 65 6e  abase */.  u8 en
4660: 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29  coding = ENC(db)
4670: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  ;     /* The dat
4680: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a  abase encoding *
4690: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
46a0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
46b0: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
46c0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
46d0: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
46e0: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
46f0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4700: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4710: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4720: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4730: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4740: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4750: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4760: 2a 2f 0a 20 20 75 38 20 6f 70 50 72 6f 70 65 72  */.  u8 opProper
4770: 74 79 3b 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61  ty;.  int iCompa
4780: 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  re = 0;         
4790: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61   /* Result of la
47a0: 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  st OP_Compare op
47b0: 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  eration */.  int
47c0: 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20   *aPermute = 0; 
47d0: 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75          /* Permu
47e0: 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e  tation of column
47f0: 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65  s for OP_Compare
4800: 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f   */.#ifdef VDBE_
4810: 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74  PROFILE.  u64 st
4820: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
4830: 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63       /* CPU cloc
4840: 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74  k count at start
4850: 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20   of opcode */.  
4860: 69 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20  int origPc;     
4870: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72             /* Pr
4880: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74  ogram counter at
4890: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
48a0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
48b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
48c0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
48d0: 0a 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73  .  int nProgress
48e0: 4f 70 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  Ops = 0;      /*
48f0: 20 4f 70 63 6f 64 65 73 20 65 78 65 63 75 74 65   Opcodes execute
4900: 64 20 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73  d since progress
4910: 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65   callback. */.#e
4920: 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45  ndif.  /*** INSE
4930: 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48  RT STACK UNION H
4940: 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65  ERE ***/..  asse
4950: 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44  rt( p->magic==VD
4960: 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20  BE_MAGIC_RUN ); 
4970: 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70   /* sqlite3_step
4980: 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73  () verifies this
4990: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
49a0: 2d 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f  ->magic==SQLITE_
49b0: 4d 41 47 49 43 5f 42 55 53 59 20 29 3b 0a 20 20  MAGIC_BUSY );.  
49c0: 73 71 6c 69 74 65 33 56 64 62 65 4d 75 74 65 78  sqlite3VdbeMutex
49d0: 41 72 72 61 79 45 6e 74 65 72 28 70 29 3b 0a 20  ArrayEnter(p);. 
49e0: 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
49f0: 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
4a00: 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
4a10: 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e  if a malloc() in
4a20: 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73  side a call to s
4a30: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4a40: 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73  xt() or.    ** s
4a50: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4a60: 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20  xt16() failed.  
4a70: 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  */.    goto no_m
4a80: 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  em;.  }.  assert
4a90: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4aa0: 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c  OK || p->rc==SQL
4ab0: 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 70 2d  ITE_BUSY );.  p-
4ac0: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  >rc = SQLITE_OK;
4ad0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
4ae0: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
4af0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
4b00: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
4b10: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
4b20: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
4b30: 55 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  UPT;.  sqlite3Vd
4b40: 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b  beIOTraceSql(p);
4b50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4b60: 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65  EBUG.  sqlite3Be
4b70: 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
4b80: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d  );.  if( p->pc==
4b90: 30 20 0a 20 20 20 26 26 20 28 28 70 2d 3e 64 62  0 .   && ((p->db
4ba0: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4bb0: 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 20 7c 7c  _VdbeListing) ||
4bc0: 20 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c 20   fileExists(db, 
4bd0: 22 76 64 62 65 5f 65 78 70 6c 61 69 6e 22 29 29  "vdbe_explain"))
4be0: 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  .  ){.    int i;
4bf0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42  .    printf("VDB
4c00: 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e  E Program Listin
4c10: 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69  g:\n");.    sqli
4c20: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4c30: 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  p);.    for(i=0;
4c40: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4c50: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4c60: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
4c70: 2c 20 69 2c 20 26 70 2d 3e 61 4f 70 5b 69 5d 29  , i, &p->aOp[i])
4c80: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
4c90: 28 20 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c  ( fileExists(db,
4ca0: 20 22 76 64 62 65 5f 74 72 61 63 65 22 29 20 29   "vdbe_trace") )
4cb0: 7b 0a 20 20 20 20 70 2d 3e 74 72 61 63 65 20 3d  {.    p->trace =
4cc0: 20 73 74 64 6f 75 74 3b 0a 20 20 7d 0a 20 20 73   stdout;.  }.  s
4cd0: 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
4ce0: 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a  alloc();.#endif.
4cf0: 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20    for(pc=p->pc; 
4d00: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70  rc==SQLITE_OK; p
4d10: 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  c++){.    assert
4d20: 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d  ( pc>=0 && pc<p-
4d30: 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28 20  >nOp );.    if( 
4d40: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
4d50: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
4d60: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
4d70: 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63 20 3d  ILE.    origPc =
4d80: 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74 20 3d   pc;.    start =
4d90: 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
4da0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 4f 70  ;.#endif.    pOp
4db0: 20 3d 20 26 70 2d 3e 61 4f 70 5b 70 63 5d 3b 0a   = &p->aOp[pc];.
4dc0: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c  .    /* Only all
4dd0: 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51  ow tracing if SQ
4de0: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65  LITE_DEBUG is de
4df0: 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
4e00: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4e10: 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61  G.    if( p->tra
4e20: 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ce ){.      if( 
4e30: 70 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  pc==0 ){.       
4e40: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 45 78   printf("VDBE Ex
4e50: 65 63 75 74 69 6f 6e 20 54 72 61 63 65 3a 5c 6e  ecution Trace:\n
4e60: 22 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  ");.        sqli
4e70: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4e80: 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p);.      }.    
4e90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4ea0: 6e 74 4f 70 28 70 2d 3e 74 72 61 63 65 2c 20 70  ntOp(p->trace, p
4eb0: 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 20  c, pOp);.    }. 
4ec0: 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 3d     if( p->trace=
4ed0: 3d 30 20 26 26 20 70 63 3d 3d 30 20 29 7b 0a 20  =0 && pc==0 ){. 
4ee0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69       sqlite3Begi
4ef0: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
4f00: 0a 20 20 20 20 20 20 69 66 28 20 66 69 6c 65 45  .      if( fileE
4f10: 78 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f  xists(db, "vdbe_
4f20: 73 71 6c 74 72 61 63 65 22 29 20 29 7b 0a 20 20  sqltrace") ){.  
4f30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4f40: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4f50: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
4f60: 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
4f70: 6f 63 28 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  oc();.    }.#end
4f80: 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f  if.      ..    /
4f90: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4fa0: 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d  f we need to sim
4fb0: 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75  ulate an interru
4fc0: 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68  pt.  This only h
4fd0: 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66  appens.    ** if
4fe0: 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69   we have a speci
4ff0: 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20  al test build.. 
5000: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
5010: 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28  ITE_TEST.    if(
5020: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5030: 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20  pt_count>0 ){.  
5040: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
5050: 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20  rrupt_count--;. 
5060: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
5070: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
5080: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
5090: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
50a0: 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (db);.      }.  
50b0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e    }.#endif..#ifn
50c0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
50d0: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
50e0: 4b 0a 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68  K.    /* Call th
50f0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
5100: 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
5110: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
5120: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
5130: 20 20 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f      ** of VDBE o
5140: 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65  ps have been exe
5150: 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69  cuted (either si
5160: 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74  nce this invocat
5170: 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 73 71  ion of.    ** sq
5180: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
5190: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
51a0: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
51b0: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
51c0: 6c 65 64 29 2e 0a 20 20 20 20 2a 2a 20 49 66 20  led)..    ** If 
51d0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
51e0: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
51f0: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
5200: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
5210: 20 77 69 74 68 0a 20 20 20 20 2a 2a 20 61 20 72   with.    ** a r
5220: 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54  eturn code SQLIT
5230: 45 5f 41 42 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a  E_ABORT..    */.
5240: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
5250: 67 72 65 73 73 20 29 7b 0a 20 20 20 20 20 20 69  gress ){.      i
5260: 66 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  f( db->nProgress
5270: 4f 70 73 3d 3d 6e 50 72 6f 67 72 65 73 73 4f 70  Ops==nProgressOp
5280: 73 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  s ){.        int
5290: 20 70 72 63 3b 0a 20 20 20 20 20 20 20 20 69 66   prc;.        if
52a0: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
52b0: 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
52c0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
52d0: 65 3b 0a 20 20 20 20 20 20 20 20 70 72 63 20 3d  e;.        prc =
52e0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
52f0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b  ->pProgressArg);
5300: 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
5310: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
5320: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
5330: 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20  e_to_misuse;.   
5340: 20 20 20 20 20 69 66 28 20 70 72 63 21 3d 30 20       if( prc!=0 
5350: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
5360: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
5370: 50 54 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  PT;.          go
5380: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
5390: 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  lt;.        }.  
53a0: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f        nProgressO
53b0: 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ps = 0;.      }.
53c0: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f        nProgressO
53d0: 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ps++;.    }.#end
53e0: 69 66 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 63 6f  if..    /* Do co
53f0: 6d 6d 6f 6e 20 73 65 74 75 70 20 70 72 6f 63 65  mmon setup proce
5400: 73 73 69 6e 67 20 66 6f 72 20 61 6e 79 20 6f 70  ssing for any op
5410: 63 6f 64 65 20 74 68 61 74 20 69 73 20 6d 61 72  code that is mar
5420: 6b 65 64 0a 20 20 20 20 2a 2a 20 77 69 74 68 20  ked.    ** with 
5430: 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c  the "out2-prerel
5440: 65 61 73 65 22 20 74 61 67 2e 20 20 53 75 63 68  ease" tag.  Such
5450: 20 6f 70 63 6f 64 65 73 20 68 61 76 65 20 61 20   opcodes have a 
5460: 73 69 6e 67 6c 65 0a 20 20 20 20 2a 2a 20 6f 75  single.    ** ou
5470: 74 70 75 74 20 77 68 69 63 68 20 69 73 20 73 70  tput which is sp
5480: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 50  ecified by the P
5490: 32 20 70 61 72 61 6d 65 74 65 72 2e 20 20 54 68  2 parameter.  Th
54a0: 65 20 50 32 20 72 65 67 69 73 74 65 72 0a 20 20  e P2 register.  
54b0: 20 20 2a 2a 20 69 73 20 69 6e 69 74 69 61 6c 69    ** is initiali
54c0: 7a 65 64 20 74 6f 20 61 20 4e 55 4c 4c 2e 0a 20  zed to a NULL.. 
54d0: 20 20 20 2a 2f 0a 20 20 20 20 6f 70 50 72 6f 70     */.    opProp
54e0: 65 72 74 79 20 3d 20 6f 70 63 6f 64 65 50 72 6f  erty = opcodePro
54f0: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
5500: 65 5d 3b 0a 20 20 20 20 69 66 28 20 28 6f 70 50  e];.    if( (opP
5510: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5520: 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 29  OUT2_PRERELEASE)
5530: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5540: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5550: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5560: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
5570: 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d   );.      pOut =
5580: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
5590: 32 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  2];.      sqlite
55a0: 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45  3VdbeMemReleaseE
55b0: 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20  xternal(pOut);. 
55c0: 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
55d0: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
55e0: 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a     pOut->n = 0;.
55f0: 20 20 20 20 7d 65 6c 73 65 0a 20 0a 20 20 20 20      }else. .    
5600: 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74  /* Do common set
5610: 75 70 20 66 6f 72 20 6f 70 63 6f 64 65 73 20 6d  up for opcodes m
5620: 61 72 6b 65 64 20 77 69 74 68 20 6f 6e 65 20 6f  arked with one o
5630: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
5640: 20 20 20 20 2a 2a 20 63 6f 6d 62 69 6e 61 74 69      ** combinati
5650: 6f 6e 73 20 6f 66 20 70 72 6f 70 65 72 74 69 65  ons of propertie
5660: 73 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  s..    **.    **
5670: 20 20 20 20 20 20 20 20 20 20 20 69 6e 31 0a 20             in1. 
5680: 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20     **           
5690: 69 6e 31 20 69 6e 32 0a 20 20 20 20 2a 2a 20 20  in1 in2.    **  
56a0: 20 20 20 20 20 20 20 20 20 69 6e 31 20 69 6e 32           in1 in2
56b0: 20 6f 75 74 33 0a 20 20 20 20 2a 2a 20 20 20 20   out3.    **    
56c0: 20 20 20 20 20 20 20 69 6e 31 20 69 6e 33 0a 20         in1 in3. 
56d0: 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 56 61 72     **.    ** Var
56e0: 69 61 62 6c 65 73 20 70 49 6e 31 2c 20 70 49 6e  iables pIn1, pIn
56f0: 32 2c 20 61 6e 64 20 70 49 6e 33 20 61 72 65 20  2, and pIn3 are 
5700: 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f  made to point to
5710: 20 61 70 70 72 6f 70 72 69 61 74 65 0a 20 20 20   appropriate.   
5720: 20 2a 2a 20 72 65 67 69 73 74 65 72 73 20 66 6f   ** registers fo
5730: 72 20 69 6e 70 75 74 73 2e 20 20 56 61 72 69 61  r inputs.  Varia
5740: 62 6c 65 20 70 4f 75 74 20 70 6f 69 6e 74 73 20  ble pOut points 
5750: 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  to the output re
5760: 67 69 73 74 65 72 2e 0a 20 20 20 20 2a 2f 0a 20  gister..    */. 
5770: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
5780: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21  ty & OPFLG_IN1)!
5790: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
57a0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
57b0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
57c0: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p1<=p->nMem 
57d0: 29 3b 0a 20 20 20 20 20 20 70 49 6e 31 20 3d 20  );.      pIn1 = 
57e0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
57f0: 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ];.      REGISTE
5800: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
5810: 20 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 69 66   pIn1);.      if
5820: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5830: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5840: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5850: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
5860: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5870: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p2<=p->nMem )
5880: 3b 0a 20 20 20 20 20 20 20 20 70 49 6e 32 20 3d  ;.        pIn2 =
5890: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
58a0: 32 5d 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  2];.        REGI
58b0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
58c0: 70 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 20  p2, pIn2);.     
58d0: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
58e0: 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29  ty & OPFLG_OUT3)
58f0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
5900: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5910: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  >0 );.          
5920: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
5930: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5940: 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d        pOut = &p-
5950: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
5960: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5970: 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f  }else if( (opPro
5980: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
5990: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  3)!=0 ){.       
59a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
59b0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
59c0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
59d0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
59e0: 20 20 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65    pIn3 = &p->aMe
59f0: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
5a00: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5a10: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 49 6e 33  CE(pOp->p3, pIn3
5a20: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5a30: 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70  else if( (opProp
5a40: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32  erty & OPFLG_IN2
5a50: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5a60: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5a70: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5a80: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5a90: 6d 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 32 20  m );.      pIn2 
5aa0: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
5ab0: 70 32 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53  p2];.      REGIS
5ac0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5ad0: 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65  2, pIn2);.    }e
5ae0: 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65  lse if( (opPrope
5af0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  rty & OPFLG_IN3)
5b00: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5b10: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
5b20: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5b30: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
5b40: 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 33 20 3d   );.      pIn3 =
5b50: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
5b60: 33 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54  3];.      REGIST
5b70: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
5b80: 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 7d 0a 0a  , pIn3);.    }..
5b90: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
5ba0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
5bb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5be0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bf0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
5c00: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
5c10: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
5c20: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
5c30: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
5c40: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
5c50: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
5c60: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
5c70: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
5c80: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5c90: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5ca0: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
5cb0: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
5cc0: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
5cd0: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
5ce0: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
5cf0: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
5d00: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
5d10: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
5d20: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
5d30: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
5d40: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
5d50: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
5d60: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
5d70: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5d80: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5d90: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5da0: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
5db0: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
5dc0: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
5dd0: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
5de0: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
5df0: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
5e00: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
5e10: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5e20: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
5e30: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
5e40: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
5e50: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5e60: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5e70: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5e80: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5e90: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5ea0: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5eb0: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5ec0: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5ed0: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5ee0: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5ef0: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5f00: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5f10: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5f20: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
5f30: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
5f40: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
5f50: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
5f60: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
5f70: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
5f80: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5f90: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5fa0: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5fb0: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5fc0: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5fd0: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5fe0: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5ff0: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
6000: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
6010: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
6020: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
6030: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
6040: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
6050: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
6060: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
6070: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
6080: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
6090: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
60a0: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
60b0: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
60c0: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
60d0: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
60e0: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72  n2, in3, out2_pr
60f0: 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20  erelease, out2, 
6100: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
6110: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
6120: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
6130: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
6140: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
6150: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
6160: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
6170: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
6180: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
6190: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
61a0: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
61b0: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
61c0: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
61d0: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
61e0: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
61f0: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
6200: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
6210: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
6220: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
6230: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
6240: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
6250: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
6260: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
6270: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
6280: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
6290: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
62a0: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
62b0: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
62c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6300: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
6310: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
6320: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
6330: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
6340: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
6350: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
6360: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
6370: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
6380: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
6390: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
63a0: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
63b0: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
63c0: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
63e0: 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46  ump */.  CHECK_F
63f0: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
6400: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
6410: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6420: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20   Opcode:  Gosub 
6430: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
6440: 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
6450: 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f  ent address onto
6460: 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
6470: 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  and then jump to
6480: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a   address P2..*/.
6490: 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b  case OP_Gosub: {
64a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
64b0: 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
64c0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
64d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
64e0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49  =p->nMem );.  pI
64f0: 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  n1 = &p->aMem[pO
6500: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6510: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
6520: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
6530: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6540: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d  MEM_Int;.  pIn1-
6550: 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47  >u.i = pc;.  REG
6560: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
6570: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63  >p1, pIn1);.  pc
6580: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
6590: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
65a0: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
65b0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
65c0: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
65d0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
65e0: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
65f0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
6600: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e  /.case OP_Return
6610: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
6620: 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
6630: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
6640: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20  MEM_Int );.  pc 
6650: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
6660: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6670: 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20   Opcode:  Yield 
6680: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
6690: 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61   Swap the progra
66a0: 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74  m counter with t
66b0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
66c0: 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  ster P1..*/.case
66d0: 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20   OP_Yield: {    
66e0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
66f0: 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a  /.  int pcDest;.
6700: 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d    assert( (pIn1-
6710: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
6720: 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  )==0 );.  pIn1->
6730: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6740: 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74  .  pcDest = (int
6750: 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49  )pIn1->u.i;.  pI
6760: 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20  n1->u.i = pc;.  
6770: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
6780: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
6790: 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20   pc = pcDest;.  
67a0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
67b0: 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c  ode:  HaltIfNull
67c0: 20 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a    P1 P2 P3 P4 *.
67d0: 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
67e0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
67f0: 72 20 50 33 2e 20 20 49 66 20 69 73 20 69 73 20  r P3.  If is is 
6800: 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75  NULL then Halt u
6810: 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65  sing.** paramete
6820: 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34  r P1, P2, and P4
6830: 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65   as if this were
6840: 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74   a Halt instruct
6850: 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ion.  If the.** 
6860: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
6870: 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P3 is not NULL
6880: 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74  , then this rout
6890: 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ine is a no-op..
68a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49  */.case OP_HaltI
68b0: 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a  fNull: {      /*
68c0: 20 69 6e 33 20 2a 2f 0a 20 20 69 66 28 20 28 70   in3 */.  if( (p
68d0: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
68e0: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61  _Null)==0 ) brea
68f0: 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
6900: 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c  ough into OP_Hal
6910: 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  t */.}../* Opcod
6920: 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a  e:  Halt P1 P2 *
6930: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74   P4 *.**.** Exit
6940: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41   immediately.  A
6950: 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c  ll open cursors,
6960: 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a   etc are closed.
6970: 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
6980: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
6990: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  e result code re
69a0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
69b0: 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65  3_exec(), sqlite
69c0: 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72  3_reset(),.** or
69d0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
69e0: 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d  e().  For a norm
69f0: 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68  al halt, this sh
6a00: 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f  ould be SQLITE_O
6a10: 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72  K (0)..** For er
6a20: 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20  rors, it can be 
6a30: 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65  some other value
6a40: 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e  .  If P1!=0 then
6a50: 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69   P2 will determi
6a60: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72  ne.** whether or
6a70: 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b   not to rollback
6a80: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
6a90: 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f  nsaction.  Do no
6aa0: 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66  t rollback.** if
6ab0: 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f   P2==OE_Fail. Do
6ac0: 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66   the rollback if
6ad0: 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b   P2==OE_Rollback
6ae0: 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f  .  If P2==OE_Abo
6af0: 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b  rt,.** then back
6b00: 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73   out all changes
6b10: 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72   that have occur
6b20: 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20  red during this 
6b30: 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65  execution of the
6b40: 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f  .** VDBE, but do
6b50: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68   not rollback th
6b60: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a  e transaction. .
6b70: 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
6b80: 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20  ot null then it 
6b90: 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  is an error mess
6ba0: 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a  age string..**.*
6bb0: 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d  * There is an im
6bc0: 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20  plied "Halt 0 0 
6bd0: 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  0" instruction i
6be0: 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76  nserted at the v
6bf0: 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76  ery end of.** ev
6c00: 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f  ery program.  So
6c10: 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65   a jump past the
6c20: 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f   last instructio
6c30: 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  n of the program
6c40: 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20  .** is the same 
6c50: 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c  as executing Hal
6c60: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  t..*/.case OP_Ha
6c70: 6c 74 3a 20 7b 0a 20 20 70 2d 3e 72 63 20 3d 20  lt: {.  p->rc = 
6c80: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 70 63  pOp->p1;.  p->pc
6c90: 20 3d 20 70 63 3b 0a 20 20 70 2d 3e 65 72 72 6f   = pc;.  p->erro
6ca0: 72 41 63 74 69 6f 6e 20 3d 20 70 4f 70 2d 3e 70  rAction = pOp->p
6cb0: 32 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  2;.  if( pOp->p4
6cc0: 2e 7a 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  .z ){.    sqlite
6cd0: 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
6ce0: 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
6cf0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
6d00: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
6d10: 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61  VdbeHalt(p);.  a
6d20: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
6d30: 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51  E_BUSY || rc==SQ
6d40: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 69 66 28  LITE_OK );.  if(
6d50: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
6d60: 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20   ){.    p->rc = 
6d70: 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
6d80: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
6d90: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
6da0: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
6db0: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
6dc0: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
6dd0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
6de0: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
6df0: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62  *.**.** The 32-b
6e00: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
6e10: 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69   P1 is written i
6e20: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
6e30: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
6e40: 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ger: {         /
6e50: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
6e60: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  e */.  pOut->fla
6e70: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6e80: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d  pOut->u.i = pOp-
6e90: 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p1;.  break;.}.
6ea0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36  ./* Opcode: Int6
6eb0: 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  4 * P2 * P4 *.**
6ec0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
6ed0: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
6ee0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
6ef0: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
6f00: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
6f10: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
6f20: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
6f30: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
6f40: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
6f50: 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21  t( pOp->p4.pI64!
6f60: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  =0 );.  pOut->fl
6f70: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6f80: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f   pOut->u.i = *pO
6f90: 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72  p->p4.pI64;.  br
6fa0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6fb0: 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50  e: Real * P2 * P
6fc0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
6fd0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
6fe0: 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70  4-bit floating p
6ff0: 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  oint value..** W
7000: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
7010: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7020: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
7030: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
7040: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c  /* same as TK_FL
7050: 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c  OAT, out2-prerel
7060: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
7070: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c  flags = MEM_Real
7080: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  ;.  assert( !sql
7090: 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e  ite3IsNaN(*pOp->
70a0: 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70  p4.pReal) );.  p
70b0: 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70  Out->r = *pOp->p
70c0: 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b  4.pReal;.  break
70d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
70e0: 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50  String8 * P2 * P
70f0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  4 *.**.** P4 poi
7100: 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72  nts to a nul ter
7110: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
7120: 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64  ring. This opcod
7130: 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64  e is transformed
7140: 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f   .** into an OP_
7150: 53 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74  String before it
7160: 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72   is executed for
7170: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e   the first time.
7180: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
7190: 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ng8: {         /
71a0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52  * same as TK_STR
71b0: 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c  ING, out2-prerel
71c0: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
71d0: 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  ( pOp->p4.z!=0 )
71e0: 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ;.  pOp->opcode 
71f0: 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70  = OP_String;.  p
7200: 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33  Op->p1 = sqlite3
7210: 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34  Strlen30(pOp->p4
7220: 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  .z);..#ifndef SQ
7230: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
7240: 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d    if( encoding!=
7250: 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20  SQLITE_UTF8 ){. 
7260: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
7270: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
7280: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31  t, pOp->p4.z, -1
7290: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  , SQLITE_UTF8, S
72a0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
72b0: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
72c0: 45 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20  E_TOOBIG ) goto 
72d0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28  too_big;.    if(
72e0: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69   SQLITE_OK!=sqli
72f0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
7300: 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
7310: 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  ding) ) goto no_
7320: 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  mem;.    assert(
7330: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d   pOut->zMalloc==
7340: 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61  pOut->z );.    a
7350: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61  ssert( pOut->fla
7360: 67 73 20 26 20 4d 45 4d 5f 44 79 6e 20 29 3b 0a  gs & MEM_Dyn );.
7370: 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f      pOut->zMallo
7380: 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d  c = 0;.    pOut-
7390: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74  >flags |= MEM_St
73a0: 61 74 69 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  atic;.    pOut->
73b0: 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79  flags &= ~MEM_Dy
73c0: 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  n;.    if( pOp->
73d0: 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d  p4type==P4_DYNAM
73e0: 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  IC ){.      sqli
73f0: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f  te3DbFree(db, pO
7400: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a  p->p4.z);.    }.
7410: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
7420: 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20  = P4_DYNAMIC;.  
7430: 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f    pOp->p4.z = pO
7440: 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e  ut->z;.    pOp->
7450: 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20  p1 = pOut->n;.  
7460: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
7470: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
7480: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
7490: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
74a0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
74b0: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
74c0: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
74d0: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
74e0: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
74f0: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20   String P1 P2 * 
7500: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  P4 *.**.** The s
7510: 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f  tring value P4 o
7520: 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74  f length P1 (byt
7530: 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e  es) is stored in
7540: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
7550: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a  .case OP_String:
7560: 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
7570: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7580: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
7590: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
75a0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
75b0: 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
75c0: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
75d0: 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  >z = pOp->p4.z;.
75e0: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d    pOut->n = pOp-
75f0: 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >p1;.  pOut->enc
7600: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
7610: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
7620: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
7630: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7640: 20 4e 75 6c 6c 20 2a 20 50 32 20 2a 20 2a 20 2a   Null * P2 * * *
7650: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e  .**.** Write a N
7660: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
7670: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7680: 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Null: {        
7690: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
76a0: 6c 65 61 73 65 20 2a 2f 0a 20 20 62 72 65 61 6b  lease */.  break
76b0: 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
76c0: 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34   Blob P1 P2 * P4
76d0: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
76e0: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
76f0: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
7700: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
7710: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
7720: 72 20 50 32 2e 20 54 68 69 73 20 69 6e 73 74 72  r P2. This instr
7730: 75 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6f  uction is not co
7740: 64 65 64 20 64 69 72 65 63 74 6c 79 0a 2a 2a 20  ded directly.** 
7750: 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 2e  by the compiler.
7760: 20 49 6e 73 74 65 61 64 2c 20 74 68 65 20 63 6f   Instead, the co
7770: 6d 70 69 6c 65 72 20 6c 61 79 65 72 20 73 70 65  mpiler layer spe
7780: 63 69 66 69 65 73 0a 2a 2a 20 61 6e 20 4f 50 5f  cifies.** an OP_
7790: 48 65 78 42 6c 6f 62 20 6f 70 63 6f 64 65 2c 20  HexBlob opcode, 
77a0: 77 69 74 68 20 74 68 65 20 68 65 78 20 73 74 72  with the hex str
77b0: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
77c0: 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 6c 6f  on of.** the blo
77d0: 62 20 61 73 20 50 34 2e 20 54 68 69 73 20 6f 70  b as P4. This op
77e0: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
77f0: 6d 65 64 20 74 6f 20 61 6e 20 4f 50 5f 42 6c 6f  med to an OP_Blo
7800: 62 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 74  b.** the first t
7810: 69 6d 65 20 69 74 20 69 73 20 65 78 65 63 75 74  ime it is execut
7820: 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  ed..*/.case OP_B
7830: 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  lob: {          
7840: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
7850: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
7860: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d  sert( pOp->p1 <=
7870: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
7880: 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  TH );.  sqlite3V
7890: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
78a0: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f  t, pOp->p4.z, pO
78b0: 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20  p->p1, 0, 0);.  
78c0: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
78d0: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
78e0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
78f0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
7900: 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62  * Opcode: Variab
7910: 6c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  le P1 P2 P3 P4 *
7920: 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  .**.** Transfer 
7930: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f  the values of bo
7940: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 20 50  und parameters P
7950: 31 2e 2e 50 31 2b 50 33 2d 31 20 69 6e 74 6f 20  1..P1+P3-1 into 
7960: 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 50 32 2e  registers.** P2.
7970: 2e 50 32 2b 50 33 2d 31 2e 0a 2a 2a 0a 2a 2a 20  .P2+P3-1..**.** 
7980: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
7990: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
79a0: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
79b0: 20 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31   in P4 and P3==1
79c0: 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  ..** The P4 valu
79d0: 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c  e is used by sql
79e0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
79f0: 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63  ter_name()..*/.c
7a00: 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a  ase OP_Variable:
7a10: 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
7a20: 20 20 20 20 20 20 2f 2a 20 56 61 72 69 61 62 6c        /* Variabl
7a30: 65 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a  e to copy from *
7a40: 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
7a50: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
7a60: 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 20   to copy to */. 
7a70: 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
7a80: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
7a90: 61 6c 75 65 73 20 6c 65 66 74 20 74 6f 20 63 6f  alues left to co
7aa0: 70 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61  py */.  Mem *pVa
7ab0: 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  r;       /* Valu
7ac0: 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72  e being transfer
7ad0: 72 65 64 20 2a 2f 0a 0a 20 20 70 31 20 3d 20 70  red */..  p1 = p
7ae0: 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 70 32  Op->p1 - 1;.  p2
7af0: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 6e 20   = pOp->p2;.  n 
7b00: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
7b10: 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31  ert( p1>=0 && p1
7b20: 2b 6e 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20  +n<=p->nVar );. 
7b30: 20 61 73 73 65 72 74 28 20 70 32 3e 3d 31 20 26   assert( p2>=1 &
7b40: 26 20 70 32 2b 6e 2d 31 3c 3d 70 2d 3e 6e 4d 65  & p2+n-1<=p->nMe
7b50: 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  m );.  assert( p
7b60: 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70  Op->p4.z==0 || p
7b70: 4f 70 2d 3e 70 33 3d 3d 31 20 29 3b 0a 0a 20 20  Op->p3==1 );..  
7b80: 77 68 69 6c 65 28 20 6e 2d 2d 20 3e 20 30 20 29  while( n-- > 0 )
7b90: 7b 0a 20 20 20 20 70 56 61 72 20 3d 20 26 70 2d  {.    pVar = &p-
7ba0: 3e 61 56 61 72 5b 70 31 2b 2b 5d 3b 0a 20 20 20  >aVar[p1++];.   
7bb0: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
7bc0: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
7bd0: 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
7be0: 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20  o_big;.    }.   
7bf0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
7c00: 5b 70 32 2b 2b 5d 3b 0a 20 20 20 20 73 71 6c 69  [p2++];.    sqli
7c10: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
7c20: 65 45 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b  eExternal(pOut);
7c30: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
7c40: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
7c50: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7c60: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
7c70: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
7c80: 63 29 3b 0a 20 20 20 20 55 50 44 41 54 45 5f 4d  c);.    UPDATE_M
7c90: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
7ca0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
7cb0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
7cc0: 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ve P1 P2 P3 * *.
7cd0: 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76  **.** Move the v
7ce0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
7cf0: 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76  r P1..P1+P3-1 ov
7d00: 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  er into.** regis
7d10: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31  ters P2..P2+P3-1
7d20: 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e  .  Registers P1.
7d30: 2e 50 31 2b 50 31 2d 31 20 61 72 65 0a 2a 2a 20  .P1+P1-1 are.** 
7d40: 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e  left holding a N
7d50: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65  ULL.  It is an e
7d60: 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65  rror for registe
7d70: 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e  r ranges.** P1..
7d80: 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e  P1+P3-1 and P2..
7d90: 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c  P2+P3-1 to overl
7da0: 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  ap..*/.case OP_M
7db0: 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ove: {.  char *z
7dc0: 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c  Malloc;   /* Hol
7dd0: 64 69 6e 67 20 76 61 72 69 61 62 6c 65 20 66 6f  ding variable fo
7de0: 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f  r allocated memo
7df0: 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  ry */.  int n;  
7e00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7e10: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
7e20: 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a  left to copy */.
7e30: 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
7e40: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
7e50: 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20  o copy from */. 
7e60: 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
7e70: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
7e80: 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e   copy to */..  n
7e90: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31   = pOp->p3;.  p1
7ea0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
7eb0: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
7ec0: 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e  sert( n>0 && p1>
7ed0: 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61  0 && p2>0 );.  a
7ee0: 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20  ssert( p1+n<=p2 
7ef0: 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a  || p2+n<=p1 );..
7f00: 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65    pIn1 = &p->aMe
7f10: 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  m[p1];.  pOut = 
7f20: 26 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20  &p->aMem[p2];.  
7f30: 77 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20  while( n-- ){.  
7f40: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d    assert( pOut<=
7f50: 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  &p->aMem[p->nMem
7f60: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
7f70: 20 70 49 6e 31 3c 3d 26 70 2d 3e 61 4d 65 6d 5b   pIn1<=&p->aMem[
7f80: 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20  p->nMem] );.    
7f90: 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e  zMalloc = pOut->
7fa0: 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75  zMalloc;.    pOu
7fb0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  t->zMalloc = 0;.
7fc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
7fd0: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e  emMove(pOut, pIn
7fe0: 31 29 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d  1);.    pIn1->zM
7ff0: 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b  alloc = zMalloc;
8000: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
8010: 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b  ACE(p2++, pOut);
8020: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20  .    pIn1++;.   
8030: 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pOut++;.  }.  b
8040: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8050: 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 2a  de: Copy P1 P2 *
8060: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20   * *.**.** Make 
8070: 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  a copy of regist
8080: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
8090: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
80a0: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
80b0: 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79  akes a deep copy
80c0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
80d0: 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69  A duplicate.** i
80e0: 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74  s made of any st
80f0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e  ring or blob con
8100: 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f  stant.  See also
8110: 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61   OP_SCopy..*/.ca
8120: 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 20 20 20  se OP_Copy: {   
8130: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
8140: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8150: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  p->p2>0 );.  ass
8160: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ert( pOp->p2<=p-
8170: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20  >nMem );.  pOut 
8180: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
8190: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
81a0: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
81b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
81c0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
81d0: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
81e0: 0a 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a  .  Deephemeraliz
81f0: 65 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53  e(pOut);.  REGIS
8200: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
8210: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  2, pOut);.  brea
8220: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8230: 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a   SCopy P1 P2 * *
8240: 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20   *.**.** Make a 
8250: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
8260: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
8270: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
8280: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
8290: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61  tion makes a sha
82a0: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65  llow copy of the
82b0: 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20   value.  If the 
82c0: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74  value.** is a st
82d0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68  ring or blob, th
82e0: 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f  en the copy is o
82f0: 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  nly a pointer to
8300: 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
8310: 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68   and hence if th
8320: 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67  e original chang
8330: 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63  es so will the c
8340: 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69  opy..** Worse, i
8350: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69  f the original i
8360: 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74  s deallocated, t
8370: 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20  he copy becomes 
8380: 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73  invalid..** Thus
8390: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73   the program mus
83a0: 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74  t guarantee that
83b0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69   the original wi
83c0: 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a  ll not change.**
83d0: 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65   during the life
83e0: 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79  time of the copy
83f0: 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74  .  Use OP_Copy t
8400: 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74  o make a complet
8410: 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61  e.** copy..*/.ca
8420: 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20  se OP_SCopy: {  
8430: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
8440: 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54   */.  REGISTER_T
8450: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
8460: 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  n1);.  assert( p
8470: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
8480: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70  sert( pOp->p2<=p
8490: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74  ->nMem );.  pOut
84a0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
84b0: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
84c0: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
84d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
84e0: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
84f0: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
8500: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
8510: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
8520: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
8530: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74  * Opcode: Result
8540: 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Row P1 P2 * * *.
8550: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
8560: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
8570: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
8580: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
8590: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
85a0: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
85b0: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
85c0: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
85d0: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
85e0: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
85f0: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
8600: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
8610: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
8620: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
8630: 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20 50  ess to the top P
8640: 31 20 76 61 6c 75 65 73 20 61 73 20 74 68 65 20  1 values as the 
8650: 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a  result.** row..*
8660: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74  /.case OP_Result
8670: 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  Row: {.  Mem *pM
8680: 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61  em;.  int i;.  a
8690: 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f  ssert( p->nResCo
86a0: 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b  lumn==pOp->p2 );
86b0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
86c0: 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p1>0 );.  assert
86d0: 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  ( pOp->p1+pOp->p
86e0: 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  2<=p->nMem+1 );.
86f0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
8700: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
8710: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
8720: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
8730: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
8740: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
8750: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
8760: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
8770: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
8780: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
8790: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
87a0: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
87b0: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
87c0: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
87d0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
87e0: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
87f0: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
8800: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
8810: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
8820: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
8830: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
8840: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
8850: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
8860: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
8870: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
8880: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
8890: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
88a0: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
88b0: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
88c0: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
88d0: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
88e0: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
88f0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
8900: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
8910: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
8920: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
8930: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
8940: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
8950: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8960: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
8970: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
8980: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
8990: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a  ansactions..  **
89a0: 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  .  ** The statem
89b0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
89c0: 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c  is never a top-l
89d0: 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  evel transaction
89e0: 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68  .  Hence.  ** th
89f0: 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62  e RELEASE call b
8a00: 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66  elow can never f
8a10: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ail..  */.  asse
8a20: 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  rt( p->iStatemen
8a30: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67  t==0 || db->flag
8a40: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
8a50: 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ws );.  rc = sql
8a60: 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61  ite3VdbeCloseSta
8a70: 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f  tement(p, SAVEPO
8a80: 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20  INT_RELEASE);.  
8a90: 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
8aa0: 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20  LITE_OK) ){.    
8ab0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
8ac0: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
8ad0: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
8ae0: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
8af0: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
8b00: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
8b10: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
8b20: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
8b30: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
8b40: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
8b50: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
8b60: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
8b70: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
8b80: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
8b90: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
8ba0: 20 61 73 20 73 69 64 65 20 65 66 66 65 63 74 2e   as side effect.
8bb0: 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70  .  */.  pMem = p
8bc0: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26  ->pResultSet = &
8bd0: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
8be0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
8bf0: 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20  Op->p2; i++){.  
8c00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8c10: 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d  NulTerminate(&pM
8c20: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 74 6f 72  em[i]);.    stor
8c30: 65 54 79 70 65 49 6e 66 6f 28 26 70 4d 65 6d 5b  eTypeInfo(&pMem[
8c40: 69 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  i], encoding);. 
8c50: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
8c60: 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d  E(pOp->p1+i, &pM
8c70: 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66  em[i]);.  }.  if
8c80: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
8c90: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
8ca0: 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53  ;..  /* Return S
8cb0: 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20  QLITE_ROW.  */. 
8cc0: 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b   p->pc = pc + 1;
8cd0: 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52  .  rc = SQLITE_R
8ce0: 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  OW;.  goto vdbe_
8cf0: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
8d00: 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20  code: Concat P1 
8d10: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
8d20: 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20  Add the text in 
8d30: 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f  register P1 onto
8d40: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
8d50: 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73  text in.** regis
8d60: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
8d70: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
8d80: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
8d90: 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20  f either the P1 
8da0: 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e  or P2 text are N
8db0: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e  ULL then store N
8dc0: 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a  ULL in P3..**.**
8dd0: 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31     P3 = P2 || P1
8de0: 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
8df0: 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20  egal for P1 and 
8e00: 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d  P3 to be the sam
8e10: 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65  e register. Some
8e20: 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20  times,.** if P3 
8e30: 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  is the same regi
8e40: 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20  ster as P2, the 
8e50: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
8e60: 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f  s able.** to avo
8e70: 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a  id a memcpy()..*
8e80: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74  /.case OP_Concat
8e90: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
8ea0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43   same as TK_CONC
8eb0: 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AT, in1, in2, ou
8ec0: 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  t3 */.  i64 nByt
8ed0: 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 49  e;..  assert( pI
8ee0: 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66  n1!=pOut );.  if
8ef0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
8f00: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
8f10: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
8f20: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
8f30: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
8f40: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66   break;.  }.  if
8f50: 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  ( ExpandBlob(pIn
8f60: 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62  1) || ExpandBlob
8f70: 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f  (pIn2) ) goto no
8f80: 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66  _mem;.  Stringif
8f90: 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
8fa0: 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  );.  Stringify(p
8fb0: 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In2, encoding);.
8fc0: 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e    nByte = pIn1->
8fd0: 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69  n + pIn2->n;.  i
8fe0: 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69  f( nByte>db->aLi
8ff0: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
9000: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
9010: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
9020: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
9030: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72  ag(pOut, MEM_Str
9040: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
9050: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
9060: 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20  , (int)nByte+2, 
9070: 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20  pOut==pIn2) ){. 
9080: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
9090: 20 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d    }.  if( pOut!=
90a0: 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63  pIn2 ){.    memc
90b0: 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32  py(pOut->z, pIn2
90c0: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20  ->z, pIn2->n);. 
90d0: 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75   }.  memcpy(&pOu
90e0: 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70  t->z[pIn2->n], p
90f0: 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29  In1->z, pIn1->n)
9100: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
9110: 65 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  e] = 0;.  pOut->
9120: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
9130: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
9140: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
9150: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
9160: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
9170: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
9180: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
9190: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
91a0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
91b0: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
91c0: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61  **.** Add the va
91d0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
91e0: 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
91f0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9200: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
9210: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
9220: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
9230: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
9240: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
9250: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
9260: 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31  ode: Multiply P1
9270: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
9280: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
9290: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
92a0: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
92b0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
92c0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
92d0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
92e0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
92f0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
9300: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
9310: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
9320: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
9330: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9340: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
9350: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
9360: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
9370: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9380: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
9390: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
93a0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
93b0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
93c0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
93d0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
93e0: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
93f0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9400: 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76  .** Divide the v
9410: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
9420: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
9430: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
9440: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
9450: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
9460: 74 65 72 20 50 33 2e 20 20 49 66 20 74 68 65 20  ter P3.  If the 
9470: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
9480: 72 20 50 32 0a 2a 2a 20 69 73 20 7a 65 72 6f 2c  r P2.** is zero,
9490: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
94a0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20   is NULL..** If 
94b0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
94c0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
94d0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
94e0: 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65  Opcode: Remainde
94f0: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
9500: 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65  *.** Compute the
9510: 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72   remainder after
9520: 20 69 6e 74 65 67 65 72 20 64 69 76 69 73 69 6f   integer divisio
9530: 6e 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20 69  n of the value i
9540: 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  n.** register P1
9550: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
9560: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
9570: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
9580: 74 20 69 6e 20 50 33 2e 20 0a 2a 2a 20 49 66 20  t in P3. .** If 
9590: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
95a0: 69 73 74 65 72 20 50 32 20 69 73 20 7a 65 72 6f  ister P2 is zero
95b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
95c0: 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65  ULL..** If eithe
95d0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
95e0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
95f0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
9600: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20  P_Add:          
9610: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9620: 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31   as TK_PLUS, in1
9630: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
9640: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9660: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55   same as TK_MINU
9670: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
9680: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c  3 */.case OP_Mul
9690: 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20  tiply:          
96a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
96b0: 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32  K_STAR, in1, in2
96c0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
96d0: 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20  P_Divide:       
96e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
96f0: 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e   as TK_SLASH, in
9700: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
9710: 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65  case OP_Remainde
9720: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  r: {           /
9730: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d  * same as TK_REM
9740: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9750: 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b   */.  int flags;
9760: 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65        /* Combine
9770: 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72  d MEM_* flags fr
9780: 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a  om both inputs *
9790: 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20  /.  i64 iA;     
97a0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
97b0: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
97c0: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42  rand */.  i64 iB
97d0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
97e0: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69  eger value of ri
97f0: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
9800: 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20   double rA;     
9810: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
9820: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
9830: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20  /.  double rB;  
9840: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
9850: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
9860: 6e 64 20 2a 2f 0a 0a 20 20 61 70 70 6c 79 4e 75  nd */..  applyNu
9870: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
9880: 6e 31 29 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65  n1);.  applyNume
9890: 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 32  ricAffinity(pIn2
98a0: 29 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  );.  flags = pIn
98b0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
98c0: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
98d0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
98e0: 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  !=0 ) goto arith
98f0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9900: 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e  null;.  if( (pIn
9910: 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32 2d  1->flags & pIn2-
9920: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
9930: 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20  )==MEM_Int ){.  
9940: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
9950: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
9960: 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63 68  >u.i;.    switch
9970: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
9980: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
9990: 64 64 3a 20 20 20 20 20 20 20 20 20 69 42 20 2b  dd:         iB +
99a0: 3d 20 69 41 3b 20 20 20 20 20 20 20 62 72 65 61  = iA;       brea
99b0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
99c0: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 69 42  _Subtract:    iB
99d0: 20 2d 3d 20 69 41 3b 20 20 20 20 20 20 20 62 72   -= iA;       br
99e0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
99f0: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
9a00: 69 42 20 2a 3d 20 69 41 3b 20 20 20 20 20 20 20  iB *= iA;       
9a10: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9a20: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20  e OP_Divide: {. 
9a30: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
9a40: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
9a50: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9a60: 6c 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 69  l;.        /* Di
9a70: 76 69 64 69 6e 67 20 74 68 65 20 6c 61 72 67 65  viding the large
9a80: 73 74 20 70 6f 73 73 69 62 6c 65 20 6e 65 67 61  st possible nega
9a90: 74 69 76 65 20 36 34 2d 62 69 74 20 69 6e 74 65  tive 64-bit inte
9aa0: 67 65 72 20 28 31 3c 3c 36 33 29 20 62 79 20 0a  ger (1<<63) by .
9ab0: 20 20 20 20 20 20 20 20 2a 2a 20 2d 31 20 72 65          ** -1 re
9ac0: 74 75 72 6e 73 20 61 6e 20 69 6e 74 65 67 65 72  turns an integer
9ad0: 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 73 74   too large to st
9ae0: 6f 72 65 20 69 6e 20 61 20 36 34 2d 62 69 74 20  ore in a 64-bit 
9af0: 64 61 74 61 2d 74 79 70 65 2e 20 4f 6e 0a 20 20  data-type. On.  
9b00: 20 20 20 20 20 20 2a 2a 20 73 6f 6d 65 20 61 72        ** some ar
9b10: 63 68 69 74 65 63 74 75 72 65 73 2c 20 74 68 65  chitectures, the
9b20: 20 76 61 6c 75 65 20 6f 76 65 72 66 6c 6f 77 73   value overflows
9b30: 20 74 6f 20 28 31 3c 3c 36 33 29 2e 20 4f 6e 20   to (1<<63). On 
9b40: 6f 74 68 65 72 73 2c 0a 20 20 20 20 20 20 20 20  others,.        
9b50: 2a 2a 20 61 20 53 49 47 46 50 45 20 69 73 20 69  ** a SIGFPE is i
9b60: 73 73 75 65 64 2e 20 54 68 65 20 66 6f 6c 6c 6f  ssued. The follo
9b70: 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 6e  wing statement n
9b80: 6f 72 6d 61 6c 69 7a 65 73 20 74 68 69 73 0a 20  ormalizes this. 
9b90: 20 20 20 20 20 20 20 2a 2a 20 62 65 68 61 76 69         ** behavi
9ba0: 6f 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 61  or so that all a
9bb0: 72 63 68 69 74 65 63 74 75 72 65 73 20 62 65 68  rchitectures beh
9bc0: 61 76 65 20 61 73 20 69 66 20 69 6e 74 65 67 65  ave as if intege
9bd0: 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 76  r .        ** ov
9be0: 65 72 66 6c 6f 77 20 6f 63 63 75 72 72 65 64 2e  erflow occurred.
9bf0: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
9c00: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26      if( iA==-1 &
9c10: 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49  & iB==SMALLEST_I
9c20: 4e 54 36 34 20 29 20 69 41 20 3d 20 31 3b 0a 20  NT64 ) iA = 1;. 
9c30: 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b         iB /= iA;
9c40: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
9c50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
9c60: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
9c70: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
9c80: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
9c90: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
9ca0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
9cb0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
9cc0: 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20    iB %= iA;.    
9cd0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9ce0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
9cf0: 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20  t->u.i = iB;.   
9d00: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
9d10: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
9d20: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 41 20    }else{.    rA 
9d30: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
9d40: 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  lValue(pIn1);.  
9d50: 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64    rB = sqlite3Vd
9d60: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32  beRealValue(pIn2
9d70: 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70  );.    switch( p
9d80: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
9d90: 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a      case OP_Add:
9da0: 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72           rB += r
9db0: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
9dc0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
9dd0: 62 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d  btract:    rB -=
9de0: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
9df0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
9e00: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20  Multiply:    rB 
9e10: 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  *= rA;       bre
9e20: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
9e30: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
9e40: 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30      /* (double)0
9e50: 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49   In case of SQLI
9e60: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
9e70: 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20  _POINT... */.   
9e80: 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f       if( rA==(do
9e90: 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72  uble)0 ) goto ar
9ea0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9eb0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
9ec0: 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20   rB /= rA;.     
9ed0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9ee0: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
9ef0: 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20   {.        iA = 
9f00: 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20 20  (i64)rA;.       
9f10: 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a 20   iB = (i64)rB;. 
9f20: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
9f30: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
9f40: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9f50: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
9f60: 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a  A==-1 ) iA = 1;.
9f70: 20 20 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f          rB = (do
9f80: 75 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a  uble)(iB % iA);.
9f90: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
9fa0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
9fb0: 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61   if( sqlite3IsNa
9fc0: 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67  N(rB) ){.      g
9fd0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
9fe0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
9ff0: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72     }.    pOut->r
a000: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
a010: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
a020: 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69  MEM_Real);.    i
a030: 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f  f( (flags & MEM_
a040: 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
a050: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
a060: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
a070: 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  t);.    }.  }.  
a080: 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74  break;..arithmet
a090: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
a0a0: 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  l:.  sqlite3Vdbe
a0b0: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
a0c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
a0d0: 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71   Opcode: CollSeq
a0e0: 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34   * * P4.**.** P4
a0f0: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
a100: 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63   a CollSeq struc
a110: 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63  t. If the next c
a120: 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75  all to a user fu
a130: 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67  nction.** or agg
a140: 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c  regate calls sql
a150: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
a160: 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61  eq(), this colla
a170: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69  tion sequence wi
a180: 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65  ll.** be returne
a190: 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  d. This is used 
a1a0: 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20  by the built-in 
a1b0: 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64  min(), max() and
a1c0: 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e   nullif().** fun
a1d0: 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ctions..**.** Th
a1e0: 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64  e interface used
a1f0: 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
a200: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66  tation of the af
a210: 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e  orementioned fun
a220: 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74  ctions.** to ret
a230: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74  rieve the collat
a240: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74  ion sequence set
a250: 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
a260: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
a270: 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e  .** publicly, on
a280: 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ly to user funct
a290: 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20  ions defined in 
a2a0: 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20  func.c..*/.case 
a2b0: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
a2c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
a2d0: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
a2e0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
a2f0: 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69  * Opcode: Functi
a300: 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
a310: 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61  5.**.** Invoke a
a320: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28   user function (
a330: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
a340: 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74  to a Function st
a350: 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20  ructure that.** 
a360: 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63  defines the func
a370: 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72  tion) with P5 ar
a380: 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72  guments taken fr
a390: 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
a3a0: 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  nd.** successors
a3b0: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
a3c0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73   the function is
a3d0: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
a3e0: 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73  ter P3..** Regis
a3f0: 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20  ter P3 must not 
a400: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75  be one of the fu
a410: 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a  nction inputs..*
a420: 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d  *.** P1 is a 32-
a430: 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69  bit bitmask indi
a440: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
a450: 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d  r not each argum
a460: 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66  ent to the .** f
a470: 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65  unction was dete
a480: 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e  rmined to be con
a490: 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65  stant at compile
a4a0: 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69   time. If the fi
a4b0: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
a4c0: 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65  was constant the
a4d0: 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73  n bit 0 of P1 is
a4e0: 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73   set. This is us
a4f0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a  ed to determine.
a500: 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20  ** whether meta 
a510: 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20  data associated 
a520: 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63  with a user func
a530: 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73  tion argument us
a540: 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74  ing the.** sqlit
a550: 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29  e3_set_auxdata()
a560: 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65   API may be safe
a570: 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69  ly retained unti
a580: 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  l the next.** in
a590: 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  vocation of this
a5a0: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
a5b0: 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70  ee also: AggStep
a5c0: 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f   and AggFinal.*/
a5d0: 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f  .case OP_Functio
a5e0: 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  n: {.  int i;.  
a5f0: 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c  Mem *pArg;.  sql
a600: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78  ite3_context ctx
a610: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
a620: 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74  e **apVal;.  int
a630: 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   n;..  n = pOp->
a640: 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d  p5;.  apVal = p-
a650: 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74  >apArg;.  assert
a660: 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20  ( apVal || n==0 
a670: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  );..  assert( n=
a680: 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30  =0 || (pOp->p2>0
a690: 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70   && pOp->p2+n<=p
a6a0: 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20 61  ->nMem+1) );.  a
a6b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
a6c0: 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
a6d0: 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
a6e0: 20 20 70 41 72 67 20 3d 20 26 70 2d 3e 61 4d 65    pArg = &p->aMe
a6f0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f  m[pOp->p2];.  fo
a700: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
a710: 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 70   pArg++){.    ap
a720: 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20  Val[i] = pArg;. 
a730: 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f     storeTypeInfo
a740: 28 70 41 72 67 2c 20 65 6e 63 6f 64 69 6e 67 29  (pArg, encoding)
a750: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
a760: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 41  RACE(pOp->p2, pA
a770: 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  rg);.  }..  asse
a780: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
a790: 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c 20 70  =P4_FUNCDEF || p
a7a0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
a7b0: 44 42 45 46 55 4e 43 20 29 3b 0a 20 20 69 66 28  DBEFUNC );.  if(
a7c0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
a7d0: 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20 20 20 20  _FUNCDEF ){.    
a7e0: 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
a7f0: 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20 20 63  >p4.pFunc;.    c
a800: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 30  tx.pVdbeFunc = 0
a810: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
a820: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 28  tx.pVdbeFunc = (
a830: 56 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d 3e 70  VdbeFunc*)pOp->p
a840: 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20  4.pVdbeFunc;.   
a850: 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 63 74 78   ctx.pFunc = ctx
a860: 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70 46 75 6e  .pVdbeFunc->pFun
a870: 63 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  c;.  }..  assert
a880: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
a890: 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
a8a0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
a8b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
a8c0: 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d   ctx.s.flags = M
a8d0: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73  EM_Null;.  ctx.s
a8e0: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
a8f0: 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
a900: 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  x.s.zMalloc = 0;
a910: 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
a920: 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
a930: 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
a940: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
a950: 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65  .  ** the pointe
a960: 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e  r to ctx.s so in
a970: 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
a980: 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a  unction can use.
a990: 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79    ** the already
a9a0: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
a9b0: 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
a9c0: 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e  ocating a new on
a9d0: 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
a9e0: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74  3VdbeMemMove(&ct
a9f0: 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65  x.s, pOut);.  Me
aa00: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74  mSetTypeFlag(&ct
aa10: 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  x.s, MEM_Null);.
aa20: 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
aa30: 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46   0;.  if( ctx.pF
aa40: 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  unc->flags & SQL
aa50: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
aa60: 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  L ){.    assert(
aa70: 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20   pOp>p->aOp );. 
aa80: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
aa90: 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  1].p4type==P4_CO
aaa0: 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73  LLSEQ );.    ass
aab0: 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
aac0: 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
aad0: 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c  );.    ctx.pColl
aae0: 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43   = pOp[-1].p4.pC
aaf0: 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  oll;.  }.  if( s
ab00: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
ab10: 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
ab20: 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
ab30: 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78    (*ctx.pFunc->x
ab40: 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61  Func)(&ctx, n, a
ab50: 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c  pVal);.  if( sql
ab60: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
ab70: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
ab80: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
ab90: 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20  tx.s);.    goto 
aba0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
abb0: 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  use;.  }.  if( d
abc0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
abd0: 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74  ){.    /* Even t
abe0: 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29  hough a malloc()
abf0: 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65   has failed, the
ac00: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
ac10: 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73  of the.    ** us
ac20: 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20  er function may 
ac30: 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73  have called an s
ac40: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58  qlite3_result_XX
ac50: 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  X() function.   
ac60: 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20   ** to return a 
ac70: 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f  value. The follo
ac80: 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73  wing call releas
ac90: 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73  es any resources
aca0: 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74  .    ** associat
acb0: 65 64 20 77 69 74 68 20 73 75 63 68 20 61 20 76  ed with such a v
acc0: 61 6c 75 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  alue..    **.   
acd0: 20 2a 2a 20 4e 6f 74 65 3a 20 4d 61 79 62 65 20   ** Note: Maybe 
ace0: 4d 65 6d 52 65 6c 65 61 73 65 28 29 20 73 68 6f  MemRelease() sho
acf0: 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 69 66  uld be called if
ad00: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
ad10: 28 29 0a 20 20 20 20 2a 2a 20 66 61 69 6c 73 20  ().    ** fails 
ad20: 61 6c 73 6f 20 28 74 68 65 20 69 66 28 2e 2e 2e  also (the if(...
ad30: 29 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76  ) statement abov
ad40: 65 29 2e 20 42 75 74 20 69 66 20 70 65 6f 70 6c  e). But if peopl
ad50: 65 20 61 72 65 0a 20 20 20 20 2a 2a 20 6d 69 73  e are.    ** mis
ad60: 75 73 69 6e 67 20 73 71 6c 69 74 65 2c 20 74 68  using sqlite, th
ad70: 65 79 20 68 61 76 65 20 62 69 67 67 65 72 20 70  ey have bigger p
ad80: 72 6f 62 6c 65 6d 73 20 74 68 61 6e 20 61 20 6c  roblems than a l
ad90: 65 61 6b 65 64 20 76 61 6c 75 65 2e 0a 20 20 20  eaked value..   
ada0: 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
adb0: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
adc0: 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20  tx.s);.    goto 
add0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f  no_mem;.  }..  /
ade0: 2a 20 49 66 20 61 6e 79 20 61 75 78 69 6c 69 61  * If any auxilia
adf0: 72 79 20 64 61 74 61 20 66 75 6e 63 74 69 6f 6e  ry data function
ae00: 73 20 68 61 76 65 20 62 65 65 6e 20 63 61 6c 6c  s have been call
ae10: 65 64 20 62 79 20 74 68 69 73 20 75 73 65 72 20  ed by this user 
ae20: 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69  function,.  ** i
ae30: 6d 6d 65 64 69 61 74 65 6c 79 20 63 61 6c 6c 20  mmediately call 
ae40: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 20 66  the destructor f
ae50: 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69  or any non-stati
ae60: 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20  c values..  */. 
ae70: 20 69 66 28 20 63 74 78 2e 70 56 64 62 65 46 75   if( ctx.pVdbeFu
ae80: 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nc ){.    sqlite
ae90: 33 56 64 62 65 44 65 6c 65 74 65 41 75 78 44 61  3VdbeDeleteAuxDa
aea0: 74 61 28 63 74 78 2e 70 56 64 62 65 46 75 6e 63  ta(ctx.pVdbeFunc
aeb0: 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
aec0: 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e  pOp->p4.pVdbeFun
aed0: 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e  c = ctx.pVdbeFun
aee0: 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79  c;.    pOp->p4ty
aef0: 70 65 20 3d 20 50 34 5f 56 44 42 45 46 55 4e 43  pe = P4_VDBEFUNC
af00: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
af10: 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  he function retu
af20: 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74  rned an error, t
af30: 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f  hrow an exceptio
af40: 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69  n */.  if( ctx.i
af50: 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71  sError ){.    sq
af60: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
af70: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
af80: 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
af90: 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29  lue_text(&ctx.s)
afa0: 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e  );.    rc = ctx.
afb0: 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  isError;.  }..  
afc0: 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75  /* Copy the resu
afd0: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
afe0: 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  on into register
aff0: 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33   P3 */.  sqlite3
b000: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
b010: 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64  ng(&ctx.s, encod
b020: 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ing);.  sqlite3V
b030: 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c  dbeMemMove(pOut,
b040: 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20   &ctx.s);.  if( 
b050: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
b060: 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20  oBig(pOut) ){.  
b070: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
b080: 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f 54    }.  REGISTER_T
b090: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
b0a0: 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
b0b0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
b0c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
b0d0: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
b0e0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
b0f0: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
b100: 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20  wise AND of the 
b110: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
b120: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
b130: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
b140: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b150: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b160: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b170: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b180: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b190: 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50  e: BitOr P1 P2 P
b1a0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  3 * *.**.** Take
b1b0: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52   the bit-wise OR
b1c0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
b1d0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
b1e0: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
b1f0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b200: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b210: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b220: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b230: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b240: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
b250: 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20  Left P1 P2 P3 * 
b260: 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  *.**.** Shift th
b270: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
b280: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
b290: 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68  o the left by th
b2a0: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
b2b0: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
b2c0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
b2d0: 72 65 67 69 73 65 72 20 50 31 2e 0a 2a 2a 20 53  regiser P1..** S
b2e0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b2f0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b300: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b310: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b320: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b330: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
b340: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
b350: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66  3 * *.**.** Shif
b360: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
b370: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b380: 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  P2 to the right 
b390: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
b3a0: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
b3b0: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
b3c0: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
b3d0: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
b3e0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b3f0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b400: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b410: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b420: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
b430: 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20  _BitAnd:        
b440: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b450: 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69   as TK_BITAND, i
b460: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b470: 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20  .case OP_BitOr: 
b480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b490: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
b4a0: 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  ITOR, in1, in2, 
b4b0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b4c0: 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20  ShiftLeft:      
b4d0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b4e0: 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e  as TK_LSHIFT, in
b4f0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b500: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67  case OP_ShiftRig
b510: 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ht: {           
b520: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53  /* same as TK_RS
b530: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
b540: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 61 3b  out3 */.  i64 a;
b550: 0a 20 20 69 36 34 20 62 3b 0a 0a 20 20 69 66 28  .  i64 b;..  if(
b560: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
b570: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
b580: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
b590: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
b5a0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
b5b0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 61 20 3d  break;.  }.  a =
b5c0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
b5d0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 62 20  alue(pIn2);.  b 
b5e0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
b5f0: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 73  Value(pIn1);.  s
b600: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
b610: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f  de ){.    case O
b620: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 61  P_BitAnd:      a
b630: 20 26 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b   &= b;     break
b640: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69  ;.    case OP_Bi
b650: 74 4f 72 3a 20 20 20 20 20 20 20 61 20 7c 3d 20  tOr:       a |= 
b660: 62 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  b;     break;.  
b670: 20 20 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c    case OP_ShiftL
b680: 65 66 74 3a 20 20 20 61 20 3c 3c 3d 20 62 3b 20  eft:   a <<= b; 
b690: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
b6a0: 66 61 75 6c 74 3a 20 20 61 73 73 65 72 74 28 20  fault:  assert( 
b6b0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
b6c0: 53 68 69 66 74 52 69 67 68 74 20 29 3b 0a 20 20  ShiftRight );.  
b6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6e0: 20 20 20 20 20 20 20 61 20 3e 3e 3d 20 62 3b 20         a >>= b; 
b6f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
b700: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 61 3b 0a 20  pOut->u.i = a;. 
b710: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
b720: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
b730: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b740: 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50  pcode: AddImm  P
b750: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a  1 P2 * * *.** .*
b760: 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61  * Add the consta
b770: 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c  nt P2 to the val
b780: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b790: 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  1..** The result
b7a0: 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e   is always an in
b7b0: 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20  teger..**.** To 
b7c0: 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74  force any regist
b7d0: 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  er to be an inte
b7e0: 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e  ger, just add 0.
b7f0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49  .*/.case OP_AddI
b800: 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mm: {           
b810: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 73 71 6c   /* in1 */.  sql
b820: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
b830: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
b840: 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
b850: 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p2;.  break;.}.
b860: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74  ./* Opcode: Must
b870: 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  BeInt P1 P2 * * 
b880: 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74  *.** .** Force t
b890: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b8a0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e  ster P1 to be an
b8b0: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68   integer.  If th
b8c0: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
b8d0: 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
b8e0: 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  er and cannot be
b8f0: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
b900: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69  an integer.** wi
b910: 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c  thout data loss,
b920: 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
b930: 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72  iately to P2, or
b940: 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69   if P2==0.** rai
b950: 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  se an SQLITE_MIS
b960: 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e  MATCH exception.
b970: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74  .*/.case OP_Must
b980: 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  BeInt: {        
b990: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
b9a0: 20 2a 2f 0a 20 20 61 70 70 6c 79 41 66 66 69 6e   */.  applyAffin
b9b0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
b9c0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
b9d0: 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28  coding);.  if( (
b9e0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
b9f0: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
ba00: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
ba10: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
ba20: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  LITE_MISMATCH;. 
ba30: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
ba40: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
ba50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
ba60: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
ba70: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
ba80: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
ba90: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
baa0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
bab0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
bac0: 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20  alAffinity P1 * 
bad0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72  * * *.**.** If r
bae0: 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73  egister P1 holds
baf0: 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76   an integer conv
bb00: 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c  ert it to a real
bb10: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
bb20: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
bb30: 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e  d when extractin
bb40: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  g information fr
bb50: 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74  om a column that
bb60: 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66  .** has REAL aff
bb70: 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c  inity.  Such col
bb80: 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73  umn values may s
bb90: 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61  till be stored a
bba0: 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66  s.** integers, f
bbb0: 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65  or space efficie
bbc0: 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65  ncy, but after e
bbd0: 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e  xtraction we wan
bbe0: 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76  t them.** to hav
bbf0: 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61  e only a real va
bc00: 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
bc10: 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20  RealAffinity: { 
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc30: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28   /* in1 */.  if(
bc40: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
bc50: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71  EM_Int ){.    sq
bc60: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
bc70: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
bc80: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
bc90: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
bca0: 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  AST./* Opcode: T
bcb0: 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a  oText P1 * * * *
bcc0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
bcd0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bce0: 65 72 20 50 31 20 74 6f 20 62 65 20 74 65 78 74  er P1 to be text
bcf0: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
bd00: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
bd10: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
bd20: 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a  ring using the.*
bd30: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
bd40: 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20  printf().  Blob 
bd50: 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61  values are uncha
bd60: 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20  nged and.** are 
bd70: 61 66 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c  afterwards simpl
bd80: 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  y interpreted as
bd90: 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e   text..**.** A N
bda0: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
bdb0: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
bdc0: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
bdd0: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
bde0: 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b  ase OP_ToText: {
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be00: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
be10: 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a  TO_TEXT, in1 */.
be20: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
be30: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62  s & MEM_Null ) b
be40: 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74 28 20  reak;.  assert( 
be50: 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c  MEM_Str==(MEM_Bl
be60: 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31  ob>>3) );.  pIn1
be70: 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31  ->flags |= (pIn1
be80: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62  ->flags&MEM_Blob
be90: 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66 66  )>>3;.  applyAff
bea0: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
beb0: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63  TE_AFF_TEXT, enc
bec0: 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45  oding);.  rc = E
bed0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
bee0: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
bef0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
bf00: 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   || db->mallocFa
bf10: 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  iled );.  pIn1->
bf20: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49  flags &= ~(MEM_I
bf30: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
bf40: 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a  Blob|MEM_Zero);.
bf50: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
bf60: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62  BSIZE(pIn1);.  b
bf70: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
bf80: 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a 20  de: ToBlob P1 * 
bf90: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
bfa0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
bfb0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
bfc0: 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74   a BLOB..** If t
bfd0: 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65  he value is nume
bfe0: 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ric, convert it 
bff0: 74 6f 20 61 20 73 74 72 69 6e 67 20 66 69 72 73  to a string firs
c000: 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61 72  t..** Strings ar
c010: 65 20 73 69 6d 70 6c 79 20 72 65 69 6e 74 65 72  e simply reinter
c020: 70 72 65 74 65 64 20 61 73 20 62 6c 6f 62 73 20  preted as blobs 
c030: 77 69 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a 2a  with no change.*
c040: 2a 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79  * to the underly
c050: 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20  ing data..**.** 
c060: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
c070: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
c080: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
c090: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
c0a0: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f 62  /.case OP_ToBlob
c0b0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
c0c0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
c0d0: 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20  TK_TO_BLOB, in1 
c0e0: 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  */.  if( pIn1->f
c0f0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
c100: 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20 28  ) break;.  if( (
c110: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c120: 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20  M_Blob)==0 ){.  
c130: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
c140: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
c150: 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29  _TEXT, encoding)
c160: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
c170: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
c180: 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  Str || db->mallo
c190: 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d  cFailed );.    M
c1a0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
c1b0: 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  n1, MEM_Blob);. 
c1c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
c1d0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
c1e0: 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42  _TypeMask&~MEM_B
c1f0: 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  lob);.  }.  UPDA
c200: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
c210: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
c220: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  }../* Opcode: To
c230: 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a  Numeric P1 * * *
c240: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
c250: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
c260: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75  ster P1 to be nu
c270: 6d 65 72 69 63 20 28 65 69 74 68 65 72 20 61 6e  meric (either an
c280: 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61  .** integer or a
c290: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
c2a0: 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74  number.).** If t
c2b0: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
c2c0: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
c2d0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c2e0: 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  n using the.** e
c2f0: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
c300: 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e  i() or atof() an
c310: 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20  d store 0 if no 
c320: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
c330: 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  .** is possible.
c340: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
c350: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
c360: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
c370: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
c380: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
c390: 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20  _ToNumeric: {   
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c3b0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
c3c0: 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a  NUMERIC, in1 */.
c3d0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
c3e0: 67 73 20 26 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  gs & (MEM_Null|M
c3f0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
c400: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
c410: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69  te3VdbeMemNumeri
c420: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
c430: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
c440: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
c450: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
c460: 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20  e: ToInt P1 * * 
c470: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
c480: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c490: 69 73 74 65 72 20 50 31 20 62 65 20 61 6e 20 69  ister P1 be an i
c4a0: 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54  nteger.  If.** T
c4b0: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
c4c0: 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d  ently a real num
c4d0: 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72  ber, drop its fr
c4e0: 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a  actional part..*
c4f0: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
c500: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
c510: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
c520: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
c530: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
c540: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
c550: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
c560: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
c570: 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ion is possible.
c580: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
c590: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
c5a0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
c5b0: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
c5c0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
c5d0: 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  _ToInt: {       
c5e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c5f0: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c  me as TK_TO_INT,
c600: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70   in1 */.  if( (p
c610: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c620: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
c630: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
c640: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
c650: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
c660: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
c670: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
c680: 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a  ode: ToReal P1 *
c690: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c6a0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c6b0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c6c0: 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  e a floating poi
c6d0: 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66  nt number..** If
c6e0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
c6f0: 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67  rrently an integ
c700: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a  er, convert it..
c710: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
c720: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
c730: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
c740: 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
c750: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
c760: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
c770: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30  () and store 0.0
c780: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
c790: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
c7a0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
c7b0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c7c0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c7d0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c7e0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c7f0: 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20   OP_ToReal: {   
c800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c810: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
c820: 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  REAL, in1 */.  i
c830: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c840: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
c850: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
c860: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
c870: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c880: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
c890: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a  TE_OMIT_CAST */.
c8a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
c8b0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c8c0: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
c8d0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c8e0: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
c8f0: 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31  f reg(P3)<reg(P1
c900: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
c910: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a  o address P2.  .
c920: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
c930: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
c940: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  it of P5 is set 
c950: 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50  and either reg(P
c960: 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29  1) or.** reg(P3)
c970: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
c980: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
c990: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
c9a0: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
c9b0: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
c9c0: 6c 20 74 68 72 75 20 69 66 20 65 69 74 68 65 72  l thru if either
c9d0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
c9e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
c9f0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
ca00: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
ca10: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
ca20: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
ca30: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
ca40: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
ca50: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
ca60: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
ca70: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
ca80: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
ca90: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
caa0: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
cab0: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
cac0: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
cad0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
cae0: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
caf0: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
cb00: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
cb10: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
cb20: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
cb30: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
cb40: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
cb50: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
cb60: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
cb70: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
cb80: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
cb90: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
cba0: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
cbb0: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
cbc0: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
cbd0: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
cbe0: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
cbf0: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
cc00: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
cc10: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
cc20: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
cc30: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
cc40: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
cc50: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
cc60: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
cc70: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
cc80: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
cc90: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
cca0: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
ccb0: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
ccc0: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
ccd0: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
cce0: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
ccf0: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
cd00: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
cd10: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
cd20: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
cd30: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
cd40: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
cd50: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
cd60: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
cd70: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
cd80: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
cd90: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
cda0: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
cdb0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
cdc0: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
cdd0: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
cde0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
cdf0: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
ce00: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
ce10: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
ce20: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
ce30: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
ce40: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
ce50: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
ce60: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
ce70: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
ce80: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f  egister P2..*/./
ce90: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
cea0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
ceb0: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
cec0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
ced0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
cee0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
cef0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
cf00: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
cf10: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
cf20: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
cf30: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
cf40: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
cf50: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
cf60: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
cf70: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
cf80: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
cf90: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
cfa0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
cfb0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
cfc0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
cfd0: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
cfe0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
cff0: 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65  re equal..** See
d000: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
d010: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
d020: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
d030: 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50   Opcode: Le P1 P
d040: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
d050: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
d060: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
d070: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
d080: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
d090: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
d0a0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
d0b0: 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P3 is less than 
d0c0: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
d0d0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
d0e0: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
d0f0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
d100: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
d110: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
d120: 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32  Opcode: Gt P1 P2
d130: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
d140: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
d150: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
d160: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
d170: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
d180: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
d190: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
d1a0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
d1b0: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
d1c0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
d1d0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
d1e0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
d1f0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
d200: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
d210: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
d220: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
d230: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
d240: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
d250: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
d260: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
d270: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
d280: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
d290: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
d2a0: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
d2b0: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
d2c0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
d2d0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
d2e0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
d2f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a  ..*/.case OP_Eq:
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d310: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c  * same as TK_EQ,
d320: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
d330: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20  */.case OP_Ne:  
d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d350: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a  same as TK_NE, j
d360: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
d370: 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20  .case OP_Lt:    
d380: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d390: 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d  me as TK_LT, jum
d3a0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
d3b0: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20  ase OP_Le:      
d3c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d3d0: 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c   as TK_LE, jump,
d3e0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
d3f0: 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20  e OP_Gt:        
d400: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d410: 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69  s TK_GT, jump, i
d420: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
d430: 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20  OP_Ge: {        
d440: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
d450: 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GE, jump, in1
d460: 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 66  , in3 */.  int f
d470: 6c 61 67 73 3b 0a 20 20 69 6e 74 20 72 65 73 3b  lags;.  int res;
d480: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
d490: 3b 0a 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ;..  flags = pIn
d4a0: 31 2d 3e 66 6c 61 67 73 7c 70 49 6e 33 2d 3e 66  1->flags|pIn3->f
d4b0: 6c 61 67 73 3b 0a 0a 20 20 69 66 28 20 66 6c 61  lags;..  if( fla
d4c0: 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  gs&MEM_Null ){. 
d4d0: 20 20 20 2f 2a 20 49 66 20 65 69 74 68 65 72 20     /* If either 
d4e0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
d4f0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
d500: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
d510: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
d520: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
d530: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
d540: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
d550: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70    */.    if( pOp
d560: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
d570: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 70  OREP2 ){.      p
d580: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
d590: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 4d  Op->p2];.      M
d5a0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
d5b0: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
d5c0: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
d5d0: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
d5e0: 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  t);.    }else if
d5f0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
d600: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
d610: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
d620: 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2-1;.    }.   
d630: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 61   break;.  }..  a
d640: 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
d650: 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
d660: 41 53 4b 3b 0a 20 20 69 66 28 20 61 66 66 69 6e  ASK;.  if( affin
d670: 69 74 79 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ity ){.    apply
d680: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61  Affinity(pIn1, a
d690: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
d6a0: 67 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66  g);.    applyAff
d6b0: 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69  inity(pIn3, affi
d6c0: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
d6d0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
d6e0: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
d6f0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
d700: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
d710: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
d720: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  || pOp->p4.pColl
d730: 3d 3d 30 20 29 3b 0a 20 20 45 78 70 61 6e 64 42  ==0 );.  ExpandB
d740: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 45 78 70  lob(pIn1);.  Exp
d750: 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20  andBlob(pIn3);. 
d760: 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
d770: 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
d780: 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
d790: 6c 6c 29 3b 0a 20 20 73 77 69 74 63 68 28 20 70  ll);.  switch( p
d7a0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
d7b0: 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20    case OP_Eq:   
d7c0: 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20   res = res==0;  
d7d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
d7e0: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73  se OP_Ne:    res
d7f0: 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62   = res!=0;     b
d800: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
d810: 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Lt:    res = r
d820: 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es<0;      break
d830: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65  ;.    case OP_Le
d840: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d  :    res = res<=
d850: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
d860: 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20    case OP_Gt:   
d870: 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20   res = res>0;   
d880: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
d890: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
d8a0: 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62   = res>=0;     b
d8b0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
d8c0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
d8d0: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
d8e0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
d8f0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 4d  [pOp->p2];.    M
d900: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
d910: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
d920: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65    pOut->u.i = re
d930: 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  s;.    REGISTER_
d940: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
d950: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Out);.  }else if
d960: 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
d970: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
d980: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d990: 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
d9a0: 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
d9b0: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
d9c0: 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
d9d0: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
d9e0: 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74  operator to be t
d9f0: 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69  he array.** of i
da00: 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a  ntegers in P4..*
da10: 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61  *.** The permuta
da20: 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c  tion is only val
da30: 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  id until the nex
da40: 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  t OP_Permutation
da50: 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a  , OP_Compare,.**
da60: 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50 5f   OP_Halt, or OP_
da70: 52 65 73 75 6c 74 52 6f 77 2e 20 20 54 79 70 69  ResultRow.  Typi
da80: 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72  cally the OP_Per
da90: 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20  mutation should 
daa0: 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69 61  occur.** immedia
dab0: 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68  tely prior to th
dac0: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f  e OP_Compare..*/
dad0: 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61  .case OP_Permuta
dae0: 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74  tion: {.  assert
daf0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
db00: 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
db10: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
db20: 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65  ai );.  aPermute
db30: 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
db40: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
db50: 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31  code: Compare P1
db60: 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
db70: 2a 20 43 6f 6d 70 61 72 65 20 74 6f 20 76 65 63  * Compare to vec
db80: 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65 72  tors of register
db90: 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65  s in reg(P1)..re
dba0: 67 28 50 31 2b 50 33 2d 31 29 20 28 61 6c 6c 20  g(P1+P3-1) (all 
dbb0: 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 22 41 22 29  this.** one "A")
dbc0: 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e   and in reg(P2).
dbd0: 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22  .reg(P2+P3-1) ("
dbe0: 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72  B").  Save the r
dbf0: 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
dc00: 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75  comparison for u
dc10: 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f  se by the next O
dc20: 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e  P_Jump instruct.
dc30: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b  .**.** P4 is a K
dc40: 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
dc50: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f   that defines co
dc60: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
dc70: 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72  s and sort.** or
dc80: 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d  ders for the com
dc90: 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65  parison.  The pe
dca0: 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65  rmutation applie
dcb0: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a  s to registers.*
dcc0: 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79  * only.  The Key
dcd0: 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72  Info elements ar
dce0: 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61  e used sequentia
dcf0: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  lly..**.** The c
dd00: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73  omparison is a s
dd10: 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20  ort comparison, 
dd20: 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65  so NULLs compare
dd30: 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73   equal,.** NULLs
dd40: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e   are less than n
dd50: 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20  umbers, numbers 
dd60: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74  are less than st
dd70: 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74  rings,.** and st
dd80: 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74  rings are less t
dd90: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61  han blobs..*/.ca
dda0: 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b  se OP_Compare: {
ddb0: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
ddc0: 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69  i;.  int p1;.  i
ddd0: 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b  nt p2;.  const K
dde0: 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
ddf0: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43  ;.  int idx;.  C
de00: 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20  ollSeq *pColl;  
de10: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
de20: 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f  equence to use o
de30: 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20  n this term */. 
de40: 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20   int bRev;      
de50: 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
de60: 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20  DESCENDING sort 
de70: 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 6e 20 3d 20  order */..  n = 
de80: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49  pOp->p3;.  pKeyI
de90: 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
dea0: 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74  eyInfo;.  assert
deb0: 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  ( n>0 );.  asser
dec0: 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29  t( pKeyInfo!=0 )
ded0: 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ;.  p1 = pOp->p1
dee0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3e 30  ;.  assert( p1>0
def0: 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65   && p1+n<=p->nMe
df00: 6d 2b 31 20 29 3b 0a 20 20 70 32 20 3d 20 70 4f  m+1 );.  p2 = pO
df10: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
df20: 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 70   p2>0 && p2+n<=p
df30: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 66 6f  ->nMem+1 );.  fo
df40: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
df50: 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72  {.    idx = aPer
df60: 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b  mute ? aPermute[
df70: 69 5d 20 3a 20 69 3b 0a 20 20 20 20 52 45 47 49  i] : i;.    REGI
df80: 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
df90: 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69  x, &p->aMem[p1+i
dfa0: 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  dx]);.    REGIST
dfb0: 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c  ER_TRACE(p2+idx,
dfc0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78   &p->aMem[p2+idx
dfd0: 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
dfe0: 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  i<pKeyInfo->nFie
dff0: 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20  ld );.    pColl 
e000: 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c  = pKeyInfo->aCol
e010: 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d  l[i];.    bRev =
e020: 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74   pKeyInfo->aSort
e030: 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43  Order[i];.    iC
e040: 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33  ompare = sqlite3
e050: 4d 65 6d 43 6f 6d 70 61 72 65 28 26 70 2d 3e 61  MemCompare(&p->a
e060: 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 70 2d  Mem[p1+idx], &p-
e070: 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70  >aMem[p2+idx], p
e080: 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69  Coll);.    if( i
e090: 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20  Compare ){.     
e0a0: 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d   if( bRev ) iCom
e0b0: 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65  pare = -iCompare
e0c0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
e0d0: 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d     }.  }.  aPerm
e0e0: 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  ute = 0;.  break
e0f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e100: 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20  Jump P1 P2 P3 * 
e110: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
e120: 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  the instruction 
e130: 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50  at address P1, P
e140: 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69  2, or P3 dependi
e150: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
e160: 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   in the most rec
e170: 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69  ent OP_Compare i
e180: 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50  nstruction the P
e190: 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73  1 vector was les
e1a0: 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20  s than.** equal 
e1b0: 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
e1c0: 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f  han the P2 vecto
e1d0: 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r, respectively.
e1e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
e1f0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
e200: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
e210: 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20   iCompare<0 ){. 
e220: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20     pc = pOp->p1 
e230: 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  - 1;.  }else if(
e240: 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a   iCompare==0 ){.
e250: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
e260: 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   - 1;.  }else{. 
e270: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20     pc = pOp->p3 
e280: 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
e290: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e2a0: 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
e2b0: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
e2c0: 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74  logical AND of t
e2d0: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
e2e0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32  isters P1 and P2
e2f0: 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68   and.** write th
e300: 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65  e result into re
e310: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
e320: 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
e330: 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29   P2 is 0 (false)
e340: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e350: 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a   is 0 even if.**
e360: 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
e370: 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
e380: 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77  L and true or tw
e390: 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20  o NULLs give.** 
e3a0: 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
e3b0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20  /./* Opcode: Or 
e3c0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
e3d0: 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
e3e0: 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61  cal OR of the va
e3f0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
e400: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
e410: 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77  * store the answ
e420: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
e430: 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
e440: 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e  er P1 or P2 is n
e450: 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68  onzero (true) th
e460: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
e470: 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65   1 (true).** eve
e480: 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69  n if the other i
e490: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
e4a0: 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20   NULL and false 
e4b0: 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20  or two NULLs.** 
e4c0: 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70  give a NULL outp
e4d0: 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ut..*/.case OP_A
e4e0: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
e4f0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41   /* same as TK_A
e500: 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
e510: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72  t3 */.case OP_Or
e520: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
e530: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52  /* same as TK_OR
e540: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
e550: 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20   */.  int v1;   
e560: 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64   /* Left operand
e570: 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  :  0==FALSE, 1==
e580: 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
e590: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e   or NULL */.  in
e5a0: 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68  t v2;    /* Righ
e5b0: 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41  t operand: 0==FA
e5c0: 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
e5d0: 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
e5e0: 20 2a 2f 0a 0a 20 20 69 66 28 20 70 49 6e 31 2d   */..  if( pIn1-
e5f0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
e600: 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b  l ){.    v1 = 2;
e610: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31  .  }else{.    v1
e620: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
e630: 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
e640: 0a 20 20 7d 0a 20 20 69 66 28 20 70 49 6e 32 2d  .  }.  if( pIn2-
e650: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
e660: 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b  l ){.    v2 = 2;
e670: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32  .  }else{.    v2
e680: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
e690: 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b  tValue(pIn2)!=0;
e6a0: 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
e6b0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29  opcode==OP_And )
e6c0: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
e6d0: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
e6e0: 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b   and_logic[] = {
e6f0: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20   0, 0, 0, 0, 1, 
e700: 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20  2, 0, 2, 2 };.  
e710: 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63    v1 = and_logic
e720: 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c  [v1*3+v2];.  }el
e730: 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
e740: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
e750: 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20  ar or_logic[] = 
e760: 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c  { 0, 1, 2, 1, 1,
e770: 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20   1, 2, 1, 2 };. 
e780: 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63     v1 = or_logic
e790: 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20  [v1*3+v2];.  }. 
e7a0: 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
e7b0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
e7c0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
e7d0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
e7e0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
e7f0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
e800: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
e810: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
e820: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
e830: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
e840: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
e850: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e860: 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
e870: 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
e880: 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
e890: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
e8a0: 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
e8b0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e8c0: 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
e8d0: 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
e8e0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
e8f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
e900: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
e910: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
e920: 5f 4e 4f 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  _NOT, in1 */.  p
e930: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
e940: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70  Op->p2];.  if( p
e950: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e960: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
e970: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
e980: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  ll(pOut);.  }els
e990: 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
e9a0: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
e9b0: 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65  ut, !sqlite3Vdbe
e9c0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b  IntValue(pIn1));
e9d0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
e9e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e  ./* Opcode: BitN
e9f0: 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
ea00: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
ea10: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
ea20: 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20  gister P1 as an 
ea30: 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20  integer.  Store 
ea40: 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70  the.** ones-comp
ea50: 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31  lement of the P1
ea60: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
ea70: 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20  ster P2.  If P1 
ea80: 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20  holds.** a NULL 
ea90: 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c  then store a NUL
eaa0: 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  L in P2..*/.case
eab0: 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20   OP_BitNot: {   
eac0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ead0: 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20  e as TK_BITNOT, 
eae0: 69 6e 31 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  in1 */.  pOut = 
eaf0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
eb00: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
eb10: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
eb20: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
eb30: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
eb40: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
eb50: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
eb60: 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73  etInt64(pOut, ~s
eb70: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
eb80: 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20  ue(pIn1));.  }. 
eb90: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
eba0: 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
ebb0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
ebc0: 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
ebd0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ebe0: 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
ebf0: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20   value is.** is 
ec00: 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
ec10: 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
ec20: 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
ec30: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
ec40: 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
ec50: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
ec60: 20 69 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a   if P3 is true..
ec70: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  */./* Opcode: If
ec80: 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Not P1 P2 P3 * *
ec90: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
eca0: 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
ecb0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
ecc0: 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c   False.  The val
ecd0: 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73  ue is.** is cons
ece0: 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69  idered true if i
ecf0: 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20  t has a numeric 
ed00: 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20  value of zero.  
ed10: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
ed20: 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
ed30: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
ed40: 20 69 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a   if P3 is true..
ed50: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20  */.case OP_If:  
ed60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ed70: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63  * jump, in1 */.c
ed80: 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20  ase OP_IfNot: { 
ed90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
eda0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
edb0: 20 63 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   c;.  if( pIn1->
edc0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
edd0: 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d   ){.    c = pOp-
ede0: 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69  >p3;.  }else{.#i
edf0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
ee00: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
ee10: 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
ee20: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
ee30: 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20  )!=0;.#else.    
ee40: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
ee50: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  ealValue(pIn1)!=
ee60: 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  0.0;.#endif.    
ee70: 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
ee80: 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20  =OP_IfNot ) c = 
ee90: 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20  !c;.  }.  if( c 
eea0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
eeb0: 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
eec0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
eed0: 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a  : IsNull P1 P2 *
eee0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
eef0: 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
ef00: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ef10: 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  1 is NULL..*/.ca
ef20: 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20  se OP_IsNull: { 
ef30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ef40: 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c  me as TK_ISNULL,
ef50: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
ef60: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
ef70: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
ef80: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
ef90: 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
efa0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
efb0: 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50  de: NotNull P1 P
efc0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75  2 * * *.**.** Ju
efd0: 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
efe0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
eff0: 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P1 is not NULL
f000: 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  .  .*/.case OP_N
f010: 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  otNull: {       
f020: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f030: 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70  TK_NOTNULL, jump
f040: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28  , in1 */.  if( (
f050: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
f060: 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
f070: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
f080: 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
f090: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
f0a0: 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 2a 20 50  etNumColumns * P
f0b0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
f0c0: 69 73 20 6f 70 63 6f 64 65 20 73 65 74 73 20 74  is opcode sets t
f0d0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
f0e0: 75 6d 6e 73 20 66 6f 72 20 74 68 65 20 63 75 72  umns for the cur
f0f0: 73 6f 72 20 6f 70 65 6e 65 64 20 62 79 20 74 68  sor opened by th
f100: 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 69  e.** following i
f110: 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 50 32  nstruction to P2
f120: 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 4f 50 5f 53 65  ..**.** An OP_Se
f130: 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 73 20 6f  tNumColumns is o
f140: 6e 6c 79 20 75 73 65 66 75 6c 20 69 66 20 69 74  nly useful if it
f150: 20 6f 63 63 75 72 73 20 69 6d 6d 65 64 69 61 74   occurs immediat
f160: 65 6c 79 20 62 65 66 6f 72 65 20 0a 2a 2a 20 6f  ely before .** o
f170: 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
f180: 69 6e 67 20 6f 70 63 6f 64 65 73 3a 0a 2a 2a 0a  ing opcodes:.**.
f190: 2a 2a 20 20 20 20 20 4f 70 65 6e 52 65 61 64 0a  **     OpenRead.
f1a0: 2a 2a 20 20 20 20 20 4f 70 65 6e 57 72 69 74 65  **     OpenWrite
f1b0: 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 50 73 65 75  .**     OpenPseu
f1c0: 64 6f 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  do.**.** If the 
f1d0: 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
f1e0: 20 69 73 20 74 6f 20 62 65 20 65 78 65 63 75 74   is to be execut
f1f0: 65 64 20 6f 6e 20 61 20 63 75 72 73 6f 72 2c 20  ed on a cursor, 
f200: 74 68 65 6e 0a 2a 2a 20 74 68 69 73 20 6f 70 63  then.** this opc
f210: 6f 64 65 20 6d 75 73 74 20 62 65 20 70 72 65 73  ode must be pres
f220: 65 6e 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ent immediately 
f230: 62 65 66 6f 72 65 20 74 68 65 20 6f 70 63 6f 64  before the opcod
f240: 65 20 74 68 61 74 0a 2a 2a 20 6f 70 65 6e 73 20  e that.** opens 
f250: 74 68 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 23  the cursor..*/.#
f260: 69 66 20 30 0a 63 61 73 65 20 4f 50 5f 53 65 74  if 0.case OP_Set
f270: 4e 75 6d 43 6f 6c 75 6d 6e 73 3a 20 7b 0a 20 20  NumColumns: {.  
f280: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
f290: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
f2a0: 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  mn P1 P2 P3 P4 *
f2b0: 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
f2c0: 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63   the data that c
f2d0: 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
f2e0: 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72  to as a structur
f2f0: 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a  e built using.**
f300: 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
f310: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53  instruction.  (S
f320: 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ee the MakeRecor
f330: 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  d opcode for add
f340: 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72  itional.** infor
f350: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
f360: 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64   format of the d
f370: 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74  ata.)  Extract t
f380: 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a  he P2-th column.
f390: 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63  ** from this rec
f3a0: 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61  ord.  If there a
f3b0: 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32  re less that (P2
f3c0: 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69  +1) .** values i
f3d0: 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78  n the record, ex
f3e0: 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a  tract a NULL..**
f3f0: 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78  .** The value ex
f400: 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65  tracted is store
f410: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
f420: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
f430: 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66  olumn contains f
f440: 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65  ewer than P2 fie
f450: 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63  lds, then extrac
f460: 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a  t a NULL.  Or,.*
f470: 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75  * if the P4 argu
f480: 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d  ment is a P4_MEM
f490: 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f   use the value o
f4a0: 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
f4b0: 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75  t as.** the resu
f4c0: 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  lt..*/.case OP_C
f4d0: 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33 32 20 70  olumn: {.  u32 p
f4e0: 61 79 6c 6f 61 64 53 69 7a 65 3b 20 20 20 2f 2a  ayloadSize;   /*
f4f0: 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
f500: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
f510: 2f 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53  /.  i64 payloadS
f520: 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72  ize64; /* Number
f530: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
f540: 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
f550: 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   p1;            
f560: 2f 2a 20 50 31 20 76 61 6c 75 65 20 6f 66 20 74  /* P1 value of t
f570: 68 65 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  he opcode */.  i
f580: 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  nt p2;          
f590: 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62    /* column numb
f5a0: 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a  er to retrieve *
f5b0: 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
f5c0: 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44  pC;    /* The VD
f5d0: 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63  BE cursor */.  c
f5e0: 68 61 72 20 2a 7a 52 65 63 3b 20 20 20 20 20 20  har *zRec;      
f5f0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
f600: 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 2d  complete record-
f610: 64 61 74 61 20 2a 2f 0a 20 20 42 74 43 75 72 73  data */.  BtCurs
f620: 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20  or *pCrsr;   /* 
f630: 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72  The BTree cursor
f640: 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79 70 65   */.  u32 *aType
f650: 3b 20 20 20 20 20 20 20 20 2f 2a 20 61 54 79 70  ;        /* aTyp
f660: 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e  e[i] holds the n
f670: 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 74  umeric type of t
f680: 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  he i-th column *
f690: 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74  /.  u32 *aOffset
f6a0: 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65  ;      /* aOffse
f6b0: 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74  t[i] is offset t
f6c0: 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20  o start of data 
f6d0: 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20  for i-th column 
f6e0: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
f6f0: 20 20 20 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65          /* numbe
f700: 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
f710: 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
f720: 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
f730: 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20    /* The length 
f740: 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65  of the serialize
f750: 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63  d data for the c
f760: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  olumn */.  int i
f770: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
f780: 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
f790: 0a 20 20 63 68 61 72 20 2a 7a 44 61 74 61 3b 20  .  char *zData; 
f7a0: 20 20 20 20 20 20 2f 2a 20 50 61 72 74 20 6f 66        /* Part of
f7b0: 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
f7c0: 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d  g decoded */.  M
f7d0: 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
f7e0: 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
f7f0: 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
f800: 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
f810: 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
f820: 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
f830: 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
f840: 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  decoded */.  u8 
f850: 2a 7a 49 64 78 3b 20 20 20 20 20 20 20 20 20 20  *zIdx;          
f860: 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65  /* Index into he
f870: 61 64 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a 45  ader */.  u8 *zE
f880: 6e 64 48 64 72 3b 20 20 20 20 20 20 20 2f 2a 20  ndHdr;       /* 
f890: 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74  Pointer to first
f8a0: 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20   byte after the 
f8b0: 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20  header */.  u32 
f8c0: 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f  offset;        /
f8d0: 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68  * Offset into th
f8e0: 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 36 34 20  e data */.  u64 
f8f0: 6f 66 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f  offset64;      /
f900: 2a 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74 2e  * 64-bit offset.
f910: 20 20 36 34 20 62 69 74 73 20 6e 65 65 64 65 64    64 bits needed
f920: 20 74 6f 20 63 61 74 63 68 20 6f 76 65 72 66 6c   to catch overfl
f930: 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 48 64  ow */.  int szHd
f940: 72 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  r;         /* Si
f950: 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  ze of the header
f960: 20 73 69 7a 65 20 66 69 65 6c 64 20 61 74 20 73   size field at s
f970: 74 61 72 74 20 6f 66 20 72 65 63 6f 72 64 20 2a  tart of record *
f980: 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c 3b 20 20  /.  int avail;  
f990: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
f9a0: 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61   of bytes of ava
f9b0: 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 0a  ilable data */..
f9c0: 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
f9d0: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
f9e0: 0a 20 20 70 43 20 3d 20 30 3b 0a 20 20 6d 65 6d  .  pC = 0;.  mem
f9f0: 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
fa00: 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 61  zeof(sMem));.  a
fa10: 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43 75  ssert( p1<p->nCu
fa20: 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
fa30: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
fa40: 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
fa50: 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d  );.  pDest = &p-
fa60: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
fa70: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
fa80: 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  (pDest, MEM_Null
fa90: 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c  );..  /* This bl
faa0: 6f 63 6b 20 73 65 74 73 20 74 68 65 20 76 61 72  ock sets the var
fab0: 69 61 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a  iable payloadSiz
fac0: 65 20 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61  e to be the tota
fad0: 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  l number of.  **
fae0: 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
faf0: 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  cord..  **.  ** 
fb00: 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 62  zRec is set to b
fb10: 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74  e the complete t
fb20: 65 78 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ext of the recor
fb30: 64 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c  d if it is avail
fb40: 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63  able..  ** The c
fb50: 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74  omplete record t
fb60: 65 78 74 20 69 73 20 61 6c 77 61 79 73 20 61 76  ext is always av
fb70: 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75  ailable for pseu
fb80: 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49  do-tables.  ** I
fb90: 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 20  f the record is 
fba0: 73 74 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73  stored in a curs
fbb0: 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  or, the complete
fbc0: 20 72 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a   record text.  *
fbd0: 2a 20 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c  * might be avail
fbe0: 61 62 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d  able in the  pC-
fbf0: 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72  >aRow cache.  Or
fc00: 20 69 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65   it might not be
fc10: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61  ..  ** If the da
fc20: 74 61 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  ta is unavailabl
fc30: 65 2c 20 20 7a 52 65 63 20 69 73 20 73 65 74 20  e,  zRec is set 
fc40: 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20  to NULL..  **.  
fc50: 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75  ** We also compu
fc60: 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
fc70: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
fc80: 72 65 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72  record.  For cur
fc90: 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e  sors,.  ** the n
fca0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
fcb0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
fcc0: 65 20 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69  e VdbeCursor.nFi
fcd0: 65 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a  eld element..  *
fce0: 2f 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  /.  pC = p->apCs
fcf0: 72 5b 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  r[p1];.  assert(
fd00: 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65   pC!=0 );.#ifnde
fd10: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
fd20: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73  RTUALTABLE.  ass
fd30: 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75  ert( pC->pVtabCu
fd40: 72 73 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69  rsor==0 );.#endi
fd50: 66 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72  f.  if( pC->pCur
fd60: 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  sor!=0 ){.    /*
fd70: 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 73   The record is s
fd80: 74 6f 72 65 64 20 69 6e 20 61 20 42 2d 54 72 65  tored in a B-Tre
fd90: 65 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  e */.    rc = sq
fda0: 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
fdb0: 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69  oveto(pC);.    i
fdc0: 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
fdd0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
fde0: 0a 20 20 20 20 7a 52 65 63 20 3d 20 30 3b 0a 20  .    zRec = 0;. 
fdf0: 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70     pCrsr = pC->p
fe00: 43 75 72 73 6f 72 3b 0a 20 20 20 20 69 66 28 20  Cursor;.    if( 
fe10: 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
fe20: 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65       payloadSize
fe30: 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 0;.    }else 
fe40: 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61  if( pC->cacheSta
fe50: 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72  tus==p->cacheCtr
fe60: 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61   ){.      payloa
fe70: 64 53 69 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c  dSize = pC->payl
fe80: 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a  oadSize;.      z
fe90: 52 65 63 20 3d 20 28 63 68 61 72 2a 29 70 43 2d  Rec = (char*)pC-
fea0: 3e 61 52 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65  >aRow;.    }else
feb0: 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78   if( pC->isIndex
fec0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
fed0: 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
fee0: 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a  rsr, &payloadSiz
fef0: 65 36 34 29 3b 0a 20 20 20 20 20 20 2f 2a 20 73  e64);.      /* s
ff00: 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65  qlite3BtreeParse
ff10: 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67  CellPtr() uses g
ff20: 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20  etVarint32() to 
ff30: 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20  extract the.    
ff40: 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a    ** payload siz
ff50: 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f  e, so it is impo
ff60: 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f  ssible for paylo
ff70: 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20  adSize64 to be. 
ff80: 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74       ** larger t
ff90: 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a  han 32 bits. */.
ffa0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
ffb0: 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53  ayloadSize64 & S
ffc0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d  QLITE_MAX_U32)==
ffd0: 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u64)payloadSize
ffe0: 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61 79 6c  64 );.      payl
fff0: 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70  oadSize = (u32)p
10000 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20  ayloadSize64;.  
10010 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
10020 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
10030 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
10040 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  oadSize);.    }.
10050 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d      nField = pC-
10060 3e 6e 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65  >nField;.  }else
10070 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f 54   if( pC->pseudoT
10080 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54  able ){.    /* T
10090 68 65 20 72 65 63 6f 72 64 20 69 73 20 74 68 65  he record is the
100a0 20 73 6f 6c 65 20 65 6e 74 72 79 20 6f 66 20 61   sole entry of a
100b0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
100c0 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65  .    payloadSize
100d0 20 3d 20 70 43 2d 3e 6e 44 61 74 61 3b 0a 20 20   = pC->nData;.  
100e0 20 20 7a 52 65 63 20 3d 20 70 43 2d 3e 70 44 61    zRec = pC->pDa
100f0 74 61 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68  ta;.    pC->cach
10100 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
10110 53 54 41 4c 45 3b 0a 20 20 20 20 61 73 73 65 72  STALE;.    asser
10120 74 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d  t( payloadSize==
10130 30 20 7c 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a  0 || zRec!=0 );.
10140 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d      nField = pC-
10150 3e 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 72  >nField;.    pCr
10160 73 72 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  sr = 0;.  }else{
10170 0a 20 20 20 20 2f 2a 20 43 6f 6e 73 69 64 65 72  .    /* Consider
10180 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 4e   the row to be N
10190 55 4c 4c 20 2a 2f 0a 20 20 20 20 70 61 79 6c 6f  ULL */.    paylo
101a0 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 7d 0a  adSize = 0;.  }.
101b0 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64  .  /* If payload
101c0 53 69 7a 65 20 69 73 20 30 2c 20 74 68 65 6e 20  Size is 0, then 
101d0 6a 75 73 74 20 73 74 6f 72 65 20 61 20 4e 55 4c  just store a NUL
101e0 4c 20 2a 2f 0a 20 20 69 66 28 20 70 61 79 6c 6f  L */.  if( paylo
101f0 61 64 53 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20  adSize==0 ){.   
10200 20 61 73 73 65 72 74 28 20 70 44 65 73 74 2d 3e   assert( pDest->
10210 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29  flags&MEM_Null )
10220 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f  ;.    goto op_co
10230 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20  lumn_out;.  }.  
10240 61 73 73 65 72 74 28 20 64 62 2d 3e 61 4c 69 6d  assert( db->aLim
10250 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
10260 4c 45 4e 47 54 48 5d 3e 3d 30 20 29 3b 0a 20 20  LENGTH]>=0 );.  
10270 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20  if( payloadSize 
10280 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  > (u32)db->aLimi
10290 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
102a0 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
102b0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
102c0 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46  .  assert( p2<nF
102d0 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65  ield );..  /* Re
102e0 61 64 20 61 6e 64 20 70 61 72 73 65 20 74 68 65  ad and parse the
102f0 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20   table header.  
10300 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
10310 73 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20  s of the parse. 
10320 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63   ** into the rec
10330 6f 72 64 20 68 65 61 64 65 72 20 63 61 63 68 65  ord header cache
10340 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63   fields of the c
10350 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54  ursor..  */.  aT
10360 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b  ype = pC->aType;
10370 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65  .  if( pC->cache
10380 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65  Status==p->cache
10390 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73  Ctr ){.    aOffs
103a0 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74  et = pC->aOffset
103b0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
103c0 73 73 65 72 74 28 61 54 79 70 65 29 3b 0a 20 20  ssert(aType);.  
103d0 20 20 61 76 61 69 6c 20 3d 20 30 3b 0a 20 20 20    avail = 0;.   
103e0 20 70 43 2d 3e 61 4f 66 66 73 65 74 20 3d 20 61   pC->aOffset = a
103f0 4f 66 66 73 65 74 20 3d 20 26 61 54 79 70 65 5b  Offset = &aType[
10400 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 70 43 2d  nField];.    pC-
10410 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70  >payloadSize = p
10420 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
10430 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
10440 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 0a  = p->cacheCtr;..
10450 20 20 20 20 2f 2a 20 46 69 67 75 72 65 20 6f 75      /* Figure ou
10460 74 20 68 6f 77 20 6d 61 6e 79 20 62 79 74 65 73  t how many bytes
10470 20 61 72 65 20 69 6e 20 74 68 65 20 68 65 61 64   are in the head
10480 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 52  er */.    if( zR
10490 65 63 20 29 7b 0a 20 20 20 20 20 20 7a 44 61 74  ec ){.      zDat
104a0 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20 20 7d 65  a = zRec;.    }e
104b0 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 70  lse{.      if( p
104c0 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
104d0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63        zData = (c
104e0 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65  har*)sqlite3Btre
104f0 65 4b 65 79 46 65 74 63 68 28 70 43 72 73 72 2c  eKeyFetch(pCrsr,
10500 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
10510 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a  }else{.        z
10520 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71  Data = (char*)sq
10530 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65  lite3BtreeDataFe
10540 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
10550 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  l);.      }.    
10560 20 20 2f 2a 20 49 66 20 4b 65 79 46 65 74 63 68    /* If KeyFetch
10570 28 29 2f 44 61 74 61 46 65 74 63 68 28 29 20 6d  ()/DataFetch() m
10580 61 6e 61 67 65 64 20 74 6f 20 67 65 74 20 74 68  anaged to get th
10590 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64  e entire payload
105a0 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 20  ,.      ** save 
105b0 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e 20 74  the payload in t
105c0 68 65 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68  he pC->aRow cach
105d0 65 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 73 61  e.  That will sa
105e0 76 65 20 75 73 20 66 72 6f 6d 0a 20 20 20 20 20  ve us from.     
105f0 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f 20 6d 61   ** having to ma
10600 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 63 61  ke additional ca
10610 6c 6c 73 20 74 6f 20 66 65 74 63 68 20 74 68 65  lls to fetch the
10620 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74 69 6f 6e   content portion
10630 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   of.      ** the
10640 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a   record..      *
10650 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
10660 61 76 61 69 6c 3e 3d 30 20 29 3b 0a 20 20 20 20  avail>=0 );.    
10670 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a    if( payloadSiz
10680 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20  e <= (u32)avail 
10690 29 7b 0a 20 20 20 20 20 20 20 20 7a 52 65 63 20  ){.        zRec 
106a0 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 20  = zData;.       
106b0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a   pC->aRow = (u8*
106c0 29 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 7d 65  )zData;.      }e
106d0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  lse{.        pC-
106e0 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20  >aRow = 0;.     
106f0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20   }.    }.    /* 
10700 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73  The following as
10710 73 65 72 74 20 69 73 20 74 72 75 65 20 69 6e 20  sert is true in 
10720 61 6c 6c 20 63 61 73 65 73 20 61 63 63 65 70 74  all cases accept
10730 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65   when.    ** the
10740 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
10750 61 73 20 62 65 65 6e 20 63 6f 72 72 75 70 74 65  as been corrupte
10760 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20  d externally..  
10770 20 20 2a 2a 20 20 20 20 61 73 73 65 72 74 28 20    **    assert( 
10780 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c  zRec!=0 || avail
10790 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c  >=payloadSize ||
107a0 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a   avail>=9 ); */.
107b0 20 20 20 20 73 7a 48 64 72 20 3d 20 67 65 74 56      szHdr = getV
107c0 61 72 69 6e 74 33 32 28 28 75 38 2a 29 7a 44 61  arint32((u8*)zDa
107d0 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20  ta, offset);..  
107e0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
107f0 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
10800 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20  e has not given 
10810 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68  us an oversize h
10820 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f  eader..    ** Do
10830 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f   this now to avo
10840 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d  id an oversize m
10850 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
10860 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
10870 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
10880 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
10890 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
108a0 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
108b0 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75  e.    ** types u
108c0 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
108d0 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
108e0 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
108f0 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
10900 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74  ** them, respect
10910 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d  ively.  So the m
10920 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65  aximum header le
10930 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f  ngth results fro
10940 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74  m a.    ** 3-byt
10950 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
10960 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
10970 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
10980 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a  plus three.    *
10990 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f  * extra bytes fo
109a0 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e  r the header len
109b0 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37  gth itself.  327
109c0 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37  68*3 + 3 = 98307
109d0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
109e0 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20   offset > 98307 
109f0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
10a00 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
10a10 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  T;.      goto op
10a20 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
10a30 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 75   }..    /* Compu
10a40 74 65 20 69 6e 20 6c 65 6e 20 74 68 65 20 6e 75  te in len the nu
10a50 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
10a60 20 64 61 74 61 20 77 65 20 6e 65 65 64 20 74 6f   data we need to
10a70 20 72 65 61 64 20 69 6e 20 6f 72 64 65 72 0a 20   read in order. 
10a80 20 20 20 2a 2a 20 74 6f 20 67 65 74 20 6e 46 69     ** to get nFi
10a90 65 6c 64 20 74 79 70 65 20 76 61 6c 75 65 73 2e  eld type values.
10aa0 20 20 6f 66 66 73 65 74 20 69 73 20 61 6e 20 75    offset is an u
10ab0 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68  pper bound on th
10ac0 69 73 2e 20 20 42 75 74 0a 20 20 20 20 2a 2a 20  is.  But.    ** 
10ad0 6e 46 69 65 6c 64 20 6d 69 67 68 74 20 62 65 20  nField might be 
10ae0 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 20 6c 65  significantly le
10af0 73 73 20 74 68 61 6e 20 74 68 65 20 74 72 75 65  ss than the true
10b00 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
10b10 6e 73 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65  ns.    ** in the
10b20 20 74 61 62 6c 65 2c 20 61 6e 64 20 69 6e 20 74   table, and in t
10b30 68 61 74 20 63 61 73 65 2c 20 35 2a 6e 46 69 65  hat case, 5*nFie
10b40 6c 64 2b 33 20 6d 69 67 68 74 20 62 65 20 73 6d  ld+3 might be sm
10b50 61 6c 6c 65 72 20 74 68 61 6e 20 6f 66 66 73 65  aller than offse
10b60 74 2e 0a 20 20 20 20 2a 2a 20 57 65 20 77 61 6e  t..    ** We wan
10b70 74 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c 65  t to minimize le
10b80 6e 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 69  n in order to li
10b90 6d 69 74 20 74 68 65 20 73 69 7a 65 20 6f 66 20  mit the size of 
10ba0 74 68 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a  the memory.    *
10bb0 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65 73  * allocation, es
10bc0 70 65 63 69 61 6c 6c 79 20 69 66 20 61 20 63 6f  pecially if a co
10bd0 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66  rrupt database f
10be0 69 6c 65 20 68 61 73 20 63 61 75 73 65 64 20 6f  ile has caused o
10bf0 66 66 73 65 74 0a 20 20 20 20 2a 2a 20 74 6f 20  ffset.    ** to 
10c00 62 65 20 6f 76 65 72 73 69 7a 65 64 2e 20 4f 66  be oversized. Of
10c10 66 73 65 74 20 69 73 20 6c 69 6d 69 74 65 64 20  fset is limited 
10c20 74 6f 20 39 38 33 30 37 20 61 62 6f 76 65 2e 20  to 98307 above. 
10c30 20 42 75 74 20 39 38 33 30 37 20 6d 69 67 68 74   But 98307 might
10c40 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 65 78  .    ** still ex
10c50 63 65 65 64 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f  ceed Robson memo
10c60 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69  ry allocation li
10c70 6d 69 74 73 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e  mits on some con
10c80 66 69 67 75 72 61 74 69 6f 6e 73 2e 0a 20 20 20  figurations..   
10c90 20 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 74   ** On systems t
10ca0 68 61 74 20 63 61 6e 6e 6f 74 20 74 6f 6c 65 72  hat cannot toler
10cb0 61 74 65 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79  ate large memory
10cc0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e 46   allocations, nF
10cd0 69 65 6c 64 2a 35 2b 33 0a 20 20 20 20 2a 2a 20  ield*5+3.    ** 
10ce0 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6d  will likely be m
10cf0 75 63 68 20 73 6d 61 6c 6c 65 72 20 73 69 6e 63  uch smaller sinc
10d00 65 20 6e 46 69 65 6c 64 20 77 69 6c 6c 20 6c 69  e nField will li
10d10 6b 65 6c 79 20 62 65 20 6c 65 73 73 20 74 68 61  kely be less tha
10d20 6e 0a 20 20 20 20 2a 2a 20 32 30 20 6f 72 20 73  n.    ** 20 or s
10d30 6f 2e 20 20 54 68 69 73 20 69 6e 73 75 72 65 73  o.  This insures
10d40 20 74 68 61 74 20 52 6f 62 73 6f 6e 20 6d 65 6d   that Robson mem
10d50 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c  ory allocation l
10d60 69 6d 69 74 73 20 61 72 65 0a 20 20 20 20 2a 2a  imits are.    **
10d70 20 6e 6f 74 20 65 78 63 65 65 64 65 64 20 65 76   not exceeded ev
10d80 65 6e 20 66 6f 72 20 63 6f 72 72 75 70 74 20 64  en for corrupt d
10d90 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a 20  atabase files.. 
10da0 20 20 20 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d 20     */.    len = 
10db0 6e 46 69 65 6c 64 2a 35 20 2b 20 33 3b 0a 20 20  nField*5 + 3;.  
10dc0 20 20 69 66 28 20 6c 65 6e 20 3e 20 28 69 6e 74    if( len > (int
10dd0 29 6f 66 66 73 65 74 20 29 20 6c 65 6e 20 3d 20  )offset ) len = 
10de0 28 69 6e 74 29 6f 66 66 73 65 74 3b 0a 0a 20 20  (int)offset;..  
10df0 20 20 2f 2a 20 54 68 65 20 4b 65 79 46 65 74 63    /* The KeyFetc
10e00 68 28 29 20 6f 72 20 44 61 74 61 46 65 74 63 68  h() or DataFetch
10e10 28 29 20 61 62 6f 76 65 20 61 72 65 20 66 61 73  () above are fas
10e20 74 20 61 6e 64 20 77 69 6c 6c 20 67 65 74 20 74  t and will get t
10e30 68 65 20 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a  he entire.    **
10e40 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 69   record header i
10e50 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e 20 20 42  n most cases.  B
10e60 75 74 20 74 68 65 79 20 77 69 6c 6c 20 66 61 69  ut they will fai
10e70 6c 20 74 6f 20 67 65 74 20 74 68 65 20 63 6f 6d  l to get the com
10e80 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72 65 63  plete.    ** rec
10e90 6f 72 64 20 68 65 61 64 65 72 20 69 66 20 74 68  ord header if th
10ea0 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
10eb0 64 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20  does not fit on 
10ec0 61 20 73 69 6e 67 6c 65 20 70 61 67 65 0a 20 20  a single page.  
10ed0 20 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d 54 72    ** in the B-Tr
10ee0 65 65 2e 20 20 57 68 65 6e 20 74 68 61 74 20 68  ee.  When that h
10ef0 61 70 70 65 6e 73 2c 20 75 73 65 20 73 71 6c 69  appens, use sqli
10f00 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
10f10 72 65 65 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20  ree() to.    ** 
10f20 61 63 71 75 69 72 65 20 74 68 65 20 63 6f 6d 70  acquire the comp
10f30 6c 65 74 65 20 68 65 61 64 65 72 20 74 65 78 74  lete header text
10f40 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
10f50 20 21 7a 52 65 63 20 26 26 20 61 76 61 69 6c 3c   !zRec && avail<
10f60 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 73 4d 65  len ){.      sMe
10f70 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20  m.flags = 0;.   
10f80 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a     sMem.db = 0;.
10f90 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
10fa0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
10fb0 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6c 65 6e  ee(pCrsr, 0, len
10fc0 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26  , pC->isIndex, &
10fd0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28  sMem);.      if(
10fe0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
10ff0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
11000 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
11010 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74      }.      zDat
11020 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  a = sMem.z;.    
11030 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20  }.    zEndHdr = 
11040 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6c 65 6e  (u8 *)&zData[len
11050 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20 28 75  ];.    zIdx = (u
11060 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48 64 72  8 *)&zData[szHdr
11070 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20  ];..    /* Scan 
11080 74 68 65 20 68 65 61 64 65 72 20 61 6e 64 20 75  the header and u
11090 73 65 20 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e  se it to fill in
110a0 20 74 68 65 20 61 54 79 70 65 5b 5d 20 61 6e 64   the aType[] and
110b0 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a   aOffset[].    *
110c0 2a 20 61 72 72 61 79 73 2e 20 20 61 54 79 70 65  * arrays.  aType
110d0 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e  [i] will contain
110e0 20 74 68 65 20 74 79 70 65 20 69 6e 74 65 67 65   the type intege
110f0 72 20 66 6f 72 20 74 68 65 20 69 2d 74 68 0a 20  r for the i-th. 
11100 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64     ** column and
11110 20 61 4f 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c   aOffset[i] will
11120 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f 66 66   contain the off
11130 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
11140 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66  inning.    ** of
11150 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 74   the record to t
11160 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  he start of the 
11170 64 61 74 61 20 66 6f 72 20 74 68 65 20 69 2d 74  data for the i-t
11180 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a  h column.    */.
11190 20 20 20 20 6f 66 66 73 65 74 36 34 20 3d 20 6f      offset64 = o
111a0 66 66 73 65 74 3b 0a 20 20 20 20 66 6f 72 28 69  ffset;.    for(i
111b0 3d 30 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b  =0; i<nField; i+
111c0 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49  +){.      if( zI
111d0 64 78 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20  dx<zEndHdr ){.  
111e0 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
111f0 20 3d 20 28 75 33 32 29 6f 66 66 73 65 74 36 34   = (u32)offset64
11200 3b 0a 20 20 20 20 20 20 20 20 7a 49 64 78 20 2b  ;.        zIdx +
11210 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 7a 49  = getVarint32(zI
11220 64 78 2c 20 61 54 79 70 65 5b 69 5d 29 3b 0a 20  dx, aType[i]);. 
11230 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20         offset64 
11240 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
11250 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70  rialTypeLen(aTyp
11260 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c  e[i]);.      }el
11270 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49  se{.        /* I
11280 66 20 69 20 69 73 20 6c 65 73 73 20 74 68 61 74  f i is less that
11290 20 6e 46 69 65 6c 64 2c 20 74 68 65 6e 20 74 68   nField, then th
112a0 65 72 65 20 61 72 65 20 6c 65 73 73 20 66 69 65  ere are less fie
112b0 6c 64 73 20 69 6e 20 74 68 69 73 0a 20 20 20 20  lds in this.    
112c0 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 74 68      ** record th
112d0 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  an SetNumColumns
112e0 20 69 6e 64 69 63 61 74 65 64 20 74 68 65 72 65   indicated there
112f0 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   are columns in 
11300 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  the.        ** t
11310 61 62 6c 65 2e 20 53 65 74 20 74 68 65 20 6f 66  able. Set the of
11320 66 73 65 74 20 66 6f 72 20 61 6e 79 20 65 78 74  fset for any ext
11330 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70  ra columns not p
11340 72 65 73 65 6e 74 20 69 6e 0a 20 20 20 20 20 20  resent in.      
11350 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20    ** the record 
11360 74 6f 20 30 2e 20 54 68 69 73 20 74 65 6c 6c 73  to 0. This tells
11370 20 63 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20 73   code below to s
11380 74 6f 72 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20  tore a NULL.    
11390 20 20 20 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f      ** instead o
113a0 66 20 64 65 73 65 72 69 61 6c 69 7a 69 6e 67 20  f deserializing 
113b0 61 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  a value from the
113c0 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 20   record..       
113d0 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 4f 66 66   */.        aOff
113e0 73 65 74 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20  set[i] = 0;.    
113f0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
11400 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
11410 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ase(&sMem);.    
11420 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  sMem.flags = MEM
11430 5f 4e 75 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49  _Null;..    /* I
11440 66 20 77 65 20 68 61 76 65 20 72 65 61 64 20 6d  f we have read m
11450 6f 72 65 20 68 65 61 64 65 72 20 64 61 74 61 20  ore header data 
11460 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e  than was contain
11470 65 64 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  ed in the header
11480 2c 0a 20 20 20 20 2a 2a 20 6f 72 20 69 66 20 74  ,.    ** or if t
11490 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61  he end of the la
114a0 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73  st field appears
114b0 20 74 6f 20 62 65 20 70 61 73 74 20 74 68 65 20   to be past the 
114c0 65 6e 64 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  end of the.    *
114d0 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20  * record, or if 
114e0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c  the end of the l
114f0 61 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72  ast field appear
11500 73 20 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74  s to be before t
11510 68 65 20 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66  he end.    ** of
11520 20 74 68 65 20 72 65 63 6f 72 64 20 28 77 68 65   the record (whe
11530 6e 20 61 6c 6c 20 66 69 65 6c 64 73 20 70 72 65  n all fields pre
11540 73 65 6e 74 29 2c 20 74 68 65 6e 20 77 65 20 6d  sent), then we m
11550 75 73 74 20 62 65 20 64 65 61 6c 69 6e 67 20 0a  ust be dealing .
11560 20 20 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f      ** with a co
11570 72 72 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a  rrupt database..
11580 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
11590 7a 49 64 78 20 3e 20 7a 45 6e 64 48 64 72 29 7c  zIdx > zEndHdr)|
115a0 7c 20 28 6f 66 66 73 65 74 36 34 20 3e 20 70 61  | (offset64 > pa
115b0 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
115c0 7c 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64  || (zIdx==zEndHd
115d0 72 20 26 26 20 6f 66 66 73 65 74 36 34 21 3d 28  r && offset64!=(
115e0 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 29  u64)payloadSize)
115f0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
11600 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
11610 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f  PT;.      goto o
11620 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
11630 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47 65    }.  }..  /* Ge
11640 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 66  t the column inf
11650 6f 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f 66  ormation. If aOf
11660 66 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d  fset[p2] is non-
11670 7a 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a 2a  zero, then .  **
11680 20 64 65 73 65 72 69 61 6c 69 7a 65 20 74 68 65   deserialize the
11690 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
116a0 72 65 63 6f 72 64 2e 20 49 66 20 61 4f 66 66 73  record. If aOffs
116b0 65 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c 0a  et[p2] is zero,.
116c0 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 72 65 20    ** then there 
116d0 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20 66  are not enough f
116e0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
116f0 6f 72 64 20 74 6f 20 73 61 74 69 73 66 79 20 74  ord to satisfy t
11700 68 65 0a 20 20 2a 2a 20 72 65 71 75 65 73 74 2e  he.  ** request.
11710 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
11720 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 4e 55  set the value NU
11730 4c 4c 20 6f 72 20 74 6f 20 50 34 20 69 66 20 50  LL or to P4 if P
11740 34 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69 6e  4 is.  ** a poin
11750 74 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62 6a  ter to a Mem obj
11760 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ect..  */.  if( 
11770 61 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a 20  aOffset[p2] ){. 
11780 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
11790 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
117a0 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20  if( zRec ){.    
117b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
117c0 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28  ReleaseExternal(
117d0 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 73 71  pDest);.      sq
117e0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
117f0 65 74 28 28 75 38 20 2a 29 26 7a 52 65 63 5b 61  et((u8 *)&zRec[a
11800 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61 54 79  Offset[p2]], aTy
11810 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
11820 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
11830 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64   len = sqlite3Vd
11840 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
11850 61 54 79 70 65 5b 70 32 5d 29 3b 0a 20 20 20 20  aType[p2]);.    
11860 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
11870 4d 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73  Move(&sMem, pDes
11880 74 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  t);.      rc = s
11890 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
118a0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f  mBtree(pCrsr, aO
118b0 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
118c0 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d  pC->isIndex, &sM
118d0 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  em);.      if( r
118e0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
118f0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
11900 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
11910 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20    }.      zData 
11920 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20  = sMem.z;.      
11930 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
11940 6c 47 65 74 28 28 75 38 2a 29 7a 44 61 74 61 2c  lGet((u8*)zData,
11950 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73   aType[p2], pDes
11960 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 44  t);.    }.    pD
11970 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
11980 69 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ing;.  }else{.  
11990 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
119a0 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20  e==P4_MEM ){.   
119b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
119c0 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65  mShallowCopy(pDe
119d0 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d  st, pOp->p4.pMem
119e0 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
119f0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
11a00 61 73 73 65 72 74 28 20 70 44 65 73 74 2d 3e 66  assert( pDest->f
11a10 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b  lags&MEM_Null );
11a20 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
11a30 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61 6c   If we dynamical
11a40 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  ly allocated spa
11a50 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  ce to hold the d
11a60 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 2a 2a  ata (in the.  **
11a70 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
11a80 72 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20  romBtree() call 
11a90 61 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e  above) then tran
11aa0 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20  sfer control of 
11ab0 74 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61 6d 69  that.  ** dynami
11ac0 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  cally allocated 
11ad0 73 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68  space over to th
11ae0 65 20 70 44 65 73 74 20 73 74 72 75 63 74 75 72  e pDest structur
11af0 65 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 65  e..  ** This pre
11b00 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20 63  vents a memory c
11b10 6f 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  opy..  */.  if( 
11b20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a  sMem.zMalloc ){.
11b30 20 20 20 20 61 73 73 65 72 74 28 20 73 4d 65 6d      assert( sMem
11b40 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  .z==sMem.zMalloc
11b50 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11b60 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26  !(pDest->flags &
11b70 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20   MEM_Dyn) );.   
11b80 20 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74   assert( !(pDest
11b90 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
11ba0 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c  lob|MEM_Str)) ||
11bb0 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e   pDest->z==sMem.
11bc0 7a 20 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  z );.    pDest->
11bd0 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45  flags &= ~(MEM_E
11be0 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29  phem|MEM_Static)
11bf0 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61  ;.    pDest->fla
11c00 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
11c10 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73      pDest->z = s
11c20 4d 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65 73 74  Mem.z;.    pDest
11c30 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d  ->zMalloc = sMem
11c40 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20  .zMalloc;.  }.. 
11c50 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
11c60 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
11c70 65 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f  e(pDest);..op_co
11c80 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41  lumn_out:.  UPDA
11c90 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
11ca0 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
11cb0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
11cc0 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
11cd0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11ce0 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20   Affinity P1 P2 
11cf0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70  * P4 *.**.** App
11d00 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f  ly affinities to
11d10 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72   a range of P2 r
11d20 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
11d30 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a  g with P1..**.**
11d40 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20   P4 is a string 
11d50 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
11d60 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20  cters long. The 
11d70 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
11d80 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
11d90 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
11da0 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
11db0 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
11dc0 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
11dd0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
11de0 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73  he range..*/.cas
11df0 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b  e OP_Affinity: {
11e00 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
11e10 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66  ty;   /* The aff
11e20 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
11e30 69 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ied */.  Mem *pD
11e40 61 74 61 30 3b 20 20 20 20 20 20 20 2f 2a 20 46  ata0;       /* F
11e50 69 72 73 74 20 72 65 67 69 73 74 65 72 20 74 6f  irst register to
11e60 20 77 68 69 63 68 20 74 6f 20 61 70 70 6c 79 20   which to apply 
11e70 61 66 66 69 6e 69 74 79 20 2a 2f 0a 20 20 4d 65  affinity */.  Me
11e80 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20  m *pLast;       
11e90 20 2f 2a 20 4c 61 73 74 20 72 65 67 69 73 74 65   /* Last registe
11ea0 72 20 74 6f 20 77 68 69 63 68 20 74 6f 20 61 70  r to which to ap
11eb0 70 6c 79 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a  ply affinity */.
11ec0 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20    Mem *pRec;    
11ed0 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
11ee0 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 7a  register */..  z
11ef0 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
11f00 70 34 2e 7a 3b 0a 20 20 70 44 61 74 61 30 20 3d  p4.z;.  pData0 =
11f10 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
11f20 31 5d 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70  1];.  pLast = &p
11f30 44 61 74 61 30 5b 70 4f 70 2d 3e 70 32 2d 31 5d  Data0[pOp->p2-1]
11f40 3b 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61  ;.  for(pRec=pDa
11f50 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74  ta0; pRec<=pLast
11f60 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 45  ; pRec++){.    E
11f70 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b  xpandBlob(pRec);
11f80 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
11f90 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69 6e 69  ty(pRec, zAffini
11fa0 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30 5d 2c  ty[pRec-pData0],
11fb0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a   encoding);.  }.
11fc0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11fd0 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72  pcode: MakeRecor
11fe0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
11ff0 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32  **.** Convert P2
12000 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e   registers begin
12010 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74  ning with P1 int
12020 6f 20 61 20 73 69 6e 67 6c 65 20 65 6e 74 72 79  o a single entry
12030 0a 2a 2a 20 73 75 69 74 61 62 6c 65 20 66 6f 72  .** suitable for
12040 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72   use as a data r
12050 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62  ecord in a datab
12060 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20  ase table or as 
12070 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69  a key.** in an i
12080 6e 64 65 78 2e 20 20 54 68 65 20 64 65 74 61 69  ndex.  The detai
12090 6c 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 61 74  ls of the format
120a0 20 61 72 65 20 69 72 72 65 6c 65 76 61 6e 74 20   are irrelevant 
120b0 61 73 20 6c 6f 6e 67 20 61 73 0a 2a 2a 20 74 68  as long as.** th
120c0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
120d0 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68  de can decode th
120e0 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a  e record later..
120f0 2a 2a 20 52 65 66 65 72 20 74 6f 20 73 6f 75 72  ** Refer to sour
12100 63 65 20 63 6f 64 65 20 63 6f 6d 6d 65 6e 74 73  ce code comments
12110 20 66 6f 72 20 74 68 65 20 64 65 74 61 69 6c 73   for the details
12120 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 0a 2a   of the record.*
12130 2a 20 66 6f 72 6d 61 74 2e 0a 2a 2a 0a 2a 2a 20  * format..**.** 
12140 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69  P4 may be a stri
12150 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
12160 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20  aracters long.  
12170 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65  The nth characte
12180 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
12190 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
121a0 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
121b0 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
121c0 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68  used for the nth
121d0 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
121e0 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
121f0 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
12200 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
12210 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
12220 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
12230 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
12240 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
12250 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
12260 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
12270 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
12280 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
12290 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65  ty NONE..*/.case
122a0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
122b0 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
122c0 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
122d0 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
122e0 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
122f0 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
12300 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
12310 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
12320 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
12330 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
12340 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12350 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
12360 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
12370 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
12380 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
12390 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
123a0 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
123b0 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
123c0 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
123d0 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
123e0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
123f0 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
12400 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12410 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
12420 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
12430 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
12440 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
12450 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
12460 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
12470 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
12480 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
12490 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
124a0 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
124b0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
124c0 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
124d0 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
124e0 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
124f0 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
12500 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
12510 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
12520 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
12530 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12540 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
12550 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
12560 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
12570 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
12580 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
12590 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
125a0 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
125b0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
125c0 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
125d0 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
125e0 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
125f0 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
12600 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
12610 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  rd[] */.  int le
12620 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
12630 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20   /* Length of a 
12640 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41  field */..  /* A
12650 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f  ssuming the reco
12660 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69  rd contains N fi
12670 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64  elds, the record
12680 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20   format looks.  
12690 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20  ** like this:.  
126a0 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  **.  ** --------
126b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126f0 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65  .  ** | hdr-size
12700 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65   | type 0 | type
12710 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20   1 | ... | type 
12720 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e  N-1 | data0 | ..
12730 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a  . | data N-1 | .
12740 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
12750 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12760 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12770 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12780 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
12790 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20  **.  ** Data(0) 
127a0 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  is taken from re
127b0 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61  gister P1.  Data
127c0 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72  (1) comes from r
127d0 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a  egister P1+1.  *
127e0 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a  * and so froth..
127f0 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74    **.  ** Each t
12800 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76  ype field is a v
12810 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69  arint representi
12820 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79  ng the serial ty
12830 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20  pe of the .  ** 
12840 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61  corresponding da
12850 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20  ta element (see 
12860 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
12870 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20  lType()). The.  
12880 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c  ** hdr-size fiel
12890 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69  d is also a vari
128a0 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
128b0 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
128c0 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f  beginning.  ** o
128d0 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
128e0 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44  data0..  */.  nD
128f0 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ata = 0;        
12900 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
12910 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
12920 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b  e */.  nHdr = 0;
12930 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12940 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
12950 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a  header space */.
12960 20 20 6e 42 79 74 65 20 3d 20 30 3b 20 20 20 20    nByte = 0;    
12970 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
12980 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
12990 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
129a0 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20   nZero = 0;     
129b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
129c0 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
129d0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
129e0 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64  cord */.  nField
129f0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41   = pOp->p1;.  zA
12a00 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
12a10 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  4.z;.  assert( n
12a20 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e  Field>0 && pOp->
12a30 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
12a40 6e 46 69 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b  nField<=p->nMem+
12a50 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20  1 );.  pData0 = 
12a60 26 70 2d 3e 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d  &p->aMem[nField]
12a70 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  ;.  nField = pOp
12a80 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20  ->p2;.  pLast = 
12a90 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31  &pData0[nField-1
12aa0 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74  ];.  file_format
12ab0 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   = p->minWriteFi
12ac0 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20  leFormat;..  /* 
12ad0 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
12ae0 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
12af0 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
12b00 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
12b10 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
12b20 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
12b30 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
12b40 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
12b50 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b  for(pRec=pData0;
12b60 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52   pRec<=pLast; pR
12b70 65 63 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a  ec++){.    if( z
12b80 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  Affinity ){.    
12b90 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
12ba0 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b  pRec, zAffinity[
12bb0 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e  pRec-pData0], en
12bc0 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20  coding);.    }. 
12bd0 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
12be0 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70  gs&MEM_Zero && p
12bf0 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20  Rec->n>0 ){.    
12c00 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
12c10 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
12c20 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72 69  ;.    }.    seri
12c30 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
12c40 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
12c50 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
12c60 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71  t);.    len = sq
12c70 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
12c80 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  ypeLen(serial_ty
12c90 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b  pe);.    nData +
12ca0 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20  = len;.    nHdr 
12cb0 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  += sqlite3Varint
12cc0 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
12cd0 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
12ce0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
12cf0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c   ){.      /* Onl
12d00 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c  y pure zero-fill
12d10 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65 20  ed BLOBs can be 
12d20 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f 70  input to this Op
12d30 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57  code..      ** W
12d40 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62  e do not allow b
12d50 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65 66  lobs with a pref
12d60 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69  ix and a zero-fi
12d70 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20  lled tail. */.  
12d80 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
12d90 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
12da0 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29 7b  }else if( len ){
12db0 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  .      nZero = 0
12dc0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
12dd0 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61  * Add the initia
12de0 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20  l header varint 
12df0 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69  and total the si
12e00 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20  ze */.  nHdr += 
12e10 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
12e20 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
12e30 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c  ;.  if( nVarint<
12e40 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
12e50 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e 48  (nHdr) ){.    nH
12e60 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
12e70 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e  e = nHdr+nData-n
12e80 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74  Zero;.  if( nByt
12e90 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
12ea0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
12eb0 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
12ec0 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
12ed0 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
12ee0 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
12ef0 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
12f00 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
12f10 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
12f20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
12f30 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
12f40 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
12f50 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
12f60 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
12f70 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
12f80 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
12f90 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
12fa0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
12fb0 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  w() could clobbe
12fc0 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
12fd0 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
12fe0 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
12ff0 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c  Op->p3<pOp->p1 |
13000 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
13010 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  p1+pOp->p2 );.  
13020 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
13030 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
13040 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
13050 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
13060 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67  yte, 0) ){.    g
13070 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
13080 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
13090 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
130a0 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
130b0 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
130c0 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
130d0 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66  cord, nHdr);.  f
130e0 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
130f0 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
13100 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72 69 61 6c  c++){.    serial
13110 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
13120 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
13130 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29  ec, file_format)
13140 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  ;.    i += putVa
13150 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
13160 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
13170 70 65 29 3b 20 20 20 20 20 20 2f 2a 20 73 65 72  pe);      /* ser
13180 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a  ial type */.  }.
13190 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61    for(pRec=pData
131a0 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20  0; pRec<=pLast; 
131b0 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72  pRec++){  /* ser
131c0 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20 20 20 20  ial data */.    
131d0 69 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  i += sqlite3Vdbe
131e0 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52  SerialPut(&zNewR
131f0 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e 74 29 28  ecord[i], (int)(
13200 6e 42 79 74 65 2d 69 29 2c 20 70 52 65 63 2c 66  nByte-i), pRec,f
13210 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 7d  ile_format);.  }
13220 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 42  .  assert( i==nB
13230 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  yte );..  assert
13240 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
13250 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
13260 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  );.  pOut->n = (
13270 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
13280 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  t->flags = MEM_B
13290 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20  lob | MEM_Dyn;. 
132a0 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b   pOut->xDel = 0;
132b0 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
132c0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
132d0 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
132e0 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
132f0 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
13300 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
13310 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
13320 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
13330 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
13340 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
13350 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
13360 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
13370 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
13380 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
13390 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
133a0 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
133b0 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
133c0 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
133d0 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61  s (an integer va
133e0 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c  lue) in the tabl
133f0 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f  e or index .** o
13400 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
13410 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  P1 in register P
13420 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  2.*/.#ifndef SQL
13430 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
13440 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e  UNT.case OP_Coun
13450 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  t: {         /* 
13460 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
13470 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
13480 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
13490 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70  sr;..  pCrsr = p
134a0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
134b0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
134c0 20 70 43 72 73 72 20 29 7b 0a 20 20 20 20 72 63   pCrsr ){.    rc
134d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
134e0 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e  ount(pCrsr, &nEn
134f0 74 72 79 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  try);.  }else{. 
13500 20 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 0a 20     nEntry = 0;. 
13510 20 7d 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73   }.  pOut->flags
13520 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f   = MEM_Int;.  pO
13530 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79  ut->u.i = nEntry
13540 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
13550 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
13560 53 74 61 74 65 6d 65 6e 74 20 50 31 20 2a 20 2a  Statement P1 * *
13570 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e   * *.**.** Begin
13580 20 61 6e 20 69 6e 64 69 76 69 64 75 61 6c 20 73   an individual s
13590 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
135a0 74 69 6f 6e 20 77 68 69 63 68 20 69 73 20 70 61  tion which is pa
135b0 72 74 20 6f 66 20 61 20 6c 61 72 67 65 72 0a 2a  rt of a larger.*
135c0 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  * transaction.  
135d0 54 68 69 73 20 69 73 20 6e 65 65 64 65 64 20 73  This is needed s
135e0 6f 20 74 68 61 74 20 74 68 65 20 73 74 61 74 65  o that the state
135f0 6d 65 6e 74 0a 2a 2a 20 63 61 6e 20 62 65 20 72  ment.** can be r
13600 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72  olled back after
13610 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75   an error withou
13620 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c  t having to roll
13630 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74   back the.** ent
13640 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
13650 20 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20    The statement 
13660 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c  transaction will
13670 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a   automatically.*
13680 2a 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  * commit when th
13690 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
136a0 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62  .** If the datab
136b0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
136c0 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 61  s currently in a
136d0 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 20 28  utocommit mode (
136e0 74 68 61 74 20 0a 2a 2a 20 69 73 20 74 6f 20 73  that .** is to s
136f0 61 79 2c 20 69 66 20 69 74 20 69 73 20 69 6e 20  ay, if it is in 
13700 62 65 74 77 65 65 6e 20 42 45 47 49 4e 20 61 6e  between BEGIN an
13710 64 20 43 4f 4d 4d 49 54 29 0a 2a 2a 20 61 6e 64  d COMMIT).** and
13720 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
13730 20 6f 74 68 65 72 20 61 63 74 69 76 65 20 73 74   other active st
13740 61 74 65 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20  atements on the 
13750 73 61 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a  same database.**
13760 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65   connection, the
13770 6e 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  n this operation
13780 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 4e 6f   is a no-op.  No
13790 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
137a0 61 63 74 69 6f 6e 0a 2a 2a 20 69 73 20 6e 65 65  action.** is nee
137b0 64 65 64 20 73 69 6e 63 65 20 61 6e 79 20 65 72  ded since any er
137c0 72 6f 72 20 63 61 6e 20 75 73 65 20 74 68 65 20  ror can use the 
137d0 6e 6f 72 6d 61 6c 20 52 4f 4c 4c 42 41 43 4b 20  normal ROLLBACK 
137e0 70 72 6f 63 65 73 73 20 74 6f 0a 2a 2a 20 75 6e  process to.** un
137f0 64 6f 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 0a 2a  do changes..**.*
13800 2a 20 49 66 20 61 20 73 74 61 74 65 6d 65 6e 74  * If a statement
13810 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
13820 73 74 61 72 74 65 64 2c 20 74 68 65 6e 20 61 20  started, then a 
13830 73 74 61 74 65 6d 65 6e 74 20 6a 6f 75 72 6e 61  statement journa
13840 6c 20 66 69 6c 65 0a 2a 2a 20 77 69 6c 6c 20 62  l file.** will b
13850 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20  e allocated and 
13860 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0a 2a 2a 0a  initialized..**.
13870 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74  ** The statement
13880 20 69 73 20 62 65 67 75 6e 20 6f 6e 20 74 68 65   is begun on the
13890 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
138a0 69 74 68 20 69 6e 64 65 78 20 50 31 2e 20 20 54  ith index P1.  T
138b0 68 65 20 6d 61 69 6e 0a 2a 2a 20 64 61 74 61 62  he main.** datab
138c0 61 73 65 20 66 69 6c 65 20 68 61 73 20 61 6e 20  ase file has an 
138d0 69 6e 64 65 78 20 6f 66 20 30 20 61 6e 64 20 74  index of 0 and t
138e0 68 65 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72  he file used for
138f0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
13900 73 0a 2a 2a 20 68 61 73 20 61 6e 20 69 6e 64 65  s.** has an inde
13910 78 20 6f 66 20 31 2e 0a 2a 2f 0a 63 61 73 65 20  x of 1..*/.case 
13920 4f 50 5f 53 74 61 74 65 6d 65 6e 74 3a 20 7b 0a  OP_Statement: {.
13930 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20    Btree *pBt;.  
13940 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
13950 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74  it==0 || db->act
13960 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a  iveVdbeCnt>1 ){.
13970 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
13980 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
13990 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20  1<db->nDb );.   
139a0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
139b0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 21 3d 30  [pOp->p1].pBt!=0
139c0 20 29 3b 0a 20 20 20 20 70 42 74 20 3d 20 64 62   );.    pBt = db
139d0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
139e0 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  Bt;.    assert( 
139f0 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
13a00 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20  Trans(pBt) );.  
13a10 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
13a20 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
13a30 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
13a40 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d    if( p->iStatem
13a50 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ent==0 ){.      
13a60 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61  assert( db->nSta
13a70 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d  tement>=0 && db-
13a80 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29  >nSavepoint>=0 )
13a90 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61  ;.      db->nSta
13aa0 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20  tement++; .     
13ab0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d   p->iStatement =
13ac0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
13ad0 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  + db->nStatement
13ae0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d  ;.    }.    rc =
13af0 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
13b00 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69  inStmt(pBt, p->i
13b10 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 7d 0a  Statement);.  }.
13b20 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
13b30 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74  pcode: Savepoint
13b40 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
13b50 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65  ** Open, release
13b60 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65   or rollback the
13b70 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64   savepoint named
13b80 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 50 34   by parameter P4
13b90 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f  , depending.** o
13ba0 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  n the value of P
13bb0 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77  1. To open a new
13bc0 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
13bd0 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63  0. To release (c
13be0 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69  ommit) an.** exi
13bf0 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c  sting savepoint,
13c00 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f   P1==1, or to ro
13c10 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69  llback an existi
13c20 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d  ng savepoint P1=
13c30 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  =2..*/.case OP_S
13c40 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  avepoint: {.  in
13c50 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20  t p1;           
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13c70 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65   Value of P1 ope
13c80 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rand */.  char *
13c90 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
13ca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
13cb0 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a  e of savepoint *
13cc0 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20  /.  int nName;. 
13cd0 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77   Savepoint *pNew
13ce0 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
13cf0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76  Savepoint;.  Sav
13d00 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20  epoint *pTmp;.  
13d10 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a  int iSavepoint;.
13d20 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20    int ii;..  p1 
13d30 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61  = pOp->p1;.  zNa
13d40 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  me = pOp->p4.z;.
13d50 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  .  /* Assert tha
13d60 74 20 74 68 65 20 70 31 20 70 61 72 61 6d 65 74  t the p1 paramet
13d70 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73  er is valid. Als
13d80 6f 20 74 68 61 74 20 69 66 20 74 68 65 72 65 20  o that if there 
13d90 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20  is no open.  ** 
13da0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
13db0 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62  n there cannot b
13dc0 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73  e any savepoints
13dd0 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  . .  */.  assert
13de0 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
13df0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43  ==0 || db->autoC
13e00 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
13e10 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f  sert( p1==SAVEPO
13e20 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53  INT_BEGIN||p1==S
13e30 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
13e40 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
13e50 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73  ROLLBACK );.  as
13e60 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
13e70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72  oint || db->isTr
13e80 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
13e90 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  nt==0 );.  asser
13ea0 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  t( checkSavepoin
13eb0 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 0a 20  tCount(db) );.. 
13ec0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
13ed0 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20  NT_BEGIN ){.    
13ee0 69 66 28 20 64 62 2d 3e 77 72 69 74 65 56 64 62  if( db->writeVdb
13ef0 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  eCnt>0 ){.      
13f00 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69  /* A new savepoi
13f10 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65  nt cannot be cre
13f20 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72  ated if there ar
13f30 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a  e active write .
13f40 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65        ** stateme
13f50 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72  nts (i.e. open r
13f60 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d  ead/write increm
13f70 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c  ental blob handl
13f80 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  es)..      */.  
13f90 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
13fa0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
13fb0 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70  , db, "cannot op
13fc0 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22  en savepoint - "
13fd0 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
13fe0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
13ff0 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
14000 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
14010 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14020 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33   nName = sqlite3
14030 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b  Strlen30(zName);
14040 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
14050 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
14060 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
14070 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
14080 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
14090 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
140a0 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
140b0 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
140c0 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
140d0 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
140e0 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
140f0 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
14100 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
14110 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
14120 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
14130 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
14140 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
14150 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
14160 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
14170 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
14180 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
14190 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
141a0 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
141b0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
141c0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
141d0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
141e0 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
141f0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
14200 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
14210 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
14220 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20      }.    .     
14230 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
14240 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
14250 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
14260 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
14270 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
14280 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
14290 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
142a0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
142b0 70 4e 65 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  pNew;.      }.  
142c0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
142d0 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b   iSavepoint = 0;
142e0 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68  ..    /* Find th
142f0 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e  e named savepoin
14300 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  t. If there is n
14310 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
14320 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a  , then an.    **
14330 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74   an error is ret
14340 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65  urned to the use
14350 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a  r.  */.    for(.
14360 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
14370 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
14380 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65 70  t; .      pSavep
14390 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53  oint && sqlite3S
143a0 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e  trICmp(pSavepoin
143b0 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29  t->zName, zName)
143c0 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69  ;.      pSavepoi
143d0 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  nt = pSavepoint-
143e0 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20  >pNext.    ){.  
143f0 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b      iSavepoint++
14400 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
14410 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  !pSavepoint ){. 
14420 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
14430 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
14440 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20  g, db, "no such 
14450 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20  savepoint: %s", 
14460 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63  zName);.      rc
14470 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
14480 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 0a  .    }else if( .
14490 20 20 20 20 20 20 20 20 64 62 2d 3e 77 72 69 74          db->writ
144a0 65 56 64 62 65 43 6e 74 3e 30 20 7c 7c 20 28 70  eVdbeCnt>0 || (p
144b0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
144c0 4c 42 41 43 4b 20 26 26 20 64 62 2d 3e 61 63 74  LBACK && db->act
144d0 69 76 65 56 64 62 65 43 6e 74 3e 31 29 20 0a 20  iveVdbeCnt>1) . 
144e0 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49     ){.      /* I
144f0 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
14500 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  e to release (co
14510 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e  mmit) a savepoin
14520 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a  t if there are .
14530 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20        ** active 
14540 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  write statements
14550 2e 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  . It is not poss
14560 69 62 6c 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  ible to rollback
14570 20 61 20 73 61 76 65 70 6f 69 6e 74 0a 20 20 20   a savepoint.   
14580 20 20 20 2a 2a 20 69 66 20 74 68 65 72 65 20 61     ** if there a
14590 72 65 20 61 6e 79 20 61 63 74 69 76 65 20 73 74  re any active st
145a0 61 74 65 6d 65 6e 74 73 20 61 74 20 61 6c 6c 2e  atements at all.
145b0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
145c0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
145d0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
145e0 2c 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e 6e  , .        "cann
145f0 6f 74 20 25 73 20 73 61 76 65 70 6f 69 6e 74 20  ot %s savepoint 
14600 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  - SQL statements
14610 20 69 6e 20 70 72 6f 67 72 65 73 73 22 2c 0a 20   in progress",. 
14620 20 20 20 20 20 20 20 28 70 31 3d 3d 53 41 56 45         (p1==SAVE
14630 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 3f  POINT_ROLLBACK ?
14640 20 22 72 6f 6c 6c 62 61 63 6b 22 3a 20 22 72 65   "rollback": "re
14650 6c 65 61 73 65 22 29 0a 20 20 20 20 20 20 29 3b  lease").      );
14660 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
14670 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
14680 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65  se{..      /* De
14690 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
146a0 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61  or not this is a
146b0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
146c0 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20  epoint. If so,. 
146d0 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73       ** and this
146e0 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f   is a RELEASE co
146f0 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20  mmand, then the 
14700 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
14710 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73  ion .      ** is
14720 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20   committed. .   
14730 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20     */.      int 
14740 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  isTransaction = 
14750 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
14760 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72  t==0 && db->isTr
14770 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
14780 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73  nt;.      if( is
14790 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70  Transaction && p
147a0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
147b0 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
147c0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
147d0 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
147e0 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
147f0 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
14800 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ){.          p->
14810 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20  pc = pc;.       
14820 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
14830 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
14840 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
14850 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
14860 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
14870 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
14880 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54  .        db->isT
14890 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
148a0 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  int = 0;.       
148b0 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20   rc = p->rc;.   
148c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
148d0 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
148e0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
148f0 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
14900 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
14910 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
14920 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  ++){.          r
14930 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
14940 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44  Savepoint(db->aD
14950 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69  b[ii].pBt, p1, i
14960 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
14970 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
14980 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
14990 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
149a0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
149b0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
149c0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
149d0 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
149e0 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64 62 2d  ROLLBACK && (db-
149f0 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 49 6e  >flags&SQLITE_In
14a00 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 20  ternChanges)!=0 
14a10 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
14a20 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
14a30 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
14a40 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
14a50 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
14a60 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20  Schema(db, 0);. 
14a70 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
14a80 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67  .  .      /* Reg
14a90 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
14aa0 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  er this is a REL
14ab0 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  EASE or ROLLBACK
14ac0 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20  , destroy all . 
14ad0 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
14ae0 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65  ts nested inside
14af0 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e   of the savepoin
14b00 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
14b10 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68   on. */.      wh
14b20 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ile( db->pSavepo
14b30 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20  int!=pSavepoint 
14b40 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20  ){.        pTmp 
14b50 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
14b60 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
14b70 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d  avepoint = pTmp-
14b80 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
14b90 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
14ba0 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20  , pTmp);.       
14bb0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
14bc0 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
14bd0 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20    /* If it is a 
14be0 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65  RELEASE, then de
14bf0 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f  stroy the savepo
14c00 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
14c10 65 64 20 6f 6e 20 74 6f 6f 20 2a 2f 0a 20 20 20  ed on too */.   
14c20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
14c30 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
14c40 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
14c50 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e  pSavepoint==db->
14c60 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20  pSavepoint );.  
14c70 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
14c80 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e  oint = pSavepoin
14c90 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  t->pNext;.      
14ca0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
14cb0 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b  db, pSavepoint);
14cc0 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73  .        if( !is
14cd0 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20  Transaction ){. 
14ce0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
14cf0 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
14d00 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
14d10 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b   }.  }..  break;
14d20 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
14d30 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20  utoCommit P1 P2 
14d40 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
14d50 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74  the database aut
14d60 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f  o-commit flag to
14d70 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66   P1 (1 or 0). If
14d80 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c   P2 is true, rol
14d90 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75  l.** back any cu
14da0 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62  rrently active b
14db0 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tree transaction
14dc0 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  s. If there are 
14dd0 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d  any active.** VM
14de0 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68  s (apart from th
14df0 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20  is one), then a 
14e00 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20  ROLLBACK fails. 
14e10 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20   A COMMIT fails 
14e20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  if.** there are 
14e30 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56  active writing V
14e40 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73  Ms or active VMs
14e50 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64   that use shared
14e60 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   cache..**.** Th
14e70 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
14e80 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20  auses the VM to 
14e90 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  halt..*/.case OP
14ea0 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20  _AutoCommit: {. 
14eb0 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f   int desiredAuto
14ec0 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52  Commit;.  int iR
14ed0 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74  ollback;.  int t
14ee0 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69  urnOnAC;..  desi
14ef0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  redAutoCommit = 
14f00 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c  pOp->p1;.  iRoll
14f10 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  back = pOp->p2;.
14f20 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73    turnOnAC = des
14f30 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26  iredAutoCommit &
14f40 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  & !db->autoCommi
14f50 74 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  t;.  assert( des
14f60 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
14f70 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f  1 || desiredAuto
14f80 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
14f90 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
14fa0 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69  toCommit==1 || i
14fb0 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20  Rollback==0 );. 
14fc0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 63 74   assert( db->act
14fd0 69 76 65 56 64 62 65 43 6e 74 3e 30 20 29 3b 20  iveVdbeCnt>0 ); 
14fe0 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69   /* At least thi
14ff0 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69  s one VM is acti
15000 76 65 20 2a 2f 0a 0a 20 20 69 66 28 20 74 75 72  ve */..  if( tur
15010 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c 62 61  nOnAC && iRollba
15020 63 6b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65  ck && db->active
15030 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20  VdbeCnt>1 ){.   
15040 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
15050 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
15060 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e  ts a ROLLBACK an
15070 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a  d other VMs are.
15080 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e      ** still run
15090 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e  ning, and a tran
150a0 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
150b0 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  e, return an err
150c0 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20  or indicating.  
150d0 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74    ** that the ot
150e0 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d  her VMs must com
150f0 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20  plete first. .  
15100 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
15110 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
15120 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
15130 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  ot rollback tran
15140 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
15150 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
15160 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
15170 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
15180 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
15190 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
151a0 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64   !iRollback && d
151b0 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e  b->writeVdbeCnt>
151c0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  0 ){.    /* If t
151d0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
151e0 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
151f0 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
15200 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
15210 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
15220 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
15230 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
15240 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
15250 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
15260 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
15270 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
15280 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f  , db, "cannot co
15290 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  mmit transaction
152a0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
152b0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
152c0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
152d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
152e0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65  ;.  }else if( de
152f0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21  siredAutoCommit!
15300 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  =db->autoCommit 
15310 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c  ){.    if( iRoll
15320 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  back ){.      as
15330 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
15340 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20  oCommit==1 );.  
15350 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62      sqlite3Rollb
15360 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20  ackAll(db);.    
15370 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
15380 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 1;.    }else{
15390 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
153a0 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69  ommit = (u8)desi
153b0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
153c0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
153d0 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
153e0 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
153f0 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a      p->pc = pc;.
15400 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
15410 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d  Commit = (u8)(1-
15420 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
15430 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72  t);.        p->r
15440 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
15450 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67 6f  BUSY;.        go
15460 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
15470 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
15480 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53    assert( db->nS
15490 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20  tatement==0 );. 
154a0 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53     sqlite3CloseS
154b0 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20  avepoints(db);. 
154c0 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51     if( p->rc==SQ
154d0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
154e0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e   rc = SQLITE_DON
154f0 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  E;.    }else{.  
15500 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
15510 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20  ERROR;.    }.   
15520 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
15530 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  n;.  }else{.    
15540 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
15550 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
15560 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69  ,.        (!desi
15570 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22  redAutoCommit)?"
15580 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74  cannot start a t
15590 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69  ransaction withi
155a0 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
155b0 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c  :(.        (iRol
155c0 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72  lback)?"cannot r
155d0 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61  ollback - no tra
155e0 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
155f0 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ve":.           
15600 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
15610 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e  commit - no tran
15620 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
15630 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a  e"));.         .
15640 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
15650 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65  ERROR;.  }.  bre
15660 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
15670 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31  : Transaction P1
15680 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
15690 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74  Begin a transact
156a0 69 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e 73 61  ion.  The transa
156b0 63 74 69 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20  ction ends when 
156c0 61 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c  a Commit or Roll
156d0 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69  back.** opcode i
156e0 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20  s encountered.  
156f0 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  Depending on the
15700 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73 65 74   ON CONFLICT set
15710 74 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61  ting, the.** tra
15720 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 61  nsaction might a
15730 6c 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61  lso be rolled ba
15740 63 6b 20 69 66 20 61 6e 20 65 72 72 6f 72 20 69  ck if an error i
15750 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a  s encountered..*
15760 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
15770 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
15780 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69  base file on whi
15790 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ch the transacti
157a0 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64  on is.** started
157b0 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68  .  Index 0 is th
157c0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
157d0 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31  file and index 1
157e0 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20   is the.** file 
157f0 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
15800 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69  ry tables.  Indi
15810 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65  ces of 2 or more
15820 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a   are used for.**
15830 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
15840 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  ses..**.** If P2
15850 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
15860 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
15870 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
15880 64 2e 20 20 41 20 52 45 53 45 52 56 45 44 20 6c  d.  A RESERVED l
15890 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e  ock is.** obtain
158a0 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ed on the databa
158b0 73 65 20 66 69 6c 65 20 77 68 65 6e 20 61 20 77  se file when a w
158c0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
158d0 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 4e 6f   is started.  No
158e0 0a 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63 65 73  .** other proces
158f0 73 20 63 61 6e 20 73 74 61 72 74 20 61 6e 6f 74  s can start anot
15900 68 65 72 20 77 72 69 74 65 20 74 72 61 6e 73 61  her write transa
15910 63 74 69 6f 6e 20 77 68 69 6c 65 20 74 68 69 73  ction while this
15920 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
15930 2a 2a 20 75 6e 64 65 72 77 61 79 2e 20 20 53 74  ** underway.  St
15940 61 72 74 69 6e 67 20 61 20 77 72 69 74 65 20 74  arting a write t
15950 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20  ransaction also 
15960 63 72 65 61 74 65 73 20 61 20 72 6f 6c 6c 62 61  creates a rollba
15970 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a  ck journal. A.**
15980 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
15990 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  on must be start
159a0 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 63 68  ed before any ch
159b0 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64  anges can be mad
159c0 65 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61  e to the.** data
159d0 62 61 73 65 2e 20 20 49 66 20 50 32 20 69 73 20  base.  If P2 is 
159e0 32 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 65  2 or greater the
159f0 6e 20 61 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  n an EXCLUSIVE l
15a00 6f 63 6b 20 69 73 20 61 6c 73 6f 20 6f 62 74 61  ock is also obta
15a10 69 6e 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66  ined.** on the f
15a20 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  ile..**.** If P2
15a30 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
15a40 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62   read-lock is ob
15a50 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
15a60 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a  tabase file..*/.
15a70 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
15a80 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a  ion: {.  Btree *
15a90 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
15aa0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
15ab0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
15ac0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
15ad0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
15ae0 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
15af0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
15b00 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
15b10 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
15b20 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
15b30 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
15b40 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66  pOp->p2);.    if
15b50 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
15b60 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
15b70 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e   = pc;.      p->
15b80 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
15b90 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
15ba0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
15bb0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
15bc0 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63  =SQLITE_OK && rc
15bd0 21 3d 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c  !=SQLITE_READONL
15be0 59 20 2f 2a 20 26 26 20 72 63 21 3d 53 51 4c 49  Y /* && rc!=SQLI
15bf0 54 45 5f 42 55 53 59 20 2a 2f 20 29 7b 0a 20 20  TE_BUSY */ ){.  
15c00 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
15c10 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
15c20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
15c30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
15c40 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  adCookie P1 P2 P
15c50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  3 * *.**.** Read
15c60 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
15c70 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20  3 from database 
15c80 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20  P1 and write it 
15c90 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
15ca0 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68  ..** P3==1 is th
15cb0 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
15cc0 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20  .  P3==2 is the 
15cd0 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
15ce0 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65  .** P3==3 is the
15cf0 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
15d00 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61  er cache size, a
15d10 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
15d20 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61  ==0 is.** the ma
15d30 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
15d40 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
15d50 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
15d60 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a  used to store.**
15d70 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
15d80 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d  s..**.** There m
15d90 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f  ust be a read-lo
15da0 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
15db0 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61  se (either a tra
15dc0 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74  nsaction.** must
15dd0 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74   be started or t
15de0 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20  here must be an 
15df0 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66  open cursor) bef
15e00 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67  ore.** executing
15e10 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
15e20 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
15e30 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  adCookie: {     
15e40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
15e50 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
15e60 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
15e70 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43  nt iDb;.  int iC
15e80 6f 6f 6b 69 65 3b 0a 0a 20 20 69 44 62 20 3d 20  ookie;..  iDb = 
15e90 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
15ea0 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
15eb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
15ec0 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
15ed0 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
15ee0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
15ef0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
15f00 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
15f10 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
15f20 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
15f30 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d  sk & (1<<iDb))!=
15f40 30 20 29 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  0 );..  rc = sql
15f50 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
15f60 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
15f70 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32  t, iCookie, (u32
15f80 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f   *)&iMeta);.  pO
15f90 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b  ut->u.i = iMeta;
15fa0 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
15fb0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
15fc0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
15fd0 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
15fe0 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
15ff0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
16000 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
16010 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65  ter P3 (interpre
16020 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
16030 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69  r).** into cooki
16040 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
16050 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d  atabase P1.  P2=
16060 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
16070 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50   version.  .** P
16080 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
16090 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d  base format. P2=
160a0 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
160b0 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
160c0 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
160d0 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
160e0 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
160f0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
16100 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
16110 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
16120 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
16130 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
16140 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
16150 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
16160 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
16170 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
16180 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
16190 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
161a0 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
161b0 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
161c0 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
161d0 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
161e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
161f0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
16200 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
16210 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
16220 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d   (1<<pOp->p1))!=
16230 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
16240 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
16250 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
16260 42 74 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74  Bt!=0 );.  sqlit
16270 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
16280 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20  ify(pIn3);.  /* 
16290 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69  See note about i
162a0 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e  ndex shifting on
162b0 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a   OP_ReadCookie *
162c0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
162d0 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28  BtreeUpdateMeta(
162e0 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70  pDb->pBt, pOp->p
162f0 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e  2, (int)pIn3->u.
16300 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  i);.  if( pOp->p
16310 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
16320 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
16330 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
16340 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
16350 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
16360 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
16370 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
16380 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
16390 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e  ookie = (int)pIn
163a0 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e  3->u.i;.    db->
163b0 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
163c0 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20  InternChanges;. 
163d0 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
163e0 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46  p2==BTREE_FILE_F
163f0 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20  ORMAT ){.    /* 
16400 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69  Record changes i
16410 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  n the file forma
16420 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  t */.    pDb->pS
16430 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
16440 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75  at = (u8)pIn3->u
16450 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  .i;.  }.  if( pO
16460 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
16470 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
16480 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
16490 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
164a0 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
164b0 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
164c0 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
164d0 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
164e0 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
164f0 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
16500 64 62 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  db);.  }.  break
16510 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
16520 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31 20  VerifyCookie P1 
16530 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b  P2 *.**.** Check
16540 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c   the value of gl
16550 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20 70 61  obal database pa
16560 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30  rameter number 0
16570 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20   (the.** schema 
16580 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b  version) and mak
16590 65 20 73 75 72 65 20 69 74 20 69 73 20 65 71 75  e sure it is equ
165a0 61 6c 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 50  al to P2.  .** P
165b0 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
165c0 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69  e number which i
165d0 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e  s 0 for the main
165e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
165f0 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20  * and 1 for the 
16600 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d  file holding tem
16610 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
16620 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75  d some higher nu
16630 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69  mber.** for auxi
16640 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73 2e  liary databases.
16650 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69  .**.** The cooki
16660 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61  e changes its va
16670 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  lue whenever the
16680 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
16690 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69   changes..** Thi
166a0 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  s operation is u
166b0 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68  sed to detect wh
166c0 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b  en that the cook
166d0 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ie has changed.*
166e0 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63  * and that the c
166f0 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e  urrent process n
16700 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74  eeds to reread t
16710 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  he schema..**.**
16720 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73 61   Either a transa
16730 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68  ction needs to h
16740 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65 64  ave been started
16750 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e   or an OP_Open n
16760 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78  eeds.** to be ex
16770 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61 62  ecuted (to estab
16780 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b  lish a read lock
16790 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70  ) before this op
167a0 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b  code is.** invok
167b0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
167c0 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20  erifyCookie: {. 
167d0 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 42 74   int iMeta;.  Bt
167e0 72 65 65 20 2a 70 42 74 3b 0a 20 20 61 73 73 65  ree *pBt;.  asse
167f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
16800 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
16810 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
16820 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
16830 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
16840 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
16850 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
16860 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
16870 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
16880 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
16890 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
168a0 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d  SION, (u32 *)&iM
168b0 65 74 61 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  eta);.  }else{. 
168c0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
168d0 4b 3b 0a 20 20 20 20 69 4d 65 74 61 20 3d 20 30  K;.    iMeta = 0
168e0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d  ;.  }.  if( rc==
168f0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 65  SQLITE_OK && iMe
16900 74 61 21 3d 70 4f 70 2d 3e 70 32 20 29 7b 0a 20  ta!=pOp->p2 ){. 
16910 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
16920 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
16930 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
16940 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44   = sqlite3DbStrD
16950 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65  up(db, "database
16960 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
16970 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66  ged");.    /* If
16980 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   the schema-cook
16990 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ie from the data
169a0 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65  base file matche
169b0 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20  s the cookie .  
169c0 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68    ** stored with
169d0 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72   the in-memory r
169e0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
169f0 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a   the schema, do.
16a00 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61      ** not reloa
16a10 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f  d the schema fro
16a20 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
16a30 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ile..    **.    
16a40 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61  ** If virtual-ta
16a50 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c  bles are in use,
16a60 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73   this is not jus
16a70 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  t an optimizatio
16a80 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c  n..    ** Often,
16a90 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20   v-tables store 
16aa0 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74  their data in ot
16ab0 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65  her SQLite table
16ac0 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20  s, which.    ** 
16ad0 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d  are queried from
16ae0 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20   within xNext() 
16af0 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c  and other v-tabl
16b00 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a  e methods using.
16b10 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20      ** prepared 
16b20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68  queries. If such
16b30 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d   a query is out-
16b40 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e  of-date, we do n
16b50 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a  ot want to.    *
16b60 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61  * discard the da
16b70 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61  tabase schema, a
16b80 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20  s the user code 
16b90 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
16ba0 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20  .    ** v-table 
16bb0 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65  would have to be
16bc0 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73   ready for the s
16bd0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
16be0 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20  cture itself.   
16bf0 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69   ** to be invali
16c00 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73  dated whenever s
16c10 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73  qlite3_step() is
16c20 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
16c30 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d  hin .    ** a v-
16c40 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20  table method..  
16c50 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
16c60 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
16c70 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
16c80 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20  okie!=iMeta ){. 
16c90 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
16ca0 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
16cb0 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
16cc0 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
16cd0 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
16ce0 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
16cf0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43    rc = SQLITE_SC
16d00 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61  HEMA;.  }.  brea
16d10 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
16d20 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20   OpenRead P1 P2 
16d30 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f  P3 P4 P5.**.** O
16d40 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20  pen a read-only 
16d50 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64  cursor for the d
16d60 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77 68  atabase table wh
16d70 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  ose root page is
16d80 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61  .** P2 in a data
16d90 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
16da0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
16db0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50   determined by P
16dc0 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61  3. .** P3==0 mea
16dd0 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ns the main data
16de0 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e  base, P3==1 mean
16df0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  s the database u
16e00 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70  sed for .** temp
16e10 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e  orary tables, an
16e20 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65  d P3>1 means use
16e30 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  d the correspond
16e40 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20  ing attached.** 
16e50 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65 20  database.  Give 
16e60 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61  the new cursor a
16e70 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20  n identifier of 
16e80 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76  P1.  The P1.** v
16e90 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62  alues need not b
16ea0 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74  e contiguous but
16eb0 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73   all P1 values s
16ec0 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69  hould be small i
16ed0 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69  ntegers..** It i
16ee0 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50  s an error for P
16ef0 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65  1 to be negative
16f00 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30  ..**.** If P5!=0
16f10 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f   then use the co
16f20 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
16f30 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74  r P2 as the root
16f40 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68   page, not.** th
16f50 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74  e value of P2 it
16f60 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  self..**.** Ther
16f70 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64  e will be a read
16f80 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74   lock on the dat
16f90 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20 74  abase whenever t
16fa0 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70  here is an.** op
16fb0 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74  en cursor.  If t
16fc0 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73 20  he database was 
16fd0 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74  unlocked prior t
16fe0 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  o this instructi
16ff0 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61  on.** then a rea
17000 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  d lock is acquir
17010 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
17020 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
17030 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20   A read.** lock 
17040 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f  allows other pro
17050 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20 74  cesses to read t
17060 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74 20  he database but 
17070 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79  prohibits.** any
17080 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 66   other process f
17090 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  rom modifying th
170a0 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
170b0 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a   read lock is.**
170c0 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61   released when a
170d0 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 63  ll cursors are c
170e0 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73 20  losed.  If this 
170f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65  instruction atte
17100 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61  mpts.** to get a
17110 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66   read lock but f
17120 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74  ails, the script
17130 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68   terminates with
17140 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55   an.** SQLITE_BU
17150 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a  SY error code..*
17160 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
17170 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
17180 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
17190 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
171a0 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
171b0 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
171c0 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
171d0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
171e0 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
171f0 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
17200 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
17210 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
17220 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
17230 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
17240 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
17250 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
17260 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
17270 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
17280 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
17290 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
172a0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
172b0 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
172c0 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a  o OpenWrite..*/.
172d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57  /* Opcode: OpenW
172e0 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50 34  rite P1 P2 P3 P4
172f0 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61   P5.**.** Open a
17300 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
17310 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74  or named P1 on t
17320 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
17330 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20  x whose root.** 
17340 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20  page is P2.  Or 
17350 69 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65  if P5!=0 use the
17360 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
17370 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20  ster P2 to find 
17380 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  the.** root page
17390 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
173a0 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
173b0 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
173c0 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
173d0 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
173e0 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
173f0 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
17400 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
17410 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
17420 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
17430 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
17440 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
17450 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
17460 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
17470 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
17480 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
17490 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
174a0 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
174b0 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
174c0 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
174d0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
174e0 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a  able, or to the.
174f0 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78  ** largest index
17500 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f   of any column o
17510 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
17520 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65   is actually use
17530 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  d..**.** This in
17540 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20  struction works 
17550 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65  just like OpenRe
17560 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ad except that i
17570 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73  t opens the curs
17580 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72  or.** in read/wr
17590 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61  ite mode.  For a
175a0 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68   given table, th
175b0 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f  ere can be one o
175c0 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79  r more read-only
175d0 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61  .** cursors or a
175e0 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69   single read/wri
175f0 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f  te cursor but no
17600 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65  t both..**.** Se
17610 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e  e also OpenRead.
17620 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
17630 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70  Read:.case OP_Op
17640 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74  enWrite: {.  int
17650 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e   nField;.  KeyIn
17660 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
17670 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44  int p2;.  int iD
17680 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b  b;.  int wrFlag;
17690 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20  .  Btree *pX;.  
176a0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
176b0 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 69  ;.  Db *pDb;.  i
176c0 6e 74 20 66 6c 61 67 73 3b 0a 0a 20 20 6e 46 69  nt flags;..  nFi
176d0 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49  eld = 0;.  pKeyI
176e0 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20  nfo = 0;.  p2 = 
176f0 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d  pOp->p2;.  iDb =
17700 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
17710 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
17720 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
17730 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
17740 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29  Mask & (1<<iDb))
17750 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  !=0 );.  pDb = &
17760 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20  db->aDb[iDb];.  
17770 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  pX = pDb->pBt;. 
17780 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29   assert( pX!=0 )
17790 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
177a0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
177b0 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  e ){.    wrFlag 
177c0 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 44 62  = 1;.    if( pDb
177d0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
177e0 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57  format < p->minW
177f0 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29  riteFileFormat )
17800 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72  {.      p->minWr
17810 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20  iteFileFormat = 
17820 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
17830 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d  le_format;.    }
17840 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72  .  }else{.    wr
17850 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Flag = 0;.  }.  
17860 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
17870 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
17880 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
17890 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
178a0 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65    pIn2 = &p->aMe
178b0 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71 6c 69 74  m[p2];.    sqlit
178c0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
178d0 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
178e0 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
178f0 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
17900 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
17910 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
17920 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  r OP_CreateTable
17930 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
17940 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
17950 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
17960 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
17970 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
17980 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
17990 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
179a0 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
179b0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
179c0 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
179d0 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
179e0 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
179f0 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
17a00 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20  if( NEVER(p2<2) 
17a10 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ) {.      rc = S
17a20 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
17a30 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  PT;.      goto a
17a40 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17a50 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  r;.    }.  }.  i
17a60 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
17a70 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20  P4_KEYINFO ){.  
17a80 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
17a90 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
17aa0 20 20 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63     pKeyInfo->enc
17ab0 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20   = ENC(p->db);. 
17ac0 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79     nField = pKey
17ad0 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 31 3b 0a  Info->nField+1;.
17ae0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
17af0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
17b00 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  2 ){.    nField 
17b10 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d  = pOp->p4.i;.  }
17b20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
17b30 70 31 3e 3d 30 20 29 3b 0a 20 20 70 43 75 72 20  p1>=0 );.  pCur 
17b40 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
17b50 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69  (p, pOp->p1, nFi
17b60 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20  eld, iDb, 1);.  
17b70 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f  if( pCur==0 ) go
17b80 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75  to no_mem;.  pCu
17b90 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  r->nullRow = 1;.
17ba0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
17bb0 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
17bc0 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
17bd0 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f  fo, pCur->pCurso
17be0 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
17bf0 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
17c00 0a 0a 20 20 73 77 69 74 63 68 28 20 72 63 20 29  ..  switch( rc )
17c10 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  {.    case SQLIT
17c20 45 5f 4f 4b 3a 20 7b 0a 20 20 20 20 20 20 66 6c  E_OK: {.      fl
17c30 61 67 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ags = sqlite3Btr
17c40 65 65 46 6c 61 67 73 28 70 43 75 72 2d 3e 70 43  eeFlags(pCur->pC
17c50 75 72 73 6f 72 29 3b 0a 0a 20 20 20 20 20 20 2f  ursor);..      /
17c60 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e  * Sanity checkin
17c70 67 2e 20 20 4f 6e 6c 79 20 74 68 65 20 6c 6f 77  g.  Only the low
17c80 65 72 20 66 6f 75 72 20 62 69 74 73 20 6f 66 20  er four bits of 
17c90 74 68 65 20 66 6c 61 67 73 20 62 79 74 65 20 73  the flags byte s
17ca0 68 6f 75 6c 64 0a 20 20 20 20 20 20 2a 2a 20 62  hould.      ** b
17cb0 65 20 75 73 65 64 2e 20 20 42 69 74 20 33 20 28  e used.  Bit 3 (
17cc0 6d 61 73 6b 20 30 78 30 38 29 20 69 73 20 75 6e  mask 0x08) is un
17cd0 70 72 65 64 69 63 74 61 62 6c 65 2e 20 20 54 68  predictable.  Th
17ce0 65 20 6c 6f 77 65 72 20 33 20 62 69 74 73 0a 20  e lower 3 bits. 
17cf0 20 20 20 20 20 2a 2a 20 28 6d 61 73 6b 20 30 78       ** (mask 0x
17d00 30 37 29 20 73 68 6f 75 6c 64 20 62 65 20 65 69  07) should be ei
17d10 74 68 65 72 20 35 20 28 69 6e 74 6b 65 79 2b 6c  ther 5 (intkey+l
17d20 65 61 66 64 61 74 61 20 66 6f 72 20 74 61 62 6c  eafdata for tabl
17d30 65 73 29 20 6f 72 0a 20 20 20 20 20 20 2a 2a 20  es) or.      ** 
17d40 32 20 28 7a 65 72 6f 64 61 74 61 20 66 6f 72 20  2 (zerodata for 
17d50 69 6e 64 69 63 65 73 29 2e 20 20 49 66 20 74 68  indices).  If th
17d60 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61  ese conditions a
17d70 72 65 20 6e 6f 74 20 6d 65 74 20 69 74 20 63 61  re not met it ca
17d80 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 6e 6c 79 20  n.      ** only 
17d90 6d 65 61 6e 20 74 68 61 74 20 77 65 20 61 72 65  mean that we are
17da0 20 64 65 61 6c 69 6e 67 20 77 69 74 68 20 61 20   dealing with a 
17db0 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
17dc0 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 2a 2a 20   file..      ** 
17dd0 4e 6f 74 65 3a 20 20 41 6c 6c 20 6f 66 20 74 68  Note:  All of th
17de0 65 20 61 62 6f 76 65 20 69 73 20 63 68 65 63 6b  e above is check
17df0 65 64 20 61 6c 72 65 61 64 79 20 69 6e 20 73 71  ed already in sq
17e00 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
17e10 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ()..      */.   
17e20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67     assert( (flag
17e30 73 20 26 20 30 78 66 30 29 3d 3d 30 20 29 3b 0a  s & 0xf0)==0 );.
17e40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
17e50 6c 61 67 73 20 26 20 30 78 30 37 29 3d 3d 35 20  lags & 0x07)==5 
17e60 7c 7c 20 28 66 6c 61 67 73 20 26 20 30 78 30 37  || (flags & 0x07
17e70 29 3d 3d 32 20 29 3b 0a 0a 20 20 20 20 20 20 70  )==2 );..      p
17e80 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 28  Cur->isTable = (
17e90 66 6c 61 67 73 20 26 20 42 54 52 45 45 5f 49 4e  flags & BTREE_IN
17ea0 54 4b 45 59 29 21 3d 30 20 3f 31 3a 30 3b 0a 20  TKEY)!=0 ?1:0;. 
17eb0 20 20 20 20 20 70 43 75 72 2d 3e 69 73 49 6e 64       pCur->isInd
17ec0 65 78 20 3d 20 28 66 6c 61 67 73 20 26 20 42 54  ex = (flags & BT
17ed0 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 21 3d 30  REE_ZERODATA)!=0
17ee0 20 3f 31 3a 30 3b 0a 20 20 20 20 20 20 2f 2a 20   ?1:0;.      /* 
17ef0 49 66 20 50 34 3d 3d 30 20 69 74 20 6d 65 61 6e  If P4==0 it mean
17f00 73 20 77 65 20 61 72 65 20 65 78 70 65 63 74 65  s we are expecte
17f10 64 20 74 6f 20 6f 70 65 6e 20 61 20 74 61 62 6c  d to open a tabl
17f20 65 2e 20 20 49 66 20 50 34 21 3d 30 20 74 68 65  e.  If P4!=0 the
17f30 6e 0a 20 20 20 20 20 20 2a 2a 20 77 65 20 65 78  n.      ** we ex
17f40 70 65 63 74 20 74 6f 20 62 65 20 6f 70 65 6e 69  pect to be openi
17f50 6e 67 20 61 6e 20 69 6e 64 65 78 2e 20 20 49 66  ng an index.  If
17f60 20 74 68 69 73 20 69 73 20 6e 6f 74 20 77 68 61   this is not wha
17f70 74 20 68 61 70 70 65 6e 65 64 2c 0a 20 20 20 20  t happened,.    
17f80 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 64 61    ** then the da
17f90 74 61 62 61 73 65 20 69 73 20 63 6f 72 72 75 70  tabase is corrup
17fa0 74 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  t.      */.     
17fb0 20 69 66 28 20 28 70 43 75 72 2d 3e 69 73 54 61   if( (pCur->isTa
17fc0 62 6c 65 20 26 26 20 70 4f 70 2d 3e 70 34 74 79  ble && pOp->p4ty
17fd0 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 29 0a  pe==P4_KEYINFO).
17fe0 20 20 20 20 20 20 20 7c 7c 20 28 70 43 75 72 2d         || (pCur-
17ff0 3e 69 73 49 6e 64 65 78 20 26 26 20 70 4f 70 2d  >isIndex && pOp-
18000 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49  >p4type!=P4_KEYI
18010 4e 46 4f 29 20 29 7b 0a 20 20 20 20 20 20 20 20  NFO) ){.        
18020 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
18030 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
18040 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
18050 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
18060 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a   }.      break;.
18070 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53      }.    case S
18080 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20 7b 0a 20  QLITE_EMPTY: {. 
18090 20 20 20 20 20 70 43 75 72 2d 3e 69 73 54 61 62       pCur->isTab
180a0 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
180b0 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20  !=P4_KEYINFO;.  
180c0 20 20 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65      pCur->isInde
180d0 78 20 3d 20 21 70 43 75 72 2d 3e 69 73 54 61 62  x = !pCur->isTab
180e0 6c 65 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e  le;.      pCur->
180f0 70 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 20  pCursor = 0;.   
18100 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
18110 4b 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  K;.      break;.
18120 20 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75 6c      }.    defaul
18130 74 3a 20 7b 0a 20 20 20 20 20 20 61 73 73 65 72  t: {.      asser
18140 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55  t( rc!=SQLITE_BU
18150 53 59 20 29 3b 20 20 2f 2a 20 42 75 73 79 20 63  SY );  /* Busy c
18160 6f 6e 64 69 74 69 6f 6e 73 20 64 65 74 65 63 74  onditions detect
18170 65 64 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20 20  ed earlier */.  
18180 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
18190 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
181a0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
181b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
181c0 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50  enEphemeral P1 P
181d0 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  2 * P4 *.**.** O
181e0 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
181f0 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65   P1 to a transie
18200 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  nt table..** The
18210 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79   cursor is alway
18220 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72  s opened read/wr
18230 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20  ite even if .** 
18240 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
18250 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20  e is read-only. 
18260 20 54 68 65 20 74 72 61 6e 73 69 65 6e 74 20 6f   The transient o
18270 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  r virtual.** tab
18280 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75  le is deleted au
18290 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
182a0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
182b0 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  losed..**.** P2 
182c0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
182d0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
182e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
182f0 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69  * The cursor poi
18300 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74  nts to a BTree t
18310 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e  able if P4==0 an
18320 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64  d to a BTree ind
18330 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e  ex.** if P4 is n
18340 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20  ot 0.  If P4 is 
18350 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69  not NULL, it poi
18360 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  nts to a KeyInfo
18370 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68   structure.** th
18380 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  at defines the f
18390 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e  ormat of keys in
183a0 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a   the index..**.*
183b0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 61  * This opcode wa
183c0 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f 70  s once called Op
183d0 65 6e 54 65 6d 70 2e 20 20 42 75 74 20 74 68 61  enTemp.  But tha
183e0 74 20 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f 6e  t created.** con
183f0 66 75 73 69 6f 6e 20 62 65 63 61 75 73 65 20 74  fusion because t
18400 68 65 20 74 65 72 6d 20 22 74 65 6d 70 20 74 61  he term "temp ta
18410 62 6c 65 22 2c 20 6d 69 67 68 74 20 72 65 66 65  ble", might refe
18420 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20 61  r either.** to a
18430 20 54 45 4d 50 20 74 61 62 6c 65 20 61 74 20 74   TEMP table at t
18440 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f 72  he SQL level, or
18450 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 70 65 6e   to a table open
18460 65 64 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f 70  ed by.** this op
18470 63 6f 64 65 2e 20 20 54 68 65 6e 20 74 68 69 73  code.  Then this
18480 20 6f 70 63 6f 64 65 20 77 61 73 20 63 61 6c 6c   opcode was call
18490 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20 20 42   OpenVirtual.  B
184a0 75 74 0a 2a 2a 20 74 68 61 74 20 63 72 65 61 74  ut.** that creat
184b0 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69 74  ed confusion wit
184c0 68 20 74 68 65 20 77 68 6f 6c 65 20 76 69 72 74  h the whole virt
184d0 75 61 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e 0a  ual-table idea..
184e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45  */.case OP_OpenE
184f0 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64  phemeral: {.  Vd
18500 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20  beCursor *pCx;. 
18510 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
18520 74 20 6f 70 65 6e 46 6c 61 67 73 20 3d 20 0a 20  t openFlags = . 
18530 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
18540 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20  _READWRITE |.   
18550 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43     SQLITE_OPEN_C
18560 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51  REATE |.      SQ
18570 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53  LITE_OPEN_EXCLUS
18580 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  IVE |.      SQLI
18590 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e  TE_OPEN_DELETEON
185a0 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51  CLOSE |.      SQ
185b0 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49  LITE_OPEN_TRANSI
185c0 45 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73 65 72  ENT_DB;..  asser
185d0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
185e0 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
185f0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
18600 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c  p1, pOp->p2, -1,
18610 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   1);.  if( pCx==
18620 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
18630 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
18640 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 1;.  rc = sqli
18650 74 65 33 42 74 72 65 65 46 61 63 74 6f 72 79 28  te3BtreeFactory(
18660 64 62 2c 20 30 2c 20 31 2c 20 53 51 4c 49 54 45  db, 0, 1, SQLITE
18670 5f 44 45 46 41 55 4c 54 5f 54 45 4d 50 5f 43 41  _DEFAULT_TEMP_CA
18680 43 48 45 5f 53 49 5a 45 2c 20 6f 70 65 6e 46 6c  CHE_SIZE, openFl
18690 61 67 73 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ags,.           
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186b0 26 70 43 78 2d 3e 70 42 74 29 3b 0a 20 20 69 66  &pCx->pBt);.  if
186c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
186d0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
186e0 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
186f0 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b  ns(pCx->pBt, 1);
18700 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
18710 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
18720 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  /* If a transien
18730 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69  t index is requi
18740 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62  red, create it b
18750 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a  y calling.    **
18760 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
18770 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20  ateTable() with 
18780 74 68 65 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  the BTREE_ZERODA
18790 54 41 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20  TA flag before. 
187a0 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74     ** opening it
187b0 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  . If a transient
187c0 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72   table is requir
187d0 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65  ed, just use the
187e0 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69  .    ** automati
187f0 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61  cally created ta
18800 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61  ble with root-pa
18810 67 65 20 31 20 28 61 6e 20 49 4e 54 4b 45 59 20  ge 1 (an INTKEY 
18820 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20  table)..    */. 
18830 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70     if( pOp->p4.p
18840 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20  KeyInfo ){.     
18850 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20   int pgno;.     
18860 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
18870 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
18880 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
18890 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
188a0 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c  eTable(pCx->pBt,
188b0 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 5a 45   &pgno, BTREE_ZE
188c0 52 4f 44 41 54 41 29 3b 20 0a 20 20 20 20 20 20  RODATA); .      
188d0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
188e0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  K ){.        ass
188f0 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45  ert( pgno==MASTE
18900 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20  R_ROOT+1 );.    
18910 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
18920 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
18930 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a  >pBt, pgno, 1, .
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18960 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70  (KeyInfo*)pOp->p
18970 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f  4.z, pCx->pCurso
18980 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d  r);.        pCx-
18990 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  >pKeyInfo = pOp-
189a0 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
189b0 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
189c0 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70  nfo->enc = ENC(p
189d0 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ->db);.      }. 
189e0 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
189f0 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  e = 0;.    }else
18a00 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
18a10 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
18a20 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52  pCx->pBt, MASTER
18a30 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78  _ROOT, 1, 0, pCx
18a40 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
18a50 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
18a60 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   1;.    }.  }.  
18a70 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21  pCx->isIndex = !
18a80 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20  pCx->isTable;.  
18a90 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18aa0 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20  ode: OpenPseudo 
18ab0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
18ac0 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
18ad0 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73  rsor that points
18ae0 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65   to a fake table
18af0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
18b00 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f   single.** row o
18b10 66 20 64 61 74 61 2e 20 20 41 6e 79 20 61 74 74  f data.  Any att
18b20 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20  empt to write a 
18b30 73 65 63 6f 6e 64 20 72 6f 77 20 6f 66 20 64 61  second row of da
18b40 74 61 20 63 61 75 73 65 73 20 74 68 65 0a 2a 2a  ta causes the.**
18b50 20 66 69 72 73 74 20 72 6f 77 20 74 6f 20 62 65   first row to be
18b60 20 64 65 6c 65 74 65 64 2e 20 20 41 6c 6c 20 64   deleted.  All d
18b70 61 74 61 20 69 73 20 64 65 6c 65 74 65 64 20 77  ata is deleted w
18b80 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
18b90 73 0a 2a 2a 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  s.** closed..**.
18ba0 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c  ** A pseudo-tabl
18bb0 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  e created by thi
18bc0 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 66  s opcode is usef
18bd0 75 6c 20 66 6f 72 20 68 6f 6c 64 69 6e 67 20 74  ul for holding t
18be0 68 65 0a 2a 2a 20 4e 45 57 20 6f 72 20 4f 4c 44  he.** NEW or OLD
18bf0 20 74 61 62 6c 65 73 20 69 6e 20 61 20 74 72 69   tables in a tri
18c00 67 67 65 72 2e 20 20 41 6c 73 6f 20 75 73 65 64  gger.  Also used
18c10 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 61 20 73   to hold the a s
18c20 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74  ingle.** row out
18c30 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72  put from the sor
18c40 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20  ter so that the 
18c50 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d  row can be decom
18c60 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e  posed into.** in
18c70 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73  dividual columns
18c80 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f   using the OP_Co
18c90 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  lumn opcode..**.
18ca0 2a 2a 20 57 68 65 6e 20 4f 50 5f 49 6e 73 65 72  ** When OP_Inser
18cb0 74 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f  t is executed to
18cc0 20 69 6e 73 65 72 74 20 61 20 72 6f 77 20 69 6e   insert a row in
18cd0 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 20 74   to the pseudo t
18ce0 61 62 6c 65 2c 0a 2a 2a 20 74 68 65 20 70 73 65  able,.** the pse
18cf0 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
18d00 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
18d10 6d 61 6b 65 20 69 74 27 73 20 6f 77 6e 20 63 6f  make it's own co
18d20 70 79 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 72 69  py of the.** ori
18d30 67 69 6e 61 6c 20 72 6f 77 20 64 61 74 61 2e 20  ginal row data. 
18d40 49 66 20 50 32 20 69 73 20 30 2c 20 74 68 65 6e  If P2 is 0, then
18d50 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
18d60 65 20 77 69 6c 6c 20 63 6f 70 79 20 74 68 65 0a  e will copy the.
18d70 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72 6f 77 20  ** original row 
18d80 64 61 74 61 2e 20 4f 74 68 65 72 77 69 73 65 2c  data. Otherwise,
18d90 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
18da0 65 20 6f 72 69 67 69 6e 61 6c 20 6d 65 6d 6f 72  e original memor
18db0 79 20 63 65 6c 6c 0a 2a 2a 20 69 73 20 73 74 6f  y cell.** is sto
18dc0 72 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  red. In this cas
18dd0 65 2c 20 74 68 65 20 76 64 62 65 20 70 72 6f 67  e, the vdbe prog
18de0 72 61 6d 20 6d 75 73 74 20 65 6e 73 75 72 65 20  ram must ensure 
18df0 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 6d 65 6d  that the .** mem
18e00 6f 72 79 20 63 65 6c 6c 20 63 6f 6e 74 61 69 6e  ory cell contain
18e10 69 6e 67 20 74 68 65 20 72 6f 77 20 64 61 74 61  ing the row data
18e20 20 69 73 20 6e 6f 74 20 6f 76 65 72 77 72 69 74   is not overwrit
18e30 74 65 6e 20 75 6e 74 69 6c 20 74 68 65 0a 2a 2a  ten until the.**
18e40 20 70 73 65 75 64 6f 20 74 61 62 6c 65 20 69 73   pseudo table is
18e50 20 63 6c 6f 73 65 64 20 28 6f 72 20 61 20 6e 65   closed (or a ne
18e60 77 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65  w row is inserte
18e70 64 20 69 6e 74 6f 20 69 74 29 2e 0a 2a 2a 0a 2a  d into it)..**.*
18e80 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62  * P3 is the numb
18e90 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
18ea0 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74  the records that
18eb0 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
18ec0 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  by.** the pseudo
18ed0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
18ee0 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b  OP_OpenPseudo: {
18ef0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
18f00 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
18f10 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 70  Op->p1>=0 );.  p
18f20 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
18f30 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
18f40 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b  pOp->p3, -1, 0);
18f50 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
18f60 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
18f70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
18f80 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61  .  pCx->pseudoTa
18f90 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  ble = 1;.  pCx->
18fa0 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65  ephemPseudoTable
18fb0 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a   = (u8)pOp->p2;.
18fc0 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
18fd0 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64   1;.  pCx->isInd
18fe0 65 78 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  ex = 0;.  break;
18ff0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
19000 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lose P1 * * * *.
19010 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75  **.** Close a cu
19020 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20  rsor previously 
19030 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49  opened as P1.  I
19040 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63  f P1 is not.** c
19050 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74  urrently open, t
19060 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
19070 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  is a no-op..*/.c
19080 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a  ase OP_Close: {.
19090 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
190a0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
190b0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
190c0 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
190d0 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73  ursor(p, p->apCs
190e0 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70  r[pOp->p1]);.  p
190f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
19100 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
19110 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
19120 6b 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20  kGe P1 P2 P3 P4 
19130 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  *.**.** If curso
19140 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
19150 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
19160 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
19170 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
19180 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
19190 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
191a0 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75   the key.  If cu
191b0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
191c0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
191d0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
191e0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
191f0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
19200 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
19210 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
19220 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
19230 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
19240 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
19250 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
19260 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
19270 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
19280 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
19290 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
192a0 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
192b0 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
192c0 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68  s .** greater th
192d0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
192e0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
192f0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
19300 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
19310 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
19320 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
19330 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53  tinct, SeekLt, S
19340 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGt, SeekLe.*/
19350 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
19360 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Gt P1 P2 P3 P4 *
19370 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
19380 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
19390 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
193a0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
193b0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
193c0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
193d0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
193e0 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
193f0 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
19400 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
19410 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
19420 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
19430 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
19440 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
19450 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
19460 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
19470 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
19480 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
19490 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
194a0 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
194b0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
194c0 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
194d0 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
194e0 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
194f0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a  s greater than .
19500 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
19510 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
19520 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
19530 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
19540 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
19550 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c   Distinct, SeekL
19560 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
19570 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
19580 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20  SeekLt P1 P2 P3 
19590 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63  P4 * .**.** If c
195a0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
195b0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
195c0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
195d0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
195e0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
195f0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
19600 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
19610 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
19620 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
19630 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
19640 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
19650 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
19660 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
19670 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
19680 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
19690 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
196a0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
196b0 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
196c0 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
196d0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
196e0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
196f0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
19700 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
19710 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a  ds less than .**
19720 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
19730 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
19740 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
19750 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
19760 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
19770 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c  istinct, SeekGt,
19780 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
19790 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
197a0 65 6b 4c 65 20 50 31 20 50 32 20 50 33 20 50 34  ekLe P1 P2 P3 P4
197b0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73   *.**.** If curs
197c0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
197d0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
197e0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
197f0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
19800 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
19810 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
19820 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
19830 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
19840 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
19850 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
19860 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
19870 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
19880 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
19890 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
198a0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
198b0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
198c0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
198d0 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
198e0 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
198f0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
19900 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
19910 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
19920 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
19930 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c  no records .** l
19940 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
19950 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
19960 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
19970 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
19980 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
19990 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
199a0 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
199b0 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
199c0 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  kLt.*/.case OP_S
199d0 65 65 6b 4c 74 3a 20 20 20 20 20 20 20 20 20 2f  eekLt:         /
199e0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
199f0 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20  ase OP_SeekLe:  
19a00 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
19a10 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
19a20 65 65 6b 47 65 3a 20 20 20 20 20 20 20 20 20 2f  eekGe:         /
19a30 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
19a40 61 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b  ase OP_SeekGt: {
19a50 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
19a60 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
19a70 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64  ;.  int oc;.  Vd
19a80 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
19a90 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
19aa0 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  ;.  int nField;.
19ab0 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20    i64 iKey;     
19ac0 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65   /* The rowid we
19ad0 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20   are to seek to 
19ae0 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
19af0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
19b00 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
19b10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
19b20 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d  >p2!=0 );.  pC =
19b30 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
19b40 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
19b50 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  !=0 );.  if( pC-
19b60 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20  >pCursor!=0 ){. 
19b70 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63     oc = pOp->opc
19b80 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  ode;.    pC->nul
19b90 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 69 66  lRow = 0;.    if
19ba0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  ( pC->isTable ){
19bb0 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e  .      /* The in
19bc0 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20  put value in P3 
19bd0 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20  might be of any 
19be0 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72  type: integer, r
19bf0 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20  eal, string,.   
19c00 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e     ** blob, or N
19c10 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65  ULL.  But it nee
19c20 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  ds to be an inte
19c30 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61  ger before we ca
19c40 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68  n do.      ** th
19c50 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72  e seek, so cover
19c60 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 20 20 61  t it. */.      a
19c70 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
19c80 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20  ity(pIn3);.     
19c90 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
19ca0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
19cb0 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  );.      pC->row
19cc0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a  idIsValid = 0;..
19cd0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
19ce0 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
19cf0 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
19d00 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
19d10 77 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a  without.      **
19d20 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
19d30 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69  tion, then speci
19d40 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  al processing is
19d50 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a   required... */.
19d60 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
19d70 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
19d80 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
19d90 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
19da0 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
19db0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
19dc0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
19dd0 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
19de0 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e  ted into any kin
19df0 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20  d of a number,. 
19e00 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e           ** then
19e10 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
19e20 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
19e30 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
19e40 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
19e50 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
19e60 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
19e70 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66   }.        /* If
19e80 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70   we reach this p
19e90 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50  oint, then the P
19ea0 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20  3 value must be 
19eb0 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20  a floating.     
19ec0 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62     ** point numb
19ed0 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  er. */.        a
19ee0 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
19ef0 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21  ags & MEM_Real)!
19f00 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69  =0 );..        i
19f10 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53  f( iKey==SMALLES
19f20 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33  T_INT64 && (pIn3
19f30 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79  ->r<(double)iKey
19f40 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29   || pIn3->r>0) )
19f50 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  {.          /* T
19f60 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 74  he P3 value is t
19f70 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e  oo large in magn
19f80 69 74 75 64 65 20 74 6f 20 62 65 20 65 78 70 72  itude to be expr
19f90 65 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20 20  essed as an.    
19fa0 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65 72        ** integer
19fb0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72  . */.          r
19fc0 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  es = 1;.        
19fd0 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20    if( pIn3->r<0 
19fe0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
19ff0 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74  f( oc==OP_SeekGt
1a000 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1a010 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  e ){.           
1a020 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1a030 74 72 65 65 46 69 72 73 74 28 70 43 2d 3e 70 43  treeFirst(pC->pC
1a040 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1a050 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
1a060 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1a070 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a080 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1a090 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1a0a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1a0b0 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53      if( oc==OP_S
1a0c0 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLt || oc==OP_
1a0d0 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20  SeekLe ){.      
1a0e0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1a0f0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
1a100 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1a110 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1a120 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1a130 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1a140 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1a150 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1a160 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1a170 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1a180 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
1a190 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
1a1a0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1a1b0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
1a1c0 65 6c 73 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  else if( oc==OP_
1a1d0 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLt || oc==OP
1a1e0 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20  _SeekGe ){.     
1a1f0 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20       /* Use the 
1a200 63 65 69 6c 69 6e 67 28 29 20 66 75 6e 63 74 69  ceiling() functi
1a210 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65  on to convert re
1a220 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20  al->int */.     
1a230 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72       if( pIn3->r
1a240 20 3e 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20   > (double)iKey 
1a250 29 20 69 4b 65 79 2b 2b 3b 0a 20 20 20 20 20 20  ) iKey++;.      
1a260 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1a270 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 66 6c     /* Use the fl
1a280 6f 6f 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 74  oor() function t
1a290 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e  o convert real->
1a2a0 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  int */.         
1a2b0 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1a2c0 53 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLe || oc==OP
1a2d0 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20  _SeekGt );.     
1a2e0 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72       if( pIn3->r
1a2f0 20 3c 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20   < (double)iKey 
1a300 29 20 69 4b 65 79 2d 2d 3b 0a 20 20 20 20 20 20  ) iKey--;.      
1a310 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20    }.      } .   
1a320 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1a330 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1a340 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1a350 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c  0, (u64)iKey, 0,
1a360 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
1a370 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1a380 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
1a390 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1a3a0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
1a3b0 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
1a3c0 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69          pC->rowi
1a3d0 64 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20  dIsValid = 1;.  
1a3e0 20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f        pC->lastRo
1a3f0 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20  wid = iKey;.    
1a400 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
1a410 20 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f       nField = pO
1a420 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 61  p->p4.i;.      a
1a430 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1a440 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1a450 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 46        assert( nF
1a460 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 20 20  ield>0 );.      
1a470 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
1a480 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20  >pKeyInfo;.     
1a490 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1a4a0 29 6e 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 69  )nField;.      i
1a4b0 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74  f( oc==OP_SeekGt
1a4c0 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
1a4d0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 2e 66  e ){.        r.f
1a4e0 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1a4f0 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20 7d  INCRKEY;.      }
1a500 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 2e  else{.        r.
1a510 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20  flags = 0;.     
1a520 20 7d 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d 20   }.      r.aMem 
1a530 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
1a540 70 33 5d 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  p3];.      rc = 
1a550 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1a560 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1a570 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30  Cursor, &r, 0, 0
1a580 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1a590 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1a5a0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
1a5b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1a5c0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
1a5d0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1a5e0 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  lid = 0;.    }. 
1a5f0 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1a600 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
1a610 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1a620 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69   CACHE_STALE;.#i
1a630 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1a640 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
1a650 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
1a660 64 69 66 0a 20 20 20 20 69 66 28 20 6f 63 3d 3d  dif.    if( oc==
1a670 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d  OP_SeekGe || oc=
1a680 3d 4f 50 5f 53 65 65 6b 47 74 20 29 7b 0a 20 20  =OP_SeekGt ){.  
1a690 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c      if( res<0 ||
1a6a0 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1a6b0 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20 20  OP_SeekGt) ){.  
1a6c0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1a6d0 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
1a6e0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1a6f0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1a700 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1a710 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1a720 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
1a730 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1a740 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
1a750 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
1a760 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
1a770 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
1a780 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20  ( oc==OP_SeekLt 
1a790 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  || oc==OP_SeekLe
1a7a0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65   );.      if( re
1a7b0 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s>0 || (res==0 &
1a7c0 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29  & oc==OP_SeekLt)
1a7d0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1a7e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
1a7f0 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f  vious(pC->pCurso
1a800 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1a810 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1a820 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1a830 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1a840 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
1a850 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1a860 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1a870 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
1a880 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
1a890 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
1a8a0 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
1a8b0 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65 65 20  .        ** see 
1a8c0 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63  if this is the c
1a8d0 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ase..        */.
1a8e0 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 73 71          res = sq
1a8f0 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43  lite3BtreeEof(pC
1a900 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1a910 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
1a920 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
1a930 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  );.    if( res )
1a940 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1a950 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
1a960 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
1a970 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65  This happens whe
1a980 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  n attempting to 
1a990 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33  open the sqlite3
1a9a0 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20  _master table.  
1a9b0 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63    ** for read ac
1a9c0 63 65 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c  cess returns SQL
1a9d0 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68  ITE_EMPTY. In th
1a9e0 69 73 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20  is case always. 
1a9f0 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a     ** take the j
1aa00 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65 72 65  ump (since there
1aa10 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1aa20 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20  in the table).. 
1aa30 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
1aa40 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1aa50 65 3d 3d 30 20 29 3b 0a 20 20 20 20 70 63 20 3d  e==0 );.    pc =
1aa60 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1aa70 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1aa80 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31   Opcode: Seek P1
1aa90 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1aaa0 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61  P1 is an open ta
1aab0 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50  ble cursor and P
1aac0 32 20 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74  2 is a rowid int
1aad0 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a  eger.  Arrange.*
1aae0 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65  * for P1 to move
1aaf0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1ab00 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ts to the rowid 
1ab10 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a  given by P2..**.
1ab20 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74 75 61  ** This is actua
1ab30 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64 20 73  lly a deferred s
1ab40 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63  eek.  Nothing ac
1ab50 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75  tually happens u
1ab60 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73  ntil.** the curs
1ab70 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65  or is used to re
1ab80 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68  ad a record.  Th
1ab90 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65  at way, if no re
1aba0 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f  ads.** occur, no
1abb0 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f   unnecessary I/O
1abc0 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73   happens..*/.cas
1abd0 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20  e OP_Seek: {    
1abe0 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
1abf0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
1ac00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1ac10 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1ac20 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1ac30 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1ac40 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1ac50 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c  C!=0 );.  if( AL
1ac60 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72  WAYS(pC->pCursor
1ac70 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65  !=0) ){.    asse
1ac80 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1ac90 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  );.    pC->nullR
1aca0 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  ow = 0;.    pC->
1acb0 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73  movetoTarget = s
1acc0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
1acd0 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43  ue(pIn2);.    pC
1ace0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1acf0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65   0;.    pC->defe
1ad00 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
1ad10 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20    }.  break;.}. 
1ad20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f   ../* Opcode: Fo
1ad30 75 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  und P1 P2 P3 * *
1ad40 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
1ad50 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1ad60 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1ad70 61 6b 65 52 65 63 6f 72 64 2e 20 20 50 31 20 69  akeRecord.  P1 i
1ad80 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  s an index..** I
1ad90 66 20 61 6e 20 65 6e 74 72 79 20 74 68 61 74 20  f an entry that 
1ada0 6d 61 74 63 68 65 73 20 74 68 65 20 76 61 6c 75  matches the valu
1adb0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 33  e in register p3
1adc0 20 65 78 69 73 74 73 20 69 6e 20 50 31 20 74 68   exists in P1 th
1add0 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32  en.** jump to P2
1ade0 2e 20 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  .  If the P3 val
1adf0 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  ue does not matc
1ae00 68 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  h any entry in P
1ae10 31 0a 2a 2a 20 74 68 65 6e 20 66 61 6c 6c 20 74  1.** then fall t
1ae20 68 72 75 2e 20 20 54 68 65 20 50 31 20 63 75 72  hru.  The P1 cur
1ae30 73 6f 72 20 69 73 20 6c 65 66 74 20 70 6f 69 6e  sor is left poin
1ae40 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63  ting at the matc
1ae50 68 69 6e 67 20 65 6e 74 72 79 0a 2a 2a 20 69 66  hing entry.** if
1ae60 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a   it exists..**.*
1ae70 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
1ae80 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d  on is used to im
1ae90 70 6c 65 6d 65 6e 74 20 74 68 65 20 49 4e 20 6f  plement the IN o
1aea0 70 65 72 61 74 6f 72 20 77 68 65 72 65 20 74 68  perator where th
1aeb0 65 0a 2a 2a 20 6c 65 66 74 2d 68 61 6e 64 20 73  e.** left-hand s
1aec0 69 64 65 20 69 73 20 61 20 53 45 4c 45 43 54 20  ide is a SELECT 
1aed0 73 74 61 74 65 6d 65 6e 74 2e 20 20 50 31 20 6d  statement.  P1 m
1aee0 61 79 20 62 65 20 61 20 74 72 75 65 20 69 6e 64  ay be a true ind
1aef0 65 78 2c 20 6f 72 20 69 74 0a 2a 2a 20 6d 61 79  ex, or it.** may
1af00 20 62 65 20 61 20 74 65 6d 70 6f 72 61 72 79 20   be a temporary 
1af10 69 6e 64 65 78 20 74 68 61 74 20 68 6f 6c 64 73  index that holds
1af20 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
1af30 74 68 65 20 53 45 4c 45 43 54 0a 2a 2a 20 73 74  the SELECT.** st
1af40 61 74 65 6d 65 6e 74 2e 20 20 20 54 68 69 73 20  atement.   This 
1af50 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
1af60 6c 73 6f 20 75 73 65 64 20 74 6f 20 69 6d 70 6c  lso used to impl
1af70 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 44 49 53  ement the.** DIS
1af80 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 69 6e  TINCT keyword in
1af90 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1afa0 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ts..**.** This i
1afb0 6e 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63 6b  nstruction check
1afc0 73 20 69 66 20 69 6e 64 65 78 20 50 31 20 63 6f  s if index P1 co
1afd0 6e 74 61 69 6e 73 20 61 20 72 65 63 6f 72 64 20  ntains a record 
1afe0 66 6f 72 20 77 68 69 63 68 20 0a 2a 2a 20 74 68  for which .** th
1aff0 65 20 66 69 72 73 74 20 4e 20 73 65 72 69 61 6c  e first N serial
1b000 69 7a 65 64 20 76 61 6c 75 65 73 20 65 78 61 63  ized values exac
1b010 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20 4e 20  tly match the N 
1b020 73 65 72 69 61 6c 69 7a 65 64 20 76 61 6c 75 65  serialized value
1b030 73 0a 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 6f  s.** in the reco
1b040 72 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  rd in register P
1b050 33 2c 20 77 68 65 72 65 20 4e 20 69 73 20 74 68  3, where N is th
1b060 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
1b070 66 20 76 61 6c 75 65 73 20 69 6e 0a 2a 2a 20 74  f values in.** t
1b080 68 65 20 50 33 20 72 65 63 6f 72 64 20 28 74 68  he P3 record (th
1b090 65 20 50 33 20 72 65 63 6f 72 64 20 69 73 20 61  e P3 record is a
1b0a0 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 50   prefix of the P
1b0b0 31 20 72 65 63 6f 72 64 29 2e 20 0a 2a 2a 0a 2a  1 record). .**.*
1b0c0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
1b0d0 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 2c 20  ound, IsUnique, 
1b0e0 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 2f 2a 20  NotExists.*/./* 
1b0f0 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64  Opcode: NotFound
1b100 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1b110 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20  .** Register P3 
1b120 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1b130 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1b140 52 65 63 6f 72 64 2e 20 20 50 31 20 69 73 0a 2a  Record.  P1 is.*
1b150 2a 20 61 6e 20 69 6e 64 65 78 2e 20 20 49 66 20  * an index.  If 
1b160 6e 6f 20 65 6e 74 72 79 20 65 78 69 73 74 73 20  no entry exists 
1b170 69 6e 20 50 31 20 74 68 61 74 20 6d 61 74 63 68  in P1 that match
1b180 65 73 20 74 68 65 20 62 6c 6f 62 20 74 68 65 6e  es the blob then
1b190 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20   jump.** to P2. 
1b1a0 20 49 66 20 61 6e 20 65 6e 74 72 79 20 64 6f 65   If an entry doe
1b1b0 73 20 65 78 69 73 74 69 6e 67 2c 20 66 61 6c 6c  s existing, fall
1b1c0 20 74 68 72 6f 75 67 68 2e 20 20 54 68 65 20 63   through.  The c
1b1d0 75 72 73 6f 72 20 69 73 20 6c 65 66 74 0a 2a 2a  ursor is left.**
1b1e0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
1b1f0 20 65 6e 74 72 79 20 74 68 61 74 20 6d 61 74 63   entry that matc
1b200 68 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  hes..**.** See a
1b210 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  lso: Found, NotE
1b220 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75 65 0a  xists, IsUnique.
1b230 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f  */.case OP_NotFo
1b240 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75  und:       /* ju
1b250 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1b260 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20  OP_Found: {     
1b270 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1b280 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79  */.  int already
1b290 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65 43 75  Exists;.  VdbeCu
1b2a0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
1b2b0 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
1b2c0 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a  ecord *pIdxKey;.
1b2d0 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b    char aTempRec[
1b2e0 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e  ROUND8(sizeof(Un
1b2f0 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b  packedRecord)) +
1b300 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33 20 2b   sizeof(Mem)*3 +
1b310 20 37 5d 3b 0a 0a 20 20 61 6c 72 65 61 64 79 45   7];..  alreadyE
1b320 78 69 73 74 73 20 3d 20 30 3b 0a 20 20 61 73 73  xists = 0;.  ass
1b330 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1b340 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1b350 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1b360 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1b370 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1b380 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  =0 );.  if( ALWA
1b390 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  YS(pC->pCursor!=
1b3a0 30 29 20 29 7b 0a 0a 20 20 20 20 61 73 73 65 72  0) ){..    asser
1b3b0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
1b3c0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
1b3d0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
1b3e0 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 70  EM_Blob );.    p
1b3f0 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  IdxKey = sqlite3
1b400 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b  VdbeRecordUnpack
1b410 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  (pC->pKeyInfo, p
1b420 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c  In3->n, pIn3->z,
1b430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b450 20 20 20 20 20 20 20 61 54 65 6d 70 52 65 63 2c         aTempRec,
1b460 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63   sizeof(aTempRec
1b470 29 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  ));.    if( pIdx
1b480 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Key==0 ){.      
1b490 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
1b4a0 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e   }.    if( pOp->
1b4b0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
1b4c0 20 29 7b 0a 20 20 20 20 20 20 70 49 64 78 4b 65   ){.      pIdxKe
1b4d0 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41  y->flags |= UNPA
1b4e0 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43  CKED_PREFIX_MATC
1b4f0 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  H;.    }.    rc 
1b500 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1b510 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1b520 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65  >pCursor, pIdxKe
1b530 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  y, 0, 0, &res);.
1b540 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
1b550 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63  eleteUnpackedRec
1b560 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20  ord(pIdxKey);.  
1b570 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1b580 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 62 72 65  _OK ){.      bre
1b590 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 6c  ak;.    }.    al
1b5a0 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
1b5b0 65 73 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e  es==0);.    pC->
1b5c0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1b5d0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1b5e0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1b5f0 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28  STALE;.  }.  if(
1b600 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1b610 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69 66  _Found ){.    if
1b620 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20  ( alreadyExists 
1b630 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
1b640 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
1b650 20 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69   if( !alreadyExi
1b660 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  sts ) pc = pOp->
1b670 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1b680 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1b690 65 3a 20 49 73 55 6e 69 71 75 65 20 50 31 20 50  e: IsUnique P1 P
1b6a0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1b6b0 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 70 65  Cursor P1 is ope
1b6c0 6e 20 6f 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20  n on an index.  
1b6d0 53 6f 20 69 74 20 68 61 73 20 6e 6f 20 64 61 74  So it has no dat
1b6e0 61 20 61 6e 64 20 69 74 73 20 6b 65 79 20 63 6f  a and its key co
1b6f0 6e 73 69 73 74 73 20 0a 2a 2a 20 6f 66 20 61 20  nsists .** of a 
1b700 72 65 63 6f 72 64 20 67 65 6e 65 72 61 74 65 64  record generated
1b710 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72   by OP_MakeRecor
1b720 64 20 77 68 65 72 65 20 74 68 65 20 6c 61 73 74  d where the last
1b730 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 0a 2a   field is the .*
1b740 2a 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 65  * rowid of the e
1b750 6e 74 72 79 20 74 68 61 74 20 74 68 65 20 69 6e  ntry that the in
1b760 64 65 78 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a  dex refers to..*
1b770 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72 65 67 69  *.** The P3 regi
1b780 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e  ster contains an
1b790 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
1b7a0 6e 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74 68 69  number. Call thi
1b7b0 73 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d  s record .** num
1b7c0 62 65 72 20 52 2e 20 52 65 67 69 73 74 65 72 20  ber R. Register 
1b7d0 50 34 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P4 is the first 
1b7e0 69 6e 20 61 20 73 65 74 20 6f 66 20 4e 20 63 6f  in a set of N co
1b7f0 6e 74 69 67 75 6f 75 73 20 72 65 67 69 73 74 65  ntiguous registe
1b800 72 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20  rs.** that make 
1b810 75 70 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  up an unpacked i
1b820 6e 64 65 78 20 6b 65 79 20 74 68 61 74 20 63 61  ndex key that ca
1b830 6e 20 62 65 20 75 73 65 64 20 77 69 74 68 20 63  n be used with c
1b840 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
1b850 20 76 61 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20   value of N can 
1b860 62 65 20 69 6e 66 65 72 72 65 64 20 66 72 6f 6d  be inferred from
1b870 20 74 68 65 20 63 75 72 73 6f 72 2e 20 4e 20 69   the cursor. N i
1b880 6e 63 6c 75 64 65 73 20 74 68 65 20 72 6f 77 69  ncludes the rowi
1b890 64 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70 65 6e  d.** value appen
1b8a0 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f  ded to the end o
1b8b0 66 20 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f  f the index reco
1b8c0 72 64 2e 20 54 68 69 73 20 72 6f 77 69 64 20 76  rd. This rowid v
1b8d0 61 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d  alue may.** or m
1b8e0 61 79 20 6e 6f 74 20 62 65 20 74 68 65 20 73 61  ay not be the sa
1b8f0 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49  me as R..**.** I
1b900 66 20 61 6e 79 20 6f 66 20 74 68 65 20 4e 20 72  f any of the N r
1b910 65 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69  egisters beginni
1b920 6e 67 20 77 69 74 68 20 72 65 67 69 73 74 65 72  ng with register
1b930 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e   P4 contains a N
1b940 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75  ULL.** value, ju
1b950 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1b960 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  o P2..**.** Othe
1b970 72 77 69 73 65 2c 20 74 68 69 73 20 69 6e 73 74  rwise, this inst
1b980 72 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69  ruction checks i
1b990 66 20 63 75 72 73 6f 72 20 50 31 20 63 6f 6e 74  f cursor P1 cont
1b9a0 61 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a  ains an entry.**
1b9b0 20 77 68 65 72 65 20 74 68 65 20 66 69 72 73 74   where the first
1b9c0 20 28 4e 2d 31 29 20 66 69 65 6c 64 73 20 6d 61   (N-1) fields ma
1b9d0 74 63 68 20 62 75 74 20 74 68 65 20 72 6f 77 69  tch but the rowi
1b9e0 64 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 65  d value at the e
1b9f0 6e 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64  nd.** of the ind
1ba00 65 78 20 65 6e 74 72 79 20 69 73 20 6e 6f 74 20  ex entry is not 
1ba10 52 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  R. If there is n
1ba20 6f 20 73 75 63 68 20 65 6e 74 72 79 2c 20 63 6f  o such entry, co
1ba30 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74  ntrol jumps.** t
1ba40 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
1ba50 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65  . Otherwise, the
1ba60 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f   rowid of the co
1ba70 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 0a  nflicting index.
1ba80 2a 2a 20 65 6e 74 72 79 20 69 73 20 63 6f 70 69  ** entry is copi
1ba90 65 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  ed to register P
1baa0 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61  3 and control fa
1bab0 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  lls through to t
1bac0 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72  he next.** instr
1bad0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  uction..**.** Se
1bae0 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
1baf0 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75  , NotExists, Fou
1bb00 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73  nd.*/.case OP_Is
1bb10 55 6e 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20  Unique: {       
1bb20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1bb30 0a 20 20 75 31 36 20 69 69 3b 0a 20 20 56 64 62  .  u16 ii;.  Vdb
1bb40 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20  eCursor *pCx;.  
1bb50 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1bb60 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 0a 20  .  u16 nField;. 
1bb70 20 4d 65 6d 20 2a 61 4d 65 6d 3b 0a 20 20 55 6e   Mem *aMem;.  Un
1bb80 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20  packedRecord r; 
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 2f 2a 20 42 2d 54 72 65 65 20 69 6e 64 65 78   /* B-Tree index
1bbb0 20 73 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a 20   search key */. 
1bbc0 20 69 36 34 20 52 3b 20 20 20 20 20 20 20 20 20   i64 R;         
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbe0 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 73 74 6f      /* Rowid sto
1bbf0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1bc00 50 33 20 2a 2f 0a 0a 20 20 61 4d 65 6d 20 3d 20  P3 */..  aMem = 
1bc10 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34  &p->aMem[pOp->p4
1bc20 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73 73 65 72 74  .i];.  /* Assert
1bc30 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73   that the values
1bc40 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 50   of parameters P
1bc50 31 20 61 6e 64 20 50 34 20 61 72 65 20 69 6e 20  1 and P4 are in 
1bc60 72 61 6e 67 65 2e 20 2a 2f 0a 20 20 61 73 73 65  range. */.  asse
1bc70 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1bc80 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61  =P4_INT32 );.  a
1bc90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69  ssert( pOp->p4.i
1bca0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c  >0 && pOp->p4.i<
1bcb0 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61 73  =p->nMem );.  as
1bcc0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1bcd0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1bce0 43 75 72 73 6f 72 20 29 3b 0a 0a 20 20 2f 2a 20  Cursor );..  /* 
1bcf0 46 69 6e 64 20 74 68 65 20 69 6e 64 65 78 20 63  Find the index c
1bd00 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 70 43 78 20  ursor. */.  pCx 
1bd10 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1bd20 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1bd30 43 78 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  Cx->deferredMove
1bd40 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 78 2d 3e  to==0 );.  pCx->
1bd50 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
1bd60 20 20 70 43 78 2d 3e 63 61 63 68 65 53 74 61 74    pCx->cacheStat
1bd70 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1bd80 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 78 2d  ;.  pCrsr = pCx-
1bd90 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20  >pCursor;..  /* 
1bda0 49 66 20 61 6e 79 20 6f 66 20 74 68 65 20 76 61  If any of the va
1bdb0 6c 75 65 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74  lues are NULL, t
1bdc0 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 2a 2f  ake the jump. */
1bdd0 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 78 2d  .  nField = pCx-
1bde0 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c  >pKeyInfo->nFiel
1bdf0 64 3b 0a 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  d;.  for(ii=0; i
1be00 69 3c 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b  i<nField; ii++){
1be10 0a 20 20 20 20 69 66 28 20 61 4d 65 6d 5b 69 69  .    if( aMem[ii
1be20 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
1be30 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ll ){.      pc =
1be40 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1be50 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b 0a 20      pCrsr = 0;. 
1be60 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1be70 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  }.  }.  assert( 
1be80 28 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 2e 66 6c  (aMem[nField].fl
1be90 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
1bea0 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 72  =0 );..  if( pCr
1beb0 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  sr!=0 ){.    /* 
1bec0 50 6f 70 75 6c 61 74 65 20 74 68 65 20 69 6e 64  Populate the ind
1bed0 65 78 20 73 65 61 72 63 68 20 6b 65 79 2e 20 2a  ex search key. *
1bee0 2f 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  /.    r.pKeyInfo
1bef0 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f   = pCx->pKeyInfo
1bf00 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
1bf10 20 6e 46 69 65 6c 64 20 2b 20 31 3b 0a 20 20 20   nField + 1;.   
1bf20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
1bf30 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43  KED_PREFIX_SEARC
1bf40 48 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20  H;.    r.aMem = 
1bf50 61 4d 65 6d 3b 0a 0a 20 20 20 20 2f 2a 20 45 78  aMem;..    /* Ex
1bf60 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
1bf70 6f 66 20 52 20 66 72 6f 6d 20 72 65 67 69 73 74  of R from regist
1bf80 65 72 20 50 33 2e 20 2a 2f 0a 20 20 20 20 73 71  er P3. */.    sq
1bf90 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1bfa0 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20  gerify(pIn3);.  
1bfb0 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b    R = pIn3->u.i;
1bfc0 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63 68 20  ..    /* Search 
1bfd0 74 68 65 20 42 2d 54 72 65 65 20 69 6e 64 65 78  the B-Tree index
1bfe0 2e 20 49 66 20 6e 6f 20 63 6f 6e 66 6c 69 63 74  . If no conflict
1bff0 69 6e 67 20 72 65 63 6f 72 64 20 69 73 20 66 6f  ing record is fo
1c000 75 6e 64 2c 20 6a 75 6d 70 0a 20 20 20 20 2a 2a  und, jump.    **
1c010 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73   to P2. Otherwis
1c020 65 2c 20 63 6f 70 79 20 74 68 65 20 72 6f 77 69  e, copy the rowi
1c030 64 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63  d of the conflic
1c040 74 69 6e 67 20 72 65 63 6f 72 64 20 74 6f 0a 20  ting record to. 
1c050 20 20 20 2a 2a 20 72 65 67 69 73 74 65 72 20 50     ** register P
1c060 33 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  3 and fall throu
1c070 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
1c080 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 2a 2f 0a  nstruction.  */.
1c090 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1c0a0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1c0b0 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30  ked(pCrsr, &r, 0
1c0c0 2c 20 30 2c 20 26 70 43 78 2d 3e 73 65 65 6b 52  , 0, &pCx->seekR
1c0d0 65 73 75 6c 74 29 3b 0a 20 20 20 20 69 66 28 20  esult);.    if( 
1c0e0 28 72 2e 66 6c 61 67 73 20 26 20 55 4e 50 41 43  (r.flags & UNPAC
1c0f0 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52 43  KED_PREFIX_SEARC
1c100 48 29 20 7c 7c 20 72 2e 72 6f 77 69 64 3d 3d 52  H) || r.rowid==R
1c110 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
1c120 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
1c130 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 6e  }else{.      pIn
1c140 33 2d 3e 75 2e 69 20 3d 20 72 2e 72 6f 77 69 64  3->u.i = r.rowid
1c150 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
1c160 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c170 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20  e: NotExists P1 
1c180 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1c190 55 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  Use the content 
1c1a0 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 61  of register P3 a
1c1b0 73 20 61 20 69 6e 74 65 67 65 72 20 6b 65 79 2e  s a integer key.
1c1c0 20 20 49 66 20 61 20 72 65 63 6f 72 64 20 0a 2a    If a record .*
1c1d0 2a 20 77 69 74 68 20 74 68 61 74 20 6b 65 79 20  * with that key 
1c1e0 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69  does not exist i
1c1f0 6e 20 74 61 62 6c 65 20 6f 66 20 50 31 2c 20 74  n table of P1, t
1c200 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
1c210 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72  .** If the recor
1c220 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 74 68  d does exist, th
1c230 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e 20 20 54  en fall thru.  T
1c240 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
1c250 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74  t .** pointing t
1c260 6f 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20  o the record if 
1c270 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a  it exists..**.**
1c280 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
1c290 62 65 74 77 65 65 6e 20 74 68 69 73 20 6f 70 65  between this ope
1c2a0 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f  ration and NotFo
1c2b0 75 6e 64 20 69 73 20 74 68 61 74 20 74 68 69 73  und is that this
1c2c0 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61 73  .** operation as
1c2d0 73 75 6d 65 73 20 74 68 65 20 6b 65 79 20 69 73  sumes the key is
1c2e0 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20   an integer and 
1c2f0 74 68 61 74 20 50 31 20 69 73 20 61 20 74 61 62  that P1 is a tab
1c300 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f  le whereas.** No
1c310 74 46 6f 75 6e 64 20 61 73 73 75 6d 65 73 20 6b  tFound assumes k
1c320 65 79 20 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e  ey is a blob con
1c330 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 4d 61  structed from Ma
1c340 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20  keRecord and.** 
1c350 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a  P1 is an index..
1c360 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1c370 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1c380 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73   IsUnique.*/.cas
1c390 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
1c3a0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1c3b0 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43  , in3 */.  VdbeC
1c3c0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
1c3d0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1c3e0 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69  int res;.  u64 i
1c3f0 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Key;..  assert( 
1c400 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1c410 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
1c420 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1c430 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1c440 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1c450 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1c460 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1c470 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1c480 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 70  ->isTable );.  p
1c490 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
1c4a0 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21  or;.  if( pCrsr!
1c4b0 3d 30 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20  =0 ){.    res = 
1c4c0 30 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 49  0;.    iKey = pI
1c4d0 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 72 63 20  n3->u.i;.    rc 
1c4e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1c4f0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
1c500 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20  sr, 0, iKey, 0, 
1c510 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c  &res);.    pC->l
1c520 61 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d  astRowid = pIn3-
1c530 3e 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f  >u.i;.    pC->ro
1c540 77 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73  widIsValid = res
1c550 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43  ==0 ?1:0;.    pC
1c560 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
1c570 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
1c580 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1c590 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1c5a0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1c5b0 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a    if( res!=0 ){.
1c5c0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1c5d0 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 61 73  p2 - 1;.      as
1c5e0 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
1c5f0 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20  sValid==0 );.   
1c600 20 7d 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52   }.    pC->seekR
1c610 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d  esult = res;.  }
1c620 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69  else{.    /* Thi
1c630 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61  s happens when a
1c640 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 6f 70 65  n attempt to ope
1c650 6e 20 61 20 72 65 61 64 20 63 75 72 73 6f 72 20  n a read cursor 
1c660 6f 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 73  on the .    ** s
1c670 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
1c680 6c 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  le returns SQLIT
1c690 45 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a  E_EMPTY..    */.
1c6a0 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d      assert( !pC-
1c6b0 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 3b 0a  >pseudoTable );.
1c6c0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1c6d0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70  isTable );.    p
1c6e0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1c6f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1c700 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30  >rowidIsValid==0
1c710 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b   );.    pC->seek
1c720 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d 0a  Result = 0;.  }.
1c730 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c740 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20  pcode: Sequence 
1c750 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1c760 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
1c770 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
1c780 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
1c790 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
1c7a0 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
1c7b0 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
1c7c0 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
1c7d0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
1c7e0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1c7f0 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
1c800 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
1c810 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
1c820 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
1c830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
1c840 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
1c850 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c860 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1c870 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1c880 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1c890 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
1c8a0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d    pOut->u.i = p-
1c8b0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
1c8c0 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 4d  >seqCount++;.  M
1c8d0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
1c8e0 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
1c8f0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
1c900 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
1c910 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1c920 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65  * Get a new inte
1c930 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
1c940 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22  r (a.k.a "rowid"
1c950 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  ) used as the ke
1c960 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  y to a table..**
1c970 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   The record numb
1c980 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  er is not previo
1c990 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b  usly used as a k
1c9a0 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ey in the databa
1c9b0 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74  se.** table that
1c9c0 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
1c9d0 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72  s to.  The new r
1c9e0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1c9f0 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74  written.** writt
1ca00 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  en to register P
1ca10 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30  2..**.** If P3>0
1ca20 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65   then P3 is a re
1ca30 67 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64  gister that hold
1ca40 73 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72  s the largest pr
1ca50 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 67 65 6e 65  eviously.** gene
1ca60 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
1ca70 62 65 72 2e 20 20 4e 6f 20 6e 65 77 20 72 65 63  ber.  No new rec
1ca80 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 20  ord numbers are 
1ca90 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65  allowed to be le
1caa0 73 73 0a 2a 2a 20 74 68 61 6e 20 74 68 69 73 20  ss.** than this 
1cab0 76 61 6c 75 65 2e 20 20 57 68 65 6e 20 74 68 69  value.  When thi
1cac0 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20  s value reaches 
1cad0 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 61 20 53  its maximum, a S
1cae0 51 4c 49 54 45 5f 46 55 4c 4c 0a 2a 2a 20 65 72  QLITE_FULL.** er
1caf0 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
1cb00 2e 20 20 54 68 65 20 50 33 20 72 65 67 69 73 74  .  The P3 regist
1cb10 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69  er is updated wi
1cb20 74 68 20 74 68 65 20 67 65 6e 65 72 61 74 65 64  th the generated
1cb30 0a 2a 2a 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  .** record numbe
1cb40 72 2e 20 20 54 68 69 73 20 50 33 20 6d 65 63 68  r.  This P3 mech
1cb50 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f  anism is used to
1cb60 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20   help implement 
1cb70 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45  the.** AUTOINCRE
1cb80 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f  MENT feature..*/
1cb90 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69  .case OP_NewRowi
1cba0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
1cbb0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
1cbc0 65 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20  e */.  i64 v;   
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cbe0 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   The new rowid *
1cbf0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1cc00 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75  pC;        /* Cu
1cc10 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f  rsor of table to
1cc20 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77   get the new row
1cc30 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  id */.  int res;
1cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1cc50 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73  * Result of an s
1cc60 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
1cc70 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20  ) */.  int cnt; 
1cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cc90 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69   Counter to limi
1cca0 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
1ccb0 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65  searches */.  Me
1ccc0 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
1ccd0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1cce0 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74   holding largest
1ccf0 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49   rowid for AUTOI
1cd00 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 20 20 76  NCREMENT */..  v
1cd10 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b   = 0;.  res = 0;
1cd20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1cd30 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1cd40 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1cd50 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1cd60 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1cd70 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
1cd80 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75 72  ( NEVER(pC->pCur
1cd90 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f  sor==0) ){.    /
1cda0 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69  * The zero initi
1cdb0 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20  alization above 
1cdc0 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e  is all that is n
1cdd0 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65  eeded */.  }else
1cde0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  {.    /* The nex
1cdf0 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72  t rowid or recor
1ce00 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72  d number (differ
1ce10 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68  ent terms for th
1ce20 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68  e same.    ** th
1ce30 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64  ing) is obtained
1ce40 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61   in a two-step a
1ce50 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a  lgorithm..    **
1ce60 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65  .    ** First we
1ce70 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
1ce80 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
1ce90 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20  sting rowid and 
1cea0 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74  add one.    ** t
1ceb0 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20  o that.  But if 
1cec0 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
1ced0 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c  ting rowid is al
1cee0 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75  ready the maximu
1cef0 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76  m.    ** positiv
1cf00 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61  e integer, we ha
1cf10 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75  ve to fall throu
1cf20 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64  gh to the second
1cf30 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c  .    ** probabil
1cf40 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a  istic algorithm.
1cf50 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68      **.    ** Th
1cf60 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74  e second algorit
1cf70 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20  hm is to select 
1cf80 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f  a rowid at rando
1cf90 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20  m and see if.   
1cfa0 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65   ** it already e
1cfb0 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62  xists in the tab
1cfc0 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  le.  If it does 
1cfd0 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61  not exist, we ha
1cfe0 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65  ve.    ** succee
1cff0 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e  ded.  If the ran
1d000 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65  dom rowid does e
1d010 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20  xist, we select 
1d020 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a  a new one.    **
1d030 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20   and try again, 
1d040 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e  up to 100 times.
1d050 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
1d060 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1d070 29 3b 0a 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a  );.    cnt = 0;.
1d080 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33  .#ifdef SQLITE_3
1d090 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64  2BIT_ROWID.#   d
1d0a0 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
1d0b0 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65  0x7fffffff.#else
1d0c0 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d  .    /* Some com
1d0d0 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  pilers complain 
1d0e0 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  about constants 
1d0f0 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66  of the form 0x7f
1d100 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a  ffffffffffffff..
1d110 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f      ** Others co
1d120 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37  mplain about 0x7
1d130 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  ffffffffffffffff
1d140 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  LL.  The followi
1d150 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20  ng macro seems. 
1d160 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65     ** to provide
1d170 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68   the constant wh
1d180 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63  ile making all c
1d190 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a  ompilers happy..
1d1a0 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e      */.#   defin
1d1b0 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36  e MAX_ROWID  (i6
1d1c0 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66  4)( (((u64)0x7ff
1d1d0 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75  fffff)<<32) | (u
1d1e0 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a  64)0xffffffff ).
1d1f0 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20  #endif..    if( 
1d200 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f  !pC->useRandomRo
1d210 77 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  wid ){.      v =
1d220 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
1d230 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e  CachedRowid(pC->
1d240 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1d250 69 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20  if( v==0 ){.    
1d260 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1d270 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43  BtreeLast(pC->pC
1d280 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1d290 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1d2a0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1d2b0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1d2c0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1d2d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1d2e0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
1d2f0 20 20 20 20 20 76 20 3d 20 31 3b 0a 20 20 20 20       v = 1;.    
1d300 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1d310 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
1d320 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
1d330 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20  rsor, &v);.     
1d340 20 20 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f       if( v==MAX_
1d350 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20  ROWID ){.       
1d360 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
1d370 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
1d380 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1d390 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20            v++;. 
1d3a0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1d3b0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69     }.      }..#i
1d3c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1d3d0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
1d3e0 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
1d3f0 33 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  3 ){.        ass
1d400 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
1d410 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
1d420 65 6d 20 29 3b 20 2f 2a 20 50 33 20 69 73 20 61  em ); /* P3 is a
1d430 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
1d440 6c 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4d  ll */.        pM
1d450 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
1d460 70 2d 3e 70 33 5d 3b 0a 09 52 45 47 49 53 54 45  p->p3];..REGISTE
1d470 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
1d480 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20   pMem);.        
1d490 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
1d4a0 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a  tegerify(pMem);.
1d4b0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1d4c0 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
1d4d0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f  EM_Int)!=0 );  /
1d4e0 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20  * mem(P3) holds 
1d4f0 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20  an integer */.  
1d500 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e        if( pMem->
1d510 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c  u.i==MAX_ROWID |
1d520 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  | pC->useRandomR
1d530 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  owid ){.        
1d540 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
1d550 4c 4c 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  LL;.          go
1d560 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1d570 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d  error;.        }
1d580 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3c 70  .        if( v<p
1d590 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20  Mem->u.i+1 ){.  
1d5a0 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d          v = pMem
1d5b0 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20  ->u.i + 1;.     
1d5c0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65     }.        pMe
1d5d0 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20  m->u.i = v;.    
1d5e0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
1d5f0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
1d600 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
1d610 3e 70 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f  >pCursor, v<MAX_
1d620 52 4f 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29  ROWID ? v+1 : 0)
1d630 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
1d640 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1d650 69 64 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  id ){.      asse
1d660 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29  rt( pOp->p3==0 )
1d670 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20  ;  /* We cannot 
1d680 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77  be in random row
1d690 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20  id mode if this 
1d6a0 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  is.             
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6c0 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  ** an AUTOINCREM
1d6d0 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  ENT table. */.  
1d6e0 20 20 20 20 76 20 3d 20 64 62 2d 3e 6c 61 73 74      v = db->last
1d6f0 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 63 6e 74  Rowid;.      cnt
1d700 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a   = 0;.      do{.
1d710 20 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3d          if( cnt=
1d720 3d 30 20 26 26 20 28 76 26 30 78 66 66 66 66 66  =0 && (v&0xfffff
1d730 66 29 3d 3d 76 20 29 7b 0a 20 20 20 20 20 20 20  f)==v ){.       
1d740 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20     v++;.        
1d750 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1d760 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e   sqlite3_randomn
1d770 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26  ess(sizeof(v), &
1d780 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  v);.          if
1d790 28 20 63 6e 74 3c 35 20 29 20 76 20 26 3d 20 30  ( cnt<5 ) v &= 0
1d7a0 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20  xffffff;.       
1d7b0 20 7d 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20   }.        rc = 
1d7c0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1d7d0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1d7e0 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
1d7f0 76 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  v, 0, &res);.   
1d800 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20       cnt++;.    
1d810 20 20 7d 77 68 69 6c 65 28 20 63 6e 74 3c 31 30    }while( cnt<10
1d820 30 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f  0 && rc==SQLITE_
1d830 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 3b 0a  OK && res==0 );.
1d840 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
1d850 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d  LITE_OK && res==
1d860 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
1d870 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20  = SQLITE_FULL;. 
1d880 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1d890 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1d8a0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1d8b0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1d8c0 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  id = 0;.    pC->
1d8d0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1d8e0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1d8f0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1d900 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 4d 65 6d  STALE;.  }.  Mem
1d910 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
1d920 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 70 4f  , MEM_Int);.  pO
1d930 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62  ut->u.i = v;.  b
1d940 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1d950 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32  de: Insert P1 P2
1d960 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
1d970 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69  Write an entry i
1d980 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66  nto the table of
1d990 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e   cursor P1.  A n
1d9a0 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63  ew entry is.** c
1d9b0 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65  reated if it doe
1d9c0 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69  sn't already exi
1d9d0 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66  st or the data f
1d9e0 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a  or an existing.*
1d9f0 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77  * entry is overw
1da00 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74  ritten.  The dat
1da10 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 73  a is the value s
1da20 74 6f 72 65 64 20 72 65 67 69 73 74 65 72 0a 2a  tored register.*
1da30 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65  * number P2. The
1da40 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69   key is stored i
1da50 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54  n register P3. T
1da60 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62  he key must.** b
1da70 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a  e an integer..**
1da80 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
1da90 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
1daa0 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
1dab0 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
1dac0 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
1dad0 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
1dae0 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68  ise not).  If th
1daf0 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
1db00 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  ID flag of P5 is
1db10 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f   set,.** then ro
1db20 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f  wid is stored fo
1db30 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74  r subsequent ret
1db40 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  urn by the.** sq
1db50 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
1db60 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69  t_rowid() functi
1db70 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74  on (otherwise it
1db80 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e   is unmodified).
1db90 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72  .**.** Parameter
1dba0 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f   P4 may point to
1dbb0 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69   a string contai
1dbc0 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d 6e  ning the table-n
1dbd0 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62  ame, or.** may b
1dbe0 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73  e NULL. If it is
1dbf0 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
1dc00 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
1dc10 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55 70  .** (sqlite3.xUp
1dc20 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73  dateCallback) is
1dc30 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69   invoked followi
1dc40 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  ng a successful 
1dc50 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57  insert..**.** (W
1dc60 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20  ARNING/TODO: If 
1dc70 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63  P1 is a pseudo-c
1dc80 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20  ursor and P2 is 
1dc90 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61  dynamically.** a
1dca0 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f  llocated, then o
1dcb0 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69  wnership of P2 i
1dcc0 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f  s transferred to
1dcd0 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73   the pseudo-curs
1dce0 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74  or.** and regist
1dcf0 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70  er P2 becomes ep
1dd00 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65  hemeral.  If the
1dd10 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67   cursor is chang
1dd20 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  ed, the.** value
1dd30 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
1dd40 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65  will then change
1dd50 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69  .  Make sure thi
1dd60 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61  s does not.** ca
1dd70 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  use any problems
1dd80 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  .).**.** This in
1dd90 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
1dda0 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20  orks on tables. 
1ddb0 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   The equivalent 
1ddc0 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66  instruction.** f
1ddd0 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50  or indices is OP
1dde0 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63  _IdxInsert..*/.c
1ddf0 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 7b  ase OP_Insert: {
1de00 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 0a 20  .  Mem *pData;. 
1de10 20 4d 65 6d 20 2a 70 4b 65 79 3b 0a 20 20 69 36   Mem *pKey;.  i6
1de20 34 20 69 4b 65 79 3b 20 20 20 2f 2a 20 54 68 65  4 iKey;   /* The
1de30 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f   integer ROWID o
1de40 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65  r key for the re
1de50 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
1de60 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ted */.  VdbeCur
1de70 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 6e  sor *pC;.  int n
1de80 5a 65 72 6f 3b 0a 20 20 69 6e 74 20 73 65 65 6b  Zero;.  int seek
1de90 52 65 73 75 6c 74 3b 0a 20 20 63 6f 6e 73 74 20  Result;.  const 
1dea0 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 63 6f 6e  char *zDb;.  con
1deb0 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 0a 20  st char *zTbl;. 
1dec0 20 69 6e 74 20 6f 70 3b 0a 0a 20 20 70 44 61 74   int op;..  pDat
1ded0 61 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  a = &p->aMem[pOp
1dee0 2d 3e 70 32 5d 3b 0a 20 20 70 4b 65 79 20 3d 20  ->p2];.  pKey = 
1def0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
1df00 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ];.  assert( pOp
1df10 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1df20 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1df30 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1df40 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1df50 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1df60 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1df70 73 6f 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73  sor!=0 || pC->ps
1df80 65 75 64 6f 54 61 62 6c 65 20 29 3b 0a 20 20 61  eudoTable );.  a
1df90 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61  ssert( pKey->fla
1dfa0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
1dfb0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1dfc0 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53  Table );.  REGIS
1dfd0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
1dfe0 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 52 45 47  2, pData);.  REG
1dff0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1e000 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 0a 20 20 69  >p3, pKey);..  i
1e010 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b  Key = pKey->u.i;
1e020 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
1e030 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
1e040 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
1e050 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
1e060 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
1e070 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   ) db->lastRowid
1e080 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20   = pKey->u.i;.  
1e090 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
1e0a0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
1e0b0 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b     pData->z = 0;
1e0c0 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20  .    pData->n = 
1e0d0 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
1e0e0 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66  assert( pData->f
1e0f0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
1e100 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d  |MEM_Str) );.  }
1e110 0a 20 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64  .  if( pC->pseud
1e120 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 69 66  oTable ){.    if
1e130 28 20 21 70 43 2d 3e 65 70 68 65 6d 50 73 65 75  ( !pC->ephemPseu
1e140 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20  doTable ){.     
1e150 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
1e160 62 2c 20 70 43 2d 3e 70 44 61 74 61 29 3b 0a 20  b, pC->pData);. 
1e170 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 69 4b 65     }.    pC->iKe
1e180 79 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 70 43  y = iKey;.    pC
1e190 2d 3e 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d  ->nData = pData-
1e1a0 3e 6e 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  >n;.    if( pC->
1e1b0 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65  ephemPseudoTable
1e1c0 20 7c 7c 20 70 44 61 74 61 2d 3e 7a 3d 3d 70 44   || pData->z==pD
1e1d0 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a  ata->zMalloc ){.
1e1e0 20 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61 20        pC->pData 
1e1f0 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 20 20  = pData->z;.    
1e200 20 20 69 66 28 20 21 70 43 2d 3e 65 70 68 65 6d    if( !pC->ephem
1e210 50 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20  PseudoTable ){. 
1e220 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 66 6c         pData->fl
1e230 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b  ags &= ~MEM_Dyn;
1e240 0a 20 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e  .        pData->
1e250 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 45 70 68  flags |= MEM_Eph
1e260 65 6d 3b 0a 20 20 20 20 20 20 20 20 70 44 61 74  em;.        pDat
1e270 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  a->zMalloc = 0;.
1e280 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
1e290 65 7b 0a 20 20 20 20 20 20 70 43 2d 3e 70 44 61  e{.      pC->pDa
1e2a0 74 61 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c  ta = sqlite3Mall
1e2b0 6f 63 28 20 70 43 2d 3e 6e 44 61 74 61 2b 32 20  oc( pC->nData+2 
1e2c0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 21 70 43  );.      if( !pC
1e2d0 2d 3e 70 44 61 74 61 20 29 20 67 6f 74 6f 20 6e  ->pData ) goto n
1e2e0 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 6d 65 6d  o_mem;.      mem
1e2f0 63 70 79 28 70 43 2d 3e 70 44 61 74 61 2c 20 70  cpy(pC->pData, p
1e300 44 61 74 61 2d 3e 7a 2c 20 70 43 2d 3e 6e 44 61  Data->z, pC->nDa
1e310 74 61 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 70  ta);.      pC->p
1e320 44 61 74 61 5b 70 43 2d 3e 6e 44 61 74 61 5d 20  Data[pC->nData] 
1e330 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 70  = 0;.      pC->p
1e340 44 61 74 61 5b 70 43 2d 3e 6e 44 61 74 61 2b 31  Data[pC->nData+1
1e350 5d 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  ] = 0;.    }.   
1e360 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1e370 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
1e380 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f  eekResult = ((pO
1e390 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
1e3a0 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
1e3b0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
1e3c0 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 44 61   0);.    if( pDa
1e3d0 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
1e3e0 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 6e 5a  Zero ){.      nZ
1e3f0 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e  ero = pData->u.n
1e400 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Zero;.    }else{
1e410 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  .      nZero = 0
1e420 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
1e430 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
1e440 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73  dRowid(pC->pCurs
1e450 6f 72 2c 20 30 29 3b 0a 20 20 20 20 72 63 20 3d  or, 0);.    rc =
1e460 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
1e470 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ert(pC->pCursor,
1e480 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20   0, iKey,.      
1e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4a0 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20        pData->z, 
1e4b0 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c  pData->n, nZero,
1e4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4f 70               pOp
1e4e0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50  ->p5 & OPFLAG_AP
1e4f0 50 45 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c 74  PEND, seekResult
1e500 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 0a 20  .    );.  }.  . 
1e510 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1e520 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66  d = 0;.  pC->def
1e530 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1e540 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1e550 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1e560 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
1e570 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
1e580 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
1e590 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1e5a0 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74  OK && db->xUpdat
1e5b0 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70  eCallback && pOp
1e5c0 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44  ->p4.z ){.    zD
1e5d0 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
1e5e0 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20  iDb].zName;.    
1e5f0 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  zTbl = pOp->p4.z
1e600 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70  ;.    op = ((pOp
1e610 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
1e620 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
1e630 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
1e640 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73  _INSERT);.    as
1e650 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1e660 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70  e );.    db->xUp
1e670 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
1e680 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c  >pUpdateArg, op,
1e690 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79   zDb, zTbl, iKey
1e6a0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1e6b0 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d  C->iDb>=0 );.  }
1e6c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1e6d0 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
1e6e0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
1e6f0 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63  * Delete the rec
1e700 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65  ord at which the
1e710 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75   P1 cursor is cu
1e720 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
1e730 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73  ..**.** The curs
1e740 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20  or will be left 
1e750 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68  pointing at eith
1e760 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74  er the next or t
1e770 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72  he previous.** r
1e780 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62  ecord in the tab
1e790 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66  le. If it is lef
1e7a0 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1e7b0 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74  e next record, t
1e7c0 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20  hen.** the next 
1e7d0 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
1e7e0 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70   will be a no-op
1e7f0 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f  .  Hence it is O
1e800 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61  K to delete.** a
1e810 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74   record from wit
1e820 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70  hin an Next loop
1e830 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
1e840 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
1e850 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c  ag of P2 is set,
1e860 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
1e870 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
1e880 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
1e890 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a  herwise not)..**
1e8a0 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20  .** P1 must not 
1e8b0 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  be pseudo-table.
1e8c0 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61    It has to be a
1e8d0 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68   real table with
1e8e0 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  .** multiple row
1e8f0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  s..**.** If P4 i
1e900 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
1e910 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20   it is the name 
1e920 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
1e930 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74  t P1 is.** point
1e940 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64  ing to.  The upd
1e950 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65  ate hook will be
1e960 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20   invoked, if it 
1e970 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34  exists..** If P4
1e980 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65   is not NULL the
1e990 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  n the P1 cursor 
1e9a0 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70  must have been p
1e9b0 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69  ositioned.** usi
1e9c0 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70  ng OP_NotFound p
1e9d0 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67  rior to invoking
1e9e0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
1e9f0 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a  .case OP_Delete:
1ea00 20 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20   {.  i64 iKey;. 
1ea10 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1ea20 0a 0a 20 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20  ..  iKey = 0;.  
1ea30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1ea40 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1ea50 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1ea60 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1ea70 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1ea80 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1ea90 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1eaa0 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61  0 );  /* Only va
1eab0 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62  lid for real tab
1eac0 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61  les, no pseudota
1ead0 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  bles */..  /* If
1eae0 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1eaf0 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
1eb00 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74 68  , set iKey to th
1eb10 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a 20  e rowid of the. 
1eb20 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64 65   ** row being de
1eb30 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66  leted..  */.  if
1eb40 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  ( db->xUpdateCal
1eb50 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34  lback && pOp->p4
1eb60 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  .z ){.    assert
1eb70 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1eb80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1eb90 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 3b  >rowidIsValid );
1eba0 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20 73    /* lastRowid s
1ebb0 65 74 20 62 79 20 70 72 65 76 69 6f 75 73 20 4f  et by previous O
1ebc0 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20  P_NotFound */.  
1ebd0 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73    iKey = pC->las
1ebe0 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f  tRowid;.  }..  /
1ebf0 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65 74 65 20  * The OP_Delete 
1ec00 6f 70 63 6f 64 65 20 61 6c 77 61 79 73 20 66 6f  opcode always fo
1ec10 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45  llows an OP_NotE
1ec20 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74  xists or OP_Last
1ec30 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75   or.  ** OP_Colu
1ec40 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74  mn on the same t
1ec50 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79  able without any
1ec60 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70 65   intervening ope
1ec70 72 61 74 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a  rations that.  *
1ec80 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72 20  * might move or 
1ec90 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63  invalidate the c
1eca0 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 63 75  ursor.  Hence cu
1ecb0 72 73 6f 72 20 70 43 20 69 73 20 61 6c 77 61 79  rsor pC is alway
1ecc0 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20  s pointing.  ** 
1ecd0 74 6f 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65  to the row to be
1ece0 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65   deleted and the
1ecf0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
1ed00 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72 61  orMoveto() opera
1ed10 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20  tion.  ** below 
1ed20 69 73 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f  is always a no-o
1ed30 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69  p and cannot fai
1ed40 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72 75 6e 20  l.  We will run 
1ed50 69 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67  it anyhow, thoug
1ed60 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72 64  h,.  ** to guard
1ed70 20 61 67 61 69 6e 73 74 20 66 75 74 75 72 65 20   against future 
1ed80 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 63  changes to the c
1ed90 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20  ode generator.. 
1eda0 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70   **/.  assert( p
1edb0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1edc0 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  o==0 );.  rc = s
1edd0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
1ede0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
1edf0 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
1ee00 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62  TE_OK) ) goto ab
1ee10 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1ee20 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
1ee30 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28  eSetCachedRowid(
1ee40 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b  pC->pCursor, 0);
1ee50 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1ee60 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70  treeDelete(pC->p
1ee70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63  Cursor);.  pC->c
1ee80 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1ee90 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
1eea0 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
1eeb0 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
1eec0 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
1eed0 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
1eee0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
1eef0 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
1ef00 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
1ef10 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b   *zDb = db->aDb[
1ef20 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a  pC->iDb].zName;.
1ef30 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
1ef40 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  zTbl = pOp->p4.z
1ef50 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  ;.    db->xUpdat
1ef60 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
1ef70 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45  pdateArg, SQLITE
1ef80 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54  _DELETE, zDb, zT
1ef90 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61  bl, iKey);.    a
1efa0 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
1efb0 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  0 );.  }.  if( p
1efc0 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f  Op->p2 & OPFLAG_
1efd0 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
1efe0 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ange++;.  break;
1eff0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
1f000 65 73 65 74 43 6f 75 6e 74 20 50 31 20 2a 20 2a  esetCount P1 * *
1f010 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1f020 64 65 20 72 65 73 65 74 73 20 74 68 65 20 56 4d  de resets the VM
1f030 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67  s internal chang
1f040 65 20 63 6f 75 6e 74 65 72 20 74 6f 20 30 2e 20  e counter to 0. 
1f050 49 66 20 50 31 20 69 73 20 74 72 75 65 2c 0a 2a  If P1 is true,.*
1f060 2a 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  * then the value
1f070 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
1f080 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
1f090 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
1f0a0 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
1f0b0 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
1f0c0 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
1f0d0 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
1f0e0 65 33 5f 63 68 61 6e 67 65 73 28 29 29 0a 2a 2a  e3_changes()).**
1f0f0 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 72 65   before it is re
1f100 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
1f110 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f  d by trigger pro
1f120 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  grams..*/.case O
1f130 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a  P_ResetCount: {.
1f140 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
1f150 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1f160 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
1f170 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 7d 0a  ->nChange);.  }.
1f180 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
1f190 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1f1a0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61   Opcode: RowData
1f1b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1f1c0 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
1f1d0 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
1f1e0 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20  mplete row data 
1f1f0 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
1f200 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
1f210 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
1f220 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49  the data.  .** I
1f230 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64  t is just copied
1f240 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
1f250 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
1f260 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
1f270 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1f280 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
1f290 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
1f2a0 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74  st be pointing t
1f2b0 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e  o a valid row (n
1f2c0 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a  ot a NULL row).*
1f2d0 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  * of a real tabl
1f2e0 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
1f2f0 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  table..*/./* Opc
1f300 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50  ode: RowKey P1 P
1f310 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
1f320 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
1f330 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
1f340 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75  e row key for cu
1f350 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
1f360 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
1f370 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
1f380 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79  ta.  .** The key
1f390 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20   is copied onto 
1f3a0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  the P3 register 
1f3b0 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
1f3c0 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
1f3d0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
1f3e0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
1f3f0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
1f400 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
1f410 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
1f420 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
1f430 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
1f440 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1f450 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b  .*/.case OP_RowK
1f460 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44  ey:.case OP_RowD
1f470 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
1f480 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1f490 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33  sor *pCrsr;.  u3
1f4a0 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a  2 n;.  i64 n64;.
1f4b0 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
1f4c0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 0a 20 20  em[pOp->p2];..  
1f4d0 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77  /* Note that Row
1f4e0 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20  Key and RowData 
1f4f0 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74  are really exact
1f500 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74  ly the same inst
1f510 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73  ruction */.  ass
1f520 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1f530 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1f540 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1f550 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1f560 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  ];.  assert( pC-
1f570 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d  >isTable || pOp-
1f580 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 4b  >opcode==OP_RowK
1f590 65 79 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ey );.  assert( 
1f5a0 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70  pC->isIndex || p
1f5b0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52  Op->opcode==OP_R
1f5c0 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65  owData );.  asse
1f5d0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1f5e0 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52  ssert( pC->nullR
1f5f0 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ow==0 );.  asser
1f600 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1f610 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  le==0 );.  asser
1f620 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1f630 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
1f640 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f  C->pCursor;..  /
1f650 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20  * The OP_RowKey 
1f660 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f  and OP_RowData o
1f670 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f  pcodes always fo
1f680 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74  llow OP_NotExist
1f690 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77  s or.  ** OP_Rew
1f6a0 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68  ind/Op_Next with
1f6b0 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20   no intervening 
1f6c0 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61  instructions tha
1f6d0 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61  t might invalida
1f6e0 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73  te.  ** the curs
1f6f0 6f 72 2e 20 20 48 65 6e 63 65 20 74 68 65 20 66  or.  Hence the f
1f700 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33  ollowing sqlite3
1f710 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
1f720 28 29 20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79  () call is alway
1f730 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61  s.  ** a no-op a
1f740 6e 64 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  nd can never fai
1f750 6c 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76 65  l.  But we leave
1f760 20 69 74 20 69 6e 20 70 6c 61 63 65 20 61 73 20   it in place as 
1f770 61 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20  a safety..  */. 
1f780 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
1f790 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
1f7a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1f7b0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
1f7c0 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  (pC);.  if( NEVE
1f7d0 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
1f7e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1f7f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69  e_to_error;..  i
1f800 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
1f810 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70  {.    assert( !p
1f820 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1f830 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65    sqlite3BtreeKe
1f840 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36  ySize(pCrsr, &n6
1f850 34 29 3b 0a 20 20 20 20 69 66 28 20 6e 36 34 3e  4);.    if( n64>
1f860 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
1f870 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
1f880 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
1f890 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20  o_big;.    }.   
1f8a0 20 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20   n = (u32)n64;. 
1f8b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
1f8c0 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65  te3BtreeDataSize
1f8d0 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20  (pCrsr, &n);.   
1f8e0 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e   if( n>(u32)db->
1f8f0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
1f900 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
1f910 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
1f920 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  g;.    }.  }.  i
1f930 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
1f940 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30  mGrow(pOut, n, 0
1f950 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
1f960 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  _mem;.  }.  pOut
1f970 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65  ->n = n;.  MemSe
1f980 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
1f990 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28  MEM_Blob);.  if(
1f9a0 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
1f9b0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1f9c0 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20  BtreeKey(pCrsr, 
1f9d0 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a  0, n, pOut->z);.
1f9e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
1f9f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
1fa00 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ta(pCrsr, 0, n, 
1fa10 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20  pOut->z);.  }.  
1fa20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
1fa30 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
1fa40 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
1fa50 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65   ever cast to te
1fa60 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d  xt */.  UPDATE_M
1fa70 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
1fa80 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1fa90 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20  * Opcode: Rowid 
1faa0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1fab0 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73  * Store in regis
1fac0 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
1fad0 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b  r which is the k
1fae0 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ey of the table 
1faf0 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31  entry that.** P1
1fb00 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
1fb10 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31  int to..**.** P1
1fb20 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61   can be either a
1fb30 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
1fb40 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61   or a virtual ta
1fb50 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64  ble.  There used
1fb60 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61   to.** be a sepa
1fb70 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f  rate OP_VRowid o
1fb80 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69  pcode for use wi
1fb90 74 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  th virtual table
1fba0 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f  s, but this.** o
1fbb0 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f  ne opcode now wo
1fbc0 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62  rks for both tab
1fbd0 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73  le types..*/.cas
1fbe0 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20  e OP_Rowid: {   
1fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fc00 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1fc10 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1fc20 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20   *pC;.  i64 v;. 
1fc30 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
1fc40 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
1fc50 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
1fc60 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
1fc70 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1fc80 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1fc90 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1fca0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1fcb0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1fcc0 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  );.  if( pC->nul
1fcd0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 2f 2a 20 44  lRow ){.    /* D
1fce0 6f 20 6e 6f 74 68 69 6e 67 20 73 6f 20 74 68 61  o nothing so tha
1fcf0 74 20 72 65 67 5b 50 32 5d 20 72 65 6d 61 69 6e  t reg[P2] remain
1fd00 73 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72  s NULL */.    br
1fd10 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
1fd20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1fd30 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
1fd40 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
1fd50 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
1fd60 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a  >pseudoTable ){.
1fd70 20 20 20 20 76 20 3d 20 70 43 2d 3e 69 4b 65 79      v = pC->iKey
1fd80 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1fd90 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1fda0 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  LE.  }else if( p
1fdb0 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  C->pVtabCursor )
1fdc0 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43  {.    pVtab = pC
1fdd0 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
1fde0 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c  Vtab;.    pModul
1fdf0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
1fe00 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  le;.    assert( 
1fe10 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20  pModule->xRowid 
1fe20 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  );.    if( sqlit
1fe30 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
1fe40 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1fe50 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
1fe60 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  rc = pModule->xR
1fe70 6f 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75  owid(pC->pVtabCu
1fe80 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 73  rsor, &v);.    s
1fe90 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
1fea0 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
1feb0 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
1fec0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
1fed0 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73     pVtab->zErrMs
1fee0 67 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 73  g = 0;.    if( s
1fef0 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
1ff00 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
1ff10 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 23  due_to_misuse;.#
1ff20 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
1ff30 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1ff40 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  E */.  }else{.  
1ff50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1ff60 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
1ff70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
1ff80 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1ff90 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
1ffa0 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1ffb0 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  id ){.      v = 
1ffc0 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  pC->lastRowid;. 
1ffd0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1ffe0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1fff0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  sor!=0 );.      
20000 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
20010 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
20020 20 26 76 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   &v);.    }.  }.
20030 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
20040 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
20050 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
20060 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
20070 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77   Opcode: NullRow
20080 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
20090 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f  * Move the curso
200a0 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72  r P1 to a null r
200b0 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75  ow.  Any OP_Colu
200c0 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a  mn operations.**
200d0 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c   that occur whil
200e0 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  e the cursor is 
200f0 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20  on the null row 
20100 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77  will always.** w
20110 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a  rite a NULL..*/.
20120 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a  case OP_NullRow:
20130 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
20140 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
20150 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
20160 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
20170 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
20180 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
20190 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
201a0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
201b0 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   1;.  pC->rowidI
201c0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66  sValid = 0;.  if
201d0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b  ( pC->pCursor ){
201e0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
201f0 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
20200 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  >pCursor);.  }. 
20210 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
20220 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
20230 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
20240 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
20250 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
20260 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
20270 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
20280 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
20290 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
202a0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
202b0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
202c0 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
202d0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
202e0 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
202f0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
20300 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
20310 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
20320 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
20330 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
20340 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
20350 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
20360 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
20370 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20   OP_Last: {     
20380 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
20390 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
203a0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
203b0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
203c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
203d0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
203e0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
203f0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
20400 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
20410 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
20420 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
20430 0a 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20  .  if( pCrsr==0 
20440 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 31 3b 0a  ){.    res = 1;.
20450 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
20460 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
20470 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
20480 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  .  }.  pC->nullR
20490 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
204a0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
204b0 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f  to = 0;.  pC->ro
204c0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
204d0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
204e0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
204f0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30  .  if( pOp->p2>0
20500 20 26 26 20 72 65 73 20 29 7b 0a 20 20 20 20 70   && res ){.    p
20510 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
20520 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
20530 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
20540 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
20550 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
20560 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65  does exactly the
20570 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f   same thing as O
20580 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20  P_Rewind except 
20590 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65  that.** it incre
205a0 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d  ments an undocum
205b0 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72  ented global var
205c0 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74  iable used for t
205d0 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f  esting..**.** So
205e0 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c  rting is accompl
205f0 69 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67  ished by writing
20600 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20   records into a 
20610 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a  sorting index,.*
20620 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67  * then rewinding
20630 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20   that index and 
20640 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20  playing it back 
20650 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74  from beginning t
20660 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73  o.** end.  We us
20670 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70  e the OP_Sort op
20680 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20  code instead of 
20690 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20  OP_Rewind to do 
206a0 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67  the.** rewinding
206b0 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f   so that the glo
206c0 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c  bal variable wil
206d0 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  l be incremented
206e0 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69   and.** regressi
206f0 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74  on tests can det
20700 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f  ermine whether o
20710 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69  r not the optimi
20720 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63  zer is.** correc
20730 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f  tly optimizing o
20740 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73  ut sorts..*/.cas
20750 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20  e OP_Sort: {    
20760 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23      /* jump */.#
20770 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
20780 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  T.  sqlite3_sort
20790 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69  _count++;.  sqli
207a0 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
207b0 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e  --;.#endif.  p->
207c0 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
207d0 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 2d  STMTSTATUS_SORT-
207e0 31 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  1]++;.  /* Fall 
207f0 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
20800 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f  Rewind */.}./* O
20810 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31  pcode: Rewind P1
20820 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
20830 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
20840 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
20850 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74  umn or Next inst
20860 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
20870 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
20880 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79   the first entry
20890 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
208a0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
208b0 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
208c0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
208d0 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65  ty and P2>0, the
208e0 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
208f0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
20900 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68  P2 is 0 or if th
20910 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
20920 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
20930 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
20940 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
20950 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
20960 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20  case OP_Rewind: 
20970 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
20980 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
20990 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
209a0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
209b0 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
209c0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
209d0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
209e0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
209f0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
20a00 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
20a10 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 70    if( (pCrsr = p
20a20 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29  C->pCursor)!=0 )
20a30 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
20a40 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
20a50 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
20a60 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65 73  C->atFirst = res
20a70 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43  ==0 ?1:0;.    pC
20a80 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
20a90 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
20aa0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
20ab0 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d  E_STALE;.    pC-
20ac0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
20ad0 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
20ae0 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70  res = 1;.  }.  p
20af0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
20b00 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20  )res;.  assert( 
20b10 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
20b20 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
20b30 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
20b40 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
20b50 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
20b60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  ../* Opcode: Nex
20b70 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
20b80 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73  .** Advance curs
20b90 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
20ba0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e   points to the n
20bb0 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ext key/data pai
20bc0 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
20bd0 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
20be0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72  there are no mor
20bf0 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  e key/value pair
20c00 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
20c10 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
20c20 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
20c30 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
20c40 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20   cursor advance 
20c50 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
20c60 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
20c70 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
20c80 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
20c90 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
20ca0 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
20cb0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
20cc0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65  ** See also: Pre
20cd0 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  v.*/./* Opcode: 
20ce0 50 72 65 76 20 50 31 20 50 32 20 2a 20 2a 20 2a  Prev P1 P2 * * *
20cf0 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63  .**.** Back up c
20d00 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
20d10 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
20d20 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64  e previous key/d
20d30 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
20d40 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
20d50 78 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  x.  If there is 
20d60 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f  no previous key/
20d70 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e  value pairs then
20d80 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
20d90 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
20da0 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  g instruction.  
20db0 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f  But if the curso
20dc0 72 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63  r backup was suc
20dd0 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
20de0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
20df0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  P2..**.** The P1
20e00 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
20e10 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
20e20 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
20e30 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
20e40 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
20e50 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
20e60 4f 50 5f 4e 65 78 74 3a 20 7b 20 20 20 20 20 20  OP_Next: {      
20e70 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
20e80 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
20e90 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
20ea0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
20eb0 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
20ec0 55 50 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70  UPT;.  assert( p
20ed0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
20ee0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
20ef0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
20f00 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  sr[pOp->p1];.  i
20f10 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20 20 20  f( pC==0 ){.    
20f20 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65 20 74  break;  /* See t
20f30 69 63 6b 65 74 20 23 32 32 37 33 20 2a 2f 0a 20  icket #2273 */. 
20f40 20 7d 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d   }.  pCrsr = pC-
20f50 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
20f60 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20  pCrsr==0 ){.    
20f70 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
20f80 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
20f90 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 61 73 73    res = 1;.  ass
20fa0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
20fb0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
20fc0 72 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  rc = pOp->opcode
20fd0 3d 3d 4f 50 5f 4e 65 78 74 20 3f 20 73 71 6c 69  ==OP_Next ? sqli
20fe0 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 72  te3BtreeNext(pCr
20ff0 73 72 2c 20 26 72 65 73 29 20 3a 0a 20 20 20 20  sr, &res) :.    
21000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21010 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
21020 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
21030 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70  Crsr, &res);.  p
21040 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
21050 29 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68  )res;.  pC->cach
21060 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21070 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73  STALE;.  if( res
21080 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ==0 ){.    pc = 
21090 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
210a0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20 70   if( pOp->p5 ) p
210b0 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e  ->aCounter[pOp->
210c0 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20  p5-1]++;.#ifdef 
210d0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
210e0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
210f0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
21100 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73   }.  pC->rowidIs
21110 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72 65  Valid = 0;.  bre
21120 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
21130 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
21140 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
21150 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64  Register P2 hold
21160 73 20 61 20 53 51 4c 20 69 6e 64 65 78 20 6b 65  s a SQL index ke
21170 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  y made using the
21180 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  .** MakeRecord i
21190 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68  nstructions.  Th
211a0 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73  is opcode writes
211b0 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74   that key.** int
211c0 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20  o the index P1. 
211d0 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
211e0 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a  try is nil..**.*
211f0 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74  * P3 is a flag t
21200 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68  hat provides a h
21210 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65  int to the b-tre
21220 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69  e layer that thi
21230 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c  s.** insert is l
21240 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
21250 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ppend..**.** Thi
21260 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
21270 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64  ly works for ind
21280 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  ices.  The equiv
21290 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
212a0 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20  n.** for tables 
212b0 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f  is OP_Insert..*/
212c0 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65  .case OP_IdxInse
212d0 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  rt: {        /* 
212e0 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
212f0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
21300 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
21310 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20  t nKey;.  const 
21320 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61  char *zKey;..  a
21330 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
21340 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
21350 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
21360 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
21370 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
21380 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
21390 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
213a0 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43  MEM_Blob );.  pC
213b0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
213c0 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  r;.  if( ALWAYS(
213d0 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
213e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
213f0 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72  able==0 );.    r
21400 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
21410 49 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63  In2);.    if( rc
21420 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
21430 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32       nKey = pIn2
21440 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20  ->n;.      zKey 
21450 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20  = pIn2->z;.     
21460 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
21470 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20  eeInsert(pCrsr, 
21480 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20  zKey, nKey, "", 
21490 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a  0, 0, pOp->p3, .
214a0 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d            ((pOp-
214b0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
214c0 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
214d0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
214e0 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
214f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
21500 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
21510 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68  ;.      pC->cach
21520 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21530 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d  STALE;.    }.  }
21540 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
21550 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
21560 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
21570 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
21580 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
21590 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
215a0 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
215b0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
215c0 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
215d0 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
215e0 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
215f0 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
21600 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
21610 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
21620 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
21630 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
21640 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
21650 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
21660 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
21670 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
21680 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
21690 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
216a0 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  2+pOp->p3<=p->nM
216b0 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  em+1 );.  assert
216c0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
216d0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
216e0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
216f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
21700 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
21710 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
21720 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
21730 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
21740 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
21750 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
21760 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
21770 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
21780 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
21790 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70  .    r.aMem = &p
217a0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
217b0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
217c0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
217d0 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20  cked(pCrsr, &r, 
217e0 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
217f0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
21800 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
21810 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
21820 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
21830 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rsr);.    }.    
21840 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
21850 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
21860 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
21870 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
21880 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  LE;.  }.  break;
21890 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
218a0 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20  dxRowid P1 P2 * 
218b0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
218c0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
218d0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
218e0 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e  h is the last en
218f0 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72  try in the recor
21900 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20  d at.** the end 
21910 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
21920 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63   pointed to by c
21930 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20  ursor P1.  This 
21940 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62  integer should b
21950 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f  e.** the rowid o
21960 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
21970 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  y to which this 
21980 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e  index entry poin
21990 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ts..**.** See al
219a0 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52  so: Rowid, MakeR
219b0 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ecord..*/.case O
219c0 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20  P_IdxRowid: {   
219d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
219e0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
219f0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
21a00 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  sr;.  VdbeCursor
21a10 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69   *pC;.  i64 rowi
21a20 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d;..  assert( pO
21a30 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21a40 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21a50 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21a60 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21a70 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21a80 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
21a90 72 73 6f 72 3b 0a 20 20 69 66 28 20 41 4c 57 41  rsor;.  if( ALWA
21aa0 59 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a  YS(pCrsr!=0) ){.
21ab0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21ac0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
21ad0 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 4e 45  (pC);.    if( NE
21ae0 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61  VER(rc) ) goto a
21af0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
21b00 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  r;.    assert( p
21b10 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
21b20 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  o==0 );.    asse
21b30 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
21b40 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70  =0 );.    if( !p
21b50 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
21b60 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21b70 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c  VdbeIdxRowid(db,
21b80 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b   pCrsr, &rowid);
21b90 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
21ba0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
21bb0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
21bc0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
21bd0 20 20 20 7d 0a 20 20 20 20 20 20 4d 65 6d 53 65     }.      MemSe
21be0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
21bf0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 20 20  MEM_Int);.      
21c00 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69  pOut->u.i = rowi
21c10 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  d;.    }.  }.  b
21c20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21c30 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20  de: IdxGE P1 P2 
21c40 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
21c50 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
21c60 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
21c70 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
21c80 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
21c90 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
21ca0 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f  s the ROWID.  Co
21cb0 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
21cc0 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65  alue against the
21cd0 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20   index .** that 
21ce0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
21cf0 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
21d00 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20  oring the ROWID 
21d10 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
21d20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
21d30 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
21d40 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
21d50 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
21d60 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
21d70 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
21d80 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
21d90 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
21da0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
21db0 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a  * If P5 is non-z
21dc0 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79  ero then the key
21dd0 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61   value is increa
21de0 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f  sed by an epsilo
21df0 6e 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74  n .** prior to t
21e00 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
21e10 54 68 69 73 20 6d 61 6b 65 20 74 68 65 20 6f 70  This make the op
21e20 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49  code work like I
21e30 64 78 47 54 20 65 78 63 65 70 74 0a 2a 2a 20 74  dxGT except.** t
21e40 68 61 74 20 69 66 20 74 68 65 20 6b 65 79 20 66  hat if the key f
21e50 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 20  rom register P3 
21e60 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  is a prefix of t
21e70 68 65 20 6b 65 79 20 69 6e 20 74 68 65 20 63 75  he key in the cu
21e80 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73  rsor,.** the res
21e90 75 6c 74 20 69 73 20 66 61 6c 73 65 20 77 68 65  ult is false whe
21ea0 72 65 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  reas it would be
21eb0 20 74 72 75 65 20 77 69 74 68 20 49 64 78 47 54   true with IdxGT
21ec0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
21ed0 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 2a  IdxLT P1 P2 P3 *
21ee0 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34   P5.**.** The P4
21ef0 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
21f00 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
21f10 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
21f20 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
21f30 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
21f40 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
21f50 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
21f60 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
21f70 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
21f80 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
21f90 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
21fa0 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68   the ROWID on th
21fb0 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a  e P1 index..**.*
21fc0 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
21fd0 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20  x entry is less 
21fe0 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
21ff0 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ue then jump to 
22000 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65  P2..** Otherwise
22010 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
22020 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
22030 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
22040 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74  P5 is non-zero t
22050 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  hen the key valu
22060 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62  e is increased b
22070 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69  y an epsilon pri
22080 6f 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f  or .** to the co
22090 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20  mparison.  This 
220a0 6d 61 6b 65 73 20 74 68 65 20 6f 70 63 6f 64 65  makes the opcode
220b0 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45   work like IdxLE
220c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
220d0 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LT:          /* 
220e0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
220f0 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20 20  e OP_IdxGE: {   
22100 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
22110 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  3 */.  VdbeCurso
22120 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
22130 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
22140 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
22150 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
22160 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
22170 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
22180 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22190 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
221a0 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
221b0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29  C->pCursor!=0) )
221c0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
221d0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
221e0 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
221f0 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
22200 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
22210 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
22220 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
22230 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   );.    r.pKeyIn
22240 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
22250 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
22260 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
22270 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
22280 35 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61  5 ){.      r.fla
22290 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e  gs = UNPACKED_IN
222a0 43 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44  CRKEY | UNPACKED
222b0 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20  _IGNORE_ROWID;. 
222c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
222d0 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
222e0 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b  ED_IGNORE_ROWID;
222f0 0a 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65  .    }.    r.aMe
22300 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  m = &p->aMem[pOp
22310 2d 3e 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20  ->p3];.    rc = 
22320 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65  sqlite3VdbeIdxKe
22330 79 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c  yCompare(pC, &r,
22340 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
22350 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
22360 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72  IdxLT ){.      r
22370 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d  es = -res;.    }
22380 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
22390 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
223a0 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20  =OP_IdxGE );.   
223b0 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a     res++;.    }.
223c0 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b      if( res>0 ){
223d0 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
223e0 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a  >p2 - 1 ;.    }.
223f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
22400 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72  /* Opcode: Destr
22410 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  oy P1 P2 P3 * *.
22420 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20  **.** Delete an 
22430 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
22440 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
22450 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
22460 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
22470 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  * file is given 
22480 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  by P1..**.** The
22490 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73   table being des
224a0 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65  troyed is in the
224b0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
224c0 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49  ile if P3==0.  I
224d0 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20  f.** P3==1 then 
224e0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
224f0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
22500 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
22510 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
22520 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
22530 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
22540 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
22550 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
22560 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
22570 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e   is enabled then
22580 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
22590 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f  that another roo
225a0 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20  t page.** might 
225b0 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  be moved into th
225c0 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20  e newly deleted 
225d0 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64  root page in ord
225e0 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a  er to keep all.*
225f0 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e  * root pages con
22600 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62  tiguous at the b
22610 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
22620 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66  database.  The f
22630 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f  ormer.** value o
22640 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
22650 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73  that moved - its
22660 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68   value before th
22670 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20  e move occurred 
22680 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69  -.** is stored i
22690 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
226a0 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d  If no page .** m
226b0 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75  ovement was requ
226c0 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68  ired (because th
226d0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72  e table being dr
226e0 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64  opped was alread
226f0 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f  y .** the last o
22700 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
22710 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  se) then a zero 
22720 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
22730 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20  ister P2..** If 
22740 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69  AUTOVACUUM is di
22750 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65  sabled then a ze
22760 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
22770 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
22780 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65  ** See also: Cle
22790 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  ar.*/.case OP_De
227a0 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20  stroy: {     /* 
227b0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
227c0 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b  */.  int iMoved;
227d0 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56  .  int iCnt;.  V
227e0 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e  dbe *pVdbe;.  in
227f0 74 20 69 44 62 3b 0a 23 69 66 6e 64 65 66 20 53  t iDb;.#ifndef S
22800 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
22810 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d  ALTABLE.  iCnt =
22820 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d   0;.  for(pVdbe=
22830 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65  db->pVdbe; pVdbe
22840 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d  ; pVdbe = pVdbe-
22850 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28  >pNext){.    if(
22860 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56   pVdbe->magic==V
22870 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26  DBE_MAGIC_RUN &&
22880 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65   pVdbe->inVtabMe
22890 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d  thod<2 && pVdbe-
228a0 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  >pc>=0 ){.      
228b0 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  iCnt++;.    }.  
228c0 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d  }.#else.  iCnt =
228d0 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
228e0 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  nt;.#endif.  if(
228f0 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72   iCnt>1 ){.    r
22900 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
22910 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41  D;.    p->errorA
22920 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74  ction = OE_Abort
22930 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
22940 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
22950 20 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d    assert( iCnt==
22960 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
22970 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
22980 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b   (1<<iDb))!=0 );
22990 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
229a0 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28  3BtreeDropTable(
229b0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
229c0 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76  , pOp->p1, &iMov
229d0 65 64 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  ed);.    MemSetT
229e0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
229f0 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
22a00 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a  ->u.i = iMoved;.
22a10 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22a20 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20  MIT_AUTOVACUUM. 
22a30 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
22a40 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d  E_OK && iMoved!=
22a50 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
22a60 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
22a70 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20 69  &db->aDb[iDb], i
22a80 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b  Moved, pOp->p1);
22a90 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
22aa0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
22ab0 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50   Opcode: Clear P
22ac0 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65  1 P2 P3.**.** De
22ad0 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
22ae0 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
22af0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
22b00 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
22b10 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62  .** in the datab
22b20 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65  ase file is give
22b30 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75  n by P1.  But, u
22b40 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64  nlike Destroy, d
22b50 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20  o not.** remove 
22b60 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
22b70 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ex from the data
22b80 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
22b90 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
22ba0 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
22bb0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
22bc0 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49  ile if P2==0.  I
22bd0 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20  f.** P2==1 then 
22be0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
22bf0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
22c00 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
22c10 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
22c20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
22c30 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
22c40 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
22c50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
22c60 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  ** If the P3 val
22c70 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ue is non-zero, 
22c80 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72  then the table r
22c90 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20  eferred to must 
22ca0 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20  be an.** intkey 
22cb0 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61  table (an SQL ta
22cc0 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65  ble, not an inde
22cd0 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  x). In this case
22ce0 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
22cf0 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63  .** count is inc
22d00 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
22d10 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
22d20 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
22d30 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49  g cleared. .** I
22d40 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  f P3 is greater 
22d50 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20  than zero, then 
22d60 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
22d70 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
22d80 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65  is.** also incre
22d90 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
22da0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
22db0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
22dc0 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  cleared..**.** S
22dd0 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79  ee also: Destroy
22de0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61  .*/.case OP_Clea
22df0 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e  r: {.  int nChan
22e00 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20  ge;. .  nChange 
22e10 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 28  = 0;.  assert( (
22e20 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
22e30 31 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20  1<<pOp->p2))!=0 
22e40 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
22e50 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
22e60 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  (.      db->aDb[
22e70 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f  pOp->p2].pBt, pO
22e80 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20  p->p1, (pOp->p3 
22e90 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a  ? &nChange : 0).
22ea0 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e    );.  if( pOp->
22eb0 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68  p3 ){.    p->nCh
22ec0 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b  ange += nChange;
22ed0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
22ee0 3e 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 61  >0 ){.      p->a
22ef0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69  Mem[pOp->p3].u.i
22f00 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
22f10 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
22f20 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  }../* Opcode: Cr
22f30 65 61 74 65 54 61 62 6c 65 20 50 31 20 50 32 20  eateTable P1 P2 
22f40 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  * * *.**.** Allo
22f50 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65  cate a new table
22f60 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
22f70 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
22f80 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
22f90 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
22fa0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
22fb0 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
22fc0 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
22fd0 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
22fe0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
22ff0 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
23000 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
23010 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
23020 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  The difference b
23030 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61  etween a table a
23040 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74  nd an index is t
23050 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75  his:  A table mu
23060 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62  st.** have a 4-b
23070 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20  yte integer key 
23080 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72 62  and can have arb
23090 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e  itrary data.  An
230a0 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e   index.** has an
230b0 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 62   arbitrary key b
230c0 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a  ut no data..**.*
230d0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61  * See also: Crea
230e0 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70  teIndex.*/./* Op
230f0 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65  code: CreateInde
23100 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
23110 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
23120 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20  ew index in the 
23130 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
23140 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
23150 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
23160 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
23170 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
23180 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
23190 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
231a0 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
231b0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
231c0 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
231d0 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
231e0 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63  2..**.** See doc
231f0 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50  umentation on OP
23200 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72  _CreateTable for
23210 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
23220 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
23230 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a   OP_CreateIndex:
23240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
23250 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
23260 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
23270 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  Table: {        
23280 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
23290 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67  ease */.  int pg
232a0 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b  no;.  int flags;
232b0 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70  .  Db *pDb;..  p
232c0 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  gno = 0;.  asser
232d0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
232e0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
232f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
23300 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
23310 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
23320 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
23330 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
23340 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
23350 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
23360 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61  >opcode==OP_Crea
23370 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  teTable ){.    /
23380 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f  * flags = BTREE_
23390 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66  INTKEY; */.    f
233a0 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 4c 45 41  lags = BTREE_LEA
233b0 46 44 41 54 41 7c 42 54 52 45 45 5f 49 4e 54 4b  FDATA|BTREE_INTK
233c0 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
233d0 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 5a   flags = BTREE_Z
233e0 45 52 4f 44 41 54 41 3b 0a 20 20 7d 0a 20 20 72  ERODATA;.  }.  r
233f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
23400 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d  CreateTable(pDb-
23410 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61  >pBt, &pgno, fla
23420 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  gs);.  pOut->u.i
23430 20 3d 20 70 67 6e 6f 3b 0a 20 20 4d 65 6d 53 65   = pgno;.  MemSe
23440 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
23450 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
23460 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
23470 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20   ParseSchema P1 
23480 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
23490 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61  Read and parse a
234a0 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ll entries from 
234b0 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  the SQLITE_MASTE
234c0 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62  R table of datab
234d0 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d  ase P1.** that m
234e0 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63  atch the WHERE c
234f0 6c 61 75 73 65 20 50 34 2e 20 20 50 32 20 69 73  lause P4.  P2 is
23500 20 74 68 65 20 22 66 6f 72 63 65 22 20 66 6c 61   the "force" fla
23510 67 2e 20 20 20 41 6c 77 61 79 73 20 64 6f 0a 2a  g.   Always do.*
23520 2a 20 74 68 65 20 70 61 72 73 69 6e 67 20 69 66  * the parsing if
23530 20 50 32 20 69 73 20 74 72 75 65 2e 20 20 49 66   P2 is true.  If
23540 20 50 32 20 69 73 20 66 61 6c 73 65 2c 20 74 68   P2 is false, th
23550 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  en this routine 
23560 69 73 20 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66  is a.** no-op if
23570 20 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e   the schema is n
23580 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6c 6f 61  ot currently loa
23590 64 65 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ded.  In other w
235a0 6f 72 64 73 2c 20 69 66 20 50 32 0a 2a 2a 20 69  ords, if P2.** i
235b0 73 20 66 61 6c 73 65 2c 20 74 68 65 20 53 51 4c  s false, the SQL
235c0 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
235d0 20 69 73 20 6f 6e 6c 79 20 70 61 72 73 65 64 20   is only parsed 
235e0 69 66 20 74 68 65 20 72 65 73 74 20 6f 66 20 74  if the rest of t
235f0 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
23600 61 6c 72 65 61 64 79 20 6c 6f 61 64 65 64 20 69  already loaded i
23610 6e 74 6f 20 74 68 65 20 73 79 6d 62 6f 6c 20 74  nto the symbol t
23620 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  able..**.** This
23630 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
23640 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72  the parser to cr
23650 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75  eate a new virtu
23660 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74  al machine,.** t
23670 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77  hen runs the new
23680 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
23690 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20  .  It is thus a 
236a0 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64  re-entrant opcod
236b0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  e..*/.case OP_Pa
236c0 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69  rseSchema: {.  i
236d0 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20  nt iDb;.  const 
236e0 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20  char *zMaster;. 
236f0 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49   char *zSql;.  I
23700 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61  nitData initData
23710 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  ;..  iDb = pOp->
23720 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p1;.  assert( iD
23730 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
23740 6e 44 62 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  nDb );..  /* If 
23750 70 4f 70 2d 3e 70 32 20 69 73 20 30 2c 20 74 68  pOp->p2 is 0, th
23760 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  en this opcode i
23770 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64  s being executed
23780 20 74 6f 20 72 65 61 64 20 61 0a 20 20 2a 2a 20   to read a.  ** 
23790 73 69 6e 67 6c 65 20 72 6f 77 2c 20 66 6f 72 20  single row, for 
237a0 65 78 61 6d 70 6c 65 20 74 68 65 20 72 6f 77 20  example the row 
237b0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
237c0 20 61 20 6e 65 77 20 69 6e 64 65 78 0a 20 20 2a   a new index.  *
237d0 2a 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  * created by thi
237e0 73 20 56 44 42 45 2c 20 66 72 6f 6d 20 74 68 65  s VDBE, from the
237f0 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
23800 61 62 6c 65 2e 20 49 74 20 6f 6e 6c 79 0a 20 20  able. It only.  
23810 2a 2a 20 64 6f 65 73 20 74 68 69 73 20 69 66 20  ** does this if 
23820 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
23830 67 20 69 6e 2d 6d 65 6d 6f 72 79 20 73 63 68 65  g in-memory sche
23840 6d 61 20 69 73 20 63 75 72 72 65 6e 74 6c 79 0a  ma is currently.
23850 20 20 2a 2a 20 6c 6f 61 64 65 64 2e 20 4f 74 68    ** loaded. Oth
23860 65 72 77 69 73 65 2c 20 74 68 65 20 6e 65 77 20  erwise, the new 
23870 69 6e 64 65 78 20 64 65 66 69 6e 69 74 69 6f 6e  index definition
23880 20 63 61 6e 20 62 65 20 6c 6f 61 64 65 64 20 61   can be loaded a
23890 6c 6f 6e 67 0a 20 20 2a 2a 20 77 69 74 68 20 74  long.  ** with t
238a0 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 73  he rest of the s
238b0 63 68 65 6d 61 20 77 68 65 6e 20 69 74 20 69 73  chema when it is
238c0 20 72 65 71 75 69 72 65 64 2e 0a 20 20 2a 2a 0a   required..  **.
238d0 20 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 74 68    ** Although th
238e0 65 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 42  e mutex on the B
238f0 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 20 74  tShared object t
23900 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  hat corresponds 
23910 74 6f 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  to.  ** database
23920 20 69 44 62 20 28 74 68 65 20 64 61 74 61 62 61   iDb (the databa
23930 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  se containing th
23940 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
23950 74 61 62 6c 65 0a 20 20 2a 2a 20 72 65 61 64 20  table.  ** read 
23960 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
23970 69 6f 6e 29 20 69 73 20 63 75 72 72 65 6e 74 6c  ion) is currentl
23980 79 20 68 65 6c 64 2c 20 69 74 20 69 73 20 6e 65  y held, it is ne
23990 63 65 73 73 61 72 79 20 74 6f 0a 20 20 2a 2a 20  cessary to.  ** 
239a0 6f 62 74 61 69 6e 20 74 68 65 20 6d 75 74 65 78  obtain the mutex
239b0 65 73 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68  es on all attach
239c0 65 64 20 64 61 74 61 62 61 73 65 73 20 62 65 66  ed databases bef
239d0 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 69 66 0a  ore checking if.
239e0 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 20    ** the schema 
239f0 6f 66 20 69 44 62 20 69 73 20 6c 6f 61 64 65 64  of iDb is loaded
23a00 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
23a10 65 2c 20 61 74 20 74 68 65 20 73 74 61 72 74 20  e, at the start 
23a20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c 69  of.  ** the sqli
23a30 74 65 33 5f 65 78 65 63 28 29 20 63 61 6c 6c 20  te3_exec() call 
23a40 62 65 6c 6f 77 2c 20 53 51 4c 69 74 65 20 77 69  below, SQLite wi
23a50 6c 6c 20 69 6e 76 6f 6b 65 20 0a 20 20 2a 2a 20  ll invoke .  ** 
23a60 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65  sqlite3BtreeEnte
23a70 72 41 6c 6c 28 29 2e 20 49 66 20 61 6c 6c 20 6d  rAll(). If all m
23a80 75 74 65 78 65 73 20 61 72 65 20 6e 6f 74 20 61  utexes are not a
23a90 6c 72 65 61 64 79 20 68 65 6c 64 2c 20 74 68 65  lready held, the
23aa0 0a 20 20 2a 2a 20 69 44 62 20 6d 75 74 65 78 20  .  ** iDb mutex 
23ab0 6d 61 79 20 62 65 20 74 65 6d 70 6f 72 61 72 69  may be temporari
23ac0 6c 79 20 72 65 6c 65 61 73 65 64 20 74 6f 20 61  ly released to a
23ad0 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 2e 20 49  void deadlock. I
23ae0 66 20 0a 20 20 2a 2a 20 74 68 69 73 20 68 61 70  f .  ** this hap
23af0 70 65 6e 73 2c 20 74 68 65 6e 20 73 6f 6d 65 20  pens, then some 
23b00 6f 74 68 65 72 20 74 68 72 65 61 64 20 6d 61 79  other thread may
23b10 20 64 65 6c 65 74 65 20 74 68 65 20 69 6e 2d 6d   delete the in-m
23b20 65 6d 6f 72 79 20 0a 20 20 2a 2a 20 73 63 68 65  emory .  ** sche
23b30 6d 61 20 6f 66 20 64 61 74 61 62 61 73 65 20 69  ma of database i
23b40 44 62 20 62 65 66 6f 72 65 20 74 68 65 20 53 51  Db before the SQ
23b50 4c 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73  L statement runs
23b60 2e 20 54 68 65 20 73 63 68 65 6d 61 0a 20 20 2a  . The schema.  *
23b70 2a 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65  * will not be re
23b80 6c 6f 61 64 65 64 20 62 65 63 75 61 73 65 20 74  loaded becuase t
23b90 68 65 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  he db->init.busy
23ba0 20 66 6c 61 67 20 69 73 20 73 65 74 2e 20 54 68   flag is set. Th
23bb0 69 73 0a 20 20 2a 2a 20 63 61 6e 20 72 65 73 75  is.  ** can resu
23bc0 6c 74 20 69 6e 20 61 20 22 6e 6f 20 73 75 63 68  lt in a "no such
23bd0 20 74 61 62 6c 65 3a 20 73 71 6c 69 74 65 5f 6d   table: sqlite_m
23be0 61 73 74 65 72 22 20 6f 72 20 22 6d 61 6c 66 6f  aster" or "malfo
23bf0 72 6d 65 64 0a 20 20 2a 2a 20 64 61 74 61 62 61  rmed.  ** databa
23c00 73 65 20 73 63 68 65 6d 61 22 20 65 72 72 6f 72  se schema" error
23c10 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20   being returned 
23c20 74 6f 20 74 68 65 20 75 73 65 72 2e 0a 20 20 2a  to the user..  *
23c30 2f 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  /.  assert( sqli
23c40 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74  te3BtreeHoldsMut
23c50 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ex(db->aDb[iDb].
23c60 70 42 74 29 20 29 3b 0a 20 20 73 71 6c 69 74 65  pBt) );.  sqlite
23c70 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 64  3BtreeEnterAll(d
23c80 62 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  b);.  if( pOp->p
23c90 32 20 7c 7c 20 44 62 48 61 73 50 72 6f 70 65 72  2 || DbHasProper
23ca0 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53  ty(db, iDb, DB_S
23cb0 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a  chemaLoaded) ){.
23cc0 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43      zMaster = SC
23cd0 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b  HEMA_TABLE(iDb);
23ce0 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62  .    initData.db
23cf0 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44   = db;.    initD
23d00 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ata.iDb = pOp->p
23d10 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  1;.    initData.
23d20 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a  pzErrMsg = &p->z
23d30 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c  ErrMsg;.    zSql
23d40 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
23d50 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45  f(db,.       "SE
23d60 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  LECT name, rootp
23d70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25  age, sql FROM '%
23d80 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 22 2c  q'.%s WHERE %s",
23d90 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  .       db->aDb[
23da0 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73  iDb].zName, zMas
23db0 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ter, pOp->p4.z);
23dc0 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30  .    if( zSql==0
23dd0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
23de0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
23df0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 28 76   }else{.      (v
23e00 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74  oid)sqlite3Safet
23e10 79 4f 66 66 28 64 62 29 3b 0a 20 20 20 20 20 20  yOff(db);.      
23e20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
23e30 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20  .busy==0 );.    
23e40 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
23e50 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44  = 1;.      initD
23e60 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f  ata.rc = SQLITE_
23e70 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  OK;.      assert
23e80 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
23e90 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20  led );.      rc 
23ea0 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
23eb0 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  b, zSql, sqlite3
23ec0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
23ed0 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
23ee0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
23ef0 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74  E_OK ) rc = init
23f00 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73  Data.rc;.      s
23f10 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
23f20 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62   zSql);.      db
23f30 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
23f40 0a 20 20 20 20 20 20 28 76 6f 69 64 29 73 71 6c  .      (void)sql
23f50 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
23f60 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  ;.    }.  }.  sq
23f70 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65 41  lite3BtreeLeaveA
23f80 6c 6c 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63  ll(db);.  if( rc
23f90 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
23fa0 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
23fb0 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20  m;.  }.  break; 
23fc0 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   .}..#if !define
23fd0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
23fe0 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65  ALYZE)./* Opcode
23ff0 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50  : LoadAnalysis P
24000 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
24010 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f  Read the sqlite_
24020 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20  stat1 table for 
24030 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
24040 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  load the content
24050 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
24060 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72  e into the inter
24070 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74  nal index hash t
24080 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c  able.  This will
24090 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e   cause.** the an
240a0 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65  alysis to be use
240b0 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67  d when preparing
240c0 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
240d0 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65  queries..*/.case
240e0 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73   OP_LoadAnalysis
240f0 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
24100 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
24110 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
24120 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61   rc = sqlite3Ana
24130 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f  lysisLoad(db, pO
24140 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b  p->p1);.  break;
24150 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21    .}.#endif /* !
24160 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
24170 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a  MIT_ANALYZE) */.
24180 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
24190 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20  Table P1 * * P4 
241a0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
241b0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
241c0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
241d0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
241e0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62  cribe.** the tab
241f0 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  le named P4 in d
24200 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
24210 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
24220 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  r a table.** is 
24230 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
24240 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
24250 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
24260 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
24270 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
24280 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
24290 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
242a0 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20  P_DropTable: {. 
242b0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
242c0 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c  dDeleteTable(db,
242d0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
242e0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
242f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
24300 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34  pIndex P1 * * P4
24310 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
24320 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
24330 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
24340 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
24350 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e  scribe.** the in
24360 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  dex named P4 in 
24370 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
24380 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
24390 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69  er an index.** i
243a0 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64  s dropped in ord
243b0 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
243c0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
243d0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
243e0 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
243f0 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
24400 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
24410 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b   OP_DropIndex: {
24420 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
24430 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64  AndDeleteIndex(d
24440 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
24450 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
24460 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
24470 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20  ropTrigger P1 * 
24480 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
24490 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
244a0 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
244b0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
244c0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
244d0 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20  e trigger named 
244e0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
244f0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
24500 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67  ed after a trigg
24510 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  er.** is dropped
24520 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
24530 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
24540 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
24550 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
24560 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
24570 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
24580 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
24590 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69  rigger: {.  sqli
245a0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
245b0 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
245c0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
245d0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
245e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
245f0 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
24600 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
24610 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
24620 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44   P3 * P5.**.** D
24630 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
24640 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
24650 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
24660 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
24670 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
24680 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
24690 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
246a0 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
246b0 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
246c0 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
246d0 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
246e0 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
246f0 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
24700 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  tains the maximu
24710 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
24720 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
24730 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
24740 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
24750 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
24760 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
24770 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
24780 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
24790 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
247a0 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
247b0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
247c0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
247d0 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
247e0 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
247f0 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
24800 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
24810 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
24820 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69  eger.** stored i
24830 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50  n reg(P1), reg(P
24840 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c  1+1), reg(P1+2),
24850 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65   ....  There are
24860 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f   P2 tables.** to
24870 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  tal..**.** If P5
24880 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
24890 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
248a0 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
248b0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
248c0 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
248d0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
248e0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
248f0 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
24900 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
24910 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
24920 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
24930 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
24940 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a  t nRoot;      /*
24950 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
24960 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75  s to check.  (Nu
24970 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67  mber of root pag
24980 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  es.) */.  int *a
24990 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72  Root;     /* Arr
249a0 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e  ay of rootpage n
249b0 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65  umbers for table
249c0 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20  s to be checked 
249d0 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
249e0 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
249f0 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  nter */.  int nE
24a00 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rr;       /* Num
24a10 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
24a20 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ported */.  char
24a30 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54   *z;        /* T
24a40 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72  ext of the error
24a50 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d   report */.  Mem
24a60 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20   *pnErr;     /* 
24a70 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67  Register keeping
24a80 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73   track of errors
24a90 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20   remaining */.  
24aa0 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e  .  nRoot = pOp->
24ab0 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52  p2;.  assert( nR
24ac0 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74  oot>0 );.  aRoot
24ad0 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
24ae0 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
24af0 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20  (int)*(nRoot+1) 
24b00 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d  );.  if( aRoot==
24b10 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
24b20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24b30 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
24b40 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e  =p->nMem );.  pn
24b50 45 72 72 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Err = &p->aMem[p
24b60 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
24b70 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
24b80 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
24b90 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
24ba0 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  rr->flags & (MEM
24bb0 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
24bc0 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
24bd0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
24be0 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e  ;.  for(j=0; j<n
24bf0 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  Root; j++){.    
24c00 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29  aRoot[j] = (int)
24c10 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
24c20 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20  lue(&pIn1[j]);. 
24c30 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20   }.  aRoot[j] = 
24c40 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
24c50 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p5<db->nDb );.
24c60 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
24c70 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
24c80 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20 20  p->p5))!=0 );.  
24c90 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  z = sqlite3Btree
24ca0 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64  IntegrityCheck(d
24cb0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e  b->aDb[pOp->p5].
24cc0 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f  pBt, aRoot, nRoo
24cd0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
24ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cf0 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e      (int)pnErr->
24d00 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73  u.i, &nErr);.  s
24d10 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
24d20 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72   aRoot);.  pnErr
24d30 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20  ->u.i -= nErr;. 
24d40 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
24d50 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
24d60 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
24d70 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
24d80 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
24d90 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
24da0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
24db0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
24dc0 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20  MemSetStr(pIn1, 
24dd0 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
24de0 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  F8, sqlite3_free
24df0 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
24e00 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
24e10 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
24e20 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
24e30 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
24e40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
24e50 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
24e60 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
24e70 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  K */../* Opcode:
24e80 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32   RowSetAdd P1 P2
24e90 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73   * * *.**.** Ins
24ea0 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ert the integer 
24eb0 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65  value held by re
24ec0 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61  gister P2 into a
24ed0 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a   boolean index.*
24ee0 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74  * held in regist
24ef0 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  er P1..**.** An 
24f00 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20  assertion fails 
24f10 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20  if P2 is not an 
24f20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
24f30 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b   OP_RowSetAdd: {
24f40 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
24f50 0a 20 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20 20  .  Mem *pIdx;.  
24f60 4d 65 6d 20 2a 70 56 61 6c 3b 0a 20 20 61 73 73  Mem *pVal;.  ass
24f70 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
24f80 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  & pOp->p1<=p->nM
24f90 65 6d 20 29 3b 0a 20 20 70 49 64 78 20 3d 20 26  em );.  pIdx = &
24fa0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
24fb0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
24fc0 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
24fd0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
24fe0 56 61 6c 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Val = &p->aMem[p
24ff0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
25000 74 28 20 28 70 56 61 6c 2d 3e 66 6c 61 67 73 20  t( (pVal->flags 
25010 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
25020 0a 20 20 69 66 28 20 28 70 49 64 78 2d 3e 66 6c  .  if( (pIdx->fl
25030 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
25040 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
25050 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
25060 53 65 74 28 70 49 64 78 29 3b 0a 20 20 20 20 69  Set(pIdx);.    i
25070 66 28 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20  f( (pIdx->flags 
25080 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
25090 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
250a0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77    }.  sqlite3Row
250b0 53 65 74 49 6e 73 65 72 74 28 70 49 64 78 2d 3e  SetInsert(pIdx->
250c0 75 2e 70 52 6f 77 53 65 74 2c 20 70 56 61 6c 2d  u.pRowSet, pVal-
250d0 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  >u.i);.  break;.
250e0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
250f0 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50  wSetRead P1 P2 P
25100 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72  3 * *.**.** Extr
25110 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
25120 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
25130 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
25140 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
25150 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
25160 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
25170 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
25180 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
25190 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
251a0 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
251b0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
251c0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
251d0 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
251e0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 6f 75 74 33     /* jump, out3
251f0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 64 78 3b   */.  Mem *pIdx;
25200 0a 20 20 69 36 34 20 76 61 6c 3b 0a 20 20 61 73  .  i64 val;.  as
25210 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
25220 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
25230 4d 65 6d 20 29 3b 0a 20 20 43 48 45 43 4b 5f 46  Mem );.  CHECK_F
25240 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
25250 70 49 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIdx = &p->aMem[
25260 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
25270 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
25280 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 64  >p3];.  if( (pId
25290 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  x->flags & MEM_R
252a0 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c  owSet)==0 .   ||
252b0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
252c0 78 74 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77 53  xt(pIdx->u.pRowS
252d0 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29  et, &val)==0.  )
252e0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f  {.    /* The boo
252f0 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d  lean index is em
25300 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  pty */.    sqlit
25310 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
25320 28 70 49 64 78 29 3b 0a 20 20 20 20 70 63 20 3d  (pIdx);.    pc =
25330 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
25340 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
25350 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
25360 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
25370 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
25380 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
25390 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
253a0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
253b0 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
253c0 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65   val);.  }.  bre
253d0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
253e0 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20  : RowSetTest P1 
253f0 50 32 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52  P2 P3 P4.**.** R
25400 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73  egister P3 is as
25410 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20  sumed to hold a 
25420 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
25430 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65  alue. If registe
25440 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  r P1.** contains
25450 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74   a RowSet object
25460 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74   and that RowSet
25470 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73   object contains
25480 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65  .** the value he
25490 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74  ld in P3, jump t
254a0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f  o register P2. O
254b0 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74  therwise, insert
254c0 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
254d0 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52  in P3 into the R
254e0 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e  owSet and contin
254f0 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20  ue on to the.** 
25500 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  next opcode..**.
25510 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62  ** The RowSet ob
25520 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65  ject is optimize
25530 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77  d for the case w
25540 68 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20  here successive 
25550 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  sets.** of integ
25560 65 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20  ers, where each 
25570 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  set contains no 
25580 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68  duplicates. Each
25590 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65   set.** of value
255a0 73 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  s is identified 
255b0 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76  by a unique P4 v
255c0 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20  alue. The first 
255d0 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65  set.** must have
255e0 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61   P4==0, the fina
255f0 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34  l set P4=-1.  P4
25600 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20   must be either 
25610 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67  -1 or.** non-neg
25620 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d  ative.  For non-
25630 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
25640 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c  of P4 only the l
25650 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61  ower 4.** bits a
25660 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a  re significant..
25670 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77  **.** This allow
25680 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a  s optimizations:
25690 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20   (a) when P4==0 
256a0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
256b0 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20   to test.** the 
256c0 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f  rowset object fo
256d0 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67  r P3, as it is g
256e0 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f  uaranteed not to
256f0 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20   contain it,.** 
25700 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20  (b) when P4==-1 
25710 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
25720 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76   to insert the v
25730 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c  alue, as it will
25740 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73  .** never be tes
25750 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29  ted for, and (c)
25760 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68   when a value th
25770 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65  at is part of se
25780 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74  t X is.** insert
25790 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ed, there is no 
257a0 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74  need to search t
257b0 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d  o see if the sam
257c0 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70  e value was.** p
257d0 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74  reviously insert
257e0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65  ed as part of se
257f0 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20  t X (only if it 
25800 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a  was previously.*
25810 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  * inserted as pa
25820 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72  rt of some other
25830 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f   set)..*/.case O
25840 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20  P_RowSetTest: { 
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25860 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
25870 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69  , in3 */.  int i
25880 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74  Set;.  int exist
25890 73 3b 0a 0a 20 20 69 53 65 74 20 3d 20 70 4f 70  s;..  iSet = pOp
258a0 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74  ->p4.i;.  assert
258b0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn3->flags&ME
258c0 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  M_Int );..  /* I
258d0 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68  f there is anyth
258e0 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61  ing other than a
258f0 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69   rowset object i
25900 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31  n memory cell P1
25910 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74  ,.  ** delete it
25920 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c   now and initial
25930 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65  ize P1 with an e
25940 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f  mpty rowset.  */
25950 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
25960 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
25970 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
25980 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
25990 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
259a0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
259b0 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
259c0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
259d0 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
259e0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
259f0 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74  NT32 );.  assert
25a00 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53  ( iSet==-1 || iS
25a10 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69  et>=0 );.  if( i
25a20 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74  Set ){.    exist
25a30 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65  s = sqlite3RowSe
25a40 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tTest(pIn1->u.pR
25a50 6f 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20  owSet, .        
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a70 20 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74         (u8)(iSet
25a80 3e 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66  >=0 ? iSet & 0xf
25a90 20 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20   : 0xff),.      
25aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ab0 20 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75           pIn3->u
25ac0 2e 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69  .i);.    if( exi
25ad0 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  sts ){.      pc 
25ae0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
25af0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
25b00 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74  }.  }.  if( iSet
25b10 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >=0 ){.    sqlit
25b20 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
25b30 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
25b40 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a  pIn3->u.i);.  }.
25b50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
25b60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25b70 5f 54 52 49 47 47 45 52 0a 2f 2a 20 4f 70 63 6f  _TRIGGER./* Opco
25b80 64 65 3a 20 43 6f 6e 74 65 78 74 50 75 73 68 20  de: ContextPush 
25b90 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 53 61 76  * * * .**.** Sav
25ba0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 56 64  e the current Vd
25bb0 62 65 20 63 6f 6e 74 65 78 74 20 73 75 63 68 20  be context such 
25bc0 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
25bd0 65 73 74 6f 72 65 64 20 62 79 20 61 20 43 6f 6e  estored by a Con
25be0 74 65 78 74 50 6f 70 0a 2a 2a 20 6f 70 63 6f 64  textPop.** opcod
25bf0 65 2e 20 54 68 65 20 63 6f 6e 74 65 78 74 20 73  e. The context s
25c00 74 6f 72 65 73 20 74 68 65 20 6c 61 73 74 20 69  tores the last i
25c10 6e 73 65 72 74 20 72 6f 77 20 69 64 2c 20 74 68  nsert row id, th
25c20 65 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  e last statement
25c30 20 63 68 61 6e 67 65 0a 2a 2a 20 63 6f 75 6e 74   change.** count
25c40 2c 20 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e  , and the curren
25c50 74 20 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e  t statement chan
25c60 67 65 20 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73  ge count..*/.cas
25c70 65 20 4f 50 5f 43 6f 6e 74 65 78 74 50 75 73 68  e OP_ContextPush
25c80 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 43  : {.  int i;.  C
25c90 6f 6e 74 65 78 74 20 2a 70 43 6f 6e 74 65 78 74  ontext *pContext
25ca0 3b 0a 0a 20 20 69 20 3d 20 70 2d 3e 63 6f 6e 74  ;..  i = p->cont
25cb0 65 78 74 53 74 61 63 6b 54 6f 70 2b 2b 3b 0a 20  extStackTop++;. 
25cc0 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b   assert( i>=0 );
25cd0 0a 20 20 2f 2a 20 46 49 58 20 4d 45 3a 20 54 68  .  /* FIX ME: Th
25ce0 69 73 20 73 68 6f 75 6c 64 20 62 65 20 61 6c 6c  is should be all
25cf0 6f 63 61 74 65 64 20 61 73 20 70 61 72 74 20 6f  ocated as part o
25d00 66 20 74 68 65 20 76 64 62 65 20 61 74 20 63 6f  f the vdbe at co
25d10 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 20 20  mpile-time */.  
25d20 69 66 28 20 69 3e 3d 70 2d 3e 63 6f 6e 74 65 78  if( i>=p->contex
25d30 74 53 74 61 63 6b 44 65 70 74 68 20 29 7b 0a 20  tStackDepth ){. 
25d40 20 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61     p->contextSta
25d50 63 6b 44 65 70 74 68 20 3d 20 69 2b 31 3b 0a 20  ckDepth = i+1;. 
25d60 20 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61     p->contextSta
25d70 63 6b 20 3d 20 73 71 6c 69 74 65 33 44 62 52 65  ck = sqlite3DbRe
25d80 61 6c 6c 6f 63 4f 72 46 72 65 65 28 64 62 2c 20  allocOrFree(db, 
25d90 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 2c  p->contextStack,
25da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dc0 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
25dd0 66 28 43 6f 6e 74 65 78 74 29 2a 28 69 2b 31 29  f(Context)*(i+1)
25de0 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 63 6f  );.    if( p->co
25df0 6e 74 65 78 74 53 74 61 63 6b 3d 3d 30 20 29 20  ntextStack==0 ) 
25e00 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
25e10 0a 20 20 70 43 6f 6e 74 65 78 74 20 3d 20 26 70  .  pContext = &p
25e20 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b 69  ->contextStack[i
25e30 5d 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 6c  ];.  pContext->l
25e40 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
25e50 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 43 6f 6e  astRowid;.  pCon
25e60 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  text->nChange = 
25e70 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 62 72  p->nChange;.  br
25e80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
25e90 65 3a 20 43 6f 6e 74 65 78 74 50 6f 70 20 2a 20  e: ContextPop * 
25ea0 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 52 65 73 74 6f  * * .**.** Resto
25eb0 72 65 20 74 68 65 20 56 64 62 65 20 63 6f 6e 74  re the Vdbe cont
25ec0 65 78 74 20 74 6f 20 74 68 65 20 73 74 61 74 65  ext to the state
25ed0 20 69 74 20 77 61 73 20 69 6e 20 77 68 65 6e 20   it was in when 
25ee0 63 6f 6e 74 65 78 74 50 75 73 68 20 77 61 73 20  contextPush was 
25ef0 6c 61 73 74 0a 2a 2a 20 65 78 65 63 75 74 65 64  last.** executed
25f00 2e 20 54 68 65 20 63 6f 6e 74 65 78 74 20 73 74  . The context st
25f10 6f 72 65 73 20 74 68 65 20 6c 61 73 74 20 69 6e  ores the last in
25f20 73 65 72 74 20 72 6f 77 20 69 64 2c 20 74 68 65  sert row id, the
25f30 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 0a   last statement.
25f40 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 2c  ** change count,
25f50 20 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74   and the current
25f60 20 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67   statement chang
25f70 65 20 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73 65  e count..*/.case
25f80 20 4f 50 5f 43 6f 6e 74 65 78 74 50 6f 70 3a 20   OP_ContextPop: 
25f90 7b 0a 20 20 43 6f 6e 74 65 78 74 20 2a 70 43 6f  {.  Context *pCo
25fa0 6e 74 65 78 74 3b 0a 20 20 70 43 6f 6e 74 65 78  ntext;.  pContex
25fb0 74 20 3d 20 26 70 2d 3e 63 6f 6e 74 65 78 74 53  t = &p->contextS
25fc0 74 61 63 6b 5b 2d 2d 70 2d 3e 63 6f 6e 74 65 78  tack[--p->contex
25fd0 74 53 74 61 63 6b 54 6f 70 5d 3b 0a 20 20 61 73  tStackTop];.  as
25fe0 73 65 72 74 28 20 70 2d 3e 63 6f 6e 74 65 78 74  sert( p->context
25ff0 53 74 61 63 6b 54 6f 70 3e 3d 30 20 29 3b 0a 20  StackTop>=0 );. 
26000 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
26010 20 70 43 6f 6e 74 65 78 74 2d 3e 6c 61 73 74 52   pContext->lastR
26020 6f 77 69 64 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e  owid;.  p->nChan
26030 67 65 20 3d 20 70 43 6f 6e 74 65 78 74 2d 3e 6e  ge = pContext->n
26040 43 68 61 6e 67 65 3b 0a 20 20 62 72 65 61 6b 3b  Change;.  break;
26050 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  .}.#endif /* #if
26060 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26070 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66  _TRIGGER */..#if
26080 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26090 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
260a0 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
260b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
260c0 2a 2a 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ** Set the value
260d0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
260e0 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
260f0 66 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61  f its current va
26100 6c 75 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76  lue.** and the v
26110 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
26120 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
26130 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f  instruction thro
26140 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
26150 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  he memory cell i
26160 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a  s not initially.
26170 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ** an integer..*
26180 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78  /.case OP_MemMax
26190 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
261a0 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 73 71 6c 69  1, in2 */.  sqli
261b0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
261c0 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 73 71  rify(pIn1);.  sq
261d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
261e0 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
261f0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49  if( pIn1->u.i<pI
26200 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49  n2->u.i){.    pI
26210 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e  n1->u.i = pIn2->
26220 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  u.i;.  }.  break
26230 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
26240 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
26250 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f  CREMENT */../* O
26260 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20  pcode: IfPos P1 
26270 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
26280 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
26290 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20  egister P1 is 1 
262a0 6f 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70  or greater, jump
262b0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74   to P2..**.** It
262c0 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
262d0 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
262e0 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
262f0 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
26300 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
26310 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
26320 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
26330 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
26340 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
26350 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Pos: {        /*
26360 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
26370 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
26380 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
26390 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30   if( pIn1->u.i>0
263a0 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
263b0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
263c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
263d0 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50  code: IfNeg P1 P
263e0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  2 * * *.**.** If
263f0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
26400 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73  gister P1 is les
26410 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d  s than zero, jum
26420 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20  p to P2. .**.** 
26430 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f  It is illegal to
26440 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75   use this instru
26450 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73  ction on a regis
26460 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a  ter that does.**
26470 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
26480 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73  integer.  An ass
26490 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c  ertion fault wil
264a0 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20  l result if you 
264b0 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  try..*/.case OP_
264c0 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20  IfNeg: {        
264d0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
264e0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
264f0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
26500 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
26510 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  <0 ){.     pc = 
26520 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
26530 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26540 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50  Opcode: IfZero P
26550 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
26560 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   If the value of
26570 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
26580 65 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20  exactly 0, jump 
26590 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74  to P2. .**.** It
265a0 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
265b0 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
265c0 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
265d0 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
265e0 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
265f0 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
26600 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
26610 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
26620 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
26630 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f  Zero: {        /
26640 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
26650 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
26660 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
26670 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
26680 3d 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  =0 ){.     pc = 
26690 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
266a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
266b0 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20  Opcode: AggStep 
266c0 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
266d0 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
266e0 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
266f0 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
26700 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
26710 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
26720 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
26730 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
26740 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Def.** structure
26750 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
26760 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55  the function.  U
26770 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  se register.** P
26780 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  3 as the accumul
26790 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
267a0 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
267b0 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
267c0 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
267d0 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
267e0 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  /.case OP_AggSte
267f0 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  p: {.  int n;.  
26800 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d  int i;.  Mem *pM
26810 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b  em;.  Mem *pRec;
26820 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
26830 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
26840 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
26850 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
26860 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20  .  assert( n>=0 
26870 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 70 2d 3e  );.  pRec = &p->
26880 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
26890 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
268a0 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
268b0 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
268c0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
268d0 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20  +, pRec++){.    
268e0 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b  apVal[i] = pRec;
268f0 0a 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e  .    storeTypeIn
26900 66 6f 28 70 52 65 63 2c 20 65 6e 63 6f 64 69 6e  fo(pRec, encodin
26910 67 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46  g);.  }.  ctx.pF
26920 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
26930 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70  unc;.  assert( p
26940 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
26950 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
26960 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65    ctx.pMem = pMe
26970 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  m = &p->aMem[pOp
26980 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e  ->p3];.  pMem->n
26990 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67  ++;.  ctx.s.flag
269a0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
269b0 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63  ctx.s.z = 0;.  c
269c0 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  tx.s.zMalloc = 0
269d0 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d  ;.  ctx.s.xDel =
269e0 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d   0;.  ctx.s.db =
269f0 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72   db;.  ctx.isErr
26a00 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43  or = 0;.  ctx.pC
26a10 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63  oll = 0;.  if( c
26a20 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20  tx.pFunc->flags 
26a30 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  & SQLITE_FUNC_NE
26a40 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73  EDCOLL ){.    as
26a50 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70  sert( pOp>p->aOp
26a60 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
26a70 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d  pOp[-1].p4type==
26a80 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
26a90 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
26aa0 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
26ab0 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e  lSeq );.    ctx.
26ac0 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e  pColl = pOp[-1].
26ad0 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20  p4.pColl;.  }.  
26ae0 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65  (ctx.pFunc->xSte
26af0 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61  p)(&ctx, n, apVa
26b00 6c 29 3b 0a 20 20 69 66 28 20 63 74 78 2e 69 73  l);.  if( ctx.is
26b10 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
26b20 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
26b30 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
26b40 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
26b50 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
26b60 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
26b70 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  sError;.  }.  sq
26b80 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
26b90 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 62  ase(&ctx.s);.  b
26ba0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26bb0 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20  de: AggFinal P1 
26bc0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
26bd0 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61  Execute the fina
26be0 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66  lizer function f
26bf0 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
26c00 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d    P1 is.** the m
26c10 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
26c20 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d  hat is the accum
26c30 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61  ulator for the a
26c40 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20  ggregate..**.** 
26c50 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
26c60 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68   of arguments th
26c70 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  at the step func
26c80 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a  tion takes and.*
26c90 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
26ca0 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
26cb0 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69   for this functi
26cc0 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61  on.  The P2.** a
26cd0 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75  rgument is not u
26ce0 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
26cf0 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  de.  It is only 
26d00 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69  there to disambi
26d10 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f  guate.** functio
26d20 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65  ns that can take
26d30 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73   varying numbers
26d40 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
26d50 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65  The.** P4 argume
26d60 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65  nt is only neede
26d70 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65  d for the degene
26d80 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a  rate case where.
26d90 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  ** the step func
26da0 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65  tion was not pre
26db0 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a  viously called..
26dc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69  */.case OP_AggFi
26dd0 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  nal: {.  Mem *pM
26de0 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
26df0 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
26e00 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p1<=p->nMem );. 
26e10 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d   pMem = &p->aMem
26e20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
26e30 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
26e40 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  s & ~(MEM_Null|M
26e50 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20  EM_Agg))==0 );. 
26e60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
26e70 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65  eMemFinalize(pMe
26e80 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63  m, pOp->p4.pFunc
26e90 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
26ea0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
26eb0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
26ec0 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
26ed0 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d  e3_value_text(pM
26ee0 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  em));.  }.  sqli
26ef0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
26f00 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f  oding(pMem, enco
26f10 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
26f20 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65  MAX_BLOBSIZE(pMe
26f30 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  m);.  if( sqlite
26f40 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
26f50 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Mem) ){.    goto
26f60 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
26f70 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 20 21  break;.}...#if !
26f80 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
26f90 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21  MIT_VACUUM) && !
26fa0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
26fb0 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f  MIT_ATTACH)./* O
26fc0 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20  pcode: Vacuum * 
26fd0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61  * * * *.**.** Va
26fe0 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20  cuum the entire 
26ff0 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20  database.  This 
27000 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73  opcode will caus
27010 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a  e other virtual.
27020 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62  ** machines to b
27030 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75  e created and ru
27040 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62  n.  It may not b
27050 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  e called from wi
27060 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61  thin.** a transa
27070 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
27080 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 69 66  P_Vacuum: {.  if
27090 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
270a0 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
270b0 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
270c0 65 3b 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  e; .  rc = sqlit
270d0 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e  e3RunVacuum(&p->
270e0 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20  zErrMsg, db);.  
270f0 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
27100 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
27110 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
27120 73 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  se;.  break;.}.#
27130 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69  endif..#if !defi
27140 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
27150 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f  AUTOVACUUM)./* O
27160 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75  pcode: IncrVacuu
27170 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
27180 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69  .** Perform a si
27190 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65  ngle step of the
271a0 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   incremental vac
271b0 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e  uum procedure on
271c0 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62  .** the P1 datab
271d0 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75  ase. If the vacu
271e0 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  um has finished,
271f0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
27200 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65  tion.** P2. Othe
27210 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
27220 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
27230 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
27240 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75  case OP_IncrVacu
27250 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  um: {        /* 
27260 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20  jump */.  Btree 
27270 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
27280 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
27290 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
272a0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
272b0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
272c0 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
272d0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
272e0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
272f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
27300 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
27310 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
27320 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70  TE_DONE ){.    p
27330 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
27340 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
27350 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _OK;.  }.  break
27360 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
27370 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
27380 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
27390 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64  ause precompiled
273a0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62   statements to b
273b0 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41  ecome expired. A
273c0 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
273d0 65 6e 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74  ent.** fails wit
273e0 68 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  h an error code 
273f0 6f 66 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  of SQLITE_SCHEMA
27400 20 69 66 20 69 74 20 69 73 20 65 76 65 72 20 65   if it is ever e
27410 78 65 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61  xecuted .** (via
27420 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29   sqlite3_step())
27430 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
27440 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
27450 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
27460 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
27470 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
27480 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
27490 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
274a0 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
274b0 73 20 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a  s affected. .*/.
274c0 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
274d0 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31  {.  if( !pOp->p1
274e0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
274f0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
27500 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
27510 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70  else{.    p->exp
27520 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
27530 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
27540 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
27550 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70  ARED_CACHE./* Op
27560 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20  code: TableLock 
27570 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
27580 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
27590 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
275a0 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
275b0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
275c0 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
275d0 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
275e0 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
275f0 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ed. .**.** If P1
27600 20 69 73 20 20 74 68 65 20 69 6e 64 65 78 20 6f   is  the index o
27610 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
27620 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
27630 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
27640 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  ** on which the 
27650 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
27660 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73  .  A readlock is
27670 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d   obtained if P3=
27680 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65  =0 or.** a write
27690 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a   lock if P3==1..
276a0 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e  **.** P2 contain
276b0 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  s the root-page 
276c0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
276d0 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63  lock..**.** P4 c
276e0 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
276f0 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
27700 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
27710 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73   locked. This is
27720 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f   only.** used to
27730 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72   generate an err
27740 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68  or message if th
27750 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65  e lock cannot be
27760 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61   obtained..*/.ca
27770 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a  se OP_TableLock:
27780 20 7b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 75   {.  int p1;.  u
27790 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 3b 0a 0a  8 isWriteLock;..
277a0 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20    p1 = pOp->p1; 
277b0 0a 20 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d  .  isWriteLock =
277c0 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20   (u8)pOp->p3;.  
277d0 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26  assert( p1>=0 &&
277e0 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20   p1<db->nDb );. 
277f0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
27800 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 31 29  eeMask & (1<<p1)
27810 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
27820 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30  ( isWriteLock==0
27830 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d   || isWriteLock=
27840 3d 31 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =1 );.  rc = sql
27850 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62  ite3BtreeLockTab
27860 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70  le(db->aDb[p1].p
27870 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57  Bt, pOp->p2, isW
27880 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 69 66 28  riteLock);.  if(
27890 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49   (rc&0xFF)==SQLI
278a0 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20  TE_LOCKED ){.   
278b0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d   const char *z =
278c0 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
278d0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
278e0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
278f0 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c  , "database tabl
27900 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22  e is locked: %s"
27910 2c 20 7a 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  , z);.  }.  brea
27920 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
27930 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
27940 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e  D_CACHE */..#ifn
27950 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27960 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
27970 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a  Opcode: VBegin *
27980 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
27990 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e  P4 may be a poin
279a0 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
279b0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
279c0 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68  . If so, call th
279d0 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74  e .** xBegin met
279e0 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
279f0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20  le..**.** Also, 
27a00 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50  whether or not P
27a10 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20  4 is set, check 
27a20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74  that this is not
27a30 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
27a40 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63  om.** within a c
27a50 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72  allback to a vir
27a60 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63  tual table xSync
27a70 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74  () method. If it
27a80 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a   is, the error.*
27a90 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  * code will be s
27aa0 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43  et to SQLITE_LOC
27ab0 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  KED..*/.case OP_
27ac0 56 42 65 67 69 6e 3a 20 7b 0a 20 20 73 71 6c 69  VBegin: {.  sqli
27ad0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
27ae0 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
27af0 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d  p4.pVtab;.  rc =
27b00 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
27b10 6e 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20  n(db, pVtab);.  
27b20 69 66 28 20 70 56 74 61 62 20 29 7b 0a 20 20 20  if( pVtab ){.   
27b30 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
27b40 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
27b50 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
27b60 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b   pVtab->zErrMsg;
27b70 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  .    pVtab->zErr
27b80 4d 73 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  Msg = 0;.  }.  b
27b90 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
27ba0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
27bb0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
27bc0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27bd0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
27be0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61  /* Opcode: VCrea
27bf0 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  te P1 * * P4 *.*
27c00 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
27c10 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
27c20 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
27c30 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20  se P1. Call the 
27c40 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a  xCreate method.*
27c50 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  * for that table
27c60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72  ..*/.case OP_VCr
27c70 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73  eate: {.  rc = s
27c80 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
27c90 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  eate(db, pOp->p1
27ca0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d  , pOp->p4.z, &p-
27cb0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65  >zErrMsg);.  bre
27cc0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
27cd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
27ce0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
27cf0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27d00 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
27d10 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f   Opcode: VDestro
27d20 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  y P1 * * P4 *.**
27d30 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
27d40 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
27d50 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
27d60 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20  e P1.  Call the 
27d70 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a  xDestroy method.
27d80 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
27d90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65  ..*/.case OP_VDe
27da0 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e  stroy: {.  p->in
27db0 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a  VtabMethod = 2;.
27dc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
27dd0 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62  abCallDestroy(db
27de0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
27df0 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74  p4.z);.  p->inVt
27e00 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
27e10 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
27e20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
27e30 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
27e40 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
27e50 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
27e60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65  ./* Opcode: VOpe
27e70 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  n P1 * * P4 *.**
27e80 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
27e90 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
27ea0 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
27eb0 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
27ec0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20  tructure..** P1 
27ed0 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62  is a cursor numb
27ee0 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  er.  This opcode
27ef0 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20   opens a cursor 
27f00 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  to the virtual.*
27f10 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72  * table and stor
27f20 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69  es that cursor i
27f30 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P1..*/.case OP
27f40 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  _VOpen: {.  Vdbe
27f50 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
27f60 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
27f70 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72  sor *pVtabCursor
27f80 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
27f90 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74   *pVtab;.  sqlit
27fa0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
27fb0 6c 65 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30 3b  le;..  pCur = 0;
27fc0 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d  .  pVtabCursor =
27fd0 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f   0;.  pVtab = pO
27fe0 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 70  p->p4.pVtab;.  p
27ff0 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65  Module = (sqlite
28000 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62  3_module *)pVtab
28010 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
28020 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f  ert(pVtab && pMo
28030 64 75 6c 65 29 3b 0a 20 20 69 66 28 20 73 71 6c  dule);.  if( sql
28040 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
28050 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
28060 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
28070 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f  rc = pModule->xO
28080 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61  pen(pVtab, &pVta
28090 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69  bCursor);.  sqli
280a0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
280b0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e  >zErrMsg);.  p->
280c0 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
280d0 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61  >zErrMsg;.  pVta
280e0 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
280f0 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
28100 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
28110 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
28120 73 75 73 65 3b 0a 20 20 69 66 28 20 53 51 4c 49  suse;.  if( SQLI
28130 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20  TE_OK==rc ){.   
28140 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73   /* Initialize s
28150 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
28160 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f  or base class */
28170 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f 72  .    pVtabCursor
28180 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b  ->pVtab = pVtab;
28190 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  ..    /* Initial
281a0 69 73 65 20 76 64 62 65 20 63 75 72 73 6f 72 20  ise vdbe cursor 
281b0 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43  object */.    pC
281c0 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
281d0 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
281e0 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69  0, -1, 0);.    i
281f0 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20  f( pCur ){.     
28200 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
28210 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72  or = pVtabCursor
28220 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 4d  ;.      pCur->pM
28230 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43 75 72  odule = pVtabCur
28240 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64  sor->pVtab->pMod
28250 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ule;.    }else{.
28260 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63        db->malloc
28270 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20  Failed = 1;.    
28280 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73    pModule->xClos
28290 65 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  e(pVtabCursor);.
282a0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
282b0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
282c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
282d0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
282e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
282f0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
28300 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20  Opcode: VFilter 
28310 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
28320 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
28330 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  or opened using 
28340 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e  VOpen.  P2 is an
28350 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
28360 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69   to if.** the fi
28370 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73 65  ltered result se
28380 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a  t is empty..**.*
28390 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20 4e  * P4 is either N
283a0 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20  ULL or a string 
283b0 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61 74  that was generat
283c0 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74 49  ed by the xBestI
283d0 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f  ndex.** method o
283e0 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54  f the module.  T
283f0 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  he interpretatio
28400 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72 69  n of the P4 stri
28410 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f  ng is left.** to
28420 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
28430 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ementation..**.*
28440 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
28450 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65  vokes the xFilte
28460 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20  r method on the 
28470 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70  virtual table sp
28480 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31  ecified.** by P1
28490 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 71  .  The integer q
284a0 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65  uery plan parame
284b0 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69  ter to xFilter i
284c0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
284d0 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69  ster.** P3. Regi
284e0 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73  ster P3+1 stores
284f0 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65   the argc parame
28500 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65 64  ter to be passed
28510 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74   to the.** xFilt
28520 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73  er method. Regis
28530 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b  ters P3+2..P3+1+
28540 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72 67  argc are the arg
28550 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  c.** additional 
28560 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63 68  parameters which
28570 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a   are passed to.*
28580 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72 67  * xFilter as arg
28590 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 32  v. Register P3+2
285a0 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d   becomes argv[0]
285b0 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20   when passed to 
285c0 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41  xFilter..**.** A
285d0 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
285e0 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75 6c   P2 if the resul
285f0 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74  t set after filt
28600 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65  ering would be e
28610 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  mpty..*/.case OP
28620 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a  _VFilter: {   /*
28630 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
28640 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72  Arg;.  int iQuer
28650 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  y;.  const sqlit
28660 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
28670 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72  le;.  Mem *pQuer
28680 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b  y;.  Mem *pArgc;
28690 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
286a0 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72  cursor *pVtabCur
286b0 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  sor;.  sqlite3_v
286c0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64  tab *pVtab;.  Vd
286d0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
286e0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
286f0 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72   i;.  Mem **apAr
28700 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26  g;..  pQuery = &
28710 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
28720 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75  ;.  pArgc = &pQu
28730 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d  ery[1];.  pCur =
28740 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
28750 31 5d 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  1];.  REGISTER_T
28760 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51  RACE(pOp->p3, pQ
28770 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28  uery);.  assert(
28780 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
28790 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72  or );.  pVtabCur
287a0 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  sor = pCur->pVta
287b0 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62  bCursor;.  pVtab
287c0 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e   = pVtabCursor->
287d0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
287e0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
287f0 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68  e;..  /* Grab th
28800 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61  e index number a
28810 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  nd argc paramete
28820 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  rs */.  assert( 
28830 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d  (pQuery->flags&M
28840 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41  EM_Int)!=0 && pA
28850 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  rgc->flags==MEM_
28860 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20  Int );.  nArg = 
28870 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b  (int)pArgc->u.i;
28880 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74  .  iQuery = (int
28890 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20  )pQuery->u.i;.. 
288a0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
288b0 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f  Filter method */
288c0 0a 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30  .  {.    res = 0
288d0 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  ;.    apArg = p-
288e0 3e 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28  >apArg;.    for(
288f0 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69  i = 0; i<nArg; i
28900 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67  ++){.      apArg
28910 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31  [i] = &pArgc[i+1
28920 5d 3b 0a 20 20 20 20 20 20 73 74 6f 72 65 54 79  ];.      storeTy
28930 70 65 49 6e 66 6f 28 61 70 41 72 67 5b 69 5d 2c  peInfo(apArg[i],
28940 20 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   0);.    }..    
28950 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
28960 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
28970 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
28980 75 73 65 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  use;.    sqlite3
28990 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b  VtabLock(pVtab);
289a0 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  .    p->inVtabMe
289b0 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  thod = 1;.    rc
289c0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c   = pModule->xFil
289d0 74 65 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c  ter(pVtabCursor,
289e0 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34   iQuery, pOp->p4
289f0 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29  .z, nArg, apArg)
28a00 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d  ;.    p->inVtabM
28a10 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 73  ethod = 0;.    s
28a20 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
28a30 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
28a40 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
28a50 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
28a60 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73     pVtab->zErrMs
28a70 67 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  g = 0;.    sqlit
28a80 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c  e3VtabUnlock(db,
28a90 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28   pVtab);.    if(
28aa0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
28ab0 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d  {.      res = pM
28ac0 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61  odule->xEof(pVta
28ad0 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  bCursor);.    }.
28ae0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
28af0 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f  afetyOn(db) ) go
28b00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
28b10 6d 69 73 75 73 65 3b 0a 0a 20 20 20 20 69 66 28  misuse;..    if(
28b20 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63   res ){.      pc
28b30 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
28b40 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72      }.  }.  pCur
28b50 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a  ->nullRow = 0;..
28b60 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
28b70 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
28b80 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
28b90 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
28ba0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
28bb0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
28bc0 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a  olumn P1 P2 P3 *
28bd0 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74   *.**.** Store t
28be0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
28bf0 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a  P2-th column of.
28c00 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68  ** the row of th
28c10 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
28c20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20  that the .** P1 
28c30 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
28c40 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73  ng to into regis
28c50 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
28c60 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20  OP_VColumn: {.  
28c70 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
28c80 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
28c90 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
28ca0 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65  dule;.  Mem *pDe
28cb0 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  st;.  sqlite3_co
28cc0 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a  ntext sContext;.
28cd0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
28ce0 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
28cf0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
28d00 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
28d10 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
28d20 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
28d30 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
28d40 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d  );.  pDest = &p-
28d50 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
28d60 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
28d70 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Row ){.    sqlit
28d80 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
28d90 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65  (pDest);.    bre
28da0 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
28db0 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
28dc0 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
28dd0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
28de0 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
28df0 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  ( pModule->xColu
28e00 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26  mn );.  memset(&
28e10 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a  sContext, 0, siz
28e20 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a  eof(sContext));.
28e30 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
28e40 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
28e50 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
28e60 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
28e70 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74    ** the current
28e80 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f   contents to sCo
28e90 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61  ntext.s so in ca
28ea0 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  se the user-func
28eb0 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75  tion .  ** can u
28ec0 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20 61  se the already a
28ed0 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20  llocated buffer 
28ee0 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63  instead of alloc
28ef0 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65  ating a .  ** ne
28f00 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71  w one..  */.  sq
28f10 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
28f20 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44  (&sContext.s, pD
28f30 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  est);.  MemSetTy
28f40 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74  peFlag(&sContext
28f50 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
28f60 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
28f70 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
28f80 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
28f90 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d  isuse;.  rc = pM
28fa0 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70  odule->xColumn(p
28fb0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
28fc0 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70  , &sContext, pOp
28fd0 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2);.  sqlite3
28fe0 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
28ff0 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72  rrMsg);.  p->zEr
29000 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45  rMsg = pVtab->zE
29010 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e  rrMsg;.  pVtab->
29020 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69  zErrMsg = 0;.  i
29030 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72  f( sContext.isEr
29040 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ror ){.    rc = 
29050 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72  sContext.isError
29060 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
29070 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
29080 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74  he function to t
29090 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e 20  he P3 register. 
290a0 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20  We.  ** do this 
290b0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
290c0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
290d0 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74  error occurred t
290e0 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a  o ensure any.  *
290f0 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61  * dynamic alloca
29100 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74  tion in sContext
29110 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74  .s (a Mem struct
29120 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a  ) is  released..
29130 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64    */.  sqlite3Vd
29140 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
29150 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e  (&sContext.s, en
29160 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53  coding);.  REGIS
29170 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
29180 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 73 71 6c  3, pDest);.  sql
29190 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
291a0 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74  pDest, &sContext
291b0 2e 73 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  .s);.  UPDATE_MA
291c0 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
291d0 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  );..  if( sqlite
291e0 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b  3SafetyOn(db) ){
291f0 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
29200 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
29210 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
29220 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44  VdbeMemTooBig(pD
29230 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  est) ){.    goto
29240 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
29250 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
29260 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
29270 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
29280 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29290 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
292a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78  ./* Opcode: VNex
292b0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
292c0 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74  .** Advance virt
292d0 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20  ual table P1 to 
292e0 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20  the next row in 
292f0 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61  its result set a
29300 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e  nd.** jump to in
29310 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f  struction P2.  O
29320 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61  r, if the virtua
29330 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63  l table has reac
29340 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f  hed.** the end o
29350 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  f its result set
29360 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
29370 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
29380 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
29390 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b  case OP_VNext: {
293a0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
293b0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
293c0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
293d0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
293e0 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b  dule;.  int res;
293f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
29400 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b  Cur;..  res = 0;
29410 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
29420 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
29430 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
29440 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  abCursor );.  if
29450 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
29460 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
29470 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
29480 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
29490 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
294a0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
294b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
294c0 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20  ule->xNext );.. 
294d0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
294e0 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66  Next() method of
294f0 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65   the module. The
29500 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72  re is no way for
29510 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c   the.  ** underl
29520 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ying implementat
29530 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e  ion to return an
29540 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63   error if one oc
29550 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a  curs during.  **
29560 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61   xNext(). Instea
29570 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f  d, if an error o
29580 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72  ccurs, true is r
29590 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74  eturned (indicat
295a0 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64  ing that .  ** d
295b0 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ata is available
295c0 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  ) and the error 
295d0 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68  code returned wh
295e0 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20  en xColumn or.  
295f0 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65  ** some other me
29600 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76  thod is next inv
29610 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65  oked on the save
29620 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
29630 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69 66  ursor..  */.  if
29640 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
29650 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
29660 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
29670 65 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  e;.  sqlite3Vtab
29680 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 70  Lock(pVtab);.  p
29690 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
296a0 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75   1;.  rc = pModu
296b0 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e  le->xNext(pCur->
296c0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
296d0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
296e0 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  = 0;.  sqlite3Db
296f0 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
29700 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d  Msg);.  p->zErrM
29710 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
29720 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45  Msg;.  pVtab->zE
29730 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 73 71 6c  rrMsg = 0;.  sql
29740 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64  ite3VtabUnlock(d
29750 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  b, pVtab);.  if(
29760 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
29770 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64  {.    res = pMod
29780 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e  ule->xEof(pCur->
29790 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
297a0 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  }.  if( sqlite3S
297b0 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f  afetyOn(db) ) go
297c0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
297d0 6d 69 73 75 73 65 3b 0a 0a 20 20 69 66 28 20 21  misuse;..  if( !
297e0 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  res ){.    /* If
297f0 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20   there is data, 
29800 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
29810 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
29820 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
29830 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
29840 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
29850 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
29860 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
29870 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
29880 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31  code: VRename P1
29890 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
298a0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
298b0 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
298c0 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
298d0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
298e0 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  ture..** This op
298f0 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
29900 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
29910 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54  Rename method. T
29920 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72  he value.** in r
29930 65 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61  egister P1 is pa
29940 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d  ssed as the zNam
29950 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  e argument to th
29960 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  e xRename method
29970 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65  ..*/.case OP_VRe
29980 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  name: {.  sqlite
29990 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
299a0 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20   Mem *pName;..  
299b0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
299c0 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d  pVtab;.  pName =
299d0 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
299e0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56  1];.  assert( pV
299f0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
29a00 65 6e 61 6d 65 20 29 3b 0a 20 20 52 45 47 49 53  ename );.  REGIS
29a10 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
29a20 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73  1, pName);.  ass
29a30 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67  ert( pName->flag
29a40 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  s & MEM_Str );. 
29a50 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
29a60 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
29a70 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
29a80 73 75 73 65 3b 0a 20 20 73 71 6c 69 74 65 33 56  suse;.  sqlite3V
29a90 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a  tabLock(pVtab);.
29aa0 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d    rc = pVtab->pM
29ab0 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70  odule->xRename(p
29ac0 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b  Vtab, pName->z);
29ad0 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
29ae0 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
29af0 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d  ;.  p->zErrMsg =
29b00 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b   pVtab->zErrMsg;
29b10 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73  .  pVtab->zErrMs
29b20 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33  g = 0;.  sqlite3
29b30 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70  VtabUnlock(db, p
29b40 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 71 6c  Vtab);.  if( sql
29b50 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
29b60 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
29b70 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20  e_to_misuse;..  
29b80 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
29b90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29ba0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
29bb0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70  E./* Opcode: VUp
29bc0 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34  date P1 P2 P3 P4
29bd0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
29be0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
29bf0 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
29c00 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
29c10 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
29c20 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
29c30 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73  vokes the corres
29c40 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20  ponding xUpdate 
29c50 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65  method. P2 value
29c60 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75  s.** are contigu
29c70 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ous memory cells
29c80 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20   starting at P3 
29c90 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78  to pass to the x
29ca0 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63  Update .** invoc
29cb0 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65  ation. The value
29cc0 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33   in register (P3
29cd0 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e  +P2-1) correspon
29ce0 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32  ds to the .** p2
29cf0 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  th element of th
29d00 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73  e argv array pas
29d10 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a  sed to xUpdate..
29d20 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74  **.** The xUpdat
29d30 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f  e method will do
29d40 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20   a DELETE or an 
29d50 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a  INSERT or both..
29d60 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65  ** The argv[0] e
29d70 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f  lement (which co
29d80 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d  rresponds to mem
29d90 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20  ory cell P3).** 
29da0 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
29db0 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
29dc0 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20    If argv[0] is 
29dd0 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a  NULL then no .**
29de0 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73   deletion occurs
29df0 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65  .  The argv[1] e
29e00 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f  lement is the ro
29e10 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a  wid of the new .
29e20 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61  ** row.  This ca
29e30 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76  n be NULL to hav
29e40 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  e the virtual ta
29e50 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e  ble select the n
29e60 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72  ew .** rowid for
29e70 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75   itself.  The su
29e80 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74  bsequent element
29e90 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61  s in the array a
29ea0 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  re .** the value
29eb0 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  s of columns in 
29ec0 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a  the new row..**.
29ed0 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e  ** If P2==1 then
29ee0 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65   no insert is pe
29ef0 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30  rformed.  argv[0
29f00 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  ] is the rowid o
29f10 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65  f.** a row to de
29f20 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  lete..**.** P1 i
29f30 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67  s a boolean flag
29f40 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74  . If it is set t
29f50 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78  o true and the x
29f60 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69  Update call.** i
29f70 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68  s successful, th
29f80 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74  en the value ret
29f90 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
29fa0 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
29fb0 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20  id() .** is set 
29fc0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
29fd0 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68  the rowid for th
29fe0 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72  e row just inser
29ff0 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ted..*/.case OP_
2a000 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c  VUpdate: {.  sql
2a010 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2a020 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ;.  sqlite3_modu
2a030 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
2a040 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
2a050 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ;.  sqlite_int64
2a060 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a   rowid;.  Mem **
2a070 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58  apArg;.  Mem *pX
2a080 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
2a090 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 70 4d  ->p4.pVtab;.  pM
2a0a0 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33  odule = (sqlite3
2a0b0 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d  _module *)pVtab-
2a0c0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67  >pModule;.  nArg
2a0d0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
2a0e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2a0f0 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20  e==P4_VTAB );.  
2a100 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75  if( ALWAYS(pModu
2a110 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a  le->xUpdate) ){.
2a120 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61      apArg = p->a
2a130 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26  pArg;.    pX = &
2a140 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
2a150 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
2a160 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
2a170 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f     storeTypeInfo
2a180 28 70 58 2c 20 30 29 3b 0a 20 20 20 20 20 20 61  (pX, 0);.      a
2a190 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20  pArg[i] = pX;.  
2a1a0 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a      pX++;.    }.
2a1b0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
2a1c0 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
2a1d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2a1e0 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 73 71 6c  _misuse;.    sql
2a1f0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 70 56 74  ite3VtabLock(pVt
2a200 61 62 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  ab);.    rc = pM
2a210 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70  odule->xUpdate(p
2a220 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72  Vtab, nArg, apAr
2a230 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  g, &rowid);.    
2a240 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2a250 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
2a260 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
2a270 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
2a280 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d      pVtab->zErrM
2a290 73 67 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  sg = 0;.    sqli
2a2a0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62  te3VtabUnlock(db
2a2b0 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
2a2c0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
2a2d0 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  n(db) ) goto abo
2a2e0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
2a2f0 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
2a300 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e  LITE_OK && pOp->
2a310 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  p1 ){.      asse
2a320 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70  rt( nArg>1 && ap
2a330 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67  Arg[0] && (apArg
2a340 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  [0]->flags&MEM_N
2a350 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62  ull) );.      db
2a360 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f  ->lastRowid = ro
2a370 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  wid;.    }.    p
2a380 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d  ->nChange++;.  }
2a390 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2a3a0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2a3b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2a3c0 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49  /..#ifndef  SQLI
2a3d0 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
2a3e0 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  AGMAS./* Opcode:
2a3f0 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32   Pagecount P1 P2
2a400 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
2a410 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e  te the current n
2a420 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
2a430 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  n database P1 to
2a440 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e   memory cell P2.
2a450 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65  .*/.case OP_Page
2a460 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  count: {        
2a470 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
2a480 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
2a490 70 31 3b 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b  p1;.  int nPage;
2a4a0 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
2a4b0 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  ;..  p1 = pOp->p
2a4c0 31 3b 20 0a 20 20 70 50 61 67 65 72 20 3d 20 73  1; .  pPager = s
2a4d0 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
2a4e0 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74  (db->aDb[p1].pBt
2a4f0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2a500 33 50 61 67 65 72 50 61 67 65 63 6f 75 6e 74 28  3PagerPagecount(
2a510 70 50 61 67 65 72 2c 20 26 6e 50 61 67 65 29 3b  pPager, &nPage);
2a520 0a 20 20 2f 2a 20 4f 50 5f 50 61 67 65 63 6f 75  .  /* OP_Pagecou
2a530 6e 74 20 69 73 20 61 6c 77 61 79 73 20 63 61 6c  nt is always cal
2a540 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  led from within 
2a550 61 20 72 65 61 64 20 74 72 61 6e 73 61 63 74 69  a read transacti
2a560 6f 6e 2e 20 20 54 68 65 0a 20 20 2a 2a 20 70 61  on.  The.  ** pa
2a570 67 65 20 63 6f 75 6e 74 20 68 61 73 20 61 6c 72  ge count has alr
2a580 65 61 64 79 20 62 65 65 6e 20 73 75 63 63 65 73  eady been succes
2a590 73 66 75 6c 6c 79 20 72 65 61 64 20 61 6e 64 20  sfully read and 
2a5a0 63 61 63 68 65 64 2e 20 20 53 6f 20 74 68 65 0a  cached.  So the.
2a5b0 20 20 2a 2a 20 73 71 6c 69 74 65 33 50 61 67 65    ** sqlite3Page
2a5c0 72 50 61 67 65 63 6f 75 6e 74 28 29 20 63 61 6c  rPagecount() cal
2a5d0 6c 20 61 62 6f 76 65 20 63 61 6e 6e 6f 74 20 66  l above cannot f
2a5e0 61 69 6c 2e 20 2a 2f 0a 20 20 69 66 28 20 41 4c  ail. */.  if( AL
2a5f0 57 41 59 53 28 72 63 3d 3d 53 51 4c 49 54 45 5f  WAYS(rc==SQLITE_
2a600 4f 4b 29 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  OK) ){.    pOut-
2a610 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
2a620 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
2a630 3d 20 6e 50 61 67 65 3b 0a 20 20 7d 0a 20 20 62  = nPage;.  }.  b
2a640 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
2a650 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a660 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63  MIT_TRACE./* Opc
2a670 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a  ode: Trace * * *
2a680 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74   P4 *.**.** If t
2a690 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65  racing is enable
2a6a0 64 20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65  d (by the sqlite
2a6b0 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65 72  3_trace()) inter
2a6c0 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  face, then.** th
2a6d0 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63  e UTF-8 string c
2a6e0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69  ontained in P4 i
2a6f0 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65  s emitted on the
2a700 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e   trace callback.
2a710 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 63  .*/.case OP_Trac
2a720 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72  e: {.  char *zTr
2a730 61 63 65 3b 0a 0a 20 20 7a 54 72 61 63 65 20 3d  ace;..  zTrace =
2a740 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
2a750 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
2a760 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65  l);.  if( zTrace
2a770 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
2a780 78 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  xTrace ){.      
2a790 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
2a7a0 54 72 61 63 65 41 72 67 2c 20 7a 54 72 61 63 65  TraceArg, zTrace
2a7b0 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20  );.    }.#ifdef 
2a7c0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
2a7d0 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20   if( (db->flags 
2a7e0 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  & SQLITE_SqlTrac
2a7f0 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  e)!=0 ){.      s
2a800 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
2a810 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73  f("SQL-trace: %s
2a820 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  \n", zTrace);.  
2a830 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
2a840 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
2a850 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2a860 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dif.../* Opcode:
2a870 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a   Noop * * * * *.
2a880 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67  **.** Do nothing
2a890 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  .  This instruct
2a8a0 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65  ion is often use
2a8b0 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a  ful as a jump.**
2a8c0 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f   destination..*/
2a8d0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63  ./*.** The magic
2a8e0 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20   Explain opcode 
2a8f0 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65  are only inserte
2a900 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d  d when explain==
2a910 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74  2 (which.** is t
2a920 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45  o say when the E
2a930 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
2a940 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64  N syntax is used
2a950 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  .).** This opcod
2a960 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d  e records inform
2a970 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f  ation from the o
2a980 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73  ptimizer.  It is
2a990 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   the.** the same
2a9a0 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68   as a no-op.  Th
2a9b0 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20  is opcodesnever 
2a9c0 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61  appears in a rea
2a9d0 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f  l VM program..*/
2a9e0 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20  .default: {     
2a9f0 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
2aa00 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61  really OP_Noop a
2aa10 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f  nd OP_Explain */
2aa20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a  .  break;.}../**
2aa30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aa40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aa50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aa60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aa70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54  ***********.** T
2aa80 68 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20  he cases of the 
2aa90 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
2aaa0 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65   above this line
2aab0 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69   should all be i
2aac0 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20  ndented.** by 6 
2aad0 73 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65  spaces.  But the
2aae0 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61   left-most 6 spa
2aaf0 63 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ces have been re
2ab00 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65  moved to improve
2ab10 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c   the.** readabil
2ab20 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20  ity.  From this 
2ab30 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74  point on down, t
2ab40 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  he normal indent
2ab50 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a  ation rules are.
2ab60 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a  ** restored..***
2ab70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2aba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2abb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20  **********/.    
2abc0 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  }..#ifdef VDBE_P
2abd0 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20  ROFILE.    {.   
2abe0 20 20 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d     u64 elapsed =
2abf0 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
2ac00 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20   - start;.      
2ac10 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65  pOp->cycles += e
2ac20 6c 61 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f  lapsed;.      pO
2ac30 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a  p->cnt++;.#if 0.
2ac40 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
2ac50 73 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20  stdout, "%10llu 
2ac60 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20  ", elapsed);.   
2ac70 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2ac80 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
2ac90 6f 72 69 67 50 63 2c 20 26 70 2d 3e 61 4f 70 5b  origPc, &p->aOp[
2aca0 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66  origPc]);.#endif
2acb0 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
2acc0 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77     /* The follow
2acd0 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f  ing code adds no
2ace0 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74  thing to the act
2acf0 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  ual functionalit
2ad00 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  y.    ** of the 
2ad10 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20  program.  It is 
2ad20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65  only here for te
2ad30 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67  sting and debugg
2ad40 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74  ing..    ** On t
2ad50 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69  he other hand, i
2ad60 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20  t does burn CPU 
2ad70 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d  cycles every tim
2ad80 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a  e through.    **
2ad90 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c   the evaluator l
2ada0 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20  oop.  So we can 
2adb0 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65  leave it out whe
2adc0 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69  n NDEBUG is defi
2add0 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e  ned..    */.#ifn
2ade0 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61  def NDEBUG.    a
2adf0 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26  ssert( pc>=-1 &&
2ae00 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23   pc<p->nOp );..#
2ae10 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2ae20 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72  UG.    if( p->tr
2ae30 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ace ){.      if(
2ae40 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74 66   rc!=0 ) fprintf
2ae50 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25 64  (p->trace,"rc=%d
2ae60 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69  \n",rc);.      i
2ae70 66 28 20 6f 70 50 72 6f 70 65 72 74 79 20 26 20  f( opProperty & 
2ae80 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45  OPFLG_OUT2_PRERE
2ae90 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
2aea0 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
2aeb0 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32  ->trace, pOp->p2
2aec0 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d  , pOut);.      }
2aed0 0a 20 20 20 20 20 20 69 66 28 20 6f 70 50 72 6f  .      if( opPro
2aee0 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55  perty & OPFLG_OU
2aef0 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  T3 ){.        re
2af00 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74  gisterTrace(p->t
2af10 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 70  race, pOp->p3, p
2af20 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Out);.      }.  
2af30 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53    }.#endif  /* S
2af40 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23  QLITE_DEBUG */.#
2af50 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47  endif  /* NDEBUG
2af60 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20   */.  }  /* The 
2af70 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b  end of the for(;
2af80 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70  ;) loop the loop
2af90 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65  s through opcode
2afa0 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65  s */..  /* If we
2afb0 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
2afc0 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  t, it means that
2afd0 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69   execution is fi
2afe0 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a  nished with.  **
2aff0 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d   an error of som
2b000 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62  e kind..  */.vdb
2b010 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20  e_error_halt:.  
2b020 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20  assert( rc );.  
2b030 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
2b040 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
2b050 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2b060 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
2b070 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
2b080 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51  d = 1;.  rc = SQ
2b090 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f  LITE_ERROR;..  /
2b0a0 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * This is the on
2b0b0 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68  ly way out of th
2b0c0 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57  is procedure.  W
2b0d0 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72  e have to.  ** r
2b0e0 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78  elease the mutex
2b0f0 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61  es on btrees tha
2b100 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20  t were acquired 
2b110 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e  at the.  ** top.
2b120 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a   */.vdbe_return:
2b130 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d  .  sqlite3BtreeM
2b140 75 74 65 78 41 72 72 61 79 4c 65 61 76 65 28 26  utexArrayLeave(&
2b150 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20 20 72 65  p->aMutex);.  re
2b160 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a  turn rc;..  /* J
2b170 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
2b180 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
2b190 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49  larger than SQLI
2b1a0 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20  TE_MAX_LENGTH.  
2b1b0 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  ** is encountere
2b1c0 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a  d..  */.too_big:
2b1d0 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
2b1e0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2b1f0 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20   db, "string or 
2b200 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a  blob too big");.
2b210 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f    rc = SQLITE_TO
2b220 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OBIG;.  goto vdb
2b230 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
2b240 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2b250 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
2b260 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65  ails..  */.no_me
2b270 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  m:.  db->mallocF
2b280 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c  ailed = 1;.  sql
2b290 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2b2a0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2b2b0 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b  out of memory");
2b2c0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  .  rc = SQLITE_N
2b2d0 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OMEM;.  goto vdb
2b2e0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
2b2f0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2b300 20 66 6f 72 20 61 6e 20 53 51 4c 49 54 45 5f 4d   for an SQLITE_M
2b310 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 20 20 2a  ISUSE error..  *
2b320 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  /.abort_due_to_m
2b330 69 73 75 73 65 3a 0a 20 20 72 63 20 3d 20 53 51  isuse:.  rc = SQ
2b340 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 2f  LITE_MISUSE;.  /
2b350 2a 20 46 61 6c 6c 20 74 68 72 75 20 69 6e 74 6f  * Fall thru into
2b360 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b370 72 6f 72 20 2a 2f 0a 0a 20 20 2f 2a 20 4a 75 6d  ror */..  /* Jum
2b380 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e  p to here for an
2b390 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20  y other kind of 
2b3a0 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68  fatal error.  Th
2b3b0 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a  e "rc" variable.
2b3c0 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64    ** should hold
2b3d0 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65   the error numbe
2b3e0 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75  r..  */.abort_du
2b3f0 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73  e_to_error:.  as
2b400 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67  sert( p->zErrMsg
2b410 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d  ==0 );.  if( db-
2b420 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
2b430 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
2b440 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  M;.  if( rc!=SQL
2b450 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20  ITE_IOERR_NOMEM 
2b460 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
2b470 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2b480 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
2b490 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
2b4a0 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  );.  }.  goto vd
2b4b0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
2b4c0 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
2b4d0 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33  e if the sqlite3
2b4e0 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49  _interrupt() API
2b4f0 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72   sets the interr
2b500 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20  upt.  ** flag.. 
2b510 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
2b520 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73  _interrupt:.  as
2b530 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49  sert( db->u1.isI
2b540 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20  nterrupted );.  
2b550 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
2b560 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d  RRUPT;.  p->rc =
2b570 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65   rc;.  sqlite3Se
2b580 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2b590 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
2b5a0 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
2b5b0 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  );.  goto vdbe_e
2b5c0 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a           rror_halt;.}.