/ Hex Artifact Content
Login

Artifact 1507638139808e854fd58b9112d65221244040d6:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 76 64 62  ..**.** $Id: vdb
0840: 65 2e 63 2c 76 20 31 2e 38 35 39 20 32 30 30 39  e.c,v 1.859 2009
0850: 2f 30 36 2f 32 32 20 31 31 3a 31 30 3a 34 38 20  /06/22 11:10:48 
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 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
10080 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 3b  ->pseudoTable );
10090 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f  .    /* The reco
100a0 72 64 20 69 73 20 74 68 65 20 73 6f 6c 65 20 65  rd is the sole e
100b0 6e 74 72 79 20 6f 66 20 61 20 70 73 65 75 64 6f  ntry of a pseudo
100c0 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 70 61  -table */.    pa
100d0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
100e0 6e 44 61 74 61 3b 0a 20 20 20 20 7a 52 65 63 20  nData;.    zRec 
100f0 3d 20 70 43 2d 3e 70 44 61 74 61 3b 0a 20 20 20  = pC->pData;.   
10100 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
10110 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
10120 20 20 20 20 61 73 73 65 72 74 28 20 70 61 79 6c      assert( payl
10130 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52  oadSize==0 || zR
10140 65 63 21 3d 30 20 29 3b 0a 20 20 20 20 6e 46 69  ec!=0 );.    nFi
10150 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64  eld = pC->nField
10160 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b  ;.    pCrsr = 0;
10170 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61  .  }..  /* If pa
10180 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20  yloadSize is 0, 
10190 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20  then just store 
101a0 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20  a NULL */.  if( 
101b0 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29  payloadSize==0 )
101c0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
101d0 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  est->flags&MEM_N
101e0 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ull );.    goto 
101f0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
10200 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d   }.  assert( db-
10210 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
10220 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20  IMIT_LENGTH]>=0 
10230 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64  );.  if( payload
10240 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
10250 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
10260 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
10270 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
10280 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
10290 70 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20  p2<nField );..  
102a0 2f 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73  /* Read and pars
102b0 65 20 74 68 65 20 74 61 62 6c 65 20 68 65 61 64  e the table head
102c0 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 20 72  er.  Store the r
102d0 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 70 61  esults of the pa
102e0 72 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68  rse.  ** into th
102f0 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
10300 63 61 63 68 65 20 66 69 65 6c 64 73 20 6f 66 20  cache fields of 
10310 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f  the cursor..  */
10320 0a 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61  .  aType = pC->a
10330 54 79 70 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e  Type;.  if( pC->
10340 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e  cacheStatus==p->
10350 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20  cacheCtr ){.    
10360 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f  aOffset = pC->aO
10370 66 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ffset;.  }else{.
10380 20 20 20 20 61 73 73 65 72 74 28 61 54 79 70 65      assert(aType
10390 29 3b 0a 20 20 20 20 61 76 61 69 6c 20 3d 20 30  );.    avail = 0
103a0 3b 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66 73 65  ;.    pC->aOffse
103b0 74 20 3d 20 61 4f 66 66 73 65 74 20 3d 20 26 61  t = aOffset = &a
103c0 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  Type[nField];.  
103d0 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a    pC->payloadSiz
103e0 65 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b  e = payloadSize;
103f0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
10400 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43  atus = p->cacheC
10410 74 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75  tr;..    /* Figu
10420 72 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20  re out how many 
10430 62 79 74 65 73 20 61 72 65 20 69 6e 20 74 68 65  bytes are in the
10440 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 69   header */.    i
10450 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20  f( zRec ){.     
10460 20 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20   zData = zRec;. 
10470 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
10480 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  if( pC->isIndex 
10490 29 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  ){.        zData
104a0 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
104b0 33 42 74 72 65 65 4b 65 79 46 65 74 63 68 28 70  3BtreeKeyFetch(p
104c0 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
104d0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
104e0 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61      zData = (cha
104f0 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 44  r*)sqlite3BtreeD
10500 61 74 61 46 65 74 63 68 28 70 43 72 73 72 2c 20  ataFetch(pCrsr, 
10510 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d  &avail);.      }
10520 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 4b 65 79  .      /* If Key
10530 46 65 74 63 68 28 29 2f 44 61 74 61 46 65 74 63  Fetch()/DataFetc
10540 68 28 29 20 6d 61 6e 61 67 65 64 20 74 6f 20 67  h() managed to g
10550 65 74 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  et the entire pa
10560 79 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20  yload,.      ** 
10570 73 61 76 65 20 74 68 65 20 70 61 79 6c 6f 61 64  save the payload
10580 20 69 6e 20 74 68 65 20 70 43 2d 3e 61 52 6f 77   in the pC->aRow
10590 20 63 61 63 68 65 2e 20 20 54 68 61 74 20 77 69   cache.  That wi
105a0 6c 6c 20 73 61 76 65 20 75 73 20 66 72 6f 6d 0a  ll save us from.
105b0 20 20 20 20 20 20 2a 2a 20 68 61 76 69 6e 67 20        ** having 
105c0 74 6f 20 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e  to make addition
105d0 61 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65 74 63  al calls to fetc
105e0 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f  h the content po
105f0 72 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a  rtion of.      *
10600 2a 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  * the record..  
10610 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
10620 65 72 74 28 20 61 76 61 69 6c 3e 3d 30 20 29 3b  ert( avail>=0 );
10630 0a 20 20 20 20 20 20 69 66 28 20 70 61 79 6c 6f  .      if( paylo
10640 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61  adSize <= (u32)a
10650 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  vail ){.        
10660 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20  zRec = zData;.  
10670 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
10680 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20   (u8*)zData;.   
10690 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
106a0 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
106b0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
106c0 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
106d0 6e 67 20 61 73 73 65 72 74 20 69 73 20 74 72 75  ng assert is tru
106e0 65 20 69 6e 20 61 6c 6c 20 63 61 73 65 73 20 61  e in all cases a
106f0 63 63 65 70 74 20 77 68 65 6e 0a 20 20 20 20 2a  ccept when.    *
10700 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  * the database f
10710 69 6c 65 20 68 61 73 20 62 65 65 6e 20 63 6f 72  ile has been cor
10720 72 75 70 74 65 64 20 65 78 74 65 72 6e 61 6c 6c  rupted externall
10730 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61 73 73  y..    **    ass
10740 65 72 74 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20  ert( zRec!=0 || 
10750 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69  avail>=payloadSi
10760 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29  ze || avail>=9 )
10770 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72 20 3d  ; */.    szHdr =
10780 20 67 65 74 56 61 72 69 6e 74 33 32 28 28 75 38   getVarint32((u8
10790 2a 29 7a 44 61 74 61 2c 20 6f 66 66 73 65 74 29  *)zData, offset)
107a0 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  ;..    /* Make s
107b0 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61  ure a corrupt da
107c0 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67  tabase has not g
107d0 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73  iven us an overs
107e0 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20  ize header..    
107f0 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74  ** Do this now t
10800 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73  o avoid an overs
10810 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ize memory alloc
10820 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20  ation..    **.  
10830 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65    ** Type entrie
10840 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e  s can be between
10850 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65   1 and 5 bytes e
10860 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20  ach.  But 4 and 
10870 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79  5 byte.    ** ty
10880 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20  pes use so much 
10890 64 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20  data space that 
108a0 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  there can only b
108b0 65 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66  e 4096 and 32 of
108c0 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65  .    ** them, re
108d0 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20  spectively.  So 
108e0 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64  the maximum head
108f0 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74  er length result
10900 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20  s from a.    ** 
10910 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20  3-byte type for 
10920 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69  each of the maxi
10930 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c  mum of 32768 col
10940 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a  umns plus three.
10950 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74      ** extra byt
10960 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65  es for the heade
10970 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e  r length itself.
10980 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20    32768*3 + 3 = 
10990 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20  98307..    */.  
109a0 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39    if( offset > 9
109b0 38 33 30 37 20 29 7b 0a 20 20 20 20 20 20 72 63  8307 ){.      rc
109c0 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
109d0 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f  T_BKPT;.      go
109e0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
109f0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
10a00 43 6f 6d 70 75 74 65 20 69 6e 20 6c 65 6e 20 74  Compute in len t
10a10 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
10a20 65 73 20 6f 66 20 64 61 74 61 20 77 65 20 6e 65  es of data we ne
10a30 65 64 20 74 6f 20 72 65 61 64 20 69 6e 20 6f 72  ed to read in or
10a40 64 65 72 0a 20 20 20 20 2a 2a 20 74 6f 20 67 65  der.    ** to ge
10a50 74 20 6e 46 69 65 6c 64 20 74 79 70 65 20 76 61  t nField type va
10a60 6c 75 65 73 2e 20 20 6f 66 66 73 65 74 20 69 73  lues.  offset is
10a70 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20   an upper bound 
10a80 6f 6e 20 74 68 69 73 2e 20 20 42 75 74 0a 20 20  on this.  But.  
10a90 20 20 2a 2a 20 6e 46 69 65 6c 64 20 6d 69 67 68    ** nField migh
10aa0 74 20 62 65 20 73 69 67 6e 69 66 69 63 61 6e 74  t be significant
10ab0 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  ly less than the
10ac0 20 74 72 75 65 20 6e 75 6d 62 65 72 20 6f 66 20   true number of 
10ad0 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a 20 69  columns.    ** i
10ae0 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 61 6e 64  n the table, and
10af0 20 69 6e 20 74 68 61 74 20 63 61 73 65 2c 20 35   in that case, 5
10b00 2a 6e 46 69 65 6c 64 2b 33 20 6d 69 67 68 74 20  *nField+3 might 
10b10 62 65 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20  be smaller than 
10b20 6f 66 66 73 65 74 2e 0a 20 20 20 20 2a 2a 20 57  offset..    ** W
10b30 65 20 77 61 6e 74 20 74 6f 20 6d 69 6e 69 6d 69  e want to minimi
10b40 7a 65 20 6c 65 6e 20 69 6e 20 6f 72 64 65 72 20  ze len in order 
10b50 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a  to limit the siz
10b60 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 0a  e of the memory.
10b70 20 20 20 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f      ** allocatio
10b80 6e 2c 20 65 73 70 65 63 69 61 6c 6c 79 20 69 66  n, especially if
10b90 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
10ba0 61 73 65 20 66 69 6c 65 20 68 61 73 20 63 61 75  ase file has cau
10bb0 73 65 64 20 6f 66 66 73 65 74 0a 20 20 20 20 2a  sed offset.    *
10bc0 2a 20 74 6f 20 62 65 20 6f 76 65 72 73 69 7a 65  * to be oversize
10bd0 64 2e 20 4f 66 66 73 65 74 20 69 73 20 6c 69 6d  d. Offset is lim
10be0 69 74 65 64 20 74 6f 20 39 38 33 30 37 20 61 62  ited to 98307 ab
10bf0 6f 76 65 2e 20 20 42 75 74 20 39 38 33 30 37 20  ove.  But 98307 
10c00 6d 69 67 68 74 0a 20 20 20 20 2a 2a 20 73 74 69  might.    ** sti
10c10 6c 6c 20 65 78 63 65 65 64 20 52 6f 62 73 6f 6e  ll exceed Robson
10c20 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
10c30 6f 6e 20 6c 69 6d 69 74 73 20 6f 6e 20 73 6f 6d  on limits on som
10c40 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  e configurations
10c50 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 73 79 73 74  ..    ** On syst
10c60 65 6d 73 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  ems that cannot 
10c70 74 6f 6c 65 72 61 74 65 20 6c 61 72 67 65 20 6d  tolerate large m
10c80 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
10c90 73 2c 20 6e 46 69 65 6c 64 2a 35 2b 33 0a 20 20  s, nField*5+3.  
10ca0 20 20 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65 6c 79    ** will likely
10cb0 20 62 65 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72   be much smaller
10cc0 20 73 69 6e 63 65 20 6e 46 69 65 6c 64 20 77 69   since nField wi
10cd0 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6c 65 73  ll likely be les
10ce0 73 20 74 68 61 6e 0a 20 20 20 20 2a 2a 20 32 30  s than.    ** 20
10cf0 20 6f 72 20 73 6f 2e 20 20 54 68 69 73 20 69 6e   or so.  This in
10d00 73 75 72 65 73 20 74 68 61 74 20 52 6f 62 73 6f  sures that Robso
10d10 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  n memory allocat
10d20 69 6f 6e 20 6c 69 6d 69 74 73 20 61 72 65 0a 20  ion limits are. 
10d30 20 20 20 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64     ** not exceed
10d40 65 64 20 65 76 65 6e 20 66 6f 72 20 63 6f 72 72  ed even for corr
10d50 75 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c  upt database fil
10d60 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6c  es..    */.    l
10d70 65 6e 20 3d 20 6e 46 69 65 6c 64 2a 35 20 2b 20  en = nField*5 + 
10d80 33 3b 0a 20 20 20 20 69 66 28 20 6c 65 6e 20 3e  3;.    if( len >
10d90 20 28 69 6e 74 29 6f 66 66 73 65 74 20 29 20 6c   (int)offset ) l
10da0 65 6e 20 3d 20 28 69 6e 74 29 6f 66 66 73 65 74  en = (int)offset
10db0 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 4b 65  ;..    /* The Ke
10dc0 79 46 65 74 63 68 28 29 20 6f 72 20 44 61 74 61  yFetch() or Data
10dd0 46 65 74 63 68 28 29 20 61 62 6f 76 65 20 61 72  Fetch() above ar
10de0 65 20 66 61 73 74 20 61 6e 64 20 77 69 6c 6c 20  e fast and will 
10df0 67 65 74 20 74 68 65 20 65 6e 74 69 72 65 0a 20  get the entire. 
10e00 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61     ** record hea
10e10 64 65 72 20 69 6e 20 6d 6f 73 74 20 63 61 73 65  der in most case
10e20 73 2e 20 20 42 75 74 20 74 68 65 79 20 77 69 6c  s.  But they wil
10e30 6c 20 66 61 69 6c 20 74 6f 20 67 65 74 20 74 68  l fail to get th
10e40 65 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20 20 2a  e complete.    *
10e50 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  * record header 
10e60 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  if the record he
10e70 61 64 65 72 20 64 6f 65 73 20 6e 6f 74 20 66 69  ader does not fi
10e80 74 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 70 61  t on a single pa
10e90 67 65 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68 65  ge.    ** in the
10ea0 20 42 2d 54 72 65 65 2e 20 20 57 68 65 6e 20 74   B-Tree.  When t
10eb0 68 61 74 20 68 61 70 70 65 6e 73 2c 20 75 73 65  hat happens, use
10ec0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
10ed0 72 6f 6d 42 74 72 65 65 28 29 20 74 6f 0a 20 20  romBtree() to.  
10ee0 20 20 2a 2a 20 61 63 71 75 69 72 65 20 74 68 65    ** acquire the
10ef0 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72   complete header
10f00 20 74 65 78 74 2e 0a 20 20 20 20 2a 2f 0a 20 20   text..    */.  
10f10 20 20 69 66 28 20 21 7a 52 65 63 20 26 26 20 61    if( !zRec && a
10f20 76 61 69 6c 3c 6c 65 6e 20 29 7b 0a 20 20 20 20  vail<len ){.    
10f30 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 30    sMem.flags = 0
10f40 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 64 62 20  ;.      sMem.db 
10f50 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
10f60 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
10f70 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30  omBtree(pCrsr, 0
10f80 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64  , len, pC->isInd
10f90 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ex, &sMem);.    
10fa0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
10fb0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
10fc0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
10fd0 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
10fe0 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b   zData = sMem.z;
10ff0 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48  .    }.    zEndH
11000 64 72 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74  dr = (u8 *)&zDat
11010 61 5b 6c 65 6e 5d 3b 0a 20 20 20 20 7a 49 64 78  a[len];.    zIdx
11020 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b   = (u8 *)&zData[
11030 73 7a 48 64 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20  szHdr];..    /* 
11040 53 63 61 6e 20 74 68 65 20 68 65 61 64 65 72 20  Scan the header 
11050 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 66 69  and use it to fi
11060 6c 6c 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b  ll in the aType[
11070 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a  ] and aOffset[].
11080 20 20 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20      ** arrays.  
11090 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f  aType[i] will co
110a0 6e 74 61 69 6e 20 74 68 65 20 74 79 70 65 20 69  ntain the type i
110b0 6e 74 65 67 65 72 20 66 6f 72 20 74 68 65 20 69  nteger for the i
110c0 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d  -th.    ** colum
110d0 6e 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d  n and aOffset[i]
110e0 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68   will contain th
110f0 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
11100 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20  e beginning.    
11110 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
11120 20 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66   to the start of
11130 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
11140 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20  e i-th column.  
11150 20 20 2a 2f 0a 20 20 20 20 6f 66 66 73 65 74 36    */.    offset6
11160 34 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20  4 = offset;.    
11170 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69 65 6c  for(i=0; i<nFiel
11180 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  d; i++){.      i
11190 66 28 20 7a 49 64 78 3c 7a 45 6e 64 48 64 72 20  f( zIdx<zEndHdr 
111a0 29 7b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73  ){.        aOffs
111b0 65 74 5b 69 5d 20 3d 20 28 75 33 32 29 6f 66 66  et[i] = (u32)off
111c0 73 65 74 36 34 3b 0a 20 20 20 20 20 20 20 20 7a  set64;.        z
111d0 49 64 78 20 2b 3d 20 67 65 74 56 61 72 69 6e 74  Idx += getVarint
111e0 33 32 28 7a 49 64 78 2c 20 61 54 79 70 65 5b 69  32(zIdx, aType[i
111f0 5d 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73  ]);.        offs
11200 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56  et64 += sqlite3V
11210 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
11220 28 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20  (aType[i]);.    
11230 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
11240 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65 73 73   /* If i is less
11250 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20 74 68   that nField, th
11260 65 6e 20 74 68 65 72 65 20 61 72 65 20 6c 65 73  en there are les
11270 73 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73  s fields in this
11280 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65 63 6f  .        ** reco
11290 72 64 20 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f  rd than SetNumCo
112a0 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74 65 64 20  lumns indicated 
112b0 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e  there are column
112c0 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
112d0 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74 20 74   ** table. Set t
112e0 68 65 20 6f 66 66 73 65 74 20 66 6f 72 20 61 6e  he offset for an
112f0 79 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20  y extra columns 
11300 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 0a 20  not present in. 
11310 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65         ** the re
11320 63 6f 72 64 20 74 6f 20 30 2e 20 54 68 69 73 20  cord to 0. This 
11330 74 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77  tells code below
11340 20 74 6f 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c   to store a NULL
11350 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 73 74  .        ** inst
11360 65 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69  ead of deseriali
11370 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f  zing a value fro
11380 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  m the record..  
11390 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
113a0 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b   aOffset[i] = 0;
113b0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
113c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
113d0 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
113e0 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20  .    sMem.flags 
113f0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20  = MEM_Null;..   
11400 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72   /* If we have r
11410 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20  ead more header 
11420 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f  data than was co
11430 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68  ntained in the h
11440 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72  eader,.    ** or
11450 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
11460 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
11470 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74  pears to be past
11480 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
11490 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f      ** record, o
114a0 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
114b0 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
114c0 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66  ppears to be bef
114d0 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20  ore the end.    
114e0 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
114f0 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64   (when all field
11500 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e  s present), then
11510 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c   we must be deal
11520 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68  ing .    ** with
11530 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
11540 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ase..    */.    
11550 69 66 28 20 28 7a 49 64 78 20 3e 20 7a 45 6e 64  if( (zIdx > zEnd
11560 48 64 72 29 7c 7c 20 28 6f 66 66 73 65 74 36 34  Hdr)|| (offset64
11570 20 3e 20 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a   > payloadSize).
11580 20 20 20 20 20 7c 7c 20 28 7a 49 64 78 3d 3d 7a       || (zIdx==z
11590 45 6e 64 48 64 72 20 26 26 20 6f 66 66 73 65 74  EndHdr && offset
115a0 36 34 21 3d 28 75 36 34 29 70 61 79 6c 6f 61 64  64!=(u64)payload
115b0 53 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 72  Size) ){.      r
115c0 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
115d0 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67  PT_BKPT;.      g
115e0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
115f0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  t;.    }.  }..  
11600 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d  /* Get the colum
11610 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 49  n information. I
11620 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73  f aOffset[p2] is
11630 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
11640 0a 20 20 2a 2a 20 64 65 73 65 72 69 61 6c 69 7a  .  ** deserializ
11650 65 20 74 68 65 20 76 61 6c 75 65 20 66 72 6f 6d  e the value from
11660 20 74 68 65 20 72 65 63 6f 72 64 2e 20 49 66 20   the record. If 
11670 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20 7a  aOffset[p2] is z
11680 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20 74  ero,.  ** then t
11690 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f  here are not eno
116a0 75 67 68 20 66 69 65 6c 64 73 20 69 6e 20 74 68  ugh fields in th
116b0 65 20 72 65 63 6f 72 64 20 74 6f 20 73 61 74 69  e record to sati
116c0 73 66 79 20 74 68 65 0a 20 20 2a 2a 20 72 65 71  sfy the.  ** req
116d0 75 65 73 74 2e 20 20 49 6e 20 74 68 69 73 20 63  uest.  In this c
116e0 61 73 65 2c 20 73 65 74 20 74 68 65 20 76 61 6c  ase, set the val
116f0 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50 34  ue NULL or to P4
11700 20 69 66 20 50 34 20 69 73 0a 20 20 2a 2a 20 61   if P4 is.  ** a
11710 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65   pointer to a Me
11720 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20  m object..  */. 
11730 20 69 66 28 20 61 4f 66 66 73 65 74 5b 70 32 5d   if( aOffset[p2]
11740 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
11750 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
11760 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b  .    if( zRec ){
11770 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
11780 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65  beMemReleaseExte
11790 72 6e 61 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  rnal(pDest);.   
117a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
117b0 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29 26 7a  rialGet((u8 *)&z
117c0 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d  Rec[aOffset[p2]]
117d0 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65  , aType[p2], pDe
117e0 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  st);.    }else{.
117f0 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69        len = sqli
11800 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
11810 65 4c 65 6e 28 61 54 79 70 65 5b 70 32 5d 29 3b  eLen(aType[p2]);
11820 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
11830 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c  beMemMove(&sMem,
11840 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72   pDest);.      r
11850 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
11860 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
11870 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20  r, aOffset[p2], 
11880 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78  len, pC->isIndex
11890 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20  , &sMem);.      
118a0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
118b0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
118c0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
118d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
118e0 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20  Data = sMem.z;. 
118f0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11900 53 65 72 69 61 6c 47 65 74 28 28 75 38 2a 29 7a  SerialGet((u8*)z
11910 44 61 74 61 2c 20 61 54 79 70 65 5b 70 32 5d 2c  Data, aType[p2],
11920 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 0a 20   pDest);.    }. 
11930 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
11940 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c 73  encoding;.  }els
11950 65 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  e{.    if( pOp->
11960 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29  p4type==P4_MEM )
11970 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
11980 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
11990 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
119a0 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
119b0 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  c);.    }else{. 
119c0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 44 65       assert( pDe
119d0 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  st->flags&MEM_Nu
119e0 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ll );.    }.  }.
119f0 0a 20 20 2f 2a 20 49 66 20 77 65 20 64 79 6e 61  .  /* If we dyna
11a00 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
11a10 64 20 73 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  d space to hold 
11a20 74 68 65 20 64 61 74 61 20 28 69 6e 20 74 68 65  the data (in the
11a30 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
11a40 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20  eMemFromBtree() 
11a50 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68 65 6e  call above) then
11a60 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f   transfer contro
11a70 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a 2a 20 64  l of that.  ** d
11a80 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
11a90 61 74 65 64 20 73 70 61 63 65 20 6f 76 65 72 20  ated space over 
11aa0 74 6f 20 74 68 65 20 70 44 65 73 74 20 73 74 72  to the pDest str
11ab0 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20 54 68 69  ucture..  ** Thi
11ac0 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d  s prevents a mem
11ad0 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20  ory copy..  */. 
11ae0 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f   if( sMem.zMallo
11af0 63 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  c ){.    assert(
11b00 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d   sMem.z==sMem.zM
11b10 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 61 73 73  alloc );.    ass
11b20 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c  ert( !(pDest->fl
11b30 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  ags & MEM_Dyn) )
11b40 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28  ;.    assert( !(
11b50 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28  pDest->flags & (
11b60 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
11b70 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d  )) || pDest->z==
11b80 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 70 44  sMem.z );.    pD
11b90 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  est->flags &= ~(
11ba0 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74  MEM_Ephem|MEM_St
11bb0 61 74 69 63 29 3b 0a 20 20 20 20 70 44 65 73 74  atic);.    pDest
11bc0 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
11bd0 65 72 6d 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  erm;.    pDest->
11be0 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  z = sMem.z;.    
11bf0 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d  pDest->zMalloc =
11c00 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20   sMem.zMalloc;. 
11c10 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   }..  rc = sqlit
11c20 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69  e3VdbeMemMakeWri
11c30 74 65 61 62 6c 65 28 70 44 65 73 74 29 3b 0a 0a  teable(pDest);..
11c40 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20  op_column_out:. 
11c50 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
11c60 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52  SIZE(pDest);.  R
11c70 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
11c80 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20  p->p3, pDest);. 
11c90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11ca0 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50  code: Affinity P
11cb0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
11cc0 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69  * Apply affiniti
11cd0 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66  es to a range of
11ce0 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74   P2 registers st
11cf0 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a  arting with P1..
11d00 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74  **.** P4 is a st
11d10 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
11d20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
11d30 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74   The nth charact
11d40 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
11d50 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
11d60 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
11d70 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
11d80 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74   used for the nt
11d90 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  h.** memory cell
11da0 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a   in the range..*
11db0 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69  /.case OP_Affini
11dc0 74 79 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 41  ty: {.  char *zA
11dd0 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68  ffinity;   /* Th
11de0 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
11df0 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 4d 65   applied */.  Me
11e00 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20  m *pData0;      
11e10 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74   /* First regist
11e20 65 72 20 74 6f 20 77 68 69 63 68 20 74 6f 20 61  er to which to a
11e30 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 2a 2f  pply affinity */
11e40 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20  .  Mem *pLast;  
11e50 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 72 65        /* Last re
11e60 67 69 73 74 65 72 20 74 6f 20 77 68 69 63 68 20  gister to which 
11e70 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
11e80 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63  y */.  Mem *pRec
11e90 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
11ea0 72 65 6e 74 20 72 65 67 69 73 74 65 72 20 2a 2f  rent register */
11eb0 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ..  zAffinity = 
11ec0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 44 61  pOp->p4.z;.  pDa
11ed0 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ta0 = &p->aMem[p
11ee0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4c 61 73 74  Op->p1];.  pLast
11ef0 20 3d 20 26 70 44 61 74 61 30 5b 70 4f 70 2d 3e   = &pData0[pOp->
11f00 70 32 2d 31 5d 3b 0a 20 20 66 6f 72 28 70 52 65  p2-1];.  for(pRe
11f10 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d  c=pData0; pRec<=
11f20 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a  pLast; pRec++){.
11f30 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70      ExpandBlob(p
11f40 52 65 63 29 3b 0a 20 20 20 20 61 70 70 6c 79 41  Rec);.    applyA
11f50 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41  ffinity(pRec, zA
11f60 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61  ffinity[pRec-pDa
11f70 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ta0], encoding);
11f80 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
11f90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65  ./* Opcode: Make
11fa0 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20  Record P1 P2 P3 
11fb0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65  P4 *.**.** Conve
11fc0 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20  rt P2 registers 
11fd0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
11fe0 31 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 20  1 into a single 
11ff0 65 6e 74 72 79 0a 2a 2a 20 73 75 69 74 61 62 6c  entry.** suitabl
12000 65 20 66 6f 72 20 75 73 65 20 61 73 20 61 20 64  e for use as a d
12010 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
12020 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
12030 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
12040 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
12050 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20 66  details of the f
12060 6f 72 6d 61 74 20 61 72 65 20 69 72 72 65 6c 65  ormat are irrele
12070 76 61 6e 74 20 61 73 20 6c 6f 6e 67 20 61 73 0a  vant as long as.
12080 2a 2a 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ** the OP_Column
12090 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f   opcode can deco
120a0 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61  de the record la
120b0 74 65 72 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f  ter..** Refer to
120c0 20 73 6f 75 72 63 65 20 63 6f 64 65 20 63 6f 6d   source code com
120d0 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20 64 65  ments for the de
120e0 74 61 69 6c 73 20 6f 66 20 74 68 65 20 72 65 63  tails of the rec
120f0 6f 72 64 0a 2a 2a 20 66 6f 72 6d 61 74 2e 0a 2a  ord.** format..*
12100 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
12110 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
12120 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
12130 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61  ng.  The nth cha
12140 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
12150 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
12160 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
12170 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
12180 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
12190 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f  e nth.** field o
121a0 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  f the index key.
121b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69  .**.** The mappi
121c0 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65  ng from characte
121d0 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73  r to affinity is
121e0 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51   given by the SQ
121f0 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63  LITE_AFF_.** mac
12200 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73  ros defined in s
12210 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a  qliteInt.h..**.*
12220 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20  * If P4 is NULL 
12230 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66  then all index f
12240 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61  ields have the a
12250 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f  ffinity NONE..*/
12260 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63  .case OP_MakeRec
12270 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65  ord: {.  u8 *zNe
12280 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20  wRecord;        
12290 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68  /* A buffer to h
122a0 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72  old the data for
122b0 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   the new record 
122c0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20  */.  Mem *pRec; 
122d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
122e0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f  he new record */
122f0 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20  .  u64 nData;   
12300 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
12310 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
12320 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
12330 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20  int nHdr;       
12340 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12350 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
12360 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  der space */.  i
12370 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  64 nByte;       
12380 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70        /* Data sp
12390 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
123a0 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a   this record */.
123b0 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20    int nZero;    
123c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
123d0 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
123e0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
123f0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
12400 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20  nt nVarint;     
12410 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
12420 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61  of bytes in a va
12430 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65  rint */.  u32 se
12440 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20  rial_type;      
12450 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a   /* Type field *
12460 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b  /.  Mem *pData0;
12470 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
12480 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20  rst field to be 
12490 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68  combined into th
124a0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65  e record */.  Me
124b0 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20  m *pLast;       
124c0 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65       /* Last fie
124d0 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ld of the record
124e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
124f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12500 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
12510 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
12520 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  /.  char *zAffin
12530 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  ity;       /* Th
12540 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e  e affinity strin
12550 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  g for the record
12560 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66   */.  int file_f
12570 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20  ormat;       /* 
12580 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75  File format to u
12590 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20  se for encoding 
125a0 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
125b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
125c0 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
125d0 77 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20 69  wRecord[] */.  i
125e0 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
125f0 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
12600 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20  of a field */.. 
12610 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65   /* Assuming the
12620 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
12630 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72   N fields, the r
12640 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f  ecord format loo
12650 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69  ks.  ** like thi
12660 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d  s:.  **.  ** ---
12670 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12680 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12690 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126b0 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72  -----.  ** | hdr
126c0 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c  -size | type 0 |
126d0 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20   type 1 | ... | 
126e0 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30  type N-1 | data0
126f0 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d   | ... | data N-
12700 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d  1 | .  ** ------
12710 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12720 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12730 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12740 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12750 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74  --.  **.  ** Dat
12760 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72  a(0) is taken fr
12770 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  om register P1. 
12780 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66   Data(1) comes f
12790 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b  rom register P1+
127a0 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72  1.  ** and so fr
127b0 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45  oth..  **.  ** E
127c0 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69  ach type field i
127d0 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65  s a varint repre
127e0 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69  senting the seri
127f0 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a  al type of the .
12800 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69    ** correspondi
12810 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20  ng data element 
12820 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65  (see sqlite3Vdbe
12830 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54  SerialType()). T
12840 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65  he.  ** hdr-size
12850 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61   field is also a
12860 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
12870 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
12880 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
12890 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
128a0 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f  d to data0..  */
128b0 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20  .  nData = 0;   
128c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
128d0 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
128e0 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72   space */.  nHdr
128f0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
12900 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
12910 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
12920 65 20 2a 2f 0a 20 20 6e 42 79 74 65 20 3d 20 30  e */.  nByte = 0
12930 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74  ;         /* Dat
12940 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  a space required
12950 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64   for this record
12960 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b   */.  nZero = 0;
12970 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12980 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73  er of zero bytes
12990 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
129a0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e  he record */.  n
129b0 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b  Field = pOp->p1;
129c0 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
129d0 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
129e0 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20  rt( nField>0 && 
129f0 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
12a00 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d 3e  ->p2+nField<=p->
12a10 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70 44 61 74  nMem+1 );.  pDat
12a20 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 6e 46  a0 = &p->aMem[nF
12a30 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20  ield];.  nField 
12a40 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61  = pOp->p2;.  pLa
12a50 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69  st = &pData0[nFi
12a60 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66  eld-1];.  file_f
12a70 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72  ormat = p->minWr
12a80 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a  iteFileFormat;..
12a90 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67    /* Loop throug
12aa0 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74  h the elements t
12ab0 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70  hat will make up
12ac0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66   the record to f
12ad0 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68  igure.  ** out h
12ae0 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73  ow much space is
12af0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
12b00 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20  e new record..  
12b10 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44  */.  for(pRec=pD
12b20 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73  ata0; pRec<=pLas
12b30 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20  t; pRec++){.    
12b40 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b  if( zAffinity ){
12b50 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
12b60 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69  nity(pRec, zAffi
12b70 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30  nity[pRec-pData0
12b80 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ], encoding);.  
12b90 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65 63    }.    if( pRec
12ba0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f  ->flags&MEM_Zero
12bb0 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29 7b   && pRec->n>0 ){
12bc0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
12bd0 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
12be0 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20  pRec);.    }.   
12bf0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
12c00 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
12c10 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
12c20 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e  format);.    len
12c30 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
12c40 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69  rialTypeLen(seri
12c50 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e 44  al_type);.    nD
12c60 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20  ata += len;.    
12c70 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 56  nHdr += sqlite3V
12c80 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
12c90 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70  type);.    if( p
12ca0 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
12cb0 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 2f  _Zero ){.      /
12cc0 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72 6f  * Only pure zero
12cd0 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63 61  -filled BLOBs ca
12ce0 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74 68  n be input to th
12cf0 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20 20  is Opcode..     
12d00 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61 6c   ** We do not al
12d10 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20 61  low blobs with a
12d20 20 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a 65   prefix and a ze
12d30 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e 20  ro-filled tail. 
12d40 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b  */.      nZero +
12d50 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
12d60 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6c  .    }else if( l
12d70 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72  en ){.      nZer
12d80 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  o = 0;.    }.  }
12d90 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69  ..  /* Add the i
12da0 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76 61  nitial header va
12db0 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74  rint and total t
12dc0 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64  he size */.  nHd
12dd0 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73  r += nVarint = s
12de0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
12df0 6e 48 64 72 29 3b 0a 20 20 69 66 28 20 6e 56 61  nHdr);.  if( nVa
12e00 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69  rint<sqlite3Vari
12e10 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20  ntLen(nHdr) ){. 
12e20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20     nHdr++;.  }. 
12e30 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44   nByte = nHdr+nD
12e40 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28  ata-nZero;.  if(
12e50 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
12e60 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
12e70 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
12e80 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
12e90 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
12ea0 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
12eb0 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72  ter has a buffer
12ec0 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f   large enough to
12ed0 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65   store .  ** the
12ee0 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65   new record. The
12ef0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
12f00 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f   (pOp->p3) is no
12f10 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a  t allowed to.  *
12f20 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  * be one of the 
12f30 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
12f40 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c  (because the fol
12f50 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20  lowing call to. 
12f60 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
12f70 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63  emGrow() could c
12f80 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
12f90 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
12fa0 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ed)..  */.  asse
12fb0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
12fc0 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p1 || pOp->p3>=
12fd0 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20  pOp->p1+pOp->p2 
12fe0 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
12ff0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
13000 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
13010 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
13020 6e 74 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a  nt)nByte, 0) ){.
13030 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
13040 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72  .  }.  zNewRecor
13050 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e  d = (u8 *)pOut->
13060 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74  z;..  /* Write t
13070 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
13080 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a   = putVarint32(z
13090 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29  NewRecord, nHdr)
130a0 3b 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61  ;.  for(pRec=pDa
130b0 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74  ta0; pRec<=pLast
130c0 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73  ; pRec++){.    s
130d0 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c  erial_type = sql
130e0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
130f0 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f  pe(pRec, file_fo
13100 72 6d 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20  rmat);.    i += 
13110 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65  putVarint32(&zNe
13120 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69  wRecord[i], seri
13130 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 2f  al_type);      /
13140 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f  * serial type */
13150 0a 20 20 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d  .  }.  for(pRec=
13160 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c  pData0; pRec<=pL
13170 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f  ast; pRec++){  /
13180 2a 20 73 65 72 69 61 6c 20 64 61 74 61 20 2a 2f  * serial data */
13190 0a 20 20 20 20 69 20 2b 3d 20 73 71 6c 69 74 65  .    i += sqlite
131a0 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26  3VdbeSerialPut(&
131b0 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28  zNewRecord[i], (
131c0 69 6e 74 29 28 6e 42 79 74 65 2d 69 29 2c 20 70  int)(nByte-i), p
131d0 52 65 63 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29  Rec,file_format)
131e0 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
131f0 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61  i==nByte );..  a
13200 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
13210 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
13220 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  nMem );.  pOut->
13230 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
13240 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
13250 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44  MEM_Blob | MEM_D
13260 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c  yn;.  pOut->xDel
13270 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72   = 0;.  if( nZer
13280 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  o ){.    pOut->u
13290 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a  .nZero = nZero;.
132a0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
132b0 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d  |= MEM_Zero;.  }
132c0 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
132d0 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20  QLITE_UTF8;  /* 
132e0 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62  In case the blob
132f0 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74   is ever convert
13300 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  ed to text */.  
13310 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
13320 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
13330 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
13340 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
13350 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13360 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a  e: Count P1 P2 *
13370 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
13380 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
13390 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67  ntries (an integ
133a0 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65  er value) in the
133b0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
133c0 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75  .** opened by cu
133d0 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73  rsor P1 in regis
133e0 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65  ter P2.*/.#ifnde
133f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
13400 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50  REECOUNT.case OP
13410 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  _Count: {       
13420 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
13430 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45  ease */.  i64 nE
13440 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72  ntry;.  BtCursor
13450 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73   *pCrsr;..  pCrs
13460 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
13470 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a  ->p1]->pCursor;.
13480 20 20 69 66 28 20 70 43 72 73 72 20 29 7b 0a 20    if( pCrsr ){. 
13490 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
134a0 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c  treeCount(pCrsr,
134b0 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c   &nEntry);.  }el
134c0 73 65 7b 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d  se{.    nEntry =
134d0 20 30 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e   0;.  }.  pOut->
134e0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
134f0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e  .  pOut->u.i = n
13500 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a  Entry;.  break;.
13510 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
13520 6f 64 65 3a 20 53 74 61 74 65 6d 65 6e 74 20 50  ode: Statement P
13530 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
13540 42 65 67 69 6e 20 61 6e 20 69 6e 64 69 76 69 64  Begin an individ
13550 75 61 6c 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ual statement tr
13560 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 63 68 20  ansaction which 
13570 69 73 20 70 61 72 74 20 6f 66 20 61 20 6c 61 72  is part of a lar
13580 67 65 72 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  ger.** transacti
13590 6f 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65 65  on.  This is nee
135a0 64 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ded so that the 
135b0 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 63 61 6e  statement.** can
135c0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
135d0 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
135e0 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
135f0 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
13600 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
13610 74 69 6f 6e 2e 20 20 54 68 65 20 73 74 61 74 65  tion.  The state
13620 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
13630 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
13640 6c 6c 79 0a 2a 2a 20 63 6f 6d 6d 69 74 20 77 68  lly.** commit wh
13650 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74  en the VDBE halt
13660 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
13670 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
13680 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ion is currently
13690 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d   in autocommit m
136a0 6f 64 65 20 28 74 68 61 74 20 0a 2a 2a 20 69 73  ode (that .** is
136b0 20 74 6f 20 73 61 79 2c 20 69 66 20 69 74 20 69   to say, if it i
136c0 73 20 69 6e 20 62 65 74 77 65 65 6e 20 42 45 47  s in between BEG
136d0 49 4e 20 61 6e 64 20 43 4f 4d 4d 49 54 29 0a 2a  IN and COMMIT).*
136e0 2a 20 61 6e 64 20 69 66 20 74 68 65 72 65 20 61  * and if there a
136f0 72 65 20 6e 6f 20 6f 74 68 65 72 20 61 63 74 69  re no other acti
13700 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e  ve statements on
13710 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
13720 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
13730 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 65 72  , then this oper
13740 61 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ation is a no-op
13750 2e 20 20 4e 6f 20 73 74 61 74 65 6d 65 6e 74 20  .  No statement 
13760 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 69  transaction.** i
13770 73 20 6e 65 65 64 65 64 20 73 69 6e 63 65 20 61  s needed since a
13780 6e 79 20 65 72 72 6f 72 20 63 61 6e 20 75 73 65  ny error can use
13790 20 74 68 65 20 6e 6f 72 6d 61 6c 20 52 4f 4c 4c   the normal ROLL
137a0 42 41 43 4b 20 70 72 6f 63 65 73 73 20 74 6f 0a  BACK process to.
137b0 2a 2a 20 75 6e 64 6f 20 63 68 61 6e 67 65 73 2e  ** undo changes.
137c0 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 73 74 61 74  .**.** If a stat
137d0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
137e0 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 74 68  n is started, th
137f0 65 6e 20 61 20 73 74 61 74 65 6d 65 6e 74 20 6a  en a statement j
13800 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 2a 2a 20 77  ournal file.** w
13810 69 6c 6c 20 62 65 20 61 6c 6c 6f 63 61 74 65 64  ill be allocated
13820 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 64   and initialized
13830 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 61 74  ..**.** The stat
13840 65 6d 65 6e 74 20 69 73 20 62 65 67 75 6e 20 6f  ement is begun o
13850 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
13860 69 6c 65 20 77 69 74 68 20 69 6e 64 65 78 20 50  ile with index P
13870 31 2e 20 20 54 68 65 20 6d 61 69 6e 0a 2a 2a 20  1.  The main.** 
13880 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 61  database file ha
13890 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
138a0 61 6e 64 20 74 68 65 20 66 69 6c 65 20 75 73 65  and the file use
138b0 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
138c0 74 61 62 6c 65 73 0a 2a 2a 20 68 61 73 20 61 6e  tables.** has an
138d0 20 69 6e 64 65 78 20 6f 66 20 31 2e 0a 2a 2f 0a   index of 1..*/.
138e0 63 61 73 65 20 4f 50 5f 53 74 61 74 65 6d 65 6e  case OP_Statemen
138f0 74 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42  t: {.  Btree *pB
13900 74 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 75 74  t;.  if( db->aut
13910 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
13920 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
13930 31 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  1 ){.    assert(
13940 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
13950 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
13960 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  ;.    assert( db
13970 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
13980 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 70 42 74  Bt!=0 );.    pBt
13990 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
139a0 70 31 5d 2e 70 42 74 3b 0a 20 20 20 20 61 73 73  p1].pBt;.    ass
139b0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
139c0 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20  eIsInTrans(pBt) 
139d0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
139e0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
139f0 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
13a00 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 69 53  );.    if( p->iS
13a10 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20  tatement==0 ){. 
13a20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
13a30 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26  >nStatement>=0 &
13a40 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  & db->nSavepoint
13a50 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  >=0 );.      db-
13a60 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a  >nStatement++; .
13a70 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
13a80 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
13a90 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
13aa0 65 6d 65 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 20  ement;.    }.   
13ab0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
13ac0 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c  eeBeginStmt(pBt,
13ad0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b   p->iStatement);
13ae0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
13af0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
13b00 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
13b10 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
13b20 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
13b30 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
13b40 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
13b50 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
13b60 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
13b70 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
13b80 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
13b90 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
13ba0 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
13bb0 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
13bc0 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
13bd0 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
13be0 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
13bf0 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
13c00 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
13c10 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
13c40 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
13c50 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13c70 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
13c80 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
13c90 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
13ca0 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
13cb0 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
13cc0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
13cd0 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
13ce0 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
13cf0 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
13d00 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
13d10 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
13d20 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
13d30 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
13d40 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
13d50 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
13d60 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
13d70 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
13d80 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
13d90 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
13da0 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
13db0 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
13dc0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
13dd0 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
13de0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
13df0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
13e00 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
13e10 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
13e20 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
13e30 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
13e40 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
13e50 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
13e60 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
13e70 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
13e80 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41  );..  if( p1==SA
13e90 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b  VEPOINT_BEGIN ){
13ea0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69  .    if( db->wri
13eb0 74 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20  teVdbeCnt>0 ){. 
13ec0 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61       /* A new sa
13ed0 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62  vepoint cannot b
13ee0 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65  e created if the
13ef0 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
13f00 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74  ite .      ** st
13f10 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f  atements (i.e. o
13f20 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69  pen read/write i
13f30 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20  ncremental blob 
13f40 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20  handles)..      
13f50 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
13f60 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
13f70 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
13f80 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e  ot open savepoin
13f90 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  t - ".        "S
13fa0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
13fb0 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
13fc0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
13fd0 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
13fe0 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71        nName = sq
13ff0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e  lite3Strlen30(zN
14000 61 6d 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  ame);..      /* 
14010 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76  Create a new sav
14020 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65  epoint structure
14030 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20  . */.      pNew 
14040 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
14050 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
14060 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65  Savepoint)+nName
14070 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  +1);.      if( p
14080 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70  New ){.        p
14090 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68  New->zName = (ch
140a0 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20  ar *)&pNew[1];. 
140b0 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e         memcpy(pN
140c0 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  ew->zName, zName
140d0 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  , nName+1);.    
140e0 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
140f0 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20  here is no open 
14100 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
14110 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61  n mark this as a
14120 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20   special.       
14130 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e   ** "transaction
14140 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a   savepoint". */.
14150 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
14160 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
14170 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
14180 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
14190 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
141a0 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
141b0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
141c0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64  lse{.          d
141d0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b  b->nSavepoint++;
141e0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a  .        }.    .
141f0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20          /* Link 
14200 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  the new savepoin
14210 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  t into the datab
14220 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73  ase handle's lis
14230 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e  t. */.        pN
14240 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e  ew->pNext = db->
14250 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
14260 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
14270 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20  nt = pNew;.     
14280 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
14290 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74  {.    iSavepoint
142a0 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69   = 0;..    /* Fi
142b0 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76  nd the named sav
142c0 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65  epoint. If there
142d0 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65   is no such save
142e0 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20  point, then an. 
142f0 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69     ** an error i
14300 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  s returned to th
14310 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20  e user.  */.    
14320 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65  for(.      pSave
14330 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76  point = db->pSav
14340 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70  epoint; .      p
14350 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c  Savepoint && sql
14360 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76  ite3StrICmp(pSav
14370 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a  epoint->zName, z
14380 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61  Name);.      pSa
14390 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
143a0 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20  oint->pNext.    
143b0 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f  ){.      iSavepo
143c0 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  int++;.    }.   
143d0 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74   if( !pSavepoint
143e0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
143f0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
14400 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20  ErrMsg, db, "no 
14410 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20  such savepoint: 
14420 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
14430 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
14440 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20  RROR;.    }else 
14450 69 66 28 20 0a 20 20 20 20 20 20 20 20 64 62 2d  if( .        db-
14460 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20  >writeVdbeCnt>0 
14470 7c 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e  || (p1==SAVEPOIN
14480 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 64 62  T_ROLLBACK && db
14490 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
144a0 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  1) .    ){.     
144b0 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f   /* It is not po
144c0 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73  ssible to releas
144d0 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76  e (commit) a sav
144e0 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20  epoint if there 
144f0 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63  are .      ** ac
14500 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65  tive write state
14510 6d 65 6e 74 73 2e 20 49 74 20 69 73 20 6e 6f 74  ments. It is not
14520 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 6f 6c   possible to rol
14530 6c 62 61 63 6b 20 61 20 73 61 76 65 70 6f 69 6e  lback a savepoin
14540 74 0a 20 20 20 20 20 20 2a 2a 20 69 66 20 74 68  t.      ** if th
14550 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
14560 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 74  ve statements at
14570 20 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20   all..      */. 
14580 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
14590 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
145a0 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20  g, db, .        
145b0 22 63 61 6e 6e 6f 74 20 25 73 20 73 61 76 65 70  "cannot %s savep
145c0 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65  oint - SQL state
145d0 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
145e0 73 22 2c 0a 20 20 20 20 20 20 20 20 28 70 31 3d  s",.        (p1=
145f0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
14600 41 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63 6b 22  ACK ? "rollback"
14610 3a 20 22 72 65 6c 65 61 73 65 22 29 0a 20 20 20  : "release").   
14620 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d     );.      rc =
14630 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
14640 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20    }else{..      
14650 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  /* Determine whe
14660 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73  ther or not this
14670 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
14680 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  n savepoint. If 
14690 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  so,.      ** and
146a0 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
146b0 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e  SE command, then
146c0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
146d0 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20  nsaction .      
146e0 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e  ** is committed.
146f0 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20   .      */.     
14700 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69   int isTransacti
14710 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  on = pSavepoint-
14720 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d  >pNext==0 && db-
14730 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
14740 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69  vepoint;.      i
14750 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  f( isTransaction
14760 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
14770 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
14780 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
14790 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  mit = 1;.       
147a0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
147b0 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
147c0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
147d0 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
147e0 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
147f0 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
14800 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
14810 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
14820 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
14830 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
14840 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
14850 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
14860 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20  avepoint = 0;.  
14870 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63        rc = p->rc
14880 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
14890 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
148a0 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
148b0 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
148c0 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  - 1;.        for
148d0 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
148e0 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
148f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
14900 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64  BtreeSavepoint(d
14910 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
14920 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
14930 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72  .          if( r
14940 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
14950 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f              goto
14960 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
14970 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ror;.          }
14980 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
14990 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
149a0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26  OINT_ROLLBACK &&
149b0 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49   (db->flags&SQLI
149c0 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
149d0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
149e0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
149f0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
14a00 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  s(db);.         
14a10 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
14a20 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
14a30 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  0);.        }.  
14a40 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
14a50 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  * Regardless of 
14a60 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
14a70 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c  a RELEASE or ROL
14a80 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61  LBACK, destroy a
14a90 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ll .      ** sav
14aa0 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69  epoints nested i
14ab0 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76  nside of the sav
14ac0 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
14ad0 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20  rated on. */.   
14ae0 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53     while( db->pS
14af0 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70  avepoint!=pSavep
14b00 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  oint ){.        
14b10 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65  pTmp = db->pSave
14b20 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
14b30 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
14b40 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  pTmp->pNext;.   
14b50 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
14b60 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20  ee(db, pTmp);.  
14b70 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
14b80 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  oint--;.      }.
14b90 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20  .      /* If it 
14ba0 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68  is a RELEASE, th
14bb0 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73  en destroy the s
14bc0 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
14bd0 70 65 72 61 74 65 64 20 6f 6e 20 74 6f 6f 20 2a  perated on too *
14be0 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
14bf0 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
14c00 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
14c10 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
14c20 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
14c30 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
14c40 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
14c50 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
14c60 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
14c70 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
14c80 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
14c90 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
14ca0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
14cb0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
14cc0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
14cd0 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62  }.    }.  }..  b
14ce0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
14cf0 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50  de: AutoCommit P
14d00 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
14d10 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73   Set the databas
14d20 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
14d30 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30  ag to P1 (1 or 0
14d40 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65  ). If P2 is true
14d50 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61  , roll.** back a
14d60 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74  ny currently act
14d70 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61  ive btree transa
14d80 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65  ctions. If there
14d90 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a   are any active.
14da0 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72  ** VMs (apart fr
14db0 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68  om this one), th
14dc0 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61  en a ROLLBACK fa
14dd0 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66  ils.  A COMMIT f
14de0 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65  ails if.** there
14df0 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
14e00 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76  ing VMs or activ
14e10 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73  e VMs that use s
14e20 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a  hared cache..**.
14e30 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
14e40 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56  ion causes the V
14e50 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61  M to halt..*/.ca
14e60 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74  se OP_AutoCommit
14e70 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65  : {.  int desire
14e80 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69  dAutoCommit;.  i
14e90 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20  nt iRollback;.  
14ea0 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20  int turnOnAC;.. 
14eb0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
14ec0 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  it = pOp->p1;.  
14ed0 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d  iRollback = pOp-
14ee0 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20  >p2;.  turnOnAC 
14ef0 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  = desiredAutoCom
14f00 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f  mit && !db->auto
14f10 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74  Commit;.  assert
14f20 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
14f30 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65  mit==1 || desire
14f40 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  dAutoCommit==0 )
14f50 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
14f60 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
14f70 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30   || iRollback==0
14f80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
14f90 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e  ->activeVdbeCnt>
14fa0 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73  0 );  /* At leas
14fb0 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73  t this one VM is
14fc0 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66   active */..  if
14fd0 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52  ( turnOnAC && iR
14fe0 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 61  ollback && db->a
14ff0 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29  ctiveVdbeCnt>1 )
15000 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
15010 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
15020 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41  lements a ROLLBA
15030 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  CK and other VMs
15040 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c   are.    ** stil
15050 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61  l running, and a
15060 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
15070 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61  active, return a
15080 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69  n error indicati
15090 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74  ng.    ** that t
150a0 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
150b0 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
150c0 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  . .    */.    sq
150d0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
150e0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
150f0 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
15100 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
15110 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
15120 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
15130 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d  ress");.    rc =
15140 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
15150 7d 65 6c 73 65 20 69 66 28 20 74 75 72 6e 4f 6e  }else if( turnOn
15160 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b  AC && !iRollback
15170 20 26 26 20 64 62 2d 3e 77 72 69 74 65 56 64 62   && db->writeVdb
15180 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20 2f 2a  eCnt>0 ){.    /*
15190 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
151a0 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20  tion implements 
151b0 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68  a COMMIT and oth
151c0 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69  er VMs are writi
151d0 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e  ng.    ** return
151e0 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61   an error indica
151f0 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74  ting that the ot
15200 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d  her VMs must com
15210 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20  plete first. .  
15220 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
15230 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
15240 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
15250 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61  ot commit transa
15260 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20  ction - ".      
15270 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
15280 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
15290 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
152a0 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69  _BUSY;.  }else i
152b0 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  f( desiredAutoCo
152c0 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f  mmit!=db->autoCo
152d0 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20  mmit ){.    if( 
152e0 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20  iRollback ){.   
152f0 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72     assert( desir
15300 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
15310 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
15320 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b  RollbackAll(db);
15330 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
15340 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d  ommit = 1;.    }
15350 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
15360 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
15370 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
15380 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71  it;.      if( sq
15390 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
153a0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
153b0 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  .        p->pc =
153c0 20 70 63 3b 0a 20 20 20 20 20 20 20 20 64 62 2d   pc;.        db-
153d0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
153e0 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f  8)(1-desiredAuto
153f0 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20  Commit);.       
15400 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
15410 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
15420 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
15430 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  urn;.      }.   
15440 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64   }.    assert( d
15450 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30  b->nStatement==0
15460 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
15470 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64  loseSavepoints(d
15480 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72  b);.    if( p->r
15490 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
154a0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
154b0 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73  E_DONE;.    }els
154c0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
154d0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
154e0 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  }.    goto vdbe_
154f0 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b  return;.  }else{
15500 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
15510 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
15520 67 2c 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28  g, db,.        (
15530 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  !desiredAutoComm
15540 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72  it)?"cannot star
15550 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
15560 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
15570 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20  tion":(.        
15580 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e  (iRollback)?"can
15590 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e  not rollback - n
155a0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
155b0 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20   active":.      
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61               "ca
155d0 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f  nnot commit - no
155e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
155f0 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20  active"));.     
15600 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51      .    rc = SQ
15610 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
15620 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
15630 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69  pcode: Transacti
15640 6f 6e 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  on P1 P2 * * *.*
15650 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61  *.** Begin a tra
15660 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65 20 74  nsaction.  The t
15670 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e 64 73 20  ransaction ends 
15680 77 68 65 6e 20 61 20 43 6f 6d 6d 69 74 20 6f 72  when a Commit or
15690 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63   Rollback.** opc
156a0 6f 64 65 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ode is encounter
156b0 65 64 2e 20 20 44 65 70 65 6e 64 69 6e 67 20 6f  ed.  Depending o
156c0 6e 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  n the ON CONFLIC
156d0 54 20 73 65 74 74 69 6e 67 2c 20 74 68 65 0a 2a  T setting, the.*
156e0 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 69  * transaction mi
156f0 67 68 74 20 61 6c 73 6f 20 62 65 20 72 6f 6c 6c  ght also be roll
15700 65 64 20 62 61 63 6b 20 69 66 20 61 6e 20 65 72  ed back if an er
15710 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
15720 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ed..**.** P1 is 
15730 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
15740 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f   database file o
15750 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e  n which the tran
15760 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74  saction is.** st
15770 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20  arted.  Index 0 
15780 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
15790 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e  base file and in
157a0 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20  dex 1 is the.** 
157b0 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
157c0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
157d0 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72   Indices of 2 or
157e0 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66   more are used f
157f0 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64  or.** attached d
15800 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
15810 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P2 is non-zer
15820 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d  o, then a write-
15830 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
15840 74 61 72 74 65 64 2e 20 20 41 20 52 45 53 45 52  tarted.  A RESER
15850 56 45 44 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f  VED lock is.** o
15860 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64  btained on the d
15870 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 65  atabase file whe
15880 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
15890 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
158a0 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68 65 72 20 70  .  No.** other p
158b0 72 6f 63 65 73 73 20 63 61 6e 20 73 74 61 72 74  rocess can start
158c0 20 61 6e 6f 74 68 65 72 20 77 72 69 74 65 20 74   another write t
158d0 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 6c 65  ransaction while
158e0 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f   this transactio
158f0 6e 20 69 73 0a 2a 2a 20 75 6e 64 65 72 77 61 79  n is.** underway
15900 2e 20 20 53 74 61 72 74 69 6e 67 20 61 20 77 72  .  Starting a wr
15910 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
15920 61 6c 73 6f 20 63 72 65 61 74 65 73 20 61 20 72  also creates a r
15930 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
15940 20 41 0a 2a 2a 20 77 72 69 74 65 20 74 72 61 6e   A.** write tran
15950 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
15960 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 61  started before a
15970 6e 79 20 63 68 61 6e 67 65 73 20 63 61 6e 20 62  ny changes can b
15980 65 20 6d 61 64 65 20 74 6f 20 74 68 65 0a 2a 2a  e made to the.**
15990 20 64 61 74 61 62 61 73 65 2e 20 20 49 66 20 50   database.  If P
159a0 32 20 69 73 20 32 20 6f 72 20 67 72 65 61 74 65  2 is 2 or greate
159b0 72 20 74 68 65 6e 20 61 6e 20 45 58 43 4c 55 53  r then an EXCLUS
159c0 49 56 45 20 6c 6f 63 6b 20 69 73 20 61 6c 73 6f  IVE lock is also
159d0 20 6f 62 74 61 69 6e 65 64 0a 2a 2a 20 6f 6e 20   obtained.** on 
159e0 74 68 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  the file..**.** 
159f0 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74  If P2 is zero, t
15a00 68 65 6e 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20  hen a read-lock 
15a10 69 73 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74  is obtained on t
15a20 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
15a30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61  ..*/.case OP_Tra
15a40 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74  nsaction: {.  Bt
15a50 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73  ree *pBt;..  ass
15a60 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
15a70 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
15a80 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
15a90 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
15aa0 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  (1<<pOp->p1))!=0
15ab0 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   );.  pBt = db->
15ac0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
15ad0 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  ;..  if( pBt ){.
15ae0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
15af0 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
15b00 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  pBt, pOp->p2);. 
15b10 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
15b20 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
15b30 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
15b40 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
15b50 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
15b60 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
15b70 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  rn;.    }.    if
15b80 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
15b90 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 45  && rc!=SQLITE_RE
15ba0 41 44 4f 4e 4c 59 20 2f 2a 20 26 26 20 72 63 21  ADONLY /* && rc!
15bb0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 2a 2f 20  =SQLITE_BUSY */ 
15bc0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
15bd0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15be0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
15bf0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
15c00 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
15c10 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
15c20 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
15c30 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
15c40 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
15c50 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
15c60 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20  er P2..** P3==1 
15c70 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
15c80 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73  rsion.  P3==2 is
15c90 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
15ca0 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69  rmat..** P3==3 i
15cb0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
15cc0 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
15cd0 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
15ce0 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
15cf0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
15d00 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
15d10 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
15d20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
15d30 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
15d40 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  tables..**.** Th
15d50 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65  ere must be a re
15d60 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad-lock on the d
15d70 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20  atabase (either 
15d80 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  a transaction.**
15d90 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
15da0 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62   or there must b
15db0 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  e an open cursor
15dc0 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63  ) before.** exec
15dd0 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  uting this instr
15de0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
15df0 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b  OP_ReadCookie: {
15e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15e10 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
15e20 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61  e */.  int iMeta
15e30 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
15e40 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 69  nt iCookie;..  i
15e50 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
15e60 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70  iCookie = pOp->p
15e70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  3;.  assert( pOp
15e80 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p3<SQLITE_N_BT
15e90 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
15ea0 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
15eb0 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
15ec0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
15ed0 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a  [iDb].pBt!=0 );.
15ee0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
15ef0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44  reeMask & (1<<iD
15f00 62 29 29 21 3d 30 20 29 3b 0a 0a 20 20 72 63 20  b))!=0 );..  rc 
15f10 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  = sqlite3BtreeGe
15f20 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
15f30 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c  b].pBt, iCookie,
15f40 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
15f50 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
15f60 4d 65 74 61 3b 0a 20 20 4d 65 6d 53 65 74 54 79  Meta;.  MemSetTy
15f70 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
15f80 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
15f90 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
15fa0 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
15fb0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
15fc0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
15fd0 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74  register P3 (int
15fe0 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
15ff0 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20  nteger).** into 
16000 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
16010 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
16020 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73    P2==1 is the s
16030 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
16040 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65  .** P2==2 is the
16050 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
16060 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72  . P2==3 is the r
16070 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
16080 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c   cache .** size,
16090 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
160a0 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69  P1==0 is the mai
160b0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
160c0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
160d0 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69   .** database fi
160e0 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
160f0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
16100 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73  s..**.** A trans
16110 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
16120 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78  tarted before ex
16130 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63  ecuting this opc
16140 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
16150 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  SetCookie: {    
16160 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44     /* in3 */.  D
16170 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74  b *pDb;.  assert
16180 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
16190 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
161a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
161b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
161c0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
161d0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
161e0 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
161f0 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20  1))!=0 );.  pDb 
16200 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
16210 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
16220 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
16230 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
16240 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a  tegerify(pIn3);.
16250 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
16260 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
16270 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
16280 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
16290 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
162a0 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
162b0 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e  Op->p2, (int)pIn
162c0 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70  3->u.i);.  if( p
162d0 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43  Op->p2==BTREE_SC
162e0 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a  HEMA_VERSION ){.
162f0 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20      /* When the 
16300 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
16310 61 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68  anges, record th
16320 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74  e new cookie int
16330 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70  ernally */.    p
16340 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68  Db->pSchema->sch
16350 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e  ema_cookie = (in
16360 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn3->u.i;.   
16370 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
16380 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
16390 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  es;.  }else if( 
163a0 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46  pOp->p2==BTREE_F
163b0 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20  ILE_FORMAT ){.  
163c0 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e    /* Record chan
163d0 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20  ges in the file 
163e0 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44  format */.    pD
163f0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
16400 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49  _format = (u8)pI
16410 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69  n3->u.i;.  }.  i
16420 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
16430 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
16440 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
16450 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
16460 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
16470 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
16480 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
16490 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
164a0 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
164b0 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
164c0 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 0a 20 20  ents(db);.  }.  
164d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
164e0 6f 64 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b 69  ode: VerifyCooki
164f0 65 20 50 31 20 50 32 20 2a 0a 2a 2a 0a 2a 2a 20  e P1 P2 *.**.** 
16500 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20  Check the value 
16510 6f 66 20 67 6c 6f 62 61 6c 20 64 61 74 61 62 61  of global databa
16520 73 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d  se parameter num
16530 62 65 72 20 30 20 28 74 68 65 0a 2a 2a 20 73 63  ber 0 (the.** sc
16540 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 20 61 6e  hema version) an
16550 64 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69  d make sure it i
16560 73 20 65 71 75 61 6c 20 74 6f 20 50 32 2e 20 20  s equal to P2.  
16570 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 64 61  .** P1 is the da
16580 74 61 62 61 73 65 20 6e 75 6d 62 65 72 20 77 68  tabase number wh
16590 69 63 68 20 69 73 20 30 20 66 6f 72 20 74 68 65  ich is 0 for the
165a0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
165b0 69 6c 65 0a 2a 2a 20 61 6e 64 20 31 20 66 6f 72  ile.** and 1 for
165c0 20 74 68 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e   the file holdin
165d0 67 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  g temporary tabl
165e0 65 73 20 61 6e 64 20 73 6f 6d 65 20 68 69 67 68  es and some high
165f0 65 72 20 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f 72  er number.** for
16600 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
16610 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ases..**.** The 
16620 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69  cookie changes i
16630 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65  ts value wheneve
16640 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
16650 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a  chema changes..*
16660 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
16670 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
16680 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65  ct when that the
16690 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e   cookie has chan
166a0 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20  ged.** and that 
166b0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
166c0 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72  ess needs to rer
166d0 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 0a  ead the schema..
166e0 2a 2a 0a 2a 2a 20 45 69 74 68 65 72 20 61 20 74  **.** Either a t
166f0 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73  ransaction needs
16700 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 73 74   to have been st
16710 61 72 74 65 64 20 6f 72 20 61 6e 20 4f 50 5f 4f  arted or an OP_O
16720 70 65 6e 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20  pen needs.** to 
16730 62 65 20 65 78 65 63 75 74 65 64 20 28 74 6f 20  be executed (to 
16740 65 73 74 61 62 6c 69 73 68 20 61 20 72 65 61 64  establish a read
16750 20 6c 6f 63 6b 29 20 62 65 66 6f 72 65 20 74 68   lock) before th
16760 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20  is opcode is.** 
16770 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65  invoked..*/.case
16780 20 4f 50 5f 56 65 72 69 66 79 43 6f 6f 6b 69 65   OP_VerifyCookie
16790 3a 20 7b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b  : {.  int iMeta;
167a0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20  .  Btree *pBt;. 
167b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
167c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
167d0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
167e0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
167f0 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29  k & (1<<pOp->p1)
16800 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  )!=0 );.  pBt = 
16810 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
16820 2e 70 42 74 3b 0a 20 20 69 66 28 20 70 42 74 20  .pBt;.  if( pBt 
16830 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
16840 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
16850 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d  pBt, BTREE_SCHEM
16860 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20  A_VERSION, (u32 
16870 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 7d 65 6c  *)&iMeta);.  }el
16880 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  se{.    rc = SQL
16890 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 69 4d 65 74  ITE_OK;.    iMet
168a0 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  a = 0;.  }.  if(
168b0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
168c0 26 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32  & iMeta!=pOp->p2
168d0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
168e0 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
168f0 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
16900 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
16910 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74  bStrDup(db, "dat
16920 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
16930 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20   changed");.    
16940 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  /* If the schema
16950 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65  -cookie from the
16960 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
16970 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69  atches the cooki
16980 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64  e .    ** stored
16990 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d   with the in-mem
169a0 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69  ory representati
169b0 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  on of the schema
169c0 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20  , do.    ** not 
169d0 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
169e0 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  a from the datab
169f0 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a  ase file..    **
16a00 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75  .    ** If virtu
16a10 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e  al-tables are in
16a20 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f   use, this is no
16a30 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69  t just an optimi
16a40 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f  zation..    ** O
16a50 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73  ften, v-tables s
16a60 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20  tore their data 
16a70 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  in other SQLite 
16a80 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20  tables, which.  
16a90 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64    ** are queried
16aa0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65   from within xNe
16ab0 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76  xt() and other v
16ac0 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75  -table methods u
16ad0 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70  sing.    ** prep
16ae0 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66  ared queries. If
16af0 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73   such a query is
16b00 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65   out-of-date, we
16b10 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a   do not want to.
16b20 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74      ** discard t
16b30 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
16b40 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20  ma, as the user 
16b50 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  code implementin
16b60 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74  g the.    ** v-t
16b70 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20  able would have 
16b80 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20  to be ready for 
16b90 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
16ba0 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c   structure itsel
16bb0 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69  f.    ** to be i
16bc0 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65  nvalidated whene
16bd0 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ver sqlite3_step
16be0 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  () is called fro
16bf0 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a  m within .    **
16c00 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f   a v-table metho
16c10 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
16c20 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  ( db->aDb[pOp->p
16c30 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  1].pSchema->sche
16c40 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61  ma_cookie!=iMeta
16c50 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
16c60 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63  3ResetInternalSc
16c70 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31  hema(db, pOp->p1
16c80 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71  );.    }..    sq
16c90 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
16ca0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
16cb0 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
16cc0 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
16cd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
16ce0 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
16cf0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
16d00 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d  .** Open a read-
16d10 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20  only cursor for 
16d20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
16d30 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  le whose root pa
16d40 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61  ge is.** P2 in a
16d50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
16d60 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69   The database fi
16d70 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  le is determined
16d80 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d   by P3. .** P3==
16d90 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e  0 means the main
16da0 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31   database, P3==1
16db0 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62   means the datab
16dc0 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a  ase used for .**
16dd0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
16de0 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e  s, and P3>1 mean
16df0 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65  s used the corre
16e00 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65  sponding attache
16e10 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20  d.** database.  
16e20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72  Give the new cur
16e30 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65  sor an identifie
16e40 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31  r of P1.  The P1
16e50 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20  .** values need 
16e60 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75  not be contiguou
16e70 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c  s but all P1 val
16e80 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d  ues should be sm
16e90 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a  all integers..**
16ea0 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
16eb0 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67  for P1 to be neg
16ec0 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ative..**.** If 
16ed0 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74  P5!=0 then use t
16ee0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
16ef0 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68 65  gister P2 as the
16f00 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a   root page, not.
16f10 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
16f20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a  P2 itself..**.**
16f30 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61   There will be a
16f40 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68   read lock on th
16f50 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65  e database whene
16f60 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a  ver there is an.
16f70 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20  ** open cursor. 
16f80 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
16f90 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72   was unlocked pr
16fa0 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74  ior to this inst
16fb0 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20  ruction.** then 
16fc0 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61  a read lock is a
16fd0 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74 20  cquired as part 
16fe0 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  of this instruct
16ff0 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20  ion.  A read.** 
17000 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65  lock allows othe
17010 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72  r processes to r
17020 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
17030 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a   but prohibits.*
17040 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63  * any other proc
17050 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69  ess from modifyi
17060 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  ng the database.
17070 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20    The read lock 
17080 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77  is.** released w
17090 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20  hen all cursors 
170a0 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20  are closed.  If 
170b0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
170c0 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20   attempts.** to 
170d0 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  get a read lock 
170e0 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73  but fails, the s
170f0 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73  cript terminates
17100 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49   with an.** SQLI
17110 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f  TE_BUSY error co
17120 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  de..**.** The P4
17130 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
17140 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
17150 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
17160 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
17170 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
17180 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
17190 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
171a0 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
171b0 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
171c0 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
171d0 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
171e0 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
171f0 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
17200 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
17210 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
17220 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
17230 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
17240 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
17250 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
17260 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
17270 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65   table..**.** Se
17280 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65  e also OpenWrite
17290 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
172a0 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20  OpenWrite P1 P2 
172b0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f  P3 P4 P5.**.** O
172c0 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
172d0 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
172e0 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
172f0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
17300 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
17310 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
17320 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
17330 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
17340 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
17350 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
17360 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
17370 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
17380 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
17390 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
173a0 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
173b0 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
173c0 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
173d0 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
173e0 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
173f0 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
17400 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
17410 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
17420 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
17430 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
17440 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
17450 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
17460 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
17470 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
17480 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
17490 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
174a0 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
174b0 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
174c0 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
174d0 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
174e0 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
174f0 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
17500 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
17510 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
17520 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
17530 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
17540 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
17550 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
17560 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
17570 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
17580 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
17590 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
175a0 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
175b0 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
175c0 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
175d0 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
175e0 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
175f0 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20  _OpenRead:.case 
17600 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a  OP_OpenWrite: {.
17610 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
17620 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
17630 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
17640 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
17650 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
17660 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
17670 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
17680 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 0a  ;.  int flags;..
17690 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
176a0 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
176b0 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
176c0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
176d0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
176e0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
176f0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
17700 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
17710 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70 44  iDb))!=0 );.  pD
17720 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
17730 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70  ];.  pX = pDb->p
17740 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58  Bt;.  assert( pX
17750 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
17760 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
17770 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72  nWrite ){.    wr
17780 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 69 66  Flag = 1;.    if
17790 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  ( pDb->pSchema->
177a0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d  file_format < p-
177b0 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
177c0 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  mat ){.      p->
177d0 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
177e0 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d  at = pDb->pSchem
177f0 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a  a->file_format;.
17800 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
17810 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20     wrFlag = 0;. 
17820 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35   }.  if( pOp->p5
17830 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
17840 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65  p2>0 );.    asse
17850 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  rt( p2<=p->nMem 
17860 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 70  );.    pIn2 = &p
17870 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20  ->aMem[p2];.    
17880 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
17890 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
178a0 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49      p2 = (int)pI
178b0 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 66 28  n2->u.i;.    if(
178c0 20 70 32 3c 32 20 29 20 7b 0a 20 20 20 20 20 20   p2<2 ) {.      
178d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
178e0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
178f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17900 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
17910 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34   }.  if( pOp->p4
17920 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
17930 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f   ){.    pKeyInfo
17940 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
17950 6e 66 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66  nfo;.    pKeyInf
17960 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e  o->enc = ENC(p->
17970 64 62 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20  db);.    nField 
17980 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  = pKeyInfo->nFie
17990 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ld+1;.  }else if
179a0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
179b0 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e  4_INT32 ){.    n
179c0 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
179d0 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  i;.  }.  assert(
179e0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
179f0 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
17a00 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
17a10 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20  1, nField, iDb, 
17a20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d  1);.  if( pCur==
17a30 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
17a40 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
17a50 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
17a60 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
17a70 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20  pX, p2, wrFlag, 
17a80 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e  pKeyInfo, pCur->
17a90 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72  pCursor);.  pCur
17aa0 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65  ->pKeyInfo = pKe
17ab0 79 49 6e 66 6f 3b 0a 0a 20 20 73 77 69 74 63 68  yInfo;..  switch
17ac0 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65  ( rc ){.    case
17ad0 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 7b 0a 20 20   SQLITE_OK: {.  
17ae0 20 20 20 20 66 6c 61 67 73 20 3d 20 73 71 6c 69      flags = sqli
17af0 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70 43  te3BtreeFlags(pC
17b00 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 0a 20  ur->pCursor);.. 
17b10 20 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63       /* Sanity c
17b20 68 65 63 6b 69 6e 67 2e 20 20 4f 6e 6c 79 20 74  hecking.  Only t
17b30 68 65 20 6c 6f 77 65 72 20 66 6f 75 72 20 62 69  he lower four bi
17b40 74 73 20 6f 66 20 74 68 65 20 66 6c 61 67 73 20  ts of the flags 
17b50 62 79 74 65 20 73 68 6f 75 6c 64 0a 20 20 20 20  byte should.    
17b60 20 20 2a 2a 20 62 65 20 75 73 65 64 2e 20 20 42    ** be used.  B
17b70 69 74 20 33 20 28 6d 61 73 6b 20 30 78 30 38 29  it 3 (mask 0x08)
17b80 20 69 73 20 75 6e 70 72 65 64 69 63 74 61 62 6c   is unpredictabl
17b90 65 2e 20 20 54 68 65 20 6c 6f 77 65 72 20 33 20  e.  The lower 3 
17ba0 62 69 74 73 0a 20 20 20 20 20 20 2a 2a 20 28 6d  bits.      ** (m
17bb0 61 73 6b 20 30 78 30 37 29 20 73 68 6f 75 6c 64  ask 0x07) should
17bc0 20 62 65 20 65 69 74 68 65 72 20 35 20 28 69 6e   be either 5 (in
17bd0 74 6b 65 79 2b 6c 65 61 66 64 61 74 61 20 66 6f  tkey+leafdata fo
17be0 72 20 74 61 62 6c 65 73 29 20 6f 72 0a 20 20 20  r tables) or.   
17bf0 20 20 20 2a 2a 20 32 20 28 7a 65 72 6f 64 61 74     ** 2 (zerodat
17c00 61 20 66 6f 72 20 69 6e 64 69 63 65 73 29 2e 20  a for indices). 
17c10 20 49 66 20 74 68 65 73 65 20 63 6f 6e 64 69 74   If these condit
17c20 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 6d 65 74  ions are not met
17c30 20 69 74 20 63 61 6e 0a 20 20 20 20 20 20 2a 2a   it can.      **
17c40 20 6f 6e 6c 79 20 6d 65 61 6e 20 74 68 61 74 20   only mean that 
17c50 77 65 20 61 72 65 20 64 65 61 6c 69 6e 67 20 77  we are dealing w
17c60 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61  ith a corrupt da
17c70 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20  tabase file..   
17c80 20 20 20 2a 2a 20 4e 6f 74 65 3a 20 20 41 6c 6c     ** Note:  All
17c90 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 69 73   of the above is
17ca0 20 63 68 65 63 6b 65 64 20 61 6c 72 65 61 64 79   checked already
17cb0 20 69 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65   in sqlite3Btree
17cc0 43 75 72 73 6f 72 28 29 2e 0a 20 20 20 20 20 20  Cursor()..      
17cd0 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
17ce0 20 28 66 6c 61 67 73 20 26 20 30 78 66 30 29 3d   (flags & 0xf0)=
17cf0 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
17d00 72 74 28 20 28 66 6c 61 67 73 20 26 20 30 78 30  rt( (flags & 0x0
17d10 37 29 3d 3d 35 20 7c 7c 20 28 66 6c 61 67 73 20  7)==5 || (flags 
17d20 26 20 30 78 30 37 29 3d 3d 32 20 29 3b 0a 0a 20  & 0x07)==2 );.. 
17d30 20 20 20 20 20 70 43 75 72 2d 3e 69 73 54 61 62       pCur->isTab
17d40 6c 65 20 3d 20 28 66 6c 61 67 73 20 26 20 42 54  le = (flags & BT
17d50 52 45 45 5f 49 4e 54 4b 45 59 29 21 3d 30 20 3f  REE_INTKEY)!=0 ?
17d60 31 3a 30 3b 0a 20 20 20 20 20 20 70 43 75 72 2d  1:0;.      pCur-
17d70 3e 69 73 49 6e 64 65 78 20 3d 20 28 66 6c 61 67  >isIndex = (flag
17d80 73 20 26 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  s & BTREE_ZERODA
17d90 54 41 29 21 3d 30 20 3f 31 3a 30 3b 0a 20 20 20  TA)!=0 ?1:0;.   
17da0 20 20 20 2f 2a 20 49 66 20 50 34 3d 3d 30 20 69     /* If P4==0 i
17db0 74 20 6d 65 61 6e 73 20 77 65 20 61 72 65 20 65  t means we are e
17dc0 78 70 65 63 74 65 64 20 74 6f 20 6f 70 65 6e 20  xpected to open 
17dd0 61 20 74 61 62 6c 65 2e 20 20 49 66 20 50 34 21  a table.  If P4!
17de0 3d 30 20 74 68 65 6e 0a 20 20 20 20 20 20 2a 2a  =0 then.      **
17df0 20 77 65 20 65 78 70 65 63 74 20 74 6f 20 62 65   we expect to be
17e00 20 6f 70 65 6e 69 6e 67 20 61 6e 20 69 6e 64 65   opening an inde
17e10 78 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e  x.  If this is n
17e20 6f 74 20 77 68 61 74 20 68 61 70 70 65 6e 65 64  ot what happened
17e30 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
17e40 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
17e50 63 6f 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2f  corrupt.      */
17e60 0a 20 20 20 20 20 20 69 66 28 20 28 70 43 75 72  .      if( (pCur
17e70 2d 3e 69 73 54 61 62 6c 65 20 26 26 20 70 4f 70  ->isTable && pOp
17e80 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
17e90 49 4e 46 4f 29 0a 20 20 20 20 20 20 20 7c 7c 20  INFO).       || 
17ea0 28 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 26  (pCur->isIndex &
17eb0 26 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50  & pOp->p4type!=P
17ec0 34 5f 4b 45 59 49 4e 46 4f 29 20 29 7b 0a 20 20  4_KEYINFO) ){.  
17ed0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
17ee0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
17ef0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
17f00 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17f10 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
17f20 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
17f30 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d 50 54  case SQLITE_EMPT
17f40 59 3a 20 7b 0a 20 20 20 20 20 20 70 43 75 72 2d  Y: {.      pCur-
17f50 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e  >isTable = pOp->
17f60 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e  p4type!=P4_KEYIN
17f70 46 4f 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e  FO;.      pCur->
17f80 69 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d  isIndex = !pCur-
17f90 3e 69 73 54 61 62 6c 65 3b 0a 20 20 20 20 20 20  >isTable;.      
17fa0 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 20 3d 20  pCur->pCursor = 
17fb0 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  0;.      rc = SQ
17fc0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 62  LITE_OK;.      b
17fd0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
17fe0 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
17ff0 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c   assert( rc!=SQL
18000 49 54 45 5f 42 55 53 59 20 29 3b 20 20 2f 2a 20  ITE_BUSY );  /* 
18010 42 75 73 79 20 63 6f 6e 64 69 74 69 6f 6e 73 20  Busy conditions 
18020 64 65 74 65 63 74 65 64 20 65 61 72 6c 69 65 72  detected earlier
18030 20 2a 2f 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   */.      goto a
18040 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
18050 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  r;.    }.  }.  b
18060 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
18070 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  de: OpenEphemera
18080 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  l P1 P2 * P4 *.*
18090 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
180a0 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
180b0 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
180c0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
180d0 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
180e0 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
180f0 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
18100 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
18110 6f 6e 6c 79 2e 20 20 54 68 65 20 74 72 61 6e 73  only.  The trans
18120 69 65 6e 74 20 6f 72 20 76 69 72 74 75 61 6c 0a  ient or virtual.
18130 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65  ** table is dele
18140 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
18150 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f  y when the curso
18160 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  r is closed..**.
18170 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d  ** P2 is the num
18180 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
18190 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
181a0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
181b0 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42  or points to a B
181c0 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34  Tree table if P4
181d0 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72  ==0 and to a BTr
181e0 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50  ee index.** if P
181f0 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20  4 is not 0.  If 
18200 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
18210 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b  it points to a K
18220 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
18230 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73  .** that defines
18240 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b   the format of k
18250 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  eys in the index
18260 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
18270 6f 64 65 20 77 61 73 20 6f 6e 63 65 20 63 61 6c  ode was once cal
18280 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42  led OpenTemp.  B
18290 75 74 20 74 68 61 74 20 63 72 65 61 74 65 64 0a  ut that created.
182a0 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63  ** confusion bec
182b0 61 75 73 65 20 74 68 65 20 74 65 72 6d 20 22 74  ause the term "t
182c0 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69 67 68  emp table", migh
182d0 74 20 72 65 66 65 72 20 65 69 74 68 65 72 0a 2a  t refer either.*
182e0 2a 20 74 6f 20 61 20 54 45 4d 50 20 74 61 62 6c  * to a TEMP tabl
182f0 65 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76  e at the SQL lev
18300 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61 62 6c  el, or to a tabl
18310 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74  e opened by.** t
18320 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  his opcode.  The
18330 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 61  n this opcode wa
18340 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75  s call OpenVirtu
18350 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  al.  But.** that
18360 20 63 72 65 61 74 65 64 20 63 6f 6e 66 75 73 69   created confusi
18370 6f 6e 20 77 69 74 68 20 74 68 65 20 77 68 6f 6c  on with the whol
18380 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
18390 69 64 65 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  idea..*/.case OP
183a0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
183b0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
183c0 70 43 78 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  pCx;.  static co
183d0 6e 73 74 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67  nst int openFlag
183e0 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54  s = .      SQLIT
183f0 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45  E_OPEN_READWRITE
18400 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
18410 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20  OPEN_CREATE |.  
18420 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
18430 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20  EXCLUSIVE |.    
18440 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45    SQLITE_OPEN_DE
18450 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20  LETEONCLOSE |.  
18460 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
18470 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 0a 20  TRANSIENT_DB;.. 
18480 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
18490 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
184a0 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
184b0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
184c0 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28  2, -1, 1);.  if(
184d0 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
184e0 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
184f0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20  llRow = 1;.  rc 
18500 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61  = sqlite3BtreeFa
18510 63 74 6f 72 79 28 64 62 2c 20 30 2c 20 31 2c 20  ctory(db, 0, 1, 
18520 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 54  SQLITE_DEFAULT_T
18530 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20  EMP_CACHE_SIZE, 
18540 6f 70 65 6e 46 6c 61 67 73 2c 0a 20 20 20 20 20  openFlags,.     
18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18560 20 20 20 20 20 20 26 70 43 78 2d 3e 70 42 74 29        &pCx->pBt)
18570 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
18580 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20  TE_OK ){.    rc 
18590 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
185a0 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42  ginTrans(pCx->pB
185b0 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28  t, 1);.  }.  if(
185c0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
185d0 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72  {.    /* If a tr
185e0 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73  ansient index is
185f0 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61 74   required, creat
18600 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a  e it by calling.
18610 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74      ** sqlite3Bt
18620 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 29  reeCreateTable()
18630 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f   with the BTREE_
18640 5a 45 52 4f 44 41 54 41 20 66 6c 61 67 20 62 65  ZERODATA flag be
18650 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
18660 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
18670 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
18680 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
18690 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
186a0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
186b0 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
186c0 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 49  oot-page 1 (an I
186d0 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20  NTKEY table)..  
186e0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70    */.    if( pOp
186f0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b  ->p4.pKeyInfo ){
18700 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b  .      int pgno;
18710 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
18720 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
18730 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20  EYINFO );.      
18740 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18750 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78  eCreateTable(pCx
18760 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54  ->pBt, &pgno, BT
18770 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 3b 20 0a  REE_ZERODATA); .
18780 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
18790 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
187a0 20 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d     assert( pgno=
187b0 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29  =MASTER_ROOT+1 )
187c0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
187d0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
187e0 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f  r(pCx->pBt, pgno
187f0 2c 20 31 2c 20 0a 20 20 20 20 20 20 20 20 20 20  , 1, .          
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18810 20 20 20 20 20 20 28 4b 65 79 49 6e 66 6f 2a 29        (KeyInfo*)
18820 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e  pOp->p4.z, pCx->
18830 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
18840 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
18850 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
18860 66 6f 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d  fo;.        pCx-
18870 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d  >pKeyInfo->enc =
18880 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20   ENC(p->db);.   
18890 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e     }.      pCx->
188a0 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20  isTable = 0;.   
188b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
188c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
188d0 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
188e0 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20  MASTER_ROOT, 1, 
188f0 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  0, pCx->pCursor)
18900 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  ;.      pCx->isT
18910 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  able = 1;.    }.
18920 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64    }.  pCx->isInd
18930 65 78 20 3d 20 21 70 43 78 2d 3e 69 73 54 61 62  ex = !pCx->isTab
18940 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  le;.  break;.}..
18950 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50  /* Opcode: OpenP
18960 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a  seudo P1 P2 P3 *
18970 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20   *.**.** Open a 
18980 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20  new cursor that 
18990 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65  points to a fake
189a0 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
189b0 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  ains a single.**
189c0 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 41   row of data.  A
189d0 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 77 72  ny attempt to wr
189e0 69 74 65 20 61 20 73 65 63 6f 6e 64 20 72 6f 77  ite a second row
189f0 20 6f 66 20 64 61 74 61 20 63 61 75 73 65 73 20   of data causes 
18a00 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 72 6f 77  the.** first row
18a10 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 20   to be deleted. 
18a20 20 41 6c 6c 20 64 61 74 61 20 69 73 20 64 65 6c   All data is del
18a30 65 74 65 64 20 77 68 65 6e 20 74 68 65 20 63 75  eted when the cu
18a40 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6c 6f 73 65  rsor is.** close
18a50 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64  d..**.** A pseud
18a60 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20  o-table created 
18a70 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
18a80 73 20 75 73 65 66 75 6c 20 66 6f 72 20 68 6f 6c  s useful for hol
18a90 64 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 45 57 20  ding the.** NEW 
18aa0 6f 72 20 4f 4c 44 20 74 61 62 6c 65 73 20 69 6e  or OLD tables in
18ab0 20 61 20 74 72 69 67 67 65 72 2e 20 20 41 6c 73   a trigger.  Als
18ac0 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  o used to hold t
18ad0 68 65 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  he a single.** r
18ae0 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74  ow output from t
18af0 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61  he sorter so tha
18b00 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65  t the row can be
18b10 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f   decomposed into
18b20 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63  .** individual c
18b30 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65  olumns using the
18b40 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
18b50 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 4f 50  e..**.** When OP
18b60 5f 49 6e 73 65 72 74 20 69 73 20 65 78 65 63 75  _Insert is execu
18b70 74 65 64 20 74 6f 20 69 6e 73 65 72 74 20 61 20  ted to insert a 
18b80 72 6f 77 20 69 6e 20 74 6f 20 74 68 65 20 70 73  row in to the ps
18b90 65 75 64 6f 20 74 61 62 6c 65 2c 0a 2a 2a 20 74  eudo table,.** t
18ba0 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  he pseudo-table 
18bb0 63 75 72 73 6f 72 20 6d 61 79 20 6f 72 20 6d 61  cursor may or ma
18bc0 79 20 6e 6f 74 20 6d 61 6b 65 20 69 74 27 73 20  y not make it's 
18bd0 6f 77 6e 20 63 6f 70 79 20 6f 66 20 74 68 65 0a  own copy of the.
18be0 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72 6f 77 20  ** original row 
18bf0 64 61 74 61 2e 20 49 66 20 50 32 20 69 73 20 30  data. If P2 is 0
18c00 2c 20 74 68 65 6e 20 74 68 65 20 70 73 65 75 64  , then the pseud
18c10 6f 2d 74 61 62 6c 65 20 77 69 6c 6c 20 63 6f 70  o-table will cop
18c20 79 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  y the.** origina
18c30 6c 20 72 6f 77 20 64 61 74 61 2e 20 4f 74 68 65  l row data. Othe
18c40 72 77 69 73 65 2c 20 61 20 70 6f 69 6e 74 65 72  rwise, a pointer
18c50 20 74 6f 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   to the original
18c60 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 0a 2a 2a 20   memory cell.** 
18c70 69 73 20 73 74 6f 72 65 64 2e 20 49 6e 20 74 68  is stored. In th
18c80 69 73 20 63 61 73 65 2c 20 74 68 65 20 76 64 62  is case, the vdb
18c90 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 65  e program must e
18ca0 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 0a  nsure that the .
18cb0 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 63  ** memory cell c
18cc0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 6f  ontaining the ro
18cd0 77 20 64 61 74 61 20 69 73 20 6e 6f 74 20 6f 76  w data is not ov
18ce0 65 72 77 72 69 74 74 65 6e 20 75 6e 74 69 6c 20  erwritten until 
18cf0 74 68 65 0a 2a 2a 20 70 73 65 75 64 6f 20 74 61  the.** pseudo ta
18d00 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 20 28 6f  ble is closed (o
18d10 72 20 61 20 6e 65 77 20 72 6f 77 20 69 73 20 69  r a new row is i
18d20 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 69 74 29  nserted into it)
18d30 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68  ..**.** P3 is th
18d40 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
18d50 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
18d60 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73  s that will be s
18d70 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  tored by.** the 
18d80 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
18d90 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65  .case OP_OpenPse
18da0 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  udo: {.  VdbeCur
18db0 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73  sor *pCx;..  ass
18dc0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
18dd0 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
18de0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
18df0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d  ->p1, pOp->p3, -
18e00 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 0);.  if( pCx
18e10 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
18e20 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
18e30 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73  w = 1;.  pCx->ps
18e40 65 75 64 6f 54 61 62 6c 65 20 3d 20 31 3b 0a 20  eudoTable = 1;. 
18e50 20 70 43 78 2d 3e 65 70 68 65 6d 50 73 65 75 64   pCx->ephemPseud
18e60 6f 54 61 62 6c 65 20 3d 20 28 75 38 29 70 4f 70  oTable = (u8)pOp
18e70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
18e80 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d  able = 1;.  pCx-
18e90 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20  >isIndex = 0;.  
18ea0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18eb0 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20  ode: Close P1 * 
18ec0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73  * * *.**.** Clos
18ed0 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69  e a cursor previ
18ee0 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20  ously opened as 
18ef0 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f  P1.  If P1 is no
18f00 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f  t.** currently o
18f10 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75  pen, this instru
18f20 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ction is a no-op
18f30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f  ..*/.case OP_Clo
18f40 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  se: {.  assert( 
18f50 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
18f60 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
18f70 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
18f80 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70  eFreeCursor(p, p
18f90 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
18fa0 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f  );.  p->apCsr[pO
18fb0 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72  p->p1] = 0;.  br
18fc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
18fd0 65 3a 20 53 65 65 6b 47 65 20 50 31 20 50 32 20  e: SeekGe P1 P2 
18fe0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
18ff0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
19000 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
19010 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
19020 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
19030 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
19040 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
19050 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20   P3 as the key. 
19060 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
19070 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
19080 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
19090 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
190a0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
190b0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
190c0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
190d0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
190e0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
190f0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
19100 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
19110 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
19120 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
19130 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
19140 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
19150 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
19160 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
19170 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61  records .** grea
19180 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
19190 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
191a0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
191b0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
191c0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
191d0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
191e0 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
191f0 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  kLt, SeekGt, See
19200 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
19210 3a 20 53 65 65 6b 47 74 20 50 31 20 50 32 20 50  : SeekGt P1 P2 P
19220 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20  3 P4 *.**.** If 
19230 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
19240 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
19250 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
19260 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
19270 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
19280 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
19290 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
192a0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
192b0 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
192c0 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
192d0 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
192e0 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
192f0 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
19300 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
19310 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
19320 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
19330 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
19340 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
19350 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
19360 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
19370 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
19380 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
19390 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
193a0 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20  records greater 
193b0 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
193c0 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
193d0 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
193e0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
193f0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
19400 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
19410 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c   SeekLt, SeekGe,
19420 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
19430 63 6f 64 65 3a 20 53 65 65 6b 4c 74 20 50 31 20  code: SeekLt P1 
19440 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a  P2 P3 P4 * .**.*
19450 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
19460 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
19470 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
19480 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
19490 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
194a0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
194b0 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
194c0 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
194d0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
194e0 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
194f0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
19500 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
19510 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
19520 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
19530 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
19540 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
19550 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
19560 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
19570 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
19580 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
19590 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
195a0 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
195b0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
195c0 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68   records less th
195d0 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
195e0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
195f0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
19600 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
19610 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
19620 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
19630 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
19640 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
19650 64 65 3a 20 53 65 65 6b 4c 65 20 50 31 20 50 32  de: SeekLe P1 P2
19660 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
19670 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
19680 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
19690 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
196a0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
196b0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
196c0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
196d0 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
196e0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
196f0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
19700 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
19710 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
19720 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
19730 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
19740 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
19750 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
19760 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
19770 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
19780 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
19790 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
197a0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
197b0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
197c0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
197d0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
197e0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
197f0 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f   .** less than o
19800 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
19810 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
19820 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
19830 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65   to P2..**.** Se
19840 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
19850 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63  otFound, Distinc
19860 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  t, SeekGt, SeekG
19870 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73  e, SeekLt.*/.cas
19880 65 20 4f 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20  e OP_SeekLt:    
19890 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
198a0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
198b0 6b 4c 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLe:         /* 
198c0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
198d0 65 20 4f 50 5f 53 65 65 6b 47 65 3a 20 20 20 20  e OP_SeekGe:    
198e0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
198f0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
19900 6b 47 74 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kGt: {       /* 
19910 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
19920 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63  nt res;.  int oc
19930 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
19940 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  pC;.  UnpackedRe
19950 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46  cord r;.  int nF
19960 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79  ield;.  i64 iKey
19970 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f  ;      /* The ro
19980 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65  wid we are to se
19990 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65  ek to */..  asse
199a0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
199b0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
199c0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
199d0 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a  ( pOp->p2!=0 );.
199e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
199f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
19a00 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
19a10 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  f( pC->pCursor!=
19a20 30 20 29 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f  0 ){.    oc = pO
19a30 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70  p->opcode;.    p
19a40 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
19a50 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61      if( pC->isTa
19a60 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ble ){.      /* 
19a70 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20  The input value 
19a80 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f  in P3 might be o
19a90 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65  f any type: inte
19aa0 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e  ger, real, strin
19ab0 67 2c 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62  g,.      ** blob
19ac0 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20  , or NULL.  But 
19ad0 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61  it needs to be a
19ae0 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65  n integer before
19af0 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 20   we can do.     
19b00 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f   ** the seek, so
19b10 20 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20   covert it. */. 
19b20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
19b30 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 29 3b  cAffinity(pIn3);
19b40 0a 20 20 20 20 20 20 69 4b 65 79 20 3d 20 73 71  .      iKey = sq
19b50 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
19b60 65 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 70  e(pIn3);.      p
19b70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
19b80 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49  = 0;..      /* I
19b90 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
19ba0 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76  ould not be conv
19bb0 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
19bc0 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20  teger without.  
19bd0 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69      ** loss of i
19be0 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e  nformation, then
19bf0 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73   special process
19c00 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e  ing is required.
19c10 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .. */.      if( 
19c20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
19c30 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
19c40 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
19c50 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
19c60 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  l)==0 ){.       
19c70 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
19c80 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20  value cannot be 
19c90 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
19ca0 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d  ny kind of a num
19cb0 62 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 2a  ber,.          *
19cc0 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20  * then the seek 
19cd0 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c  is not possible,
19ce0 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a   so jump to P2 *
19cf0 2f 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d  /.          pc =
19d00 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
19d10 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
19d20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
19d30 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20   /* If we reach 
19d40 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e  this point, then
19d50 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
19d60 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67  st be a floating
19d70 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e  .        ** poin
19d80 74 20 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20  t number. */.   
19d90 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49       assert( (pI
19da0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
19db0 52 65 61 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20  Real)!=0 );..   
19dc0 20 20 20 20 20 69 66 28 20 69 4b 65 79 3d 3d 53       if( iKey==S
19dd0 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26 26  MALLEST_INT64 &&
19de0 20 28 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c   (pIn3->r<(doubl
19df0 65 29 69 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e  e)iKey || pIn3->
19e00 72 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  r>0) ){.        
19e10 20 20 2f 2a 20 54 68 65 20 50 33 20 76 61 6c 75    /* The P3 valu
19e20 65 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 69  e is too large i
19e30 6e 20 6d 61 67 6e 69 74 75 64 65 20 74 6f 20 62  n magnitude to b
19e40 65 20 65 78 70 72 65 73 73 65 64 20 61 73 20 61  e expressed as a
19e50 6e 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69  n.          ** i
19e60 6e 74 65 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20  nteger. */.     
19e70 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20       res = 1;.  
19e80 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
19e90 2d 3e 72 3c 30 20 29 7b 0a 20 20 20 20 20 20 20  ->r<0 ){.       
19ea0 20 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f       if( oc==OP_
19eb0 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGt || oc==OP
19ec0 5f 53 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20  _SeekGe ){.     
19ed0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
19ee0 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
19ef0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
19f00 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  s);.            
19f10 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
19f20 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
19f30 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
19f40 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
19f50 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
19f60 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 63            if( oc
19f70 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f  ==OP_SeekLt || o
19f80 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a  c==OP_SeekLe ){.
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63                rc
19fa0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
19fb0 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ast(pC->pCursor,
19fc0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
19fd0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
19fe0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
19ff0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1a000 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  r;.            }
1a010 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
1a020 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29         if( res )
1a030 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 63  {.            pc
1a040 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1a050 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1a060 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1a070 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f       }else if( o
1a080 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20  c==OP_SeekLt || 
1a090 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b  oc==OP_SeekGe ){
1a0a0 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73  .          /* Us
1a0b0 65 20 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20  e the ceiling() 
1a0c0 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76  function to conv
1a0d0 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f  ert real->int */
1a0e0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
1a0f0 49 6e 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65  In3->r > (double
1a100 29 69 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a  )iKey ) iKey++;.
1a110 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1a120 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1a130 74 68 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63  the floor() func
1a140 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20  tion to convert 
1a150 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20  real->int */.   
1a160 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f         assert( o
1a170 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20  c==OP_SeekLe || 
1a180 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b  oc==OP_SeekGt );
1a190 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
1a1a0 49 6e 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65  In3->r < (double
1a1b0 29 69 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a  )iKey ) iKey--;.
1a1c0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a1d0 7d 20 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  } .      rc = sq
1a1e0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1a1f0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1a200 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
1a210 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
1a220 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1a230 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1a240 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a250 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1a260 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3d  }.      if( res=
1a270 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43  =0 ){.        pC
1a280 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1a290 20 31 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   1;.        pC->
1a2a0 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79  lastRowid = iKey
1a2b0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
1a2c0 6c 73 65 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c  lse{.      nFiel
1a2d0 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
1a2e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1a2f0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1a300 33 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  32 );.      asse
1a310 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a  rt( nField>0 );.
1a320 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f        r.pKeyInfo
1a330 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
1a340 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  .      r.nField 
1a350 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 20  = (u16)nField;. 
1a360 20 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f       if( oc==OP_
1a370 53 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGt || oc==OP
1a380 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20  _SeekLe ){.     
1a390 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50     r.flags = UNP
1a3a0 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20  ACKED_INCRKEY;. 
1a3b0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1a3c0 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
1a3d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72  .      }.      r
1a3e0 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  .aMem = &p->aMem
1a3f0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
1a400 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1a410 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1a420 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1a430 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1a440 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1a450 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1a460 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1a470 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1a480 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77   }.      pC->row
1a490 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1a4a0 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
1a4b0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1a4c0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1a4d0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1a4e0 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
1a4f0 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
1a500 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
1a510 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  +;.#endif.    if
1a520 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc==OP_SeekGe 
1a530 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74  || oc==OP_SeekGt
1a540 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 65   ){.      if( re
1a550 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s<0 || (res==0 &
1a560 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29  & oc==OP_SeekGt)
1a570 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1a580 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
1a590 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1a5a0 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
1a5b0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1a5c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1a5d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1a5e0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1a5f0 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  lid = 0;.      }
1a600 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65  else{.        re
1a610 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  s = 0;.      }. 
1a620 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1a630 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1a640 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLt || oc==OP_
1a650 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20  SeekLe );.      
1a660 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65  if( res>0 || (re
1a670 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
1a680 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20 20  eekLt) ){.      
1a690 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1a6a0 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e  reePrevious(pC->
1a6b0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1a6c0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1a6d0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1a6e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1a6f0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
1a700 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1a710 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
1a720 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d          /* res m
1a730 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65  ight be negative
1a740 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62   because the tab
1a750 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68  le is empty.  Ch
1a760 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a  eck to.        *
1a770 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73  * see if this is
1a780 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20   the case..     
1a790 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65     */.        re
1a7a0 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
1a7b0 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  Eof(pC->pCursor)
1a7c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1a7d0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1a7e0 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28  >p2>0 );.    if(
1a7f0 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63   res ){.      pc
1a800 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1a810 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1a820 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
1a830 6e 73 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69  ns when attempti
1a840 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73  ng to open the s
1a850 71 6c 69 74 65 33 5f 6d 61 73 74 65 72 20 74 61  qlite3_master ta
1a860 62 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72  ble.    ** for r
1a870 65 61 64 20 61 63 63 65 73 73 20 72 65 74 75 72  ead access retur
1a880 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e  ns SQLITE_EMPTY.
1a890 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c   In this case al
1a8a0 77 61 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65  ways.    ** take
1a8b0 20 74 68 65 20 6a 75 6d 70 20 28 73 69 6e 63 65   the jump (since
1a8c0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1a8d0 63 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61 62  cords in the tab
1a8e0 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  le)..    */.    
1a8f0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1a900 64 6f 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  doTable==0 );.  
1a910 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1a920 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
1a930 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1a940 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  eek P1 P2 * * *.
1a950 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f  **.** P1 is an o
1a960 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72  pen table cursor
1a970 20 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77   and P2 is a row
1a980 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72  id integer.  Arr
1a990 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74  ange.** for P1 t
1a9a0 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69  o move so that i
1a9b0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1a9c0 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20 50  rowid given by P
1a9d0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  2..**.** This is
1a9e0 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65   actually a defe
1a9f0 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68  rred seek.  Noth
1aa00 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70  ing actually hap
1aa10 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68  pens until.** th
1aa20 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64  e cursor is used
1aa30 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72   to read a recor
1aa40 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66  d.  That way, if
1aa50 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63   no reads.** occ
1aa60 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61  ur, no unnecessa
1aa70 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a  ry I/O happens..
1aa80 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a  */.case OP_Seek:
1aa90 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a   {    /* in2 */.
1aaa0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1aab0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1aac0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1aad0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1aae0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1aaf0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1ab00 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1ab10 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70  if( ALWAYS(pC->p
1ab20 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20  Cursor!=0) ){.  
1ab30 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1ab40 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d  Table );.    pC-
1ab50 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1ab60 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
1ab70 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  et = sqlite3Vdbe
1ab80 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
1ab90 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1aba0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43  alid = 0;.    pC
1abb0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1abc0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
1abd0 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f  k;.}.  ../* Opco
1abe0 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20  de: Found P1 P2 
1abf0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67  P3 * *.**.** Reg
1ac00 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
1ac10 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
1ac20 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
1ac30 20 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78    P1 is an index
1ac40 2e 0a 2a 2a 20 49 66 20 61 6e 20 65 6e 74 72 79  ..** If an entry
1ac50 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 74 68   that matches th
1ac60 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1ac70 74 65 72 20 70 33 20 65 78 69 73 74 73 20 69 6e  ter p3 exists in
1ac80 20 50 31 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70   P1 then.** jump
1ac90 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 20   to P2.  If the 
1aca0 50 33 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  P3 value does no
1acb0 74 20 6d 61 74 63 68 20 61 6e 79 20 65 6e 74 72  t match any entr
1acc0 79 20 69 6e 20 50 31 0a 2a 2a 20 74 68 65 6e 20  y in P1.** then 
1acd0 66 61 6c 6c 20 74 68 72 75 2e 20 20 54 68 65 20  fall thru.  The 
1ace0 50 31 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  P1 cursor is lef
1acf0 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1ad00 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79  e matching entry
1ad10 0a 2a 2a 20 69 66 20 69 74 20 65 78 69 73 74 73  .** if it exists
1ad20 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
1ad30 74 72 75 63 74 69 6f 6e 20 69 73 20 75 73 65 64  truction is used
1ad40 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
1ad50 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 77 68  e IN operator wh
1ad60 65 72 65 20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d  ere the.** left-
1ad70 68 61 6e 64 20 73 69 64 65 20 69 73 20 61 20 53  hand side is a S
1ad80 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1ad90 20 20 50 31 20 6d 61 79 20 62 65 20 61 20 74 72    P1 may be a tr
1ada0 75 65 20 69 6e 64 65 78 2c 20 6f 72 20 69 74 0a  ue index, or it.
1adb0 2a 2a 20 6d 61 79 20 62 65 20 61 20 74 65 6d 70  ** may be a temp
1adc0 6f 72 61 72 79 20 69 6e 64 65 78 20 74 68 61 74  orary index that
1add0 20 68 6f 6c 64 73 20 74 68 65 20 72 65 73 75 6c   holds the resul
1ade0 74 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  ts of the SELECT
1adf0 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  .** statement.  
1ae00 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
1ae10 6e 20 69 73 20 61 6c 73 6f 20 75 73 65 64 20 74  n is also used t
1ae20 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  o implement the.
1ae30 2a 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  ** DISTINCT keyw
1ae40 6f 72 64 20 69 6e 20 53 45 4c 45 43 54 20 73 74  ord in SELECT st
1ae50 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
1ae60 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1ae70 20 63 68 65 63 6b 73 20 69 66 20 69 6e 64 65 78   checks if index
1ae80 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 20 72   P1 contains a r
1ae90 65 63 6f 72 64 20 66 6f 72 20 77 68 69 63 68 20  ecord for which 
1aea0 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 4e 20  .** the first N 
1aeb0 73 65 72 69 61 6c 69 7a 65 64 20 76 61 6c 75 65  serialized value
1aec0 73 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20  s exactly match 
1aed0 74 68 65 20 4e 20 73 65 72 69 61 6c 69 7a 65 64  the N serialized
1aee0 20 76 61 6c 75 65 73 0a 2a 2a 20 69 6e 20 74 68   values.** in th
1aef0 65 20 72 65 63 6f 72 64 20 69 6e 20 72 65 67 69  e record in regi
1af00 73 74 65 72 20 50 33 2c 20 77 68 65 72 65 20 4e  ster P3, where N
1af10 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
1af20 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69  mber of values i
1af30 6e 0a 2a 2a 20 74 68 65 20 50 33 20 72 65 63 6f  n.** the P3 reco
1af40 72 64 20 28 74 68 65 20 50 33 20 72 65 63 6f 72  rd (the P3 recor
1af50 64 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  d is a prefix of
1af60 20 74 68 65 20 50 31 20 72 65 63 6f 72 64 29 2e   the P1 record).
1af70 20 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f   .**.** See also
1af80 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e  : NotFound, IsUn
1af90 69 71 75 65 2c 20 4e 6f 74 45 78 69 73 74 73 0a  ique, NotExists.
1afa0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
1afb0 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20  tFound P1 P2 P3 
1afc0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  * *.**.** Regist
1afd0 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1afe0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1aff0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 50  y MakeRecord.  P
1b000 31 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 64 65 78  1 is.** an index
1b010 2e 20 20 49 66 20 6e 6f 20 65 6e 74 72 79 20 65  .  If no entry e
1b020 78 69 73 74 73 20 69 6e 20 50 31 20 74 68 61 74  xists in P1 that
1b030 20 6d 61 74 63 68 65 73 20 74 68 65 20 62 6c 6f   matches the blo
1b040 62 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74  b then jump.** t
1b050 6f 20 50 32 2e 20 20 49 66 20 61 6e 20 65 6e 74  o P2.  If an ent
1b060 72 79 20 64 6f 65 73 20 65 78 69 73 74 69 6e 67  ry does existing
1b070 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20  , fall through. 
1b080 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
1b090 65 66 74 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20  eft.** pointing 
1b0a0 74 6f 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  to the entry tha
1b0b0 74 20 6d 61 74 63 68 65 73 2e 0a 2a 2a 0a 2a 2a  t matches..**.**
1b0c0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1b0d0 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55  , NotExists, IsU
1b0e0 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  nique.*/.case OP
1b0f0 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20  _NotFound:      
1b100 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1b110 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20  .case OP_Found: 
1b120 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1b130 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61  , in3 */.  int a
1b140 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20  lreadyExists;.  
1b150 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1b160 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
1b170 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
1b180 78 4b 65 79 3b 0a 20 20 63 68 61 72 20 61 54 65  xKey;.  char aTe
1b190 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a  mpRec[ROUND8(siz
1b1a0 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  eof(UnpackedReco
1b1b0 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65  rd)) + sizeof(Me
1b1c0 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a 20 20 61 6c  m)*3 + 7];..  al
1b1d0 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 30 3b  readyExists = 0;
1b1e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b1f0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1b200 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1b210 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1b220 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1b230 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
1b240 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75  ( ALWAYS(pC->pCu
1b250 72 73 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20 20  rsor!=0) ){..   
1b260 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1b270 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 61  able==0 );.    a
1b280 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
1b290 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
1b2a0 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73  .    pIdxKey = s
1b2b0 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
1b2c0 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49  Unpack(pC->pKeyI
1b2d0 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49  nfo, pIn3->n, pI
1b2e0 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20 20 20 20 20  n3->z,.         
1b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b300 20 20 20 20 20 20 20 20 20 20 20 20 20 61 54 65               aTe
1b310 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
1b320 65 6d 70 52 65 63 29 29 3b 0a 20 20 20 20 69 66  empRec));.    if
1b330 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a  ( pIdxKey==0 ){.
1b340 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
1b350 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  m;.    }.    if(
1b360 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1b370 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 20 20  _Found ){.      
1b380 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c  pIdxKey->flags |
1b390 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
1b3a0 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20  X_MATCH;.    }. 
1b3b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1b3c0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1b3d0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1b3e0 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
1b3f0 72 65 73 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  res);.    sqlite
1b400 33 56 64 62 65 44 65 6c 65 74 65 55 6e 70 61 63  3VdbeDeleteUnpac
1b410 6b 65 64 52 65 63 6f 72 64 28 70 49 64 78 4b 65  kedRecord(pIdxKe
1b420 79 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  y);.    if( rc!=
1b430 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1b440 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
1b450 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73 74      alreadyExist
1b460 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20  s = (res==0);.  
1b470 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1b480 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1b490 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1b4a0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1b4b0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1b4c0 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
1b4d0 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
1b4e0 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70  xists ) pc = pOp
1b4f0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
1b500 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65  e{.    if( !alre
1b510 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
1b520 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1b530 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1b540 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71 75   Opcode: IsUniqu
1b550 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1b560 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1b570 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 69 6e  is open on an in
1b580 64 65 78 2e 20 20 53 6f 20 69 74 20 68 61 73 20  dex.  So it has 
1b590 6e 6f 20 64 61 74 61 20 61 6e 64 20 69 74 73 20  no data and its 
1b5a0 6b 65 79 20 63 6f 6e 73 69 73 74 73 20 0a 2a 2a  key consists .**
1b5b0 20 6f 66 20 61 20 72 65 63 6f 72 64 20 67 65 6e   of a record gen
1b5c0 65 72 61 74 65 64 20 62 79 20 4f 50 5f 4d 61 6b  erated by OP_Mak
1b5d0 65 52 65 63 6f 72 64 20 77 68 65 72 65 20 74 68  eRecord where th
1b5e0 65 20 6c 61 73 74 20 66 69 65 6c 64 20 69 73 20  e last field is 
1b5f0 74 68 65 20 0a 2a 2a 20 72 6f 77 69 64 20 6f 66  the .** rowid of
1b600 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
1b610 74 68 65 20 69 6e 64 65 78 20 72 65 66 65 72 73  the index refers
1b620 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50   to..**.** The P
1b630 33 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61  3 register conta
1b640 69 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72  ins an integer r
1b650 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 43 61  ecord number. Ca
1b660 6c 6c 20 74 68 69 73 20 72 65 63 6f 72 64 20 0a  ll this record .
1b670 2a 2a 20 6e 75 6d 62 65 72 20 52 2e 20 52 65 67  ** number R. Reg
1b680 69 73 74 65 72 20 50 34 20 69 73 20 74 68 65 20  ister P4 is the 
1b690 66 69 72 73 74 20 69 6e 20 61 20 73 65 74 20 6f  first in a set o
1b6a0 66 20 4e 20 63 6f 6e 74 69 67 75 6f 75 73 20 72  f N contiguous r
1b6b0 65 67 69 73 74 65 72 73 0a 2a 2a 20 74 68 61 74  egisters.** that
1b6c0 20 6d 61 6b 65 20 75 70 20 61 6e 20 75 6e 70 61   make up an unpa
1b6d0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 20 74  cked index key t
1b6e0 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20  hat can be used 
1b6f0 77 69 74 68 20 63 75 72 73 6f 72 20 50 31 2e 0a  with cursor P1..
1b700 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
1b710 4e 20 63 61 6e 20 62 65 20 69 6e 66 65 72 72 65  N can be inferre
1b720 64 20 66 72 6f 6d 20 74 68 65 20 63 75 72 73 6f  d from the curso
1b730 72 2e 20 4e 20 69 6e 63 6c 75 64 65 73 20 74 68  r. N includes th
1b740 65 20 72 6f 77 69 64 0a 2a 2a 20 76 61 6c 75 65  e rowid.** value
1b750 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65   appended to the
1b760 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65   end of the inde
1b770 78 20 72 65 63 6f 72 64 2e 20 54 68 69 73 20 72  x record. This r
1b780 6f 77 69 64 20 76 61 6c 75 65 20 6d 61 79 0a 2a  owid value may.*
1b790 2a 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20  * or may not be 
1b7a0 74 68 65 20 73 61 6d 65 20 61 73 20 52 2e 0a 2a  the same as R..*
1b7b0 2a 0a 2a 2a 20 49 66 20 61 6e 79 20 6f 66 20 74  *.** If any of t
1b7c0 68 65 20 4e 20 72 65 67 69 73 74 65 72 73 20 62  he N registers b
1b7d0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 72 65  eginning with re
1b7e0 67 69 73 74 65 72 20 50 34 20 63 6f 6e 74 61 69  gister P4 contai
1b7f0 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c  ns a NULL.** val
1b800 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ue, jump immedia
1b810 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
1b820 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 69  * Otherwise, thi
1b830 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 68  s instruction ch
1b840 65 63 6b 73 20 69 66 20 63 75 72 73 6f 72 20 50  ecks if cursor P
1b850 31 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6e  1 contains an en
1b860 74 72 79 0a 2a 2a 20 77 68 65 72 65 20 74 68 65  try.** where the
1b870 20 66 69 72 73 74 20 28 4e 2d 31 29 20 66 69 65   first (N-1) fie
1b880 6c 64 73 20 6d 61 74 63 68 20 62 75 74 20 74 68  lds match but th
1b890 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61 74  e rowid value at
1b8a0 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f 66 20 74   the end.** of t
1b8b0 68 65 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  he index entry i
1b8c0 73 20 6e 6f 74 20 52 2e 20 49 66 20 74 68 65 72  s not R. If ther
1b8d0 65 20 69 73 20 6e 6f 20 73 75 63 68 20 65 6e 74  e is no such ent
1b8e0 72 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70  ry, control jump
1b8f0 73 0a 2a 2a 20 74 6f 20 69 6e 73 74 72 75 63 74  s.** to instruct
1b900 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ion P2. Otherwis
1b910 65 2c 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  e, the rowid of 
1b920 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20  the conflicting 
1b930 69 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20 69  index.** entry i
1b940 73 20 63 6f 70 69 65 64 20 74 6f 20 72 65 67 69  s copied to regi
1b950 73 74 65 72 20 50 33 20 61 6e 64 20 63 6f 6e 74  ster P3 and cont
1b960 72 6f 6c 20 66 61 6c 6c 73 20 74 68 72 6f 75 67  rol falls throug
1b970 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
1b980 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
1b990 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
1b9a0 74 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74  tFound, NotExist
1b9b0 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65  s, Found.*/.case
1b9c0 20 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20   OP_IsUnique: { 
1b9d0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1b9e0 69 6e 33 20 2a 2f 0a 20 20 75 31 36 20 69 69 3b  in3 */.  u16 ii;
1b9f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ba00 43 78 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  Cx;.  BtCursor *
1ba10 70 43 72 73 72 3b 0a 20 20 75 31 36 20 6e 46 69  pCrsr;.  u16 nFi
1ba20 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d  eld;.  Mem *aMem
1ba30 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1ba40 72 64 20 72 3b 20 20 20 20 20 20 20 20 20 20 20  rd r;           
1ba50 20 20 20 20 20 20 20 2f 2a 20 42 2d 54 72 65 65         /* B-Tree
1ba60 20 69 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65   index search ke
1ba70 79 20 2a 2f 0a 20 20 69 36 34 20 52 3b 20 20 20  y */.  i64 R;   
1ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77            /* Row
1baa0 69 64 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  id stored in reg
1bab0 69 73 74 65 72 20 50 33 20 2a 2f 0a 0a 20 20 61  ister P3 */..  a
1bac0 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Mem = &p->aMem[p
1bad0 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20  Op->p4.i];.  /* 
1bae0 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
1baf0 76 61 6c 75 65 73 20 6f 66 20 70 61 72 61 6d 65  values of parame
1bb00 74 65 72 73 20 50 31 20 61 6e 64 20 50 34 20 61  ters P1 and P4 a
1bb10 72 65 20 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a  re in range. */.
1bb20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1bb30 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1bb40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1bb50 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d  ->p4.i>0 && pOp-
1bb60 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  >p4.i<=p->nMem )
1bb70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1bb80 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1bb90 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1bba0 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 69  .  /* Find the i
1bbb0 6e 64 65 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a  ndex cursor. */.
1bbc0 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72    pCx = p->apCsr
1bbd0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1bbe0 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65 72 72  ert( pCx->deferr
1bbf0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
1bc00 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74   pCx->seekResult
1bc10 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63   = 0;.  pCx->cac
1bc20 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1bc30 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72 73 72 20  _STALE;.  pCrsr 
1bc40 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a  = pCx->pCursor;.
1bc50 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20  .  /* If any of 
1bc60 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 4e  the values are N
1bc70 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65 20 6a 75  ULL, take the ju
1bc80 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20  mp. */.  nField 
1bc90 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  = pCx->pKeyInfo-
1bca0 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69  >nField;.  for(i
1bcb0 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20  i=0; ii<nField; 
1bcc0 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61  ii++){.    if( a
1bcd0 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20  Mem[ii].flags & 
1bce0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
1bcf0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1bd00 20 31 3b 0a 20 20 20 20 20 20 70 43 72 73 72 20   1;.      pCrsr 
1bd10 3d 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  = 0;.      break
1bd20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73  ;.    }.  }.  as
1bd30 73 65 72 74 28 20 28 61 4d 65 6d 5b 6e 46 69 65  sert( (aMem[nFie
1bd40 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ld].flags & MEM_
1bd50 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20 69  Null)==0 );..  i
1bd60 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20  f( pCrsr!=0 ){. 
1bd70 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20 74     /* Populate t
1bd80 68 65 20 69 6e 64 65 78 20 73 65 61 72 63 68 20  he index search 
1bd90 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72 2e 70 4b  key. */.    r.pK
1bda0 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d 3e 70 4b  eyInfo = pCx->pK
1bdb0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
1bdc0 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 20 2b 20  ield = nField + 
1bdd0 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  1;.    r.flags =
1bde0 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
1bdf0 5f 53 45 41 52 43 48 3b 0a 20 20 20 20 72 2e 61  _SEARCH;.    r.a
1be00 4d 65 6d 20 3d 20 61 4d 65 6d 3b 0a 0a 20 20 20  Mem = aMem;..   
1be10 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20   /* Extract the 
1be20 76 61 6c 75 65 20 6f 66 20 52 20 66 72 6f 6d 20  value of R from 
1be30 72 65 67 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a  register P3. */.
1be40 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1be50 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
1be60 33 29 3b 0a 20 20 20 20 52 20 3d 20 70 49 6e 33  3);.    R = pIn3
1be70 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53  ->u.i;..    /* S
1be80 65 61 72 63 68 20 74 68 65 20 42 2d 54 72 65 65  earch the B-Tree
1be90 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f   index. If no co
1bea0 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64  nflicting record
1beb0 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a   is found, jump.
1bec0 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74      ** to P2. Ot
1bed0 68 65 72 77 69 73 65 2c 20 63 6f 70 79 20 74 68  herwise, copy th
1bee0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63  e rowid of the c
1bef0 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72  onflicting recor
1bf00 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69  d to.    ** regi
1bf10 73 74 65 72 20 50 33 20 61 6e 64 20 66 61 6c 6c  ster P3 and fall
1bf20 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1bf30 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1bf40 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  .  */.    rc = s
1bf50 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1bf60 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
1bf70 20 26 72 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d   &r, 0, 0, &pCx-
1bf80 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20  >seekResult);.  
1bf90 20 20 69 66 28 20 28 72 2e 66 6c 61 67 73 20 26    if( (r.flags &
1bfa0 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
1bfb0 5f 53 45 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f  _SEARCH) || r.ro
1bfc0 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20  wid==R ){.      
1bfd0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1bfe0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1bff0 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72     pIn3->u.i = r
1c000 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20  .rowid;.    }.  
1c010 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1c020 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73   Opcode: NotExis
1c030 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ts P1 P2 P3 * *.
1c040 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f  **.** Use the co
1c050 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1c060 72 20 50 33 20 61 73 20 61 20 69 6e 74 65 67 65  r P3 as a intege
1c070 72 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63  r key.  If a rec
1c080 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61  ord .** with tha
1c090 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65  t key does not e
1c0a0 78 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66  xist in table of
1c0b0 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74   P1, then jump t
1c0c0 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65  o P2. .** If the
1c0d0 20 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69   record does exi
1c0e0 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  st, then fall th
1c0f0 72 75 2e 20 20 54 68 65 20 63 75 72 73 6f 72 20  ru.  The cursor 
1c100 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e  is left .** poin
1c110 74 69 6e 67 20 74 6f 20 74 68 65 20 72 65 63 6f  ting to the reco
1c120 72 64 20 69 66 20 69 74 20 65 78 69 73 74 73 2e  rd if it exists.
1c130 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65  .**.** The diffe
1c140 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68  rence between th
1c150 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64  is operation and
1c160 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74 68 61   NotFound is tha
1c170 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74  t this.** operat
1c180 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 65 20  ion assumes the 
1c190 6b 65 79 20 69 73 20 61 6e 20 69 6e 74 65 67 65  key is an intege
1c1a0 72 20 61 6e 64 20 74 68 61 74 20 50 31 20 69 73  r and that P1 is
1c1b0 20 61 20 74 61 62 6c 65 20 77 68 65 72 65 61 73   a table whereas
1c1c0 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73  .** NotFound ass
1c1d0 75 6d 65 73 20 6b 65 79 20 69 73 20 61 20 62 6c  umes key is a bl
1c1e0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66  ob constructed f
1c1f0 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20 61  rom MakeRecord a
1c200 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 69  nd.** P1 is an i
1c210 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ndex..**.** See 
1c220 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1c230 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a  Found, IsUnique.
1c240 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78  */.case OP_NotEx
1c250 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  ists: {        /
1c260 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1c270 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1c280 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1c290 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
1c2a0 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 61 73   u64 iKey;..  as
1c2b0 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
1c2c0 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
1c2d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c2e0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1c2f0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1c300 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1c310 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1c320 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1c330 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1c340 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
1c350 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
1c360 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20  pCrsr!=0 ){.    
1c370 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 69 4b 65  res = 0;.    iKe
1c380 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  y = pIn3->u.i;. 
1c390 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1c3a0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1c3b0 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65  ed(pCrsr, 0, iKe
1c3c0 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1c3d0 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   pC->lastRowid =
1c3e0 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn3->u.i;.    
1c3f0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1c400 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a   = res==0 ?1:0;.
1c410 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
1c420 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
1c430 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1c440 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e  _STALE;.    pC->
1c450 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1c460 20 30 3b 0a 20 20 20 20 69 66 28 20 72 65 73 21   0;.    if( res!
1c470 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  =0 ){.      pc =
1c480 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1c490 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1c4a0 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20  rowidIsValid==0 
1c4b0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  );.    }.    pC-
1c4c0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
1c4d0 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  s;.  }else{.    
1c4e0 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
1c4f0 77 68 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20  when an attempt 
1c500 74 6f 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63  to open a read c
1c510 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20  ursor on the .  
1c520 20 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74    ** sqlite_mast
1c530 65 72 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73  er table returns
1c540 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20   SQLITE_EMPTY.. 
1c550 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
1c560 28 20 21 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  ( !pC->pseudoTab
1c570 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  le );.    assert
1c580 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1c590 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
1c5a0 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72  2 - 1;.    asser
1c5b0 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
1c5c0 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43  lid==0 );.    pC
1c5d0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30  ->seekResult = 0
1c5e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1c5f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
1c600 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
1c610 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65  *.**.** Find the
1c620 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   next available 
1c630 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1c640 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
1c650 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75  * Write the sequ
1c660 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f  ence number into
1c670 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1c680 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   The sequence nu
1c690 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73  mber on the curs
1c6a0 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  or is incremente
1c6b0 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20  d after this.** 
1c6c0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a  instruction.  .*
1c6d0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e  /.case OP_Sequen
1c6e0 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ce: {           
1c6f0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
1c700 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
1c710 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1c720 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1c730 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1c740 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21  >apCsr[pOp->p1]!
1c750 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
1c760 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  i = p->apCsr[pOp
1c770 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b  ->p1]->seqCount+
1c780 2b 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  +;.  MemSetTypeF
1c790 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
1c7a0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
1c7b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52  ./* Opcode: NewR
1c7c0 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20  owid P1 P2 P3 * 
1c7d0 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65  *.**.** Get a ne
1c7e0 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64  w integer record
1c7f0 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22   number (a.k.a "
1c800 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20  rowid") used as 
1c810 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62  the key to a tab
1c820 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72  le..** The recor
1c830 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20  d number is not 
1c840 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20  previously used 
1c850 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20  as a key in the 
1c860 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c  database.** tabl
1c870 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  e that cursor P1
1c880 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65   points to.  The
1c890 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1c8a0 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a  er is written.**
1c8b0 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69   written to regi
1c8c0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
1c8d0 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69  f P3>0 then P3 i
1c8e0 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  s a register tha
1c8f0 74 20 68 6f 6c 64 73 20 74 68 65 20 6c 61 72 67  t holds the larg
1c900 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a  est previously.*
1c910 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  * generated reco
1c920 72 64 20 6e 75 6d 62 65 72 2e 20 20 4e 6f 20 6e  rd number.  No n
1c930 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
1c940 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 74 6f  s are allowed to
1c950 20 62 65 20 6c 65 73 73 0a 2a 2a 20 74 68 61 6e   be less.** than
1c960 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20 57 68   this value.  Wh
1c970 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65  en this value re
1c980 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75  aches its maximu
1c990 6d 2c 20 61 20 53 51 4c 49 54 45 5f 46 55 4c 4c  m, a SQLITE_FULL
1c9a0 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 67 65 6e  .** error is gen
1c9b0 65 72 61 74 65 64 2e 20 20 54 68 65 20 50 33 20  erated.  The P3 
1c9c0 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61  register is upda
1c9d0 74 65 64 20 77 69 74 68 20 74 68 65 20 67 65 6e  ted with the gen
1c9e0 65 72 61 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64  erated.** record
1c9f0 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 50   number.  This P
1ca00 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75  3 mechanism is u
1ca10 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c  sed to help impl
1ca20 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54  ement the.** AUT
1ca30 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75  OINCREMENT featu
1ca40 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  re..*/.case OP_N
1ca50 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  ewRowid: {      
1ca60 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1ca70 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34  release */.  i64
1ca80 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
1ca90 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
1caa0 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
1cab0 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
1cac0 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
1cad0 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
1cae0 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
1caf0 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
1cb00 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
1cb10 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
1cb20 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
1cb30 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
1cb40 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
1cb50 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
1cb60 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
1cb70 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
1cb80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1cb90 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
1cba0 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
1cbb0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
1cbc0 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65  /..  v = 0;.  re
1cbd0 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  s = 0;.  assert(
1cbe0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1cbf0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1cc00 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1cc10 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1cc20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1cc30 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70 43  ;.  if( NEVER(pC
1cc40 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b  ->pCursor==0) ){
1cc50 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f  .    /* The zero
1cc60 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1cc70 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61  above is all tha
1cc80 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20  t is needed */. 
1cc90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54   }else{.    /* T
1cca0 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72  he next rowid or
1ccb0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
1ccc0 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20  different terms 
1ccd0 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20  for the same.   
1cce0 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62   ** thing) is ob
1ccf0 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d  tained in a two-
1cd00 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  step algorithm..
1cd10 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69      **.    ** Fi
1cd20 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74  rst we attempt t
1cd30 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65  o find the large
1cd40 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
1cd50 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20  d and add one.  
1cd60 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42    ** to that.  B
1cd70 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73  ut if the larges
1cd80 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
1cd90 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20   is already the 
1cda0 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70  maximum.    ** p
1cdb0 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c  ositive integer,
1cdc0 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c   we have to fall
1cdd0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1cde0 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72  second.    ** pr
1cdf0 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f  obabilistic algo
1ce00 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20  rithm.    **.   
1ce10 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61   ** The second a
1ce20 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73  lgorithm is to s
1ce30 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74  elect a rowid at
1ce40 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20   random and see 
1ce50 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72  if.    ** it alr
1ce60 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74  eady exists in t
1ce70 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74  he table.  If it
1ce80 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
1ce90 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20   we have.    ** 
1cea0 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74  succeeded.  If t
1ceb0 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  he random rowid 
1cec0 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73  does exist, we s
1ced0 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a  elect a new one.
1cee0 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61      ** and try a
1cef0 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20  gain, up to 100 
1cf00 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20  times..    */.  
1cf10 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1cf20 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 63 6e 74  Table );.    cnt
1cf30 20 3d 20 30 3b 0a 0a 23 69 66 64 65 66 20 53 51   = 0;..#ifdef SQ
1cf40 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44  LITE_32BIT_ROWID
1cf50 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
1cf60 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66  ROWID 0x7fffffff
1cf70 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f  .#else.    /* So
1cf80 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d  me compilers com
1cf90 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73  plain about cons
1cfa0 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72  tants of the for
1cfb0 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  m 0x7fffffffffff
1cfc0 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68  ffff..    ** Oth
1cfd0 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
1cfe0 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66  ut 0x7ffffffffff
1cff0 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66  ffffffLL.  The f
1d000 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73  ollowing macro s
1d010 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70  eems.    ** to p
1d020 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74  rovide the const
1d030 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67  ant while making
1d040 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68   all compilers h
1d050 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20  appy..    */.#  
1d060 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
1d070 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34  D  (i64)( (((u64
1d080 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32  )0x7fffffff)<<32
1d090 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66  ) | (u64)0xfffff
1d0a0 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20  fff ).#endif..  
1d0b0 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61    if( !pC->useRa
1d0c0 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
1d0d0 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74     v = sqlite3Bt
1d0e0 72 65 65 47 65 74 43 61 63 68 65 64 52 6f 77 69  reeGetCachedRowi
1d0f0 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  d(pC->pCursor);.
1d100 20 20 20 20 20 20 69 66 28 20 76 3d 3d 30 20 29        if( v==0 )
1d110 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
1d120 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
1d130 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1d140 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  s);.        if( 
1d150 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1d160 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
1d170 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1d180 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  or;.        }.  
1d190 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
1d1a0 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 31  .          v = 1
1d1b0 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
1d1c0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
1d1d0 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
1d1e0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
1d1f0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 76  .          if( v
1d200 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20  ==MAX_ROWID ){. 
1d210 20 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75             pC->u
1d220 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20  seRandomRowid = 
1d230 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  1;.          }el
1d240 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
1d250 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  v++;.          }
1d260 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1d270 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   }..#ifndef SQLI
1d280 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
1d290 45 4d 45 4e 54 0a 20 20 20 20 20 20 69 66 28 20  EMENT.      if( 
1d2a0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
1d2b0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1d2c0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
1d2d0 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 20 2f 2a 20 50  =p->nMem ); /* P
1d2e0 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
1d2f0 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 20 20 20 20  ory cell */.    
1d300 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61      pMem = &p->a
1d310 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 09 52  Mem[pOp->p3];..R
1d320 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
1d330 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20  p->p3, pMem);.  
1d340 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
1d350 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1d360 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 61 73  Mem);.        as
1d370 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
1d380 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
1d390 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20   );  /* mem(P3) 
1d3a0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
1d3b0 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
1d3c0 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52  pMem->u.i==MAX_R
1d3d0 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52  OWID || pC->useR
1d3e0 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
1d3f0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
1d400 49 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20  ITE_FULL;.      
1d410 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1d420 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1d430 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1d440 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31  f( v<pMem->u.i+1
1d450 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20   ){.          v 
1d460 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b  = pMem->u.i + 1;
1d470 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1d480 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76     pMem->u.i = v
1d490 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
1d4a0 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ..      sqlite3B
1d4b0 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
1d4c0 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
1d4d0 76 3c 4d 41 58 5f 52 4f 57 49 44 20 3f 20 76 2b  v<MAX_ROWID ? v+
1d4e0 31 20 3a 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  1 : 0);.    }.  
1d4f0 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e    if( pC->useRan
1d500 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
1d510 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d520 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
1d530 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
1d540 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
1d550 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
1d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d570 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
1d580 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
1d590 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20 64 62   */.      v = db
1d5a0 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 3b  ->priorNewRowid;
1d5b0 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a  .      cnt = 0;.
1d5c0 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
1d5d0 20 20 69 66 28 20 63 6e 74 3d 3d 30 20 26 26 20    if( cnt==0 && 
1d5e0 28 76 26 30 78 66 66 66 66 66 66 29 3d 3d 76 20  (v&0xffffff)==v 
1d5f0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b  ){.          v++
1d600 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
1d610 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
1d620 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69  e3_randomness(si
1d630 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20  zeof(v), &v);.  
1d640 20 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c          if( cnt<
1d650 35 20 29 20 76 20 26 3d 20 30 78 66 66 66 66 66  5 ) v &= 0xfffff
1d660 66 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  f;.        }.   
1d670 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1d680 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1d690 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1d6a0 2c 20 30 2c 20 28 75 36 34 29 76 2c 20 30 2c 20  , 0, (u64)v, 0, 
1d6b0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 63  &res);.        c
1d6c0 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68 69  nt++;.      }whi
1d6d0 6c 65 28 20 63 6e 74 3c 31 30 30 20 26 26 20 72  le( cnt<100 && r
1d6e0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
1d6f0 72 65 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  res==0 );.      
1d700 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69  db->priorNewRowi
1d710 64 20 3d 20 76 3b 0a 20 20 20 20 20 20 69 66 28  d = v;.      if(
1d720 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
1d730 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
1d740 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1d750 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 67 6f  FULL;.        go
1d760 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1d770 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
1d780 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77     }.    pC->row
1d790 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1d7a0 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1d7b0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
1d7c0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1d7d0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1d7e0 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
1d7f0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
1d800 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
1d810 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
1d820 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
1d830 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
1d840 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20  .**.** Write an 
1d850 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74  entry into the t
1d860 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50  able of cursor P
1d870 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20  1.  A new entry 
1d880 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66  is.** created if
1d890 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65   it doesn't alre
1d8a0 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65  ady exist or the
1d8b0 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69   data for an exi
1d8c0 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69  sting.** entry i
1d8d0 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20  s overwritten.  
1d8e0 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20  The data is the 
1d8f0 76 61 6c 75 65 20 73 74 6f 72 65 64 20 72 65 67  value stored reg
1d900 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  ister.** number 
1d910 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73  P2. The key is s
1d920 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1d930 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75  r P3. The key mu
1d940 73 74 0a 2a 2a 20 62 65 20 61 6e 20 69 6e 74 65  st.** be an inte
1d950 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ger..**.** If th
1d960 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
1d970 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
1d980 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
1d990 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
1d9a0 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
1d9b0 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
1d9c0 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
1d9d0 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
1d9e0 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
1d9f0 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
1da00 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
1da10 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
1da20 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
1da30 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1da40 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
1da50 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
1da60 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 61  ified)..**.** Pa
1da70 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70  rameter P4 may p
1da80 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67  oint to a string
1da90 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1daa0 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a  table-name, or.*
1dab0 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49  * may be NULL. I
1dac0 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f it is not NULL
1dad0 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74  , then the updat
1dae0 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69  e-hook .** (sqli
1daf0 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62  te3.xUpdateCallb
1db00 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ack) is invoked 
1db10 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63  following a succ
1db20 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a  essful insert..*
1db30 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f  *.** (WARNING/TO
1db40 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70  DO: If P1 is a p
1db50 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64  seudo-cursor and
1db60 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c   P2 is dynamical
1db70 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
1db80 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20   then ownership 
1db90 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65  of P2 is transfe
1dba0 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75  rred to the pseu
1dbb0 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64  do-cursor.** and
1dbc0 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63   register P2 bec
1dbd0 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20  omes ephemeral. 
1dbe0 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
1dbf0 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a  s changed, the.*
1dc00 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  * value of regis
1dc10 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e  ter P2 will then
1dc20 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73   change.  Make s
1dc30 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f  ure this does no
1dc40 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70  t.** cause any p
1dc50 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20  roblems.).**.** 
1dc60 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1dc70 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74   only works on t
1dc80 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69  ables.  The equi
1dc90 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
1dca0 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65  on.** for indice
1dcb0 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72  s is OP_IdxInser
1dcc0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  t..*/.case OP_In
1dcd0 73 65 72 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  sert: {.  Mem *p
1dce0 44 61 74 61 3b 0a 20 20 4d 65 6d 20 2a 70 4b 65  Data;.  Mem *pKe
1dcf0 79 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  y;.  i64 iKey;  
1dd00 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20   /* The integer 
1dd10 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72  ROWID or key for
1dd20 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
1dd30 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
1dd40 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1dd50 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 0a 20 20 69    int nZero;.  i
1dd60 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 0a 20  nt seekResult;. 
1dd70 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
1dd80 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
1dd90 7a 54 62 6c 3b 0a 20 20 69 6e 74 20 6f 70 3b 0a  zTbl;.  int op;.
1dda0 0a 20 20 70 44 61 74 61 20 3d 20 26 70 2d 3e 61  .  pData = &p->a
1ddb0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
1ddc0 70 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pKey = &p->aMem[
1ddd0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
1dde0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1ddf0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1de00 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1de10 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1de20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1de30 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1de40 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 7c 7c  C->pCursor!=0 ||
1de50 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1de60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
1de70 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
1de80 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
1de90 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1dea0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
1deb0 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
1dec0 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
1ded0 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79  CE(pOp->p3, pKey
1dee0 29 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 70 4b 65  );..  iKey = pKe
1def0 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 70 4f  y->u.i;.  if( pO
1df00 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
1df10 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
1df20 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70  nge++;.  if( pOp
1df30 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41  ->p5 & OPFLAG_LA
1df40 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61  STROWID ) db->la
1df50 73 74 52 6f 77 69 64 20 3d 20 70 4b 65 79 2d 3e  stRowid = pKey->
1df60 75 2e 69 3b 0a 20 20 69 66 28 20 70 44 61 74 61  u.i;.  if( pData
1df70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
1df80 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d  ll ){.    pData-
1df90 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74  >z = 0;.    pDat
1dfa0 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  a->n = 0;.  }els
1dfb0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
1dfc0 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d  Data->flags & (M
1dfd0 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29  EM_Blob|MEM_Str)
1dfe0 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 43   );.  }.  if( pC
1dff0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b  ->pseudoTable ){
1e000 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 65 70  .    if( !pC->ep
1e010 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20 29  hemPseudoTable )
1e020 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  {.      sqlite3D
1e030 62 46 72 65 65 28 64 62 2c 20 70 43 2d 3e 70 44  bFree(db, pC->pD
1e040 61 74 61 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ata);.    }.    
1e050 70 43 2d 3e 69 4b 65 79 20 3d 20 69 4b 65 79 3b  pC->iKey = iKey;
1e060 0a 20 20 20 20 70 43 2d 3e 6e 44 61 74 61 20 3d  .    pC->nData =
1e070 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 20 20 69   pData->n;.    i
1e080 66 28 20 70 44 61 74 61 2d 3e 7a 3d 3d 70 44 61  f( pData->z==pDa
1e090 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 7c 7c 20 70  ta->zMalloc || p
1e0a0 43 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61  C->ephemPseudoTa
1e0b0 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 70 43 2d  ble ){.      pC-
1e0c0 3e 70 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e  >pData = pData->
1e0d0 7a 3b 0a 20 20 20 20 20 20 69 66 28 20 21 70 43  z;.      if( !pC
1e0e0 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62  ->ephemPseudoTab
1e0f0 6c 65 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44  le ){.        pD
1e100 61 74 61 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d  ata->flags &= ~M
1e110 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 20 20 20 20  EM_Dyn;.        
1e120 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 7c 3d 20  pData->flags |= 
1e130 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 20  MEM_Ephem;.     
1e140 20 20 20 70 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f     pData->zMallo
1e150 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  c = 0;.      }. 
1e160 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1e170 70 43 2d 3e 70 44 61 74 61 20 3d 20 73 71 6c 69  pC->pData = sqli
1e180 74 65 33 4d 61 6c 6c 6f 63 28 20 70 43 2d 3e 6e  te3Malloc( pC->n
1e190 44 61 74 61 2b 32 20 29 3b 0a 20 20 20 20 20 20  Data+2 );.      
1e1a0 69 66 28 20 21 70 43 2d 3e 70 44 61 74 61 20 29  if( !pC->pData )
1e1b0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1e1c0 20 20 20 20 6d 65 6d 63 70 79 28 70 43 2d 3e 70      memcpy(pC->p
1e1d0 44 61 74 61 2c 20 70 44 61 74 61 2d 3e 7a 2c 20  Data, pData->z, 
1e1e0 70 43 2d 3e 6e 44 61 74 61 29 3b 0a 20 20 20 20  pC->nData);.    
1e1f0 20 20 70 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e    pC->pData[pC->
1e200 6e 44 61 74 61 5d 20 3d 20 30 3b 0a 20 20 20 20  nData] = 0;.    
1e210 20 20 70 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e    pC->pData[pC->
1e220 6e 44 61 74 61 2b 31 5d 20 3d 20 30 3b 0a 20 20  nData+1] = 0;.  
1e230 20 20 7d 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c    }.    pC->null
1e240 52 6f 77 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  Row = 0;.  }else
1e250 7b 0a 20 20 20 20 73 65 65 6b 52 65 73 75 6c 74  {.    seekResult
1e260 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
1e270 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
1e280 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
1e290 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 20 20  esult : 0);.    
1e2a0 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
1e2b0 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
1e2c0 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61       nZero = pDa
1e2d0 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ta->u.nZero;.   
1e2e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 5a   }else{.      nZ
1e2f0 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  ero = 0;.    }. 
1e300 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
1e310 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43  etCachedRowid(pC
1e320 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20  ->pCursor, 0);. 
1e330 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1e340 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70  treeInsert(pC->p
1e350 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c  Cursor, 0, iKey,
1e360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61               pDa
1e380 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c  ta->z, pData->n,
1e390 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20   nZero,.        
1e3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3b0 20 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50      pOp->p5 & OP
1e3c0 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65 65  FLAG_APPEND, see
1e3d0 6b 52 65 73 75 6c 74 0a 20 20 20 20 29 3b 0a 20  kResult.    );. 
1e3e0 20 7d 0a 20 20 0a 20 20 70 43 2d 3e 72 6f 77 69   }.  .  pC->rowi
1e3f0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1e400 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1e410 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
1e420 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1e430 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
1e440 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
1e450 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
1e460 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
1e470 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
1e480 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1e490 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
1e4a0 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61  .    zDb = db->a
1e4b0 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d  Db[pC->iDb].zNam
1e4c0 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f  e;.    zTbl = pO
1e4d0 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20  p->p4.z;.    op 
1e4e0 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
1e4f0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
1e500 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
1e510 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b   SQLITE_INSERT);
1e520 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1e530 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
1e540 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
1e550 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
1e560 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62  rg, op, zDb, zTb
1e570 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
1e580 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
1e590 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   );.  }.  break;
1e5a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
1e5b0 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50 34  elete P1 P2 * P4
1e5c0 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
1e5d0 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68  the record at wh
1e5e0 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f  ich the P1 curso
1e5f0 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  r is currently p
1e600 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  ointing..**.** T
1e610 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62  he cursor will b
1e620 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  e left pointing 
1e630 61 74 20 65 69 74 68 65 72 20 74 68 65 20 6e 65  at either the ne
1e640 78 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f  xt or the previo
1e650 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20  us.** record in 
1e660 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74  the table. If it
1e670 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
1e680 67 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65  g at the next re
1e690 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  cord, then.** th
1e6a0 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74  e next Next inst
1e6b0 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ruction will be 
1e6c0 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20  a no-op.  Hence 
1e6d0 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65  it is OK to dele
1e6e0 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66  te.** a record f
1e6f0 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65  rom within an Ne
1e700 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49  xt loop..**.** I
1e710 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
1e720 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20  ANGE flag of P2 
1e730 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
1e740 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e   row change coun
1e750 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  t is.** incremen
1e760 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
1e770 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75  ot)..**.** P1 mu
1e780 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f  st not be pseudo
1e790 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20  -table.  It has 
1e7a0 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62  to be a real tab
1e7b0 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69  le with.** multi
1e7c0 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20  ple rows..**.** 
1e7d0 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
1e7e0 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  L, then it is th
1e7f0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
1e800 62 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a  ble that P1 is.*
1e810 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20  * pointing to.  
1e820 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  The update hook 
1e830 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
1e840 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a   if it exists..*
1e850 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
1e860 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20  ULL then the P1 
1e870 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65  cursor must have
1e880 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64   been positioned
1e890 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74  .** using OP_Not
1e8a0 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69  Found prior to i
1e8b0 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63  nvoking this opc
1e8c0 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
1e8d0 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20  Delete: {.  i64 
1e8e0 69 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73  iKey;.  VdbeCurs
1e8f0 6f 72 20 2a 70 43 3b 0a 0a 20 20 69 4b 65 79 20  or *pC;..  iKey 
1e900 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
1e910 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1e920 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1e930 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1e940 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1e950 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1e960 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1e970 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20  ursor!=0 );  /* 
1e980 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72  Only valid for r
1e990 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70  eal tables, no p
1e9a0 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a  seudotables */..
1e9b0 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61    /* If the upda
1e9c0 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te-hook will be 
1e9d0 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65  invoked, set iKe
1e9e0 79 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f  y to the rowid o
1e9f0 66 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62  f the.  ** row b
1ea00 65 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20  eing deleted..  
1ea10 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70  */.  if( db->xUp
1ea20 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
1ea30 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
1ea40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1ea50 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65  able );.    asse
1ea60 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  rt( pC->rowidIsV
1ea70 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74  alid );  /* last
1ea80 52 6f 77 69 64 20 73 65 74 20 62 79 20 70 72 65  Rowid set by pre
1ea90 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e  vious OP_NotFoun
1eaa0 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20  d */.    iKey = 
1eab0 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  pC->lastRowid;. 
1eac0 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   }..  rc = sqlit
1ead0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
1eae0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
1eaf0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1eb00 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 73 71  e_to_error;.  sq
1eb10 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
1eb20 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
1eb30 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d  rsor, 0);.  rc =
1eb40 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
1eb50 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  ete(pC->pCursor)
1eb60 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1eb70 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1eb80 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
1eb90 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
1eba0 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
1ebb0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1ebc0 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
1ebd0 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
1ebe0 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63  p->p4.z ){.    c
1ebf0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
1ec00 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
1ec10 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e  ].zName;.    con
1ec20 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20  st char *zTbl = 
1ec30 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 64  pOp->p4.z;.    d
1ec40 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
1ec50 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
1ec60 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  g, SQLITE_DELETE
1ec70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65  , zDb, zTbl, iKe
1ec80 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
1ec90 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
1eca0 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  }.  if( pOp->p2 
1ecb0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
1ecc0 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
1ecd0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1ece0 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
1ecf0 6e 74 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  nt P1 * *.**.** 
1ed00 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 73 65  This opcode rese
1ed10 74 73 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  ts the VMs inter
1ed20 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
1ed30 65 72 20 74 6f 20 30 2e 20 49 66 20 50 31 20 69  er to 0. If P1 i
1ed40 73 20 74 72 75 65 2c 0a 2a 2a 20 74 68 65 6e 20  s true,.** then 
1ed50 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1ed60 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
1ed70 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65  is copied to the
1ed80 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
1ed90 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
1eda0 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20  er (returned by 
1edb0 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73  subsequent calls
1edc0 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   to sqlite3_chan
1edd0 67 65 73 28 29 29 0a 2a 2a 20 62 65 66 6f 72 65  ges()).** before
1ede0 20 69 74 20 69 73 20 72 65 73 65 74 2e 20 54 68   it is reset. Th
1edf0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
1ee00 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
1ee10 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
1ee20 43 6f 75 6e 74 3a 20 7b 0a 20 20 69 66 28 20 70  Count: {.  if( p
1ee30 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
1ee40 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
1ee50 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
1ee60 67 65 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e 6e 43  ge);.  }.  p->nC
1ee70 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65  hange = 0;.  bre
1ee80 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1ee90 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
1eea0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
1eeb0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
1eec0 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
1eed0 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72  row data for cur
1eee0 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
1eef0 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
1ef00 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
1ef10 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
1ef20 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
1ef30 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
1ef40 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
1ef50 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
1ef60 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1ef70 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
1ef80 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
1ef90 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
1efa0 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
1efb0 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
1efc0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
1efd0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1efe0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  */./* Opcode: Ro
1eff0 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  wKey P1 P2 * * *
1f000 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
1f010 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
1f020 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b  e complete row k
1f030 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  ey for cursor P1
1f040 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f  ..** There is no
1f050 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
1f060 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a  of the data.  .*
1f070 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70  * The key is cop
1f080 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33 20  ied onto the P3 
1f090 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79  register exactly
1f0a0 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f   as .** it is fo
1f0b0 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  und in the datab
1f0c0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
1f0d0 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
1f0e0 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
1f0f0 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
1f100 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
1f110 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
1f120 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
1f130 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
1f140 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73  e OP_RowKey:.cas
1f150 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a  e OP_RowData: {.
1f160 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f170 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
1f180 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20  rsr;.  u32 n;.  
1f190 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74  i64 n64;..  pOut
1f1a0 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
1f1b0 3e 70 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65  >p2];..  /* Note
1f1c0 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64   that RowKey and
1f1d0 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61   RowData are rea
1f1e0 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20  lly exactly the 
1f1f0 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  same instruction
1f200 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
1f210 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1f220 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1f230 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1f240 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1f250 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1f260 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  e || pOp->opcode
1f270 3d 3d 4f 50 5f 52 6f 77 4b 65 79 20 29 3b 0a 20  ==OP_RowKey );. 
1f280 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49   assert( pC->isI
1f290 6e 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ndex || pOp->opc
1f2a0 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
1f2b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
1f2c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1f2d0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
1f2e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f2f0 70 73 65 75 64 6f 54 61 62 6c 65 3d 3d 30 20 29  pseudoTable==0 )
1f300 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f310 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1f320 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1f330 73 6f 72 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  sor;.  rc = sqli
1f340 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
1f350 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72  eto(pC);.  if( r
1f360 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
1f370 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
1f380 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29  f( pC->isIndex )
1f390 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70  {.    assert( !p
1f3a0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1f3b0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65    sqlite3BtreeKe
1f3c0 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36  ySize(pCrsr, &n6
1f3d0 34 29 3b 0a 20 20 20 20 69 66 28 20 6e 36 34 3e  4);.    if( n64>
1f3e0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
1f3f0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
1f400 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
1f410 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20  o_big;.    }.   
1f420 20 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20   n = (u32)n64;. 
1f430 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
1f440 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65  te3BtreeDataSize
1f450 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20  (pCrsr, &n);.   
1f460 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e   if( n>(u32)db->
1f470 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
1f480 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
1f490 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
1f4a0 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  g;.    }.  }.  i
1f4b0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
1f4c0 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30  mGrow(pOut, n, 0
1f4d0 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ) ){.    goto no
1f4e0 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  _mem;.  }.  pOut
1f4f0 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65  ->n = n;.  MemSe
1f500 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
1f510 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28  MEM_Blob);.  if(
1f520 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
1f530 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1f540 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20  BtreeKey(pCrsr, 
1f550 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a  0, n, pOut->z);.
1f560 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
1f570 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
1f580 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ta(pCrsr, 0, n, 
1f590 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20  pOut->z);.  }.  
1f5a0 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
1f5b0 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
1f5c0 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
1f5d0 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65   ever cast to te
1f5e0 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d  xt */.  UPDATE_M
1f5f0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
1f600 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1f610 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20  * Opcode: Rowid 
1f620 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1f630 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73  * Store in regis
1f640 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
1f650 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b  r which is the k
1f660 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ey of the table 
1f670 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31  entry that.** P1
1f680 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
1f690 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31  int to..**.** P1
1f6a0 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61   can be either a
1f6b0 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
1f6c0 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61   or a virtual ta
1f6d0 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64  ble.  There used
1f6e0 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61   to.** be a sepa
1f6f0 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f  rate OP_VRowid o
1f700 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69  pcode for use wi
1f710 74 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  th virtual table
1f720 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f  s, but this.** o
1f730 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f  ne opcode now wo
1f740 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62  rks for both tab
1f750 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73  le types..*/.cas
1f760 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20  e OP_Rowid: {   
1f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f780 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
1f790 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1f7a0 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20   *pC;.  i64 v;. 
1f7b0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
1f7c0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
1f7d0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
1f7e0 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
1f7f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1f800 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1f810 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1f820 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1f830 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1f840 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  );.  if( pC->nul
1f850 6c 52 6f 77 20 29 7b 0a 20 20 20 20 2f 2a 20 44  lRow ){.    /* D
1f860 6f 20 6e 6f 74 68 69 6e 67 20 73 6f 20 74 68 61  o nothing so tha
1f870 74 20 72 65 67 5b 50 32 5d 20 72 65 6d 61 69 6e  t reg[P2] remain
1f880 73 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72  s NULL */.    br
1f890 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
1f8a0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1f8b0 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
1f8c0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
1f8d0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
1f8e0 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a  >pseudoTable ){.
1f8f0 20 20 20 20 76 20 3d 20 70 43 2d 3e 69 4b 65 79      v = pC->iKey
1f900 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1f910 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1f920 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  LE.  }else if( p
1f930 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  C->pVtabCursor )
1f940 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43  {.    pVtab = pC
1f950 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
1f960 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c  Vtab;.    pModul
1f970 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
1f980 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  le;.    assert( 
1f990 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20  pModule->xRowid 
1f9a0 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  );.    if( sqlit
1f9b0 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
1f9c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1f9d0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
1f9e0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  rc = pModule->xR
1f9f0 6f 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75  owid(pC->pVtabCu
1fa00 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 73  rsor, &v);.    s
1fa10 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
1fa20 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
1fa30 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
1fa40 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
1fa50 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73     pVtab->zErrMs
1fa60 67 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 73  g = 0;.    if( s
1fa70 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
1fa80 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
1fa90 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 23  due_to_misuse;.#
1faa0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
1fab0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1fac0 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  E */.  }else{.  
1fad0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1fae0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
1faf0 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
1fb00 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1fb10 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
1fb20 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1fb30 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  id ){.      v = 
1fb40 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  pC->lastRowid;. 
1fb50 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1fb60 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1fb70 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  sor!=0 );.      
1fb80 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
1fb90 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
1fba0 20 26 76 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   &v);.    }.  }.
1fbb0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b    pOut->u.i = v;
1fbc0 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
1fbd0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
1fbe0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1fbf0 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77   Opcode: NullRow
1fc00 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
1fc10 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f  * Move the curso
1fc20 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72  r P1 to a null r
1fc30 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75  ow.  Any OP_Colu
1fc40 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a  mn operations.**
1fc50 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c   that occur whil
1fc60 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  e the cursor is 
1fc70 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20  on the null row 
1fc80 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77  will always.** w
1fc90 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a  rite a NULL..*/.
1fca0 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a  case OP_NullRow:
1fcb0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1fcc0 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
1fcd0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1fce0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1fcf0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1fd00 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1fd10 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1fd20 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1fd30 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   1;.  pC->rowidI
1fd40 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66  sValid = 0;.  if
1fd50 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b  ( pC->pCursor ){
1fd60 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1fd70 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
1fd80 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  >pCursor);.  }. 
1fd90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1fda0 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
1fdb0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
1fdc0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
1fdd0 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
1fde0 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
1fdf0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
1fe00 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
1fe10 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
1fe20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
1fe30 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
1fe40 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
1fe50 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
1fe60 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
1fe70 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1fe80 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
1fe90 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
1fea0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
1feb0 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
1fec0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
1fed0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
1fee0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
1fef0 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20   OP_Last: {     
1ff00 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
1ff10 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1ff20 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1ff30 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
1ff40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1ff50 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1ff60 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1ff70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1ff80 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1ff90 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
1ffa0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
1ffb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
1ffc0 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  !=0 );.  rc = sq
1ffd0 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
1ffe0 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70  Crsr, &res);.  p
1fff0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
20000 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  )res;.  pC->defe
20010 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
20020 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
20030 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  id = 0;.  pC->ca
20040 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
20050 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72  E_STALE;.  if( r
20060 65 73 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20  es && pOp->p2>0 
20070 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
20080 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
20090 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
200a0 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20  ode: Sort P1 P2 
200b0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
200c0 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61   opcode does exa
200d0 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
200e0 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64  ing as OP_Rewind
200f0 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
20100 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e  it increments an
20110 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c   undocumented gl
20120 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73  obal variable us
20130 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a  ed for testing..
20140 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73  **.** Sorting is
20150 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79   accomplished by
20160 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73   writing records
20170 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20   into a sorting 
20180 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72  index,.** then r
20190 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e  ewinding that in
201a0 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20  dex and playing 
201b0 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67  it back from beg
201c0 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64  inning to.** end
201d0 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50  .  We use the OP
201e0 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73  _Sort opcode ins
201f0 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e  tead of OP_Rewin
20200 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72  d to do the.** r
20210 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74  ewinding so that
20220 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
20230 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63  able will be inc
20240 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20  remented and.** 
20250 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
20260 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77   can determine w
20270 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
20280 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a  e optimizer is.*
20290 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69  * correctly opti
202a0 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73  mizing out sorts
202b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
202c0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
202d0 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
202e0 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
202f0 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
20300 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
20310 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
20320 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
20330 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
20340 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20  US_SORT-1]++;.  
20350 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
20360 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a  into OP_Rewind *
20370 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  /.}./* Opcode: R
20380 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20  ewind P1 P2 * * 
20390 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
203a0 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
203b0 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e  d or Column or N
203c0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
203d0 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
203e0 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72  refer to the fir
203f0 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
20400 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
20410 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
20420 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
20430 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50  x is empty and P
20440 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  2>0, then jump i
20450 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
20460 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20  ..** If P2 is 0 
20470 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  or if the table 
20480 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
20490 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
204a0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
204b0 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
204c0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
204d0 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20  Rewind: {       
204e0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
204f0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
20500 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
20510 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
20520 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
20530 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
20540 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
20550 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
20560 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
20570 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  C!=0 );.  if( (p
20580 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
20590 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63  or)!=0 ){.    rc
205a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
205b0 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  irst(pCrsr, &res
205c0 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46 69 72  );.    pC->atFir
205d0 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30  st = res==0 ?1:0
205e0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
205f0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
20600 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
20610 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
20620 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
20630 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 65 6c  Valid = 0;.  }el
20640 73 65 7b 0a 20 20 20 20 72 65 73 20 3d 20 31 3b  se{.    res = 1;
20650 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  .  }.  pC->nullR
20660 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
20670 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
20680 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
20690 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20 72 65 73  nOp );.  if( res
206a0 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
206b0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
206c0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
206d0 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20  ode: Next P1 P2 
206e0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61  * * *.**.** Adva
206f0 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
20700 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
20710 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
20720 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
20730 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
20740 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
20750 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
20760 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
20770 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
20780 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
20790 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
207a0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
207b0 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
207c0 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
207d0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
207e0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  2..**.** The P1 
207f0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
20800 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
20810 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
20820 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ble..**.** See a
20830 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20  lso: Prev.*/./* 
20840 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20  Opcode: Prev P1 
20850 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42  P2 * * *.**.** B
20860 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
20870 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
20880 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
20890 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
208a0 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
208b0 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
208c0 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
208d0 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
208e0 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
208f0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
20900 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
20910 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
20920 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
20930 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
20940 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
20950 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
20960 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
20970 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
20980 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
20990 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
209a0 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20  .case OP_Prev:  
209b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
209c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a  */.case OP_Next:
209d0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
209e0 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
209f0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
20a00 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
20a10 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f  res;..  CHECK_FO
20a20 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61  R_INTERRUPT;.  a
20a30 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
20a40 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
20a50 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
20a60 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
20a70 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30  p1];.  if( pC==0
20a80 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20 20   ){.    break;  
20a90 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23 32  /* See ticket #2
20aa0 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70 43 72  273 */.  }.  pCr
20ab0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
20ac0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
20ad0 72 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a  r );.  res = 1;.
20ae0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
20af0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
20b00 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 6f  );.  rc = pOp->o
20b10 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74 20 3f  pcode==OP_Next ?
20b20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
20b30 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 20 3a  t(pCrsr, &res) :
20b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20b60 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
20b70 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65 73 29  ous(pCrsr, &res)
20b80 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
20b90 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
20ba0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
20bb0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
20bc0 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
20bd0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
20be0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
20bf0 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  5 ) p->aCounter[
20c00 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69  pOp->p5-1]++;.#i
20c10 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
20c20 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
20c30 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
20c40 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f  dif.  }.  pC->ro
20c50 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
20c60 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
20c70 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74  pcode: IdxInsert
20c80 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
20c90 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32  *.** Register P2
20ca0 20 68 6f 6c 64 73 20 61 20 53 51 4c 20 69 6e 64   holds a SQL ind
20cb0 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e  ex key made usin
20cc0 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63  g the.** MakeRec
20cd0 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ord instructions
20ce0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
20cf0 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a  rites that key.*
20d00 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78  * into the index
20d10 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74   P1.  Data for t
20d20 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e  he entry is nil.
20d30 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66  .**.** P3 is a f
20d40 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65  lag that provide
20d50 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
20d60 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61  b-tree layer tha
20d70 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74  t this.** insert
20d80 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
20d90 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a   an append..**.*
20da0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
20db0 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  on only works fo
20dc0 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20  r indices.  The 
20dd0 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
20de0 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61  uction.** for ta
20df0 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72  bles is OP_Inser
20e00 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  t..*/.case OP_Id
20e10 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20  xInsert: {      
20e20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
20e30 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
20e40 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
20e50 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63  .  int nKey;.  c
20e60 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b  onst char *zKey;
20e70 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
20e80 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
20e90 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
20ea0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
20eb0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
20ec0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
20ed0 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61  ssert( pIn2->fla
20ee0 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
20ef0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
20f00 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43  Cursor;.  if( pC
20f10 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  rsr!=0 ){.    as
20f20 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
20f30 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  e==0 );.    rc =
20f40 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
20f50 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
20f60 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
20f70 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e    nKey = pIn2->n
20f80 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70  ;.      zKey = p
20f90 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63  In2->z;.      rc
20fa0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
20fb0 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65  nsert(pCrsr, zKe
20fc0 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20  y, nKey, "", 0, 
20fd0 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20  0, pOp->p3, .   
20fe0 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35         ((pOp->p5
20ff0 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
21000 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
21010 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20  eekResult : 0). 
21020 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73       );.      as
21030 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
21040 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
21050 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74       pC->cacheSt
21060 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
21070 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  LE;.    }.  }.  
21080 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
21090 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50  ode: IdxDelete P
210a0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
210b0 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
210c0 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
210d0 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
210e0 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
210f0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
21100 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
21110 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
21120 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
21130 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
21140 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
21150 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
21160 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
21170 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
21180 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61 73 73 65   *pCrsr;..  asse
21190 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
211a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
211b0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
211c0 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
211d0 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
211e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
211f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
21200 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
21210 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
21220 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
21230 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
21240 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43  Cursor;.  if( pC
21250 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e  rsr!=0 ){.    in
21260 74 20 72 65 73 3b 0a 20 20 20 20 55 6e 70 61 63  t res;.    Unpac
21270 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 20  kedRecord r;.   
21280 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
21290 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
212a0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
212b0 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66  pOp->p3;.    r.f
212c0 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e  lags = 0;.    r.
212d0 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  aMem = &p->aMem[
212e0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 72 63  pOp->p2];.    rc
212f0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
21300 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
21310 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
21320 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
21330 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
21340 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  es==0 ){.      r
21350 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21360 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20  Delete(pCrsr);. 
21370 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
21380 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
21390 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43  eto==0 );.    pC
213a0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
213b0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
213c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
213d0 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
213e0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
213f0 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
21400 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74  gister P2 an int
21410 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
21420 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
21430 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a  the record at.**
21440 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
21450 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65  index key pointe
21460 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50  d to by cursor P
21470 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72  1.  This integer
21480 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68   should be.** th
21490 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74  e rowid of the t
214a0 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68  able entry to wh
214b0 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65  ich this index e
214c0 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a  ntry points..**.
214d0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77  ** See also: Row
214e0 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a  id, MakeRecord..
214f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f  */.case OP_IdxRo
21500 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
21510 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
21520 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75  elease */.  BtCu
21530 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56  rsor *pCrsr;.  V
21540 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
21550 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61   i64 rowid;..  a
21560 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
21570 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
21580 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
21590 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
215a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
215b0 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
215c0 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
215d0 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b   if( pCrsr!=0 ){
215e0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
215f0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
21600 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72  o(pC);.    if( r
21610 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
21620 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
21630 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
21640 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
21650 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
21660 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
21670 20 20 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c      if( !pC->nul
21680 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 72 63  lRow ){.      rc
21690 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
216a0 78 52 6f 77 69 64 28 70 43 72 73 72 2c 20 26 72  xRowid(pCrsr, &r
216b0 6f 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28  owid);.      if(
216c0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
216d0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
216e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
216f0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
21700 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
21710 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
21720 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20        pOut->u.i 
21730 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
21740 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
21750 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
21760 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
21770 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
21780 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
21790 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
217a0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
217b0 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
217c0 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49  t omits the ROWI
217d0 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
217e0 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
217f0 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
21800 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
21810 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
21820 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
21830 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
21840 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
21850 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
21860 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
21870 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
21880 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
21890 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
218a0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
218b0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
218c0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
218d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
218e0 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74   non-zero then t
218f0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20  he key value is 
21900 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20  increased by an 
21910 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f  epsilon .** prio
21920 72 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  r to the compari
21930 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20  son.  This make 
21940 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20  the opcode work 
21950 6c 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70  like IdxGT excep
21960 74 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65  t.** that if the
21970 20 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74   key from regist
21980 65 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69  er P3 is a prefi
21990 78 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20  x of the key in 
219a0 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74  the cursor,.** t
219b0 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c  he result is fal
219c0 73 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f  se whereas it wo
219d0 75 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68  uld be true with
219e0 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70   IdxGT..*/./* Op
219f0 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50  code: IdxLT P1 P
21a00 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
21a10 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
21a20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
21a30 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
21a40 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
21a50 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
21a60 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
21a70 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
21a80 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
21a90 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
21aa0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
21ab0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
21ac0 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
21ad0 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
21ae0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
21af0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
21b00 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
21b10 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
21b20 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
21b30 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
21b40 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
21b50 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
21b60 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
21b70 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
21b80 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
21b90 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
21ba0 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20  on prior .** to 
21bb0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
21bc0 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20   This makes the 
21bd0 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
21be0 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20   IdxLE..*/.case 
21bf0 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
21c00 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
21c10 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
21c20 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
21c30 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62  mp, in3 */.  Vdb
21c40 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
21c50 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
21c60 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61  edRecord r;..  a
21c70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
21c80 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
21c90 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
21ca0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
21cb0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
21cc0 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43  C!=0 );.  if( pC
21cd0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a  ->pCursor!=0 ){.
21ce0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
21cf0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
21d00 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
21d10 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
21d20 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20  Op->p5==1 );.   
21d30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
21d40 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
21d50 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  ;.    r.pKeyInfo
21d60 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
21d70 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
21d80 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
21d90 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
21da0 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  ){.      r.flags
21db0 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52   = UNPACKED_INCR
21dc0 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f 49  KEY | UNPACKED_I
21dd0 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20  GNORE_ROWID;.   
21de0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e   }else{.      r.
21df0 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
21e00 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20  _IGNORE_ROWID;. 
21e10 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20     }.    r.aMem 
21e20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
21e30 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  p3];.    rc = sq
21e40 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
21e50 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26  ompare(pC, &r, &
21e60 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
21e70 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
21e80 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65 73  xLT ){.      res
21e90 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c   = -res;.    }el
21ea0 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
21eb0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
21ec0 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20 20  P_IdxGE );.     
21ed0 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   res++;.    }.  
21ee0 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20    if( res>0 ){. 
21ef0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
21f00 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20  2 - 1 ;.    }.  
21f10 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
21f20 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
21f30 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
21f40 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
21f50 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
21f60 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
21f70 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
21f80 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
21f90 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
21fa0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
21fb0 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
21fc0 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
21fd0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
21fe0 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
21ff0 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
22000 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
22010 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
22020 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
22030 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
22040 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
22050 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
22060 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
22070 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
22080 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
22090 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
220a0 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
220b0 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
220c0 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
220d0 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
220e0 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
220f0 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
22100 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
22110 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
22120 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
22130 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
22140 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
22150 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
22160 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
22170 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
22180 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
22190 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
221a0 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
221b0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
221c0 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
221d0 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
221e0 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
221f0 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
22200 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
22210 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
22220 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
22230 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
22240 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
22250 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
22260 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
22270 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
22280 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
22290 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
222a0 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
222b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
222c0 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
222d0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
222e0 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
222f0 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64 62   int iCnt;.  Vdb
22300 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74 20  e *pVdbe;.  int 
22310 69 44 62 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  iDb;.#ifndef SQL
22320 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
22330 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30  TABLE.  iCnt = 0
22340 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62  ;.  for(pVdbe=db
22350 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20  ->pVdbe; pVdbe; 
22360 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70  pVdbe = pVdbe->p
22370 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70  Next){.    if( p
22380 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  Vdbe->magic==VDB
22390 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70  E_MAGIC_RUN && p
223a0 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68  Vdbe->inVtabMeth
223b0 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70  od<2 && pVdbe->p
223c0 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 43  c>=0 ){.      iC
223d0 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  nt++;.    }.  }.
223e0 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64  #else.  iCnt = d
223f0 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
22400 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69  ;.#endif.  if( i
22410 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20  Cnt>1 ){.    rc 
22420 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
22430 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  .    p->errorAct
22440 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a  ion = OE_Abort;.
22450 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62    }else{.    iDb
22460 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   = pOp->p3;.    
22470 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d 31 20  assert( iCnt==1 
22480 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
22490 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
224a0 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20  1<<iDb))!=0 );. 
224b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
224c0 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62  treeDropTable(db
224d0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
224e0 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64  pOp->p1, &iMoved
224f0 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  );.    MemSetTyp
22500 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
22510 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Int);.    pOut->
22520 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69  u.i = iMoved;.#i
22530 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
22540 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20  T_AUTOVACUUM.   
22550 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
22560 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20  OK && iMoved!=0 
22570 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
22580 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 26 64  RootPageMoved(&d
22590 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20 69 4d 6f  b->aDb[iDb], iMo
225a0 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  ved, pOp->p1);. 
225b0 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
225c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
225d0 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20  pcode: Clear P1 
225e0 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
225f0 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
22600 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
22610 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
22620 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a  hose root page.*
22630 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  * in the databas
22640 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  e file is given 
22650 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c  by P1.  But, unl
22660 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20  ike Destroy, do 
22670 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68  not.** remove th
22680 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
22690 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
226a0 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
226b0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
226c0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d  lear is in the m
226d0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
226e0 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a  e if P2==0.  If.
226f0 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68  ** P2==1 then th
22700 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
22710 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
22720 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
22730 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
22740 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
22750 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
22760 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
22770 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
22780 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
22790 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
227a0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66  en the table ref
227b0 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65  erred to must be
227c0 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61   an.** intkey ta
227d0 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c  ble (an SQL tabl
227e0 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29  e, not an index)
227f0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
22800 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a  he row change .*
22810 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  * count is incre
22820 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
22830 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
22840 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
22850 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20  cleared. .** If 
22860 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
22870 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  an zero, then th
22880 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
22890 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
228a0 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65  .** also increme
228b0 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
228c0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
228d0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
228e0 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  eared..**.** See
228f0 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
22900 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
22910 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65   {.  int nChange
22920 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20  ;. .  nChange = 
22930 30 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  0;.  assert( (p-
22940 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
22950 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29 3b  <pOp->p2))!=0 );
22960 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
22970 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a  treeClearTable(.
22980 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f        db->aDb[pO
22990 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d  p->p2].pBt, pOp-
229a0 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20  >p1, (pOp->p3 ? 
229b0 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20  &nChange : 0).  
229c0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  );.  if( pOp->p3
229d0 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
229e0 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  ge += nChange;. 
229f0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30     if( pOp->p3>0
22a00 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 61 4d 65   ){.      p->aMe
22a10 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
22a20 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
22a30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
22a40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
22a50 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20  teTable P1 P2 * 
22a60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  * *.**.** Alloca
22a70 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
22a80 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
22a90 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
22aa0 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
22ab0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
22ac0 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
22ad0 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
22ae0 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
22af0 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
22b00 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
22b10 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
22b20 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
22b30 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
22b40 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
22b50 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
22b60 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
22b70 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
22b80 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
22b90 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
22ba0 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
22bb0 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
22bc0 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
22bd0 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
22be0 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
22bf0 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
22c00 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
22c10 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
22c20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
22c30 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
22c40 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61   index in the ma
22c50 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
22c60 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
22c70 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
22c80 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
22c90 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
22ca0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
22cb0 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
22cc0 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
22cd0 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
22ce0 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
22cf0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
22d00 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d  .**.** See docum
22d10 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43  entation on OP_C
22d20 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61  reateTable for a
22d30 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
22d40 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
22d50 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20  P_CreateIndex:  
22d60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
22d70 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
22d80 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
22d90 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
22da0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
22db0 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f  se */.  int pgno
22dc0 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20  ;.  int flags;. 
22dd0 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e   Db *pDb;..  pgn
22de0 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
22df0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
22e00 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
22e10 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
22e20 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
22e30 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
22e40 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
22e50 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
22e60 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
22e70 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
22e80 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65  pcode==OP_Create
22e90 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
22ea0 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
22eb0 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61  TKEY; */.    fla
22ec0 67 73 20 3d 20 42 54 52 45 45 5f 4c 45 41 46 44  gs = BTREE_LEAFD
22ed0 41 54 41 7c 42 54 52 45 45 5f 49 4e 54 4b 45 59  ATA|BTREE_INTKEY
22ee0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66  ;.  }else{.    f
22ef0 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 5a 45 52  lags = BTREE_ZER
22f00 4f 44 41 54 41 3b 0a 20 20 7d 0a 20 20 72 63 20  ODATA;.  }.  rc 
22f10 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
22f20 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70  eateTable(pDb->p
22f30 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73  Bt, &pgno, flags
22f40 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
22f50 20 70 67 6e 6f 3b 0a 20 20 4d 65 6d 53 65 74 54   pgno;.  MemSetT
22f60 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
22f70 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
22f80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
22f90 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 50 32  arseSchema P1 P2
22fa0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
22fb0 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c  ad and parse all
22fc0 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
22fd0 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
22fe0 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73  table of databas
22ff0 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74  e P1.** that mat
23000 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  ch the WHERE cla
23010 75 73 65 20 50 34 2e 20 20 50 32 20 69 73 20 74  use P4.  P2 is t
23020 68 65 20 22 66 6f 72 63 65 22 20 66 6c 61 67 2e  he "force" flag.
23030 20 20 20 41 6c 77 61 79 73 20 64 6f 0a 2a 2a 20     Always do.** 
23040 74 68 65 20 70 61 72 73 69 6e 67 20 69 66 20 50  the parsing if P
23050 32 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 50  2 is true.  If P
23060 32 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 6e  2 is false, then
23070 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   this routine is
23080 20 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20 74   a.** no-op if t
23090 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e 6f 74  he schema is not
230a0 20 63 75 72 72 65 6e 74 6c 79 20 6c 6f 61 64 65   currently loade
230b0 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
230c0 64 73 2c 20 69 66 20 50 32 0a 2a 2a 20 69 73 20  ds, if P2.** is 
230d0 66 61 6c 73 65 2c 20 74 68 65 20 53 51 4c 49 54  false, the SQLIT
230e0 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 69  E_MASTER table i
230f0 73 20 6f 6e 6c 79 20 70 61 72 73 65 64 20 69 66  s only parsed if
23100 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
23110 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 61 6c  .** schema is al
23120 72 65 61 64 79 20 6c 6f 61 64 65 64 20 69 6e 74  ready loaded int
23130 6f 20 74 68 65 20 73 79 6d 62 6f 6c 20 74 61 62  o the symbol tab
23140 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
23150 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
23160 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61  e parser to crea
23170 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c  te a new virtual
23180 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65   machine,.** the
23190 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76  n runs the new v
231a0 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
231b0 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65   It is thus a re
231c0 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e  -entrant opcode.
231d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73  .*/.case OP_Pars
231e0 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74  eSchema: {.  int
231f0 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   iDb;.  const ch
23200 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63  ar *zMaster;.  c
23210 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69  har *zSql;.  Ini
23220 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
23230 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
23240 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
23250 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
23260 62 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 70 4f  b );..  /* If pO
23270 70 2d 3e 70 32 20 69 73 20 30 2c 20 74 68 65 6e  p->p2 is 0, then
23280 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
23290 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 20 74  being executed t
232a0 6f 20 72 65 61 64 20 61 0a 20 20 2a 2a 20 73 69  o read a.  ** si
232b0 6e 67 6c 65 20 72 6f 77 2c 20 66 6f 72 20 65 78  ngle row, for ex
232c0 61 6d 70 6c 65 20 74 68 65 20 72 6f 77 20 63 6f  ample the row co
232d0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61  rresponding to a
232e0 20 6e 65 77 20 69 6e 64 65 78 0a 20 20 2a 2a 20   new index.  ** 
232f0 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20  created by this 
23300 56 44 42 45 2c 20 66 72 6f 6d 20 74 68 65 20 73  VDBE, from the s
23310 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
23320 6c 65 2e 20 49 74 20 6f 6e 6c 79 0a 20 20 2a 2a  le. It only.  **
23330 20 64 6f 65 73 20 74 68 69 73 20 69 66 20 74 68   does this if th
23340 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
23350 69 6e 2d 6d 65 6d 6f 72 79 20 73 63 68 65 6d 61  in-memory schema
23360 20 69 73 20 63 75 72 72 65 6e 74 6c 79 0a 20 20   is currently.  
23370 2a 2a 20 6c 6f 61 64 65 64 2e 20 4f 74 68 65 72  ** loaded. Other
23380 77 69 73 65 2c 20 74 68 65 20 6e 65 77 20 69 6e  wise, the new in
23390 64 65 78 20 64 65 66 69 6e 69 74 69 6f 6e 20 63  dex definition c
233a0 61 6e 20 62 65 20 6c 6f 61 64 65 64 20 61 6c 6f  an be loaded alo
233b0 6e 67 0a 20 20 2a 2a 20 77 69 74 68 20 74 68 65  ng.  ** with the
233c0 20 72 65 73 74 20 6f 66 20 74 68 65 20 73 63 68   rest of the sch
233d0 65 6d 61 20 77 68 65 6e 20 69 74 20 69 73 20 72  ema when it is r
233e0 65 71 75 69 72 65 64 2e 0a 20 20 2a 2a 0a 20 20  equired..  **.  
233f0 2a 2a 20 41 6c 74 68 6f 75 67 68 20 74 68 65 20  ** Although the 
23400 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 42 74 53  mutex on the BtS
23410 68 61 72 65 64 20 6f 62 6a 65 63 74 20 74 68 61  hared object tha
23420 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
23430 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 69  .  ** database i
23440 44 62 20 28 74 68 65 20 64 61 74 61 62 61 73 65  Db (the database
23450 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
23460 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
23470 62 6c 65 0a 20 20 2a 2a 20 72 65 61 64 20 62 79  ble.  ** read by
23480 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
23490 6e 29 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  n) is currently 
234a0 68 65 6c 64 2c 20 69 74 20 69 73 20 6e 65 63 65  held, it is nece
234b0 73 73 61 72 79 20 74 6f 0a 20 20 2a 2a 20 6f 62  ssary to.  ** ob
234c0 74 61 69 6e 20 74 68 65 20 6d 75 74 65 78 65 73  tain the mutexes
234d0 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64   on all attached
234e0 20 64 61 74 61 62 61 73 65 73 20 62 65 66 6f 72   databases befor
234f0 65 20 63 68 65 63 6b 69 6e 67 20 69 66 0a 20 20  e checking if.  
23500 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  ** the schema of
23510 20 69 44 62 20 69 73 20 6c 6f 61 64 65 64 2e 20   iDb is loaded. 
23520 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 2c  This is because,
23530 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66   at the start of
23540 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74 65  .  ** the sqlite
23550 33 5f 65 78 65 63 28 29 20 63 61 6c 6c 20 62 65  3_exec() call be
23560 6c 6f 77 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c  low, SQLite will
23570 20 69 6e 76 6f 6b 65 20 0a 20 20 2a 2a 20 73 71   invoke .  ** sq
23580 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41  lite3BtreeEnterA
23590 6c 6c 28 29 2e 20 49 66 20 61 6c 6c 20 6d 75 74  ll(). If all mut
235a0 65 78 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 72  exes are not alr
235b0 65 61 64 79 20 68 65 6c 64 2c 20 74 68 65 0a 20  eady held, the. 
235c0 20 2a 2a 20 69 44 62 20 6d 75 74 65 78 20 6d 61   ** iDb mutex ma
235d0 79 20 62 65 20 74 65 6d 70 6f 72 61 72 69 6c 79  y be temporarily
235e0 20 72 65 6c 65 61 73 65 64 20 74 6f 20 61 76 6f   released to avo
235f0 69 64 20 64 65 61 64 6c 6f 63 6b 2e 20 49 66 20  id deadlock. If 
23600 0a 20 20 2a 2a 20 74 68 69 73 20 68 61 70 70 65  .  ** this happe
23610 6e 73 2c 20 74 68 65 6e 20 73 6f 6d 65 20 6f 74  ns, then some ot
23620 68 65 72 20 74 68 72 65 61 64 20 6d 61 79 20 64  her thread may d
23630 65 6c 65 74 65 20 74 68 65 20 69 6e 2d 6d 65 6d  elete the in-mem
23640 6f 72 79 20 0a 20 20 2a 2a 20 73 63 68 65 6d 61  ory .  ** schema
23650 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62   of database iDb
23660 20 62 65 66 6f 72 65 20 74 68 65 20 53 51 4c 20   before the SQL 
23670 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2e 20  statement runs. 
23680 54 68 65 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20  The schema.  ** 
23690 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 6c 6f  will not be relo
236a0 61 64 65 64 20 62 65 63 75 61 73 65 20 74 68 65  aded becuase the
236b0 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 66   db->init.busy f
236c0 6c 61 67 20 69 73 20 73 65 74 2e 20 54 68 69 73  lag is set. This
236d0 0a 20 20 2a 2a 20 63 61 6e 20 72 65 73 75 6c 74  .  ** can result
236e0 20 69 6e 20 61 20 22 6e 6f 20 73 75 63 68 20 74   in a "no such t
236f0 61 62 6c 65 3a 20 73 71 6c 69 74 65 5f 6d 61 73  able: sqlite_mas
23700 74 65 72 22 20 6f 72 20 22 6d 61 6c 66 6f 72 6d  ter" or "malform
23710 65 64 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  ed.  ** database
23720 20 73 63 68 65 6d 61 22 20 65 72 72 6f 72 20 62   schema" error b
23730 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 74 6f  eing returned to
23740 20 74 68 65 20 75 73 65 72 2e 0a 20 20 2a 2f 0a   the user..  */.
23750 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
23760 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78  3BtreeHoldsMutex
23770 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
23780 74 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42  t) );.  sqlite3B
23790 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 64 62 29  treeEnterAll(db)
237a0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  ;.  if( pOp->p2 
237b0 7c 7c 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  || DbHasProperty
237c0 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68  (db, iDb, DB_Sch
237d0 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20  emaLoaded) ){.  
237e0 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45    zMaster = SCHE
237f0 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20  MA_TABLE(iDb);. 
23800 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d     initData.db =
23810 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74   db;.    initDat
23820 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b  a.iDb = pOp->p1;
23830 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a  .    initData.pz
23840 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72  ErrMsg = &p->zEr
23850 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  rMsg;.    zSql =
23860 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
23870 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  db,.       "SELE
23880 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67  CT name, rootpag
23890 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27  e, sql FROM '%q'
238a0 2e 25 73 20 57 48 45 52 45 20 25 73 22 2c 0a 20  .%s WHERE %s",. 
238b0 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44        db->aDb[iD
238c0 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65  b].zName, zMaste
238d0 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  r, pOp->p4.z);. 
238e0 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29     if( zSql==0 )
238f0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
23900 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d  ITE_NOMEM;.    }
23910 65 6c 73 65 7b 0a 20 20 20 20 20 20 28 76 6f 69  else{.      (voi
23920 64 29 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  d)sqlite3SafetyO
23930 66 66 28 64 62 29 3b 0a 20 20 20 20 20 20 61 73  ff(db);.      as
23940 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
23950 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  usy==0 );.      
23960 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
23970 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74  1;.      initDat
23980 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
23990 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
239a0 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
239b0 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  d );.      rc = 
239c0 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
239d0 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e   zSql, sqlite3In
239e0 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69  itCallback, &ini
239f0 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  tData, 0);.     
23a00 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
23a10 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61  OK ) rc = initDa
23a20 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c  ta.rc;.      sql
23a30 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
23a40 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Sql);.      db->
23a50 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20  init.busy = 0;. 
23a60 20 20 20 20 20 28 76 6f 69 64 29 73 71 6c 69 74       (void)sqlit
23a70 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a  e3SafetyOn(db);.
23a80 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
23a90 74 65 33 42 74 72 65 65 4c 65 61 76 65 41 6c 6c  te3BtreeLeaveAll
23aa0 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  (db);.  if( rc==
23ab0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
23ac0 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
23ad0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a  .  }.  break;  .
23ae0 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
23af0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
23b00 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  YZE)./* Opcode: 
23b10 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20  LoadAnalysis P1 
23b20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65  * * * *.**.** Re
23b30 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  ad the sqlite_st
23b40 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61  at1 table for da
23b50 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f  tabase P1 and lo
23b60 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  ad the content.*
23b70 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20  * of that table 
23b80 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61  into the interna
23b90 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62  l index hash tab
23ba0 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  le.  This will c
23bb0 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c  ause.** the anal
23bc0 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  ysis to be used 
23bd0 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61  when preparing a
23be0 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75  ll subsequent qu
23bf0 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eries..*/.case O
23c00 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20  P_LoadAnalysis: 
23c10 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
23c20 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
23c30 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72  1<db->nDb );.  r
23c40 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  c = sqlite3Analy
23c50 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d  sisLoad(db, pOp-
23c60 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20  >p1);.  break;  
23c70 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
23c80 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
23c90 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f  T_ANALYZE) */../
23ca0 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61  * Opcode: DropTa
23cb0 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ble P1 * * P4 *.
23cc0 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
23cd0 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
23ce0 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
23cf0 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
23d00 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65  ibe.** the table
23d10 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
23d20 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
23d30 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
23d40 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72  a table.** is dr
23d50 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74  opped in order t
23d60 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
23d70 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
23d80 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
23d90 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
23da0 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
23db0 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
23dc0 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73  DropTable: {.  s
23dd0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
23de0 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70  eleteTable(db, p
23df0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
23e00 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
23e10 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49  /* Opcode: DropI
23e20 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a  ndex P1 * * P4 *
23e30 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
23e40 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
23e50 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
23e60 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
23e70 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65  ribe.** the inde
23e80 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  x named P4 in da
23e90 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
23ea0 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
23eb0 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20   an index.** is 
23ec0 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
23ed0 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
23ee0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
23ef0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
23f00 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
23f10 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
23f20 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
23f30 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
23f40 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
23f50 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
23f60 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
23f70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
23f80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
23f90 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20  pTrigger P1 * * 
23fa0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
23fb0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
23fc0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
23fd0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
23fe0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
23ff0 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34  trigger named P4
24000 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
24010 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
24020 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72   after a trigger
24030 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
24040 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
24050 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
24060 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
24070 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
24080 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
24090 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
240a0 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69  .case OP_DropTri
240b0 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65  gger: {.  sqlite
240c0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
240d0 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d  Trigger(db, pOp-
240e0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
240f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
24100 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24110 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
24120 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  K./* Opcode: Int
24130 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50  egrityCk P1 P2 P
24140 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20  3 * P5.**.** Do 
24150 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  an analysis of t
24160 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
24170 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f  n database.  Sto
24180 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  re in.** registe
24190 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66  r P1 the text of
241a0 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
241b0 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79  e describing any
241c0 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66   problems..** If
241d0 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65   no problems are
241e0 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20   found, store a 
241f0 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72  NULL in register
24200 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   P1..**.** The r
24210 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
24220 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ins the maximum 
24230 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
24240 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20  d errors..** At 
24250 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72  most reg(P3) err
24260 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f  ors will be repo
24270 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rted..** In othe
24280 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61  r words, the ana
24290 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73  lysis stops as s
242a0 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65  oon as reg(P1) e
242b0 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65  rrors are .** se
242c0 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20  en.  Reg(P1) is 
242d0 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
242e0 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   number of error
242f0 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a  s remaining..**.
24300 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
24310 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20   numbers of all 
24320 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61  tables in the da
24330 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67  tabase are integ
24340 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  er.** stored in 
24350 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b  reg(P1), reg(P1+
24360 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e  1), reg(P1+2), .
24370 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50  ...  There are P
24380 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61  2 tables.** tota
24390 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  l..**.** If P5 i
243a0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20  s not zero, the 
243b0 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e  check is done on
243c0 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
243d0 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c  atabase.** file,
243e0 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61   not the main da
243f0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
24400 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
24410 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
24420 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74  ent the integrit
24430 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a  y_check pragma..
24440 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
24450 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20  rityCk: {.  int 
24460 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e  nRoot;      /* N
24470 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
24480 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62  to check.  (Numb
24490 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73  er of root pages
244a0 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f  .) */.  int *aRo
244b0 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ot;     /* Array
244c0 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d   of rootpage num
244d0 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20  bers for tables 
244e0 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f  to be checked */
244f0 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20  .  int j;       
24500 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
24510 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  er */.  int nErr
24520 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
24530 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
24540 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
24550 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
24560 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
24570 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
24580 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
24590 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
245a0 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
245b0 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20  emaining */.  . 
245c0 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32   nRoot = pOp->p2
245d0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f  ;.  assert( nRoo
245e0 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d  t>0 );.  aRoot =
245f0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
24600 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69  Raw(db, sizeof(i
24610 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b  nt)*(nRoot+1) );
24620 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20  .  if( aRoot==0 
24630 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
24640 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
24650 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
24660 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72  ->nMem );.  pnEr
24670 72 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  r = &p->aMem[pOp
24680 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
24690 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
246a0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
246b0 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
246c0 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
246d0 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
246e0 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d   );.  pIn1 = &p-
246f0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
24700 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f    for(j=0; j<nRo
24710 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52  ot; j++){.    aR
24720 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71  oot[j] = (int)sq
24730 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
24740 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d  e(&pIn1[j]);.  }
24750 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b  .  aRoot[j] = 0;
24760 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24770 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p5<db->nDb );.  
24780 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
24790 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
247a0 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20 20 7a 20  >p5))!=0 );.  z 
247b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
247c0 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d  tegrityCheck(db-
247d0 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42  >aDb[pOp->p5].pB
247e0 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c  t, aRoot, nRoot,
247f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24810 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e    (int)pnErr->u.
24820 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c  i, &nErr);.  sql
24830 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61  ite3DbFree(db, a
24840 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e  Root);.  pnErr->
24850 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73  u.i -= nErr;.  s
24860 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
24870 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66  Null(pIn1);.  if
24880 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20  ( nErr==0 ){.   
24890 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b   assert( z==0 );
248a0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d  .  }else if( z==
248b0 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  0 ){.    goto no
248c0 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  _mem;.  }else{. 
248d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
248e0 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c  mSetStr(pIn1, z,
248f0 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
24900 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b  , sqlite3_free);
24910 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41  .  }.  UPDATE_MA
24920 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
24930 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
24940 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49  hangeEncoding(pI
24950 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
24960 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
24970 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
24980 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20  INTEGRITY_CHECK 
24990 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  */../* Opcode: R
249a0 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a  owSetAdd P1 P2 *
249b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72   * *.**.** Inser
249c0 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
249d0 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67 69  lue held by regi
249e0 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62  ster P2 into a b
249f0 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  oolean index.** 
24a00 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72  held in register
24a10 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73   P1..**.** An as
24a20 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66  sertion fails if
24a30 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P2 is not an in
24a40 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
24a50 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20  P_RowSetAdd: {  
24a60 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
24a70 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20 20 4d 65   Mem *pIdx;.  Me
24a80 6d 20 2a 70 56 61 6c 3b 0a 20 20 61 73 73 65 72  m *pVal;.  asser
24a90 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
24aa0 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p1<=p->nMem
24ab0 20 29 3b 0a 20 20 70 49 64 78 20 3d 20 26 70 2d   );.  pIdx = &p-
24ac0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
24ad0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
24ae0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d  2>0 && pOp->p2<=
24af0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 56 61  p->nMem );.  pVa
24b00 6c 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  l = &p->aMem[pOp
24b10 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
24b20 20 28 70 56 61 6c 2d 3e 66 6c 61 67 73 20 26 20   (pVal->flags & 
24b30 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
24b40 20 69 66 28 20 28 70 49 64 78 2d 3e 66 6c 61 67   if( (pIdx->flag
24b50 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
24b60 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
24b70 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
24b80 74 28 70 49 64 78 29 3b 0a 20 20 20 20 69 66 28  t(pIdx);.    if(
24b90 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20 26 20   (pIdx->flags & 
24ba0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
24bb0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
24bc0 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65  }.  sqlite3RowSe
24bd0 74 49 6e 73 65 72 74 28 70 49 64 78 2d 3e 75 2e  tInsert(pIdx->u.
24be0 70 52 6f 77 53 65 74 2c 20 70 56 61 6c 2d 3e 75  pRowSet, pVal->u
24bf0 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
24c00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
24c10 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
24c20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63  * *.**.** Extrac
24c30 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  t the smallest v
24c40 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61  alue from boolea
24c50 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70  n index P1 and p
24c60 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  ut that value in
24c70 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
24c80 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65  3.  Or, if boole
24c90 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69  an index P1 is i
24ca0 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20  nitially empty, 
24cb0 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68  leave P3.** unch
24cc0 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74  anged and jump t
24cd0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
24ce0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
24cf0 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20  SetRead: {      
24d00 20 2f 2a 20 6a 75 6d 70 2c 20 6f 75 74 33 20 2a   /* jump, out3 *
24d10 2f 0a 20 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20  /.  Mem *pIdx;. 
24d20 20 69 36 34 20 76 61 6c 3b 0a 20 20 61 73 73 65   i64 val;.  asse
24d30 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
24d40 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65   pOp->p1<=p->nMe
24d50 6d 20 29 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52  m );.  CHECK_FOR
24d60 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 49  _INTERRUPT;.  pI
24d70 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  dx = &p->aMem[pO
24d80 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
24d90 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
24da0 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 64 78 2d  3];.  if( (pIdx-
24db0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
24dc0 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73  Set)==0 .   || s
24dd0 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
24de0 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIdx->u.pRowSet
24df0 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a  , &val)==0.  ){.
24e00 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65      /* The boole
24e10 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  an index is empt
24e20 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  y */.    sqlite3
24e30 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
24e40 49 64 78 29 3b 0a 20 20 20 20 70 63 20 3d 20 70  Idx);.    pc = p
24e50 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65  Op->p2 - 1;.  }e
24e60 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
24e70 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
24e80 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
24e90 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
24ea0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
24eb0 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
24ec0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
24ed0 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 76  SetInt64(pOut, v
24ee0 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  al);.  }.  break
24ef0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
24f00 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32  RowSetTest P1 P2
24f10 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67   P3 P4.**.** Reg
24f20 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75  ister P3 is assu
24f30 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34  med to hold a 64
24f40 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
24f50 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20  ue. If register 
24f60 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P1.** contains a
24f70 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61   RowSet object a
24f80 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f  nd that RowSet o
24f90 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a  bject contains.*
24fa0 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64  * the value held
24fb0 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20   in P3, jump to 
24fc0 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68  register P2. Oth
24fd0 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74  erwise, insert t
24fe0 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e  he.** integer in
24ff0 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77   P3 into the Row
25000 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  Set and continue
25010 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65   on to the.** ne
25020 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  xt opcode..**.**
25030 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   The RowSet obje
25040 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20  ct is optimized 
25050 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65  for the case whe
25060 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65  re successive se
25070 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72  ts.** of integer
25080 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65  s, where each se
25090 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75  t contains no du
250a0 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73  plicates. Each s
250b0 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20  et.** of values 
250c0 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
250d0 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c   a unique P4 val
250e0 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65  ue. The first se
250f0 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50  t.** must have P
25100 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20  4==0, the final 
25110 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d  set P4=-1.  P4 m
25120 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31  ust be either -1
25130 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74   or.** non-negat
25140 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65  ive.  For non-ne
25150 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66  gative values of
25160 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77   P4 only the low
25170 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65  er 4.** bits are
25180 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a   significant..**
25190 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  .** This allows 
251a0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28  optimizations: (
251b0 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68  a) when P4==0 th
251c0 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
251d0 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f  o test.** the ro
251e0 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20  wset object for 
251f0 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61  P3, as it is gua
25200 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63  ranteed not to c
25210 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62  ontain it,.** (b
25220 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68  ) when P4==-1 th
25230 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
25240 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c  o insert the val
25250 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a  ue, as it will.*
25260 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65  * never be teste
25270 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77  d for, and (c) w
25280 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74  hen a value that
25290 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   is part of set 
252a0 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64  X is.** inserted
252b0 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  , there is no ne
252c0 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20  ed to search to 
252d0 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20  see if the same 
252e0 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65  value was.** pre
252f0 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64  viously inserted
25300 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20   as part of set 
25310 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61  X (only if it wa
25320 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20  s previously.** 
25330 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
25340 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73   of some other s
25350 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  et)..*/.case OP_
25360 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20  RowSetTest: {   
25370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25380 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
25390 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  in3 */.  int iSe
253a0 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b  t;.  int exists;
253b0 0a 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e  ..  iSet = pOp->
253c0 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.i;.  assert( 
253d0 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
253e0 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  Int );..  /* If 
253f0 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e  there is anythin
25400 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72  g other than a r
25410 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20  owset object in 
25420 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a  memory cell P1,.
25430 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e    ** delete it n
25440 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a  ow and initializ
25450 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70  e P1 with an emp
25460 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20  ty rowset.  */. 
25470 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
25480 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
25490 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
254a0 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
254b0 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
254c0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
254d0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
254e0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
254f0 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
25500 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
25510 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
25520 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74  iSet==-1 || iSet
25530 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65  >=0 );.  if( iSe
25540 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20  t ){.    exists 
25550 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  = sqlite3RowSetT
25560 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  est(pIn1->u.pRow
25570 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20  Set, .          
25580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25590 20 20 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d       (u8)(iSet>=
255a0 30 20 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a  0 ? iSet & 0xf :
255b0 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20   0xff),.        
255c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255d0 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69         pIn3->u.i
255e0 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74  );.    if( exist
255f0 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
25600 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
25610 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
25620 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d    }.  if( iSet>=
25630 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
25640 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
25650 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
25660 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20  n3->u.i);.  }.  
25670 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
25680 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
25690 52 49 47 47 45 52 0a 2f 2a 20 4f 70 63 6f 64 65  RIGGER./* Opcode
256a0 3a 20 43 6f 6e 74 65 78 74 50 75 73 68 20 2a 20  : ContextPush * 
256b0 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 53 61 76 65 20  * * .**.** Save 
256c0 74 68 65 20 63 75 72 72 65 6e 74 20 56 64 62 65  the current Vdbe
256d0 20 63 6f 6e 74 65 78 74 20 73 75 63 68 20 74 68   context such th
256e0 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
256f0 74 6f 72 65 64 20 62 79 20 61 20 43 6f 6e 74 65  tored by a Conte
25700 78 74 50 6f 70 0a 2a 2a 20 6f 70 63 6f 64 65 2e  xtPop.** opcode.
25710 20 54 68 65 20 63 6f 6e 74 65 78 74 20 73 74 6f   The context sto
25720 72 65 73 20 74 68 65 20 6c 61 73 74 20 69 6e 73  res the last ins
25730 65 72 74 20 72 6f 77 20 69 64 2c 20 74 68 65 20  ert row id, the 
25740 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
25750 68 61 6e 67 65 0a 2a 2a 20 63 6f 75 6e 74 2c 20  hange.** count, 
25760 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20  and the current 
25770 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65  statement change
25780 20 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20   count..*/.case 
25790 4f 50 5f 43 6f 6e 74 65 78 74 50 75 73 68 3a 20  OP_ContextPush: 
257a0 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 43 6f 6e  {.  int i;.  Con
257b0 74 65 78 74 20 2a 70 43 6f 6e 74 65 78 74 3b 0a  text *pContext;.
257c0 0a 20 20 69 20 3d 20 70 2d 3e 63 6f 6e 74 65 78  .  i = p->contex
257d0 74 53 74 61 63 6b 54 6f 70 2b 2b 3b 0a 20 20 61  tStackTop++;.  a
257e0 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20  ssert( i>=0 );. 
257f0 20 2f 2a 20 46 49 58 20 4d 45 3a 20 54 68 69 73   /* FIX ME: This
25800 20 73 68 6f 75 6c 64 20 62 65 20 61 6c 6c 6f 63   should be alloc
25810 61 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ated as part of 
25820 74 68 65 20 76 64 62 65 20 61 74 20 63 6f 6d 70  the vdbe at comp
25830 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 20 20 69 66  ile-time */.  if
25840 28 20 69 3e 3d 70 2d 3e 63 6f 6e 74 65 78 74 53  ( i>=p->contextS
25850 74 61 63 6b 44 65 70 74 68 20 29 7b 0a 20 20 20  tackDepth ){.   
25860 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b   p->contextStack
25870 44 65 70 74 68 20 3d 20 69 2b 31 3b 0a 20 20 20  Depth = i+1;.   
25880 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b   p->contextStack
25890 20 3d 20 73 71 6c 69 74 65 33 44 62 52 65 61 6c   = sqlite3DbReal
258a0 6c 6f 63 4f 72 46 72 65 65 28 64 62 2c 20 70 2d  locOrFree(db, p-
258b0 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 2c 0a 20  >contextStack,. 
258c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258e0 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
258f0 43 6f 6e 74 65 78 74 29 2a 28 69 2b 31 29 29 3b  Context)*(i+1));
25900 0a 20 20 20 20 69 66 28 20 70 2d 3e 63 6f 6e 74  .    if( p->cont
25910 65 78 74 53 74 61 63 6b 3d 3d 30 20 29 20 67 6f  extStack==0 ) go
25920 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
25930 20 70 43 6f 6e 74 65 78 74 20 3d 20 26 70 2d 3e   pContext = &p->
25940 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b 69 5d 3b  contextStack[i];
25950 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 6c 61 73  .  pContext->las
25960 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
25970 74 52 6f 77 69 64 3b 0a 20 20 70 43 6f 6e 74 65  tRowid;.  pConte
25980 78 74 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d  xt->nChange = p-
25990 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 62 72 65 61  >nChange;.  brea
259a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
259b0 20 43 6f 6e 74 65 78 74 50 6f 70 20 2a 20 2a 20   ContextPop * * 
259c0 2a 20 0a 2a 2a 0a 2a 2a 20 52 65 73 74 6f 72 65  * .**.** Restore
259d0 20 74 68 65 20 56 64 62 65 20 63 6f 6e 74 65 78   the Vdbe contex
259e0 74 20 74 6f 20 74 68 65 20 73 74 61 74 65 20 69  t to the state i
259f0 74 20 77 61 73 20 69 6e 20 77 68 65 6e 20 63 6f  t was in when co
25a00 6e 74 65 78 74 50 75 73 68 20 77 61 73 20 6c 61  ntextPush was la
25a10 73 74 0a 2a 2a 20 65 78 65 63 75 74 65 64 2e 20  st.** executed. 
25a20 54 68 65 20 63 6f 6e 74 65 78 74 20 73 74 6f 72  The context stor
25a30 65 73 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65  es the last inse
25a40 72 74 20 72 6f 77 20 69 64 2c 20 74 68 65 20 6c  rt row id, the l
25a50 61 73 74 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  ast statement.**
25a60 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 2c 20 61   change count, a
25a70 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  nd the current s
25a80 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65 20  tatement change 
25a90 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  count..*/.case O
25aa0 50 5f 43 6f 6e 74 65 78 74 50 6f 70 3a 20 7b 0a  P_ContextPop: {.
25ab0 20 20 43 6f 6e 74 65 78 74 20 2a 70 43 6f 6e 74    Context *pCont
25ac0 65 78 74 3b 0a 20 20 70 43 6f 6e 74 65 78 74 20  ext;.  pContext 
25ad0 3d 20 26 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61  = &p->contextSta
25ae0 63 6b 5b 2d 2d 70 2d 3e 63 6f 6e 74 65 78 74 53  ck[--p->contextS
25af0 74 61 63 6b 54 6f 70 5d 3b 0a 20 20 61 73 73 65  tackTop];.  asse
25b00 72 74 28 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74  rt( p->contextSt
25b10 61 63 6b 54 6f 70 3e 3d 30 20 29 3b 0a 20 20 64  ackTop>=0 );.  d
25b20 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70  b->lastRowid = p
25b30 43 6f 6e 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77  Context->lastRow
25b40 69 64 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  id;.  p->nChange
25b50 20 3d 20 70 43 6f 6e 74 65 78 74 2d 3e 6e 43 68   = pContext->nCh
25b60 61 6e 67 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ange;.  break;.}
25b70 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64  .#endif /* #ifnd
25b80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
25b90 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64  RIGGER */..#ifnd
25ba0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
25bb0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
25bc0 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
25bd0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
25be0 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   Set the value o
25bf0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  f register P1 to
25c00 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
25c10 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
25c20 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  e.** and the val
25c30 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
25c40 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
25c50 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73  struction throws
25c60 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
25c70 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20   memory cell is 
25c80 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a  not initially.**
25c90 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
25ca0 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20  case OP_MemMax: 
25cb0 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c  {        /* in1,
25cc0 20 69 6e 32 20 2a 2f 0a 20 20 73 71 6c 69 74 65   in2 */.  sqlite
25cd0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
25ce0 66 79 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  fy(pIn1);.  sqli
25cf0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
25d00 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66  rify(pIn2);.  if
25d10 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32  ( pIn1->u.i<pIn2
25d20 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31  ->u.i){.    pIn1
25d30 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e  ->u.i = pIn2->u.
25d40 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  i;.  }.  break;.
25d50 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
25d60 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
25d70 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  EMENT */../* Opc
25d80 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32  ode: IfPos P1 P2
25d90 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20   * * *.**.** If 
25da0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
25db0 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72  ister P1 is 1 or
25dc0 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74   greater, jump t
25dd0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69  o P2..**.** It i
25de0 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
25df0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
25e00 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
25e10 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
25e20 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
25e30 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
25e40 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
25e50 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
25e60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f  .*/.case OP_IfPo
25e70 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
25e80 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73  ump, in1 */.  as
25e90 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
25ea0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
25eb0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
25ec0 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
25ed0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
25ee0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25ef0 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20  de: IfNeg P1 P2 
25f00 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74  * * *.**.** If t
25f10 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
25f20 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
25f30 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20  than zero, jump 
25f40 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74  to P2. .**.** It
25f50 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
25f60 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
25f70 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
25f80 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
25f90 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
25fa0 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
25fb0 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
25fc0 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
25fd0 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
25fe0 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Neg: {        /*
25ff0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
26000 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
26010 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
26020 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 30   if( pIn1->u.i<0
26030 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
26040 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
26050 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
26060 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31 20  code: IfZero P1 
26070 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
26080 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
26090 65 67 69 73 74 65 72 20 50 31 20 69 73 20 65 78  egister P1 is ex
260a0 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f  actly 0, jump to
260b0 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69   P2. .**.** It i
260c0 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65  s illegal to use
260d0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
260e0 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20  n on a register 
260f0 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  that does.** not
26100 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
26110 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69  ger.  An asserti
26120 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65  on fault will re
26130 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e  sult if you try.
26140 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65  .*/.case OP_IfZe
26150 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ro: {        /* 
26160 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 61  jump, in1 */.  a
26170 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
26180 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
26190 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  if( pIn1->u.i==0
261a0 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
261b0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
261c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
261d0 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20  code: AggStep * 
261e0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
261f0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74  * Execute the st
26200 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ep function for 
26210 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54  an aggregate.  T
26220 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68  he.** function h
26230 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
26240 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74     P4 is a point
26250 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
26260 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  f.** structure t
26270 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
26280 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65  e function.  Use
26290 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20   register.** P3 
262a0 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  as the accumulat
262b0 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
262c0 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
262d0 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
262e0 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
262f0 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a   successors..*/.
26300 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a  case OP_AggStep:
26310 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e   {.  int n;.  in
26320 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  t i;.  Mem *pMem
26330 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20  ;.  Mem *pRec;. 
26340 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
26350 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f   ctx;.  sqlite3_
26360 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a  value **apVal;..
26370 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
26380 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b   assert( n>=0 );
26390 0a 20 20 70 52 65 63 20 3d 20 26 70 2d 3e 61 4d  .  pRec = &p->aM
263a0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
263b0 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pVal = p->apArg;
263c0 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c  .  assert( apVal
263d0 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f   || n==0 );.  fo
263e0 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
263f0 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 70   pRec++){.    ap
26400 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20  Val[i] = pRec;. 
26410 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f     storeTypeInfo
26420 28 70 52 65 63 2c 20 65 6e 63 6f 64 69 6e 67 29  (pRec, encoding)
26430 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e  ;.  }.  ctx.pFun
26440 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
26450 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  c;.  assert( pOp
26460 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
26470 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
26480 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20  ctx.pMem = pMem 
26490 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
264a0 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  p3];.  pMem->n++
264b0 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20  ;.  ctx.s.flags 
264c0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74  = MEM_Null;.  ct
264d0 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78  x.s.z = 0;.  ctx
264e0 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
264f0 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
26500 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
26510 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  b;.  ctx.isError
26520 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c   = 0;.  ctx.pCol
26530 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  l = 0;.  if( ctx
26540 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20  .pFunc->flags & 
26550 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
26560 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
26570 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29  rt( pOp>p->aOp )
26580 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
26590 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
265a0 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
265b0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
265c0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
265d0 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
265e0 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
265f0 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63  .pColl;.  }.  (c
26600 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29  tx.pFunc->xStep)
26610 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
26620 3b 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72  ;.  if( ctx.isEr
26630 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ror ){.    sqlit
26640 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
26650 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
26660 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
26670 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a  _text(&ctx.s));.
26680 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45      rc = ctx.isE
26690 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
266a0 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
266b0 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 62 72 65  e(&ctx.s);.  bre
266c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
266d0 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32  : AggFinal P1 P2
266e0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   * P4 *.**.** Ex
266f0 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69  ecute the finali
26700 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  zer function for
26710 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
26720 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d  P1 is.** the mem
26730 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
26740 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c  t is the accumul
26750 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67  ator for the agg
26760 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32  regate..**.** P2
26770 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
26780 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  f arguments that
26790 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
267a0 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20  on takes and.** 
267b0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
267c0 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66  to the FuncDef f
267d0 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  or this function
267e0 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67  .  The P2.** arg
267f0 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65  ument is not use
26800 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
26810 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68  .  It is only th
26820 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75  ere to disambigu
26830 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  ate.** functions
26840 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76   that can take v
26850 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f  arying numbers o
26860 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68  f arguments.  Th
26870 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74  e.** P4 argument
26880 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20   is only needed 
26890 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61  for the degenera
268a0 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a  te case where.**
268b0 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
268c0 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69  on was not previ
268d0 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f  ously called..*/
268e0 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61  .case OP_AggFina
268f0 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  l: {.  Mem *pMem
26900 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
26910 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
26920 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
26930 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Mem = &p->aMem[p
26940 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
26950 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
26960 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d  & ~(MEM_Null|MEM
26970 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72  _Agg))==0 );.  r
26980 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
26990 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c  emFinalize(pMem,
269a0 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b   pOp->p4.pFunc);
269b0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
269c0 45 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20 20 73  E_ERROR ){.    s
269d0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
269e0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
269f0 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
26a00 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29  alue_text(pMem))
26a10 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
26a20 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
26a30 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
26a40 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
26a50 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
26a60 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
26a70 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
26a80 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
26a90 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
26aa0 6b 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65 66 69  k;.}...#if !defi
26ab0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
26ac0 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
26ad0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
26ae0 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
26af0 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20  e: Vacuum * * * 
26b00 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d  * *.**.** Vacuum
26b10 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
26b20 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f  base.  This opco
26b30 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74  de will cause ot
26b40 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d  her virtual.** m
26b50 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72  achines to be cr
26b60 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20  eated and run.  
26b70 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61  It may not be ca
26b80 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
26b90 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f  .** a transactio
26ba0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  n..*/.case OP_Va
26bb0 63 75 75 6d 3a 20 7b 0a 20 20 69 66 28 20 73 71  cuum: {.  if( sq
26bc0 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
26bd0 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
26be0 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 20 0a  due_to_misuse; .
26bf0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75    rc = sqlite3Ru
26c00 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72  nVacuum(&p->zErr
26c10 4d 73 67 2c 20 64 62 29 3b 0a 20 20 69 66 28 20  Msg, db);.  if( 
26c20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
26c30 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
26c40 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
26c50 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
26c60 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  f..#if !defined(
26c70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
26c80 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64  VACUUM)./* Opcod
26c90 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31  e: IncrVacuum P1
26ca0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
26cb0 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65  Perform a single
26cc0 20 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63   step of the inc
26cd0 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20  remental vacuum 
26ce0 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20  procedure on.** 
26cf0 74 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e  the P1 database.
26d00 20 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68   If the vacuum h
26d10 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d  as finished, jum
26d20 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
26d30 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73  .** P2. Otherwis
26d40 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
26d50 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
26d60 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
26d70 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20   OP_IncrVacuum: 
26d80 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
26d90 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
26da0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
26db0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26dc0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
26dd0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
26de0 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
26df0 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42  >p1))!=0 );.  pB
26e00 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
26e10 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d  >p1].pBt;.  rc =
26e20 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63   sqlite3BtreeInc
26e30 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20  rVacuum(pBt);.  
26e40 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
26e50 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ONE ){.    pc = 
26e60 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
26e70 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
26e80 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
26e90 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
26ea0 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a  e: Expire P1 * *
26eb0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65   * *.**.** Cause
26ec0 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61   precompiled sta
26ed0 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d  tements to becom
26ee0 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78  e expired. An ex
26ef0 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pired statement.
26f00 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e  ** fails with an
26f10 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53   error code of S
26f20 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20  QLITE_SCHEMA if 
26f30 69 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75  it is ever execu
26f40 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c  ted .** (via sql
26f50 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a  ite3_step())..**
26f60 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c   .** If P1 is 0,
26f70 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74   then all SQL st
26f80 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20  atements become 
26f90 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69  expired. If P1 i
26fa0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74  s non-zero,.** t
26fb0 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72  hen only the cur
26fc0 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
26fd0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66   statement is af
26fe0 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65  fected. .*/.case
26ff0 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20   OP_Expire: {.  
27000 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a  if( !pOp->p1 ){.
27010 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
27020 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
27030 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65  nts(db);.  }else
27040 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  {.    p->expired
27050 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
27060 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
27070 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
27080 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65  _CACHE./* Opcode
27090 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50  : TableLock P1 P
270a0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
270b0 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e  Obtain a lock on
270c0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
270d0 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75  ble. This instru
270e0 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73  ction is only us
270f0 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73  ed when.** the s
27100 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74  hared-cache feat
27110 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20  ure is enabled. 
27120 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
27130 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
27140 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
27150 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
27160 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
27170 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
27180 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
27190 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
271a0 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
271b0 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
271c0 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
271d0 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
271e0 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
271f0 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
27200 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
27210 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
27220 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
27230 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
27240 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
27250 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
27260 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
27270 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
27280 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
27290 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
272a0 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
272b0 20 69 6e 74 20 70 31 3b 0a 20 20 75 38 20 69 73   int p1;.  u8 is
272c0 57 72 69 74 65 4c 6f 63 6b 3b 0a 0a 20 20 70 31  WriteLock;..  p1
272d0 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 69   = pOp->p1; .  i
272e0 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
272f0 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65  )pOp->p3;.  asse
27300 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c  rt( p1>=0 && p1<
27310 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
27320 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
27330 73 6b 20 26 20 28 31 3c 3c 70 31 29 29 21 3d 30  sk & (1<<p1))!=0
27340 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
27350 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20  WriteLock==0 || 
27360 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29  isWriteLock==1 )
27370 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
27380 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64  BtreeLockTable(d
27390 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20  b->aDb[p1].pBt, 
273a0 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65  pOp->p2, isWrite
273b0 4c 6f 63 6b 29 3b 0a 20 20 69 66 28 20 28 72 63  Lock);.  if( (rc
273c0 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c  &0xFF)==SQLITE_L
273d0 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 63 6f 6e  OCKED ){.    con
273e0 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70  st char *z = pOp
273f0 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 73 71 6c 69  ->p4.z;.    sqli
27400 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
27410 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64  >zErrMsg, db, "d
27420 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73  atabase table is
27430 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29   locked: %s", z)
27440 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
27450 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
27460 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
27470 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  CHE */..#ifndef 
27480 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
27490 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
274a0 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a  de: VBegin * * *
274b0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d   P4 *.**.** P4 m
274c0 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20  ay be a pointer 
274d0 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  to an sqlite3_vt
274e0 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66  ab structure. If
274f0 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a   so, call the .*
27500 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20  * xBegin method 
27510 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
27520 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74  **.** Also, whet
27530 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73  her or not P4 is
27540 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74   set, check that
27550 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69   this is not bei
27560 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a  ng called from.*
27570 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62  * within a callb
27580 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ack to a virtual
27590 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d   table xSync() m
275a0 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c  ethod. If it is,
275b0 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f   the error.** co
275c0 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74  de will be set t
275d0 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e  o SQLITE_LOCKED.
275e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67  .*/.case OP_VBeg
275f0 69 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  in: {.  sqlite3_
27600 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 70  vtab *pVtab;.  p
27610 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
27620 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Vtab;.  rc = sql
27630 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62  ite3VtabBegin(db
27640 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
27650 70 56 74 61 62 20 29 7b 0a 20 20 20 20 73 71 6c  pVtab ){.    sql
27660 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
27670 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
27680 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74  p->zErrMsg = pVt
27690 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20  ab->zErrMsg;.   
276a0 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20   pVtab->zErrMsg 
276b0 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 0;.  }.  break
276c0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
276d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
276e0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
276f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
27700 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
27710 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50  pcode: VCreate P
27720 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
27730 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
27740 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
27750 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
27760 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65  1. Call the xCre
27770 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f  ate method.** fo
27780 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  r that table..*/
27790 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65  .case OP_VCreate
277a0 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  : {.  rc = sqlit
277b0 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
277c0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
277d0 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72  p->p4.z, &p->zEr
277e0 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  rMsg);.  break;.
277f0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
27800 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
27810 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
27820 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27830 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
27840 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31  ode: VDestroy P1
27850 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
27860 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  P4 is the name o
27870 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
27880 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  e in database P1
27890 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73  .  Call the xDes
278a0 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f  troy method.** o
278b0 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  f that table..*/
278c0 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f  .case OP_VDestro
278d0 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  y: {.  p->inVtab
278e0 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63  Method = 2;.  rc
278f0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
27900 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f  llDestroy(db, pO
27910 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
27920 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  );.  p->inVtabMe
27930 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61  thod = 0;.  brea
27940 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
27950 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
27960 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
27970 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27980 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
27990 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31  Opcode: VOpen P1
279a0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
279b0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
279c0 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
279d0 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
279e0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
279f0 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61  ture..** P1 is a
27a00 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20   cursor number. 
27a10 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65   This opcode ope
27a20 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74  ns a cursor to t
27a30 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
27a40 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74  ble and stores t
27a50 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31  hat cursor in P1
27a60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70  ..*/.case OP_VOp
27a70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
27a80 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69  or *pCur;.  sqli
27a90 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
27aa0 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  *pVtabCursor;.  
27ab0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
27ac0 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  tab;.  sqlite3_m
27ad0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
27ae0 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70  .  pCur = 0;.  p
27af0 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a  VtabCursor = 0;.
27b00 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
27b10 34 2e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  4.pVtab;.  pModu
27b20 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f  le = (sqlite3_mo
27b30 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d  dule *)pVtab->pM
27b40 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
27b50 70 56 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65  pVtab && pModule
27b60 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
27b70 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
27b80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
27b90 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d  o_misuse;.  rc =
27ba0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28   pModule->xOpen(
27bb0 70 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72  pVtab, &pVtabCur
27bc0 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  sor);.  sqlite3D
27bd0 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
27be0 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72  rMsg);.  p->zErr
27bf0 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
27c00 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a  rMsg;.  pVtab->z
27c10 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66  ErrMsg = 0;.  if
27c20 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
27c30 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  n(db) ) goto abo
27c40 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
27c50 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  ;.  if( SQLITE_O
27c60 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20  K==rc ){.    /* 
27c70 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74  Initialize sqlit
27c80 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62  e3_vtab_cursor b
27c90 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20  ase class */.   
27ca0 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
27cb0 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20  tab = pVtab;..  
27cc0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73 65 20    /* Initialise 
27cd0 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65  vdbe cursor obje
27ce0 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d  ct */.    pCur =
27cf0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
27d00 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d  p, pOp->p1, 0, -
27d10 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70  1, 0);.    if( p
27d20 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75  Cur ){.      pCu
27d30 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d  r->pVtabCursor =
27d40 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20   pVtabCursor;.  
27d50 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c      pCur->pModul
27d60 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  e = pVtabCursor-
27d70 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  >pVtab->pModule;
27d80 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
27d90 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
27da0 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d  ed = 1;.      pM
27db0 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56  odule->xClose(pV
27dc0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  tabCursor);.    
27dd0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
27de0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
27df0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
27e00 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
27e10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
27e20 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
27e30 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50  de: VFilter P1 P
27e40 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
27e50 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
27e60 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
27e70 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
27e80 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
27e90 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
27ea0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
27eb0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
27ec0 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
27ed0 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
27ee0 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
27ef0 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
27f00 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
27f10 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
27f20 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
27f30 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
27f40 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
27f50 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
27f60 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
27f70 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
27f80 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
27f90 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
27fa0 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
27fb0 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
27fc0 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
27fd0 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
27fe0 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
27ff0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
28000 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
28010 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
28020 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
28030 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
28040 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
28050 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
28060 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
28070 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
28080 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
28090 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
280a0 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
280b0 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
280c0 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
280d0 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
280e0 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
280f0 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
28100 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
28110 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
28120 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
28130 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
28140 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
28150 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
28160 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
28170 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
28180 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
28190 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
281a0 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
281b0 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
281c0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
281d0 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
281e0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
281f0 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
28200 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
28210 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
28220 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
28230 20 20 70 51 75 65 72 79 20 3d 20 26 70 2d 3e 61    pQuery = &p->a
28240 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
28250 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b  pArgc = &pQuery[
28260 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e  1];.  pCur = p->
28270 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28280 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
28290 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79  (pOp->p3, pQuery
282a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  );.  assert( pCu
282b0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
282c0 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20  ;.  pVtabCursor 
282d0 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
282e0 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  sor;.  pVtab = p
282f0 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
28300 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
28310 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a  Vtab->pModule;..
28320 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e    /* Grab the in
28330 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61  dex number and a
28340 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a  rgc parameters *
28350 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75  /.  assert( (pQu
28360 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  ery->flags&MEM_I
28370 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d  nt)!=0 && pArgc-
28380 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20  >flags==MEM_Int 
28390 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74  );.  nArg = (int
283a0 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69  )pArgc->u.i;.  i
283b0 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75  Query = (int)pQu
283c0 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20  ery->u.i;..  /* 
283d0 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74  Invoke the xFilt
283e0 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b  er method */.  {
283f0 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  .    res = 0;.  
28400 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41    apArg = p->apA
28410 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20  rg;.    for(i = 
28420 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
28430 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
28440 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20  = &pArgc[i+1];. 
28450 20 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e       storeTypeIn
28460 66 6f 28 61 70 41 72 67 5b 69 5d 2c 20 30 29 3b  fo(apArg[i], 0);
28470 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
28480 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
28490 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
284a0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
284b0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
284c0 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 20  Lock(pVtab);.   
284d0 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
284e0 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70   = 1;.    rc = p
284f0 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28  Module->xFilter(
28500 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75  pVtabCursor, iQu
28510 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ery, pOp->p4.z, 
28520 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20  nArg, apArg);.  
28530 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
28540 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  d = 0;.    sqlit
28550 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
28560 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d  zErrMsg);.    p-
28570 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
28580 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70  ->zErrMsg;.    p
28590 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
285a0 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  0;.    sqlite3Vt
285b0 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74  abUnlock(db, pVt
285c0 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  ab);.    if( rc=
285d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
285e0 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
285f0 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72  e->xEof(pVtabCur
28600 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  sor);.    }.    
28610 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
28620 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
28630 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
28640 73 65 3b 0a 0a 20 20 20 20 69 66 28 20 72 65 73  se;..    if( res
28650 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
28660 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
28670 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75  }.  }.  pCur->nu
28680 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72  llRow = 0;..  br
28690 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
286a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
286b0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
286c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
286d0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
286e0 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
286f0 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
28700 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76  *.** Store the v
28710 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
28720 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
28730 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69  he row of the vi
28740 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74  rtual-table that
28750 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73   the .** P1 curs
28760 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
28770 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  o into register 
28780 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P3..*/.case OP_V
28790 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69  Column: {.  sqli
287a0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
287b0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
287c0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
287d0 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a  ;.  Mem *pDest;.
287e0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
287f0 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56  t sContext;..  V
28800 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
28810 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
28820 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
28830 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
28840 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
28850 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
28860 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
28870 20 70 44 65 73 74 20 3d 20 26 70 2d 3e 61 4d 65   pDest = &p->aMe
28880 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
28890 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
288a0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
288b0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
288c0 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  st);.    break;.
288d0 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
288e0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
288f0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
28900 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
28910 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
28920 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29  odule->xColumn )
28930 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e  ;.  memset(&sCon
28940 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28  text, 0, sizeof(
28950 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f  sContext));..  /
28960 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c  * The output cel
28970 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61  l may already ha
28980 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f  ve a buffer allo
28990 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a  cated. Move.  **
289a0 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e   the current con
289b0 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78  tents to sContex
289c0 74 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74  t.s so in case t
289d0 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  he user-function
289e0 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74   .  ** can use t
289f0 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  he already alloc
28a00 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74  ated buffer inst
28a10 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e  ead of allocatin
28a20 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e  g a .  ** new on
28a30 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
28a40 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43  3VdbeMemMove(&sC
28a50 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29  ontext.s, pDest)
28a60 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
28a70 61 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ag(&sContext.s, 
28a80 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 69 66  MEM_Null);..  if
28a90 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
28aa0 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
28ab0 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
28ac0 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  e;.  rc = pModul
28ad0 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d  e->xColumn(pCur-
28ae0 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73  >pVtabCursor, &s
28af0 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32  Context, pOp->p2
28b00 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
28b10 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
28b20 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67  g);.  p->zErrMsg
28b30 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73   = pVtab->zErrMs
28b40 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  g;.  pVtab->zErr
28b50 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 43  Msg = 0;..  /* C
28b60 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f  opy the result o
28b70 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  f the function t
28b80 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  o the P3 registe
28b90 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68  r. We.  ** do th
28ba0 69 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  is regardless of
28bb0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
28bc0 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  an error occurre
28bd0 64 20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a  d to ensure any.
28be0 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c    ** dynamic all
28bf0 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74  ocation in sCont
28c00 65 78 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72  ext.s (a Mem str
28c10 75 63 74 29 20 69 73 20 20 72 65 6c 65 61 73 65  uct) is  release
28c20 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  d..  */.  sqlite
28c30 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
28c40 69 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c  ing(&sContext.s,
28c50 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45   encoding);.  RE
28c60 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
28c70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
28c80 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
28c90 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74  ve(pDest, &sCont
28ca0 65 78 74 2e 73 29 3b 0a 20 20 55 50 44 41 54 45  ext.s);.  UPDATE
28cb0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
28cc0 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  est);..  if( sql
28cd0 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
28ce0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f   ){.    goto abo
28cf0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
28d00 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
28d10 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
28d20 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67  (pDest) ){.    g
28d30 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
28d40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
28d50 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
28d60 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
28d70 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
28d80 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
28d90 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
28da0 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Next P1 P2 * * *
28db0 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76  .**.** Advance v
28dc0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20  irtual table P1 
28dd0 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20  to the next row 
28de0 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  in its result se
28df0 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f  t and.** jump to
28e00 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
28e10 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72    Or, if the vir
28e20 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72  tual table has r
28e30 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e  eached.** the en
28e40 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20  d of its result 
28e50 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  set, then fall t
28e60 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
28e70 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
28e80 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74  */.case OP_VNext
28e90 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
28ea0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
28eb0 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
28ec0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
28ed0 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72  pModule;.  int r
28ee0 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  es;.  VdbeCursor
28ef0 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d   *pCur;..  res =
28f00 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e   0;.  pCur = p->
28f10 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28f20 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
28f30 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
28f40 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
28f50 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  ow ){.    break;
28f60 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
28f70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
28f80 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
28f90 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
28fa0 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ule;.  assert( p
28fb0 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b  Module->xNext );
28fc0 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
28fd0 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64  e xNext() method
28fe0 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
28ff0 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20  There is no way 
29000 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64  for the.  ** und
29010 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e  erlying implemen
29020 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e  tation to return
29030 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65   an error if one
29040 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20   occurs during. 
29050 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73   ** xNext(). Ins
29060 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f  tead, if an erro
29070 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69  r occurs, true i
29080 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69  s returned (indi
29090 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a  cating that .  *
290a0 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61  * data is availa
290b0 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72  ble) and the err
290c0 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  or code returned
290d0 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72   when xColumn or
290e0 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72  .  ** some other
290f0 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20   method is next 
29100 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73  invoked on the s
29110 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ave virtual tabl
29120 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20  e cursor..  */. 
29130 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
29140 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
29150 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
29160 73 75 73 65 3b 0a 20 20 73 71 6c 69 74 65 33 56  suse;.  sqlite3V
29170 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a  tabLock(pVtab);.
29180 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
29190 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d  d = 1;.  rc = pM
291a0 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75  odule->xNext(pCu
291b0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
291c0 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
291d0 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  od = 0;.  sqlite
291e0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
291f0 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45  ErrMsg);.  p->zE
29200 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
29210 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d  ErrMsg;.  pVtab-
29220 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
29230 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
29240 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20  k(db, pVtab);.  
29250 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
29260 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70  K ){.    res = p
29270 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75  Module->xEof(pCu
29280 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
29290 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
292a0 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
292b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
292c0 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 69 66  to_misuse;..  if
292d0 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a  ( !res ){.    /*
292e0 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74   If there is dat
292f0 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  a, jump to P2 */
29300 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
29310 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
29320 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
29330 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
29340 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
29350 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
29360 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
29370 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
29380 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
29390 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
293a0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
293b0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
293c0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
293d0 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
293e0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
293f0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
29400 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
29410 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
29420 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
29430 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
29440 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
29450 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
29460 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
29470 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
29480 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
29490 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a  ;.  Mem *pName;.
294a0 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
294b0 70 34 2e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d  p4.pVtab;.  pNam
294c0 65 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  e = &p->aMem[pOp
294d0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
294e0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
294f0 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 52 45  >xRename );.  RE
29500 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
29510 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 0a 20  ->p1, pName);.. 
29520 20 53 74 72 69 6e 67 69 66 79 28 70 4e 61 6d 65   Stringify(pName
29530 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 0a 20 20  , encoding);..  
29540 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
29550 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
29560 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
29570 75 73 65 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  use;.  sqlite3Vt
29580 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20  abLock(pVtab);. 
29590 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
295a0 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
295b0 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
295c0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
295d0 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
295e0 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  .  p->zErrMsg = 
295f0 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
29600 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
29610 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56   = 0;.  sqlite3V
29620 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56  tabUnlock(db, pV
29630 74 61 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  tab);.  if( sqli
29640 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
29650 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
29660 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 62  _to_misuse;..  b
29670 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
29680 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29690 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
296a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64  ./* Opcode: VUpd
296b0 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ate P1 P2 P3 P4 
296c0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
296d0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
296e0 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
296f0 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
29700 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
29710 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
29720 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
29730 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d  onding xUpdate m
29740 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73  ethod. P2 values
29750 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f  .** are contiguo
29760 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  us memory cells 
29770 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20 74  starting at P3 t
29780 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78 55  o pass to the xU
29790 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61  pdate .** invoca
297a0 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20  tion. The value 
297b0 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33 2b  in register (P3+
297c0 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64  P2-1) correspond
297d0 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74  s to the .** p2t
297e0 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  h element of the
297f0 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73 73   argv array pass
29800 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a  ed to xUpdate..*
29810 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65  *.** The xUpdate
29820 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20   method will do 
29830 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49  a DELETE or an I
29840 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a  NSERT or both..*
29850 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c  * The argv[0] el
29860 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72  ement (which cor
29870 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f  responds to memo
29880 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69  ry cell P3).** i
29890 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61  s the rowid of a
298a0 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20   row to delete. 
298b0 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e   If argv[0] is N
298c0 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20  ULL then no .** 
298d0 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e  deletion occurs.
298e0 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c    The argv[1] el
298f0 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77  ement is the row
29900 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a  id of the new .*
29910 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e  * row.  This can
29920 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65   be NULL to have
29930 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
29940 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65  le select the ne
29950 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20  w .** rowid for 
29960 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62  itself.  The sub
29970 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73  sequent elements
29980 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61 72   in the array ar
29990 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  e .** the values
299a0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
299b0 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a  he new row..**.*
299c0 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20  * If P2==1 then 
299d0 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65 72  no insert is per
299e0 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d  formed.  argv[0]
299f0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
29a00 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c  .** a row to del
29a10 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ete..**.** P1 is
29a20 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e   a boolean flag.
29a30 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74 6f   If it is set to
29a40 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78 55   true and the xU
29a50 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73  pdate call.** is
29a60 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
29a70 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75  n the value retu
29a80 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
29a90 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
29aa0 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74  d() .** is set t
29ab0 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
29ac0 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65  he rowid for the
29ad0 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74   row just insert
29ae0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
29af0 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69  Update: {.  sqli
29b00 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
29b10 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
29b20 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
29b30 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b  t nArg;.  int i;
29b40 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
29b50 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61  rowid;.  Mem **a
29b60 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b  pArg;.  Mem *pX;
29b70 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ..  pVtab = pOp-
29b80 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  >p4.pVtab;.  pMo
29b90 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f  dule = (sqlite3_
29ba0 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e  module *)pVtab->
29bb0 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20  pModule;.  nArg 
29bc0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
29bd0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
29be0 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69  ==P4_VTAB );.  i
29bf0 66 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64  f( pModule->xUpd
29c00 61 74 65 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  ate==0 ){.    sq
29c10 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
29c20 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
29c30 22 72 65 61 64 2d 6f 6e 6c 79 20 74 61 62 6c 65  "read-only table
29c40 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  ");.    rc = SQL
29c50 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c  ITE_ERROR;.  }el
29c60 73 65 7b 0a 20 20 20 20 61 70 41 72 67 20 3d 20  se{.    apArg = 
29c70 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58  p->apArg;.    pX
29c80 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
29c90 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  >p3];.    for(i=
29ca0 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
29cb0 0a 20 20 20 20 20 20 73 74 6f 72 65 54 79 70 65  .      storeType
29cc0 49 6e 66 6f 28 70 58 2c 20 30 29 3b 0a 20 20 20  Info(pX, 0);.   
29cd0 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58     apArg[i] = pX
29ce0 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20  ;.      pX++;.  
29cf0 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69    }.    if( sqli
29d00 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
29d10 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
29d20 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20  e_to_misuse;.   
29d30 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
29d40 28 70 56 74 61 62 29 3b 0a 20 20 20 20 72 63 20  (pVtab);.    rc 
29d50 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61  = pModule->xUpda
29d60 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20  te(pVtab, nArg, 
29d70 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a  apArg, &rowid);.
29d80 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
29d90 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
29da0 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
29db0 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
29dc0 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 7a  sg;.    pVtab->z
29dd0 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 20 20  ErrMsg = 0;.    
29de0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
29df0 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20  k(db, pVtab);.  
29e00 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
29e10 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
29e20 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
29e30 73 75 73 65 3b 0a 20 20 20 20 69 66 28 20 70 4f  suse;.    if( pO
29e40 70 2d 3e 70 31 20 26 26 20 72 63 3d 3d 53 51 4c  p->p1 && rc==SQL
29e50 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
29e60 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26  assert( nArg>1 &
29e70 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61  & apArg[0] && (a
29e80 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d  pArg[0]->flags&M
29e90 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20  EM_Null) );.    
29ea0 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
29eb0 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
29ec0 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b     p->nChange++;
29ed0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
29ee0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
29ef0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
29f00 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20  LE */..#ifndef  
29f10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
29f20 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
29f30 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50  ode: Pagecount P
29f40 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
29f50 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
29f60 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  nt number of pag
29f70 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  es in database P
29f80 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 to memory cell
29f90 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
29fa0 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20  Pagecount: {    
29fb0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
29fc0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
29fd0 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 6e 50  int p1;.  int nP
29fe0 61 67 65 3b 0a 20 20 50 61 67 65 72 20 2a 70 50  age;.  Pager *pP
29ff0 61 67 65 72 3b 0a 0a 20 20 70 31 20 3d 20 70 4f  ager;..  p1 = pO
2a000 70 2d 3e 70 31 3b 20 0a 20 20 70 50 61 67 65 72  p->p1; .  pPager
2a010 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
2a020 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 70 31 5d  ager(db->aDb[p1]
2a030 2e 70 42 74 29 3b 0a 20 20 72 63 20 3d 20 73 71  .pBt);.  rc = sq
2a040 6c 69 74 65 33 50 61 67 65 72 50 61 67 65 63 6f  lite3PagerPageco
2a050 75 6e 74 28 70 50 61 67 65 72 2c 20 26 6e 50 61  unt(pPager, &nPa
2a060 67 65 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  ge);.  if( rc==S
2a070 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2a080 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
2a090 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
2a0a0 3e 75 2e 69 20 3d 20 6e 50 61 67 65 3b 0a 20 20  >u.i = nPage;.  
2a0b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2a0c0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
2a0d0 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f  ITE_OMIT_TRACE./
2a0e0 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 63 65 20  * Opcode: Trace 
2a0f0 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
2a100 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65   If tracing is e
2a110 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73  nabled (by the s
2a120 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20  qlite3_trace()) 
2a130 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a  interface, then.
2a140 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72  ** the UTF-8 str
2a150 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ing contained in
2a160 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f   P4 is emitted o
2a170 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c  n the trace call
2a180 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  back..*/.case OP
2a190 5f 54 72 61 63 65 3a 20 7b 0a 20 20 63 68 61 72  _Trace: {.  char
2a1a0 20 2a 7a 54 72 61 63 65 3b 0a 0a 20 20 7a 54 72   *zTrace;..  zTr
2a1b0 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
2a1c0 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
2a1d0 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a  ->zSql);.  if( z
2a1e0 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69 66 28  Trace ){.    if(
2a1f0 20 64 62 2d 3e 78 54 72 61 63 65 20 29 7b 0a 20   db->xTrace ){. 
2a200 20 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28       db->xTrace(
2a210 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a  db->pTraceArg, z
2a220 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 23 69  Trace);.    }.#i
2a230 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2a240 47 0a 20 20 20 20 69 66 28 20 28 64 62 2d 3e 66  G.    if( (db->f
2a250 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71  lags & SQLITE_Sq
2a260 6c 54 72 61 63 65 29 21 3d 30 20 29 7b 0a 20 20  lTrace)!=0 ){.  
2a270 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67      sqlite3Debug
2a280 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63  Printf("SQL-trac
2a290 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65  e: %s\n", zTrace
2a2a0 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20  );.    }.#endif 
2a2b0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
2a2c0 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  */.  }.  break;.
2a2d0 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70  }.#endif.../* Op
2a2e0 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a  code: Noop * * *
2a2f0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f   * *.**.** Do no
2a300 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73  thing.  This ins
2a310 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65  truction is ofte
2a320 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75  n useful as a ju
2a330 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f  mp.** destinatio
2a340 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n..*/./*.** The 
2a350 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70  magic Explain op
2a360 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e  code are only in
2a370 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c  serted when expl
2a380 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a  ain==2 (which.**
2a390 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20   is to say when 
2a3a0 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
2a3b0 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73  Y PLAN syntax is
2a3c0 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20   used.).** This 
2a3d0 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69  opcode records i
2a3e0 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
2a3f0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20  the optimizer.  
2a400 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65  It is the.** the
2a410 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70   same as a no-op
2a420 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e  .  This opcodesn
2a430 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20  ever appears in 
2a440 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61  a real VM progra
2a450 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b  m..*/.default: {
2a460 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69            /* Thi
2a470 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e  s is really OP_N
2a480 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61  oop and OP_Expla
2a490 69 6e 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d  in */.  break;.}
2a4a0 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
2a4b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a4c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a4d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a4e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a4f0 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66  .** The cases of
2a500 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
2a510 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73  ement above this
2a520 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c   line should all
2a530 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20   be indented.** 
2a540 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
2a550 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  t the left-most 
2a560 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65  6 spaces have be
2a570 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d  en removed to im
2a580 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61  prove the.** rea
2a590 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20  dability.  From 
2a5a0 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f  this point on do
2a5b0 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69  wn, the normal i
2a5c0 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73  ndentation rules
2a5d0 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64   are.** restored
2a5e0 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
2a5f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a600 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a610 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
2a630 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56  .    }..#ifdef V
2a640 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
2a650 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70  {.      u64 elap
2a660 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74  sed = sqlite3Hwt
2a670 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20  ime() - start;. 
2a680 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73       pOp->cycles
2a690 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20   += elapsed;.   
2a6a0 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23     pOp->cnt++;.#
2a6b0 69 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72  if 0.        fpr
2a6c0 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31  intf(stdout, "%1
2a6d0 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29  0llu ", elapsed)
2a6e0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
2a6f0 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
2a700 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 70 2d  out, origPc, &p-
2a710 3e 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23  >aOp[origPc]);.#
2a720 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64  endif.    }.#end
2a730 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66  if..    /* The f
2a740 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64  ollowing code ad
2a750 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68  ds nothing to th
2a760 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f  e actual functio
2a770 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  nality.    ** of
2a780 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49   the program.  I
2a790 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66  t is only here f
2a7a0 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64  or testing and d
2a7b0 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a  ebugging..    **
2a7c0 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61   On the other ha
2a7d0 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e  nd, it does burn
2a7e0 20 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72   CPU cycles ever
2a7f0 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20  y time through. 
2a800 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61     ** the evalua
2a810 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65  tor loop.  So we
2a820 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75   can leave it ou
2a830 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73  t when NDEBUG is
2a840 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
2a850 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
2a860 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
2a870 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20  -1 && pc<p->nOp 
2a880 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
2a890 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
2a8a0 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
2a8b0 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70    if( rc!=0 ) fp
2a8c0 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22  rintf(p->trace,"
2a8d0 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20  rc=%d\n",rc);.  
2a8e0 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70 65 72      if( opProper
2a8f0 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f  ty & OPFLG_OUT2_
2a900 50 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  PRERELEASE ){.  
2a910 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
2a920 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f  ace(p->trace, pO
2a930 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
2a940 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
2a950 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
2a960 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20  LG_OUT3 ){.     
2a970 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
2a980 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e  (p->trace, pOp->
2a990 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p3, pOut);.     
2a9a0 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20   }.    }.#endif 
2a9b0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
2a9c0 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e   */.#endif  /* N
2a9d0 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a  DEBUG */.  }  /*
2a9e0 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   The end of the 
2a9f0 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65  for(;;) loop the
2aa00 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f   loops through o
2aa10 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  pcodes */..  /* 
2aa20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
2aa30 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73   point, it means
2aa40 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20   that execution 
2aa50 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68  is finished with
2aa60 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f  .  ** an error o
2aa70 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a  f some kind..  *
2aa80 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  /.vdbe_error_hal
2aa90 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20  t:.  assert( rc 
2aaa0 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  );.  p->rc = rc;
2aab0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  .  sqlite3VdbeHa
2aac0 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d  lt(p);.  if( rc=
2aad0 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
2aae0 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63  MEM ) db->malloc
2aaf0 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63  Failed = 1;.  rc
2ab00 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
2ab10 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ..  /* This is t
2ab20 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20  he only way out 
2ab30 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  of this procedur
2ab40 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20  e.  We have to. 
2ab50 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20   ** release the 
2ab60 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65  mutexes on btree
2ab70 73 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75  s that were acqu
2ab80 69 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a  ired at the.  **
2ab90 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65   top. */.vdbe_re
2aba0 74 75 72 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42  turn:.  sqlite3B
2abb0 74 72 65 65 4d 75 74 65 78 41 72 72 61 79 4c 65  treeMutexArrayLe
2abc0 61 76 65 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b  ave(&p->aMutex);
2abd0 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20  .  return rc;.. 
2abe0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2abf0 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20   if a string or 
2ac00 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e  blob larger than
2ac10 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
2ac20 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75  TH.  ** is encou
2ac30 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f  ntered..  */.too
2ac40 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53  _big:.  sqlite3S
2ac50 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2ac60 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e  rMsg, db, "strin
2ac70 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
2ac80 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  g");.  rc = SQLI
2ac90 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74  TE_TOOBIG;.  got
2aca0 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
2acb0 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
2acc0 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f   here if a mallo
2acd0 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a  c() fails..  */.
2ace0 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61  no_mem:.  db->ma
2acf0 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
2ad00 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2ad10 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2ad20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  db, "out of memo
2ad30 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ry");.  rc = SQL
2ad40 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74  ITE_NOMEM;.  got
2ad50 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
2ad60 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
2ad70 20 68 65 72 65 20 66 6f 72 20 61 6e 20 53 51 4c   here for an SQL
2ad80 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72  ITE_MISUSE error
2ad90 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
2ada0 5f 74 6f 5f 6d 69 73 75 73 65 3a 0a 20 20 72 63  _to_misuse:.  rc
2adb0 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45   = SQLITE_MISUSE
2adc0 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75  ;.  /* Fall thru
2add0 20 69 6e 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   into abort_due_
2ade0 74 6f 5f 65 72 72 6f 72 20 2a 2f 0a 0a 20 20 2f  to_error */..  /
2adf0 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66  * Jump to here f
2ae00 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e  or any other kin
2ae10 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72  d of fatal error
2ae20 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69  .  The "rc" vari
2ae30 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64  able.  ** should
2ae40 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20   hold the error 
2ae50 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f  number..  */.abo
2ae60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a  rt_due_to_error:
2ae70 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45  .  assert( p->zE
2ae80 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66  rrMsg==0 );.  if
2ae90 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
2aea0 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45  ed ) rc = SQLITE
2aeb0 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63  _NOMEM;.  if( rc
2aec0 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  !=SQLITE_IOERR_N
2aed0 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69  OMEM ){.    sqli
2aee0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2aef0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
2af00 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
2af10 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f  r(rc));.  }.  go
2af20 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
2af30 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
2af40 6f 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71  o here if the sq
2af50 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
2af60 29 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69  ) API sets the i
2af70 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c  nterrupt.  ** fl
2af80 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  ag..  */.abort_d
2af90 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a  ue_to_interrupt:
2afa0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75  .  assert( db->u
2afb0 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
2afc0 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
2afd0 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d  _INTERRUPT;.  p-
2afe0 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69  >rc = rc;.  sqli
2aff0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2b000 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
2b010 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
2b020 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76  r(rc));.  goto v
2b030 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
2b040 7d 0a                                            }.