/ Hex Artifact Content
Login

Artifact 434e3803de90697cfa6cc53f0f6719a575cde107:


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 34 38 20 32 30 30 39  e.c,v 1.848 2009
0850: 2f 30 36 2f 30 35 20 31 36 3a 34 36 3a 35 33 20  /06/05 16:46:53 
0860: 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e  drh Exp $.*/.#in
0870: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 49 6e 74  clude "sqliteInt
0880: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
0890: 62 65 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  beInt.h"../*.** 
08a0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6c  The following gl
08b0: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73  obal variable is
08c0: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 76 65   incremented eve
08d0: 72 79 20 74 69 6d 65 20 61 20 63 75 72 73 6f 72  ry time a cursor
08e0: 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69 74 68 65  .** moves, eithe
08f0: 72 20 62 79 20 74 68 65 20 4f 50 5f 53 65 65 6b  r by the OP_Seek
0900: 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20 6f 72 20  XX, OP_Next, or 
0910: 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64 65 73 2e  OP_Prev opcodes.
0920: 20 20 54 68 65 20 74 65 73 74 0a 2a 2a 20 70 72    The test.** pr
0930: 6f 63 65 64 75 72 65 73 20 75 73 65 20 74 68 69  ocedures use thi
0940: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f  s information to
0950: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
0960: 69 6e 64 69 63 65 73 20 61 72 65 0a 2a 2a 20 77  indices are.** w
0970: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0980: 2e 20 20 54 68 69 73 20 76 61 72 69 61 62 6c 65  .  This variable
0990: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
09a0: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a 2a   other than to.*
09b0: 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74 68  * help verify th
09c0: 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74  e correct operat
09d0: 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61  ion of the libra
09e0: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
09f0: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0a00: 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
0a10: 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a  nt = 0;.#endif..
0a20: 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69 73 20  /*.** When this 
0a30: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0a40: 69 73 20 70 6f 73 69 74 69 76 65 2c 20 69 74 20  is positive, it 
0a50: 67 65 74 73 20 64 65 63 72 65 6d 65 6e 74 65 64  gets decremented
0a60: 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a 2a 2a 20   once before.** 
0a70: 65 61 63 68 20 69 6e 73 74 72 75 63 74 69 6f 6e  each instruction
0a80: 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20 20 57   in the VDBE.  W
0a90: 68 65 6e 20 72 65 61 63 68 65 73 20 7a 65 72 6f  hen reaches zero
0aa0: 2c 20 74 68 65 20 75 31 2e 69 73 49 6e 74 65 72  , the u1.isInter
0ab0: 72 75 70 74 65 64 0a 2a 2a 20 66 69 65 6c 64 20  rupted.** field 
0ac0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 20 73  of the sqlite3 s
0ad0: 74 72 75 63 74 75 72 65 20 69 73 20 73 65 74 20  tructure is set 
0ae0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 69 6d 75  in order to simu
0af0: 6c 61 74 65 20 61 6e 64 20 69 6e 74 65 72 72 75  late and interru
0b00: 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  pt..**.** This f
0b10: 61 63 69 6c 69 74 79 20 69 73 20 75 73 65 64 20  acility is used 
0b20: 66 6f 72 20 74 65 73 74 69 6e 67 20 70 75 72 70  for testing purp
0b30: 6f 73 65 73 20 6f 6e 6c 79 2e 20 20 49 74 20 64  oses only.  It d
0b40: 6f 65 73 20 6e 6f 74 20 66 75 6e 63 74 69 6f 6e  oes not function
0b50: 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72 64 69 6e 61  .** in an ordina
0b60: 72 79 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  ry build..*/.#if
0b70: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0b80: 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  int sqlite3_inte
0b90: 72 72 75 70 74 5f 63 6f 75 6e 74 20 3d 20 30 3b  rrupt_count = 0;
0ba0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0bb0: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0bc0: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0bd0: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65  mented each type
0be0: 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
0bf0: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
0c00: 65 64 2e 20 20 54 68 65 20 74 65 73 74 20 70 72  ed.  The test pr
0c10: 6f 63 65 64 75 72 65 73 20 75 73 65 20 74 68 69  ocedures use thi
0c20: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f  s information to
0c30: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 0a   make sure that.
0c40: 2a 2a 20 73 6f 72 74 69 6e 67 20 69 73 20 6f 63  ** sorting is oc
0c50: 63 75 72 72 69 6e 67 20 6f 72 20 6e 6f 74 20 6f  curring or not o
0c60: 63 63 75 72 72 69 6e 67 20 61 74 20 61 70 70 72  ccurring at appr
0c70: 6f 70 72 69 61 74 65 20 74 69 6d 65 73 2e 20 20  opriate times.  
0c80: 20 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a   This variable.*
0c90: 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  * has no functio
0ca0: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20  n other than to 
0cb0: 68 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20  help verify the 
0cc0: 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f  correct operatio
0cd0: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72  n of the.** libr
0ce0: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0cf0: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0d00: 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
0d10: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0d20: 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c  *.** The next gl
0d30: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 72 65  obal variable re
0d40: 63 6f 72 64 73 20 74 68 65 20 73 69 7a 65 20 6f  cords the size o
0d50: 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 4d 45  f the largest ME
0d60: 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72 20 4d 45 4d  M_Blob.** or MEM
0d70: 5f 53 74 72 20 74 68 61 74 20 68 61 73 20 62 65  _Str that has be
0d80: 65 6e 20 75 73 65 64 20 62 79 20 61 20 56 44 42  en used by a VDB
0d90: 45 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 74  E opcode.  The t
0da0: 65 73 74 20 70 72 6f 63 65 64 75 72 65 73 0a 2a  est procedures.*
0db0: 2a 20 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72  * use this infor
0dc0: 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 73  mation to make s
0dd0: 75 72 65 20 74 68 61 74 20 74 68 65 20 7a 65 72  ure that the zer
0de0: 6f 2d 62 6c 6f 62 20 66 75 6e 63 74 69 6f 6e 61  o-blob functiona
0df0: 6c 69 74 79 0a 2a 2a 20 69 73 20 77 6f 72 6b 69  lity.** is worki
0e00: 6e 67 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 20  ng correctly.   
0e10: 54 68 69 73 20 76 61 72 69 61 62 6c 65 20 68 61  This variable ha
0e20: 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 6f 74  s no function ot
0e30: 68 65 72 20 74 68 61 6e 20 74 6f 0a 2a 2a 20 68  her than to.** h
0e40: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0e50: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0e60: 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e   of the library.
0e70: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
0e80: 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74  E_TEST.int sqlit
0e90: 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20  e3_max_blobsize 
0ea0: 3d 20 30 3b 0a 73 74 61 74 69 63 20 76 6f 69 64  = 0;.static void
0eb0: 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69   updateMaxBlobsi
0ec0: 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66  ze(Mem *p){.  if
0ed0: 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d  ( (p->flags & (M
0ee0: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
0ef0: 29 21 3d 30 20 26 26 20 70 2d 3e 6e 3e 73 71 6c  )!=0 && p->n>sql
0f00: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
0f10: 65 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  e ){.    sqlite3
0f20: 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20 3d 20  _max_blobsize = 
0f30: 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64  p->n;.  }.}.#end
0f40: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61  if../*.** Test a
0f50: 20 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65   register to see
0f60: 20 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74   if it exceeds t
0f70: 68 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d  he current maxim
0f80: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a  um blob size..**
0f90: 20 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63   If it does, rec
0fa0: 6f 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69  ord the new maxi
0fb0: 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a  mum blob size..*
0fc0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
0fd0: 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64  LITE_TEST) && !d
0fe0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
0ff0: 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29  IT_BUILTIN_TEST)
1000: 0a 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45  .# define UPDATE
1010: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29  _MAX_BLOBSIZE(P)
1020: 20 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73    updateMaxBlobs
1030: 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  ize(P).#else.# d
1040: 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58  efine UPDATE_MAX
1050: 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e  _BLOBSIZE(P).#en
1060: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65  dif../*.** Conve
1070: 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65 67  rt the given reg
1080: 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72  ister into a str
1090: 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74 20  ing if it isn't 
10a0: 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20  one.** already. 
10b0: 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  Return non-zero 
10c0: 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61  if a malloc() fa
10d0: 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ils..*/.#define 
10e0: 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63  Stringify(P, enc
10f0: 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e  ) \.   if(((P)->
1100: 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d  flags&(MEM_Str|M
1110: 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20  EM_Blob))==0 && 
1120: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
1130: 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 29 29 20  ringify(P,enc)) 
1140: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1150: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1160: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1170: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1180: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1190: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
11a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
11b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
11c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
11d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
11e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
11f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1200: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1210: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1220: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1230: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1240: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1250: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1260: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1270: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1280: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1290: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
12a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
12b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
12c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
12d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
12e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
12f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1300: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1310: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1320: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1330: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 6e 20 4d  string into an M
1340: 45 4d 5f 44 79 6e 20 73 74 72 69 6e 67 2e 0a 2a  EM_Dyn string..*
1350: 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70 68 65  /.#define Deephe
1360: 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20  meralize(P) \.  
1370: 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73   if( ((P)->flags
1380: 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c  &MEM_Ephem)!=0 \
1390: 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74  .       && sqlit
13a0: 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69  e3VdbeMemMakeWri
13b0: 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74  teable(P) ){ got
13c0: 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 0a 2a  o no_mem;}../*.*
13d0: 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 56 64  * Call sqlite3Vd
13e0: 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
13f0: 29 20 6f 6e 20 74 68 65 20 73 75 70 70 6c 69 65  ) on the supplie
1400: 64 20 76 61 6c 75 65 20 28 74 79 70 65 20 4d 65  d value (type Me
1410: 6d 2a 29 0a 2a 2a 20 50 20 69 66 20 72 65 71 75  m*).** P if requ
1420: 69 72 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ired..*/.#define
1430: 20 45 78 70 61 6e 64 42 6c 6f 62 28 50 29 20 28   ExpandBlob(P) (
1440: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1450: 5a 65 72 6f 29 3f 73 71 6c 69 74 65 33 56 64 62  Zero)?sqlite3Vdb
1460: 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 50  eMemExpandBlob(P
1470: 29 3a 30 29 0a 0a 2f 2a 0a 2a 2a 20 41 72 67 75  ):0)../*.** Argu
1480: 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69 6e 74 73  ment pMem points
1490: 20 61 74 20 61 20 72 65 67 69 73 74 65 72 20 74   at a register t
14a0: 68 61 74 20 77 69 6c 6c 20 62 65 20 70 61 73 73  hat will be pass
14b0: 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73 65 72 2d  ed to a.** user-
14c0: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
14d0: 20 6f 72 20 72 65 74 75 72 6e 65 64 20 74 6f 20   or returned to 
14e0: 74 68 65 20 75 73 65 72 20 61 73 20 74 68 65 20  the user as the 
14f0: 72 65 73 75 6c 74 20 6f 66 20 61 20 71 75 65 72  result of a quer
1500: 79 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  y..** The second
1510: 20 61 72 67 75 6d 65 6e 74 2c 20 27 64 62 5f 65   argument, 'db_e
1520: 6e 63 27 20 69 73 20 74 68 65 20 74 65 78 74 20  nc' is the text 
1530: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
1540: 20 74 68 65 20 76 64 62 65 20 66 6f 72 0a 2a 2a   the vdbe for.**
1550: 20 72 65 67 69 73 74 65 72 20 76 61 72 69 61 62   register variab
1560: 6c 65 73 2e 20 20 54 68 69 73 20 72 6f 75 74 69  les.  This routi
1570: 6e 65 20 73 65 74 73 20 74 68 65 20 70 4d 65 6d  ne sets the pMem
1580: 2d 3e 65 6e 63 20 61 6e 64 20 70 4d 65 6d 2d 3e  ->enc and pMem->
1590: 74 79 70 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65  type.** variable
15a0: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  s used by the sq
15b0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29 20  lite3_value_*() 
15c0: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 64 65  routines..*/.#de
15d0: 66 69 6e 65 20 73 74 6f 72 65 54 79 70 65 49 6e  fine storeTypeIn
15e0: 66 6f 28 41 2c 42 29 20 5f 73 74 6f 72 65 54 79  fo(A,B) _storeTy
15f0: 70 65 49 6e 66 6f 28 41 29 0a 73 74 61 74 69 63  peInfo(A).static
1600: 20 76 6f 69 64 20 5f 73 74 6f 72 65 54 79 70 65   void _storeType
1610: 49 6e 66 6f 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  Info(Mem *pMem){
1620: 0a 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20 70  .  int flags = p
1630: 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  Mem->flags;.  if
1640: 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ( flags & MEM_Nu
1650: 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  ll ){.    pMem->
1660: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 4e 55  type = SQLITE_NU
1670: 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  LL;.  }.  else i
1680: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  f( flags & MEM_I
1690: 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  nt ){.    pMem->
16a0: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 49 4e  type = SQLITE_IN
16b0: 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20 65 6c 73  TEGER;.  }.  els
16c0: 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45  e if( flags & ME
16d0: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 4d  M_Real ){.    pM
16e0: 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54  em->type = SQLIT
16f0: 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20 65  E_FLOAT;.  }.  e
1700: 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20  lse if( flags & 
1710: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 70  MEM_Str ){.    p
1720: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
1730: 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65 6c 73 65  TE_TEXT;.  }else
1740: 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65  {.    pMem->type
1750: 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b 0a   = SQLITE_BLOB;.
1760: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f    }.}../*.** Pro
1770: 70 65 72 74 69 65 73 20 6f 66 20 6f 70 63 6f 64  perties of opcod
1780: 65 73 2e 20 20 54 68 65 20 4f 50 46 4c 47 5f 49  es.  The OPFLG_I
1790: 4e 49 54 49 41 4c 49 5a 45 52 20 6d 61 63 72 6f  NITIALIZER macro
17a0: 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 62   is.** created b
17b0: 79 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  y mkopcodeh.awk 
17c0: 64 75 72 69 6e 67 20 63 6f 6d 70 69 6c 61 74 69  during compilati
17d0: 6f 6e 2e 20 20 44 61 74 61 20 69 73 20 6f 62 74  on.  Data is obt
17e0: 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 74 68  ained.** from th
17f0: 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 6c 6c 6f  e comments follo
1800: 77 69 6e 67 20 74 68 65 20 22 63 61 73 65 20 4f  wing the "case O
1810: 50 5f 78 78 78 78 3a 22 20 73 74 61 74 65 6d 65  P_xxxx:" stateme
1820: 6e 74 73 20 69 6e 0a 2a 2a 20 74 68 69 73 20 66  nts in.** this f
1830: 69 6c 65 2e 20 20 0a 2a 2f 0a 73 74 61 74 69 63  ile.  .*/.static
1840: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
1850: 63 68 61 72 20 6f 70 63 6f 64 65 50 72 6f 70 65  char opcodePrope
1860: 72 74 79 5b 5d 20 3d 20 4f 50 46 4c 47 5f 49 4e  rty[] = OPFLG_IN
1870: 49 54 49 41 4c 49 5a 45 52 3b 0a 0a 2f 2a 0a 2a  ITIALIZER;../*.*
1880: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
1890: 20 61 6e 20 6f 70 63 6f 64 65 20 68 61 73 20 61   an opcode has a
18a0: 6e 79 20 6f 66 20 74 68 65 20 4f 50 46 4c 47 5f  ny of the OPFLG_
18b0: 78 78 78 20 70 72 6f 70 65 72 74 69 65 73 0a 2a  xxx properties.*
18c0: 2a 20 73 70 65 63 69 66 69 65 64 20 62 79 20 6d  * specified by m
18d0: 61 73 6b 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ask..*/.int sqli
18e0: 74 65 33 56 64 62 65 4f 70 63 6f 64 65 48 61 73  te3VdbeOpcodeHas
18f0: 50 72 6f 70 65 72 74 79 28 69 6e 74 20 6f 70 63  Property(int opc
1900: 6f 64 65 2c 20 69 6e 74 20 6d 61 73 6b 29 7b 0a  ode, int mask){.
1910: 20 20 61 73 73 65 72 74 28 20 6f 70 63 6f 64 65    assert( opcode
1920: 3e 30 20 26 26 20 6f 70 63 6f 64 65 3c 28 69 6e  >0 && opcode<(in
1930: 74 29 73 69 7a 65 6f 66 28 6f 70 63 6f 64 65 50  t)sizeof(opcodeP
1940: 72 6f 70 65 72 74 79 29 20 29 3b 0a 20 20 72 65  roperty) );.  re
1950: 74 75 72 6e 20 28 6f 70 63 6f 64 65 50 72 6f 70  turn (opcodeProp
1960: 65 72 74 79 5b 6f 70 63 6f 64 65 5d 26 6d 61 73  erty[opcode]&mas
1970: 6b 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  k)!=0;.}../*.** 
1980: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
1990: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
19a0: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
19b0: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
19c0: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
19d0: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
19e0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
19f0: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
1a00: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
1a10: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
1a20: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
1a30: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
1a40: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
1a50: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1a60: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
1a70: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1a80: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
1a90: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
1aa0: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
1ab0: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1ac0: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1ad0: 20 20 2f 2a 20 57 68 65 6e 20 64 61 74 61 62 61    /* When databa
1ae0: 73 65 20 74 68 65 20 63 75 72 73 6f 72 20 62 65  se the cursor be
1af0: 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20  longs to, or -1 
1b00: 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72 65 65  */.  int isBtree
1b10: 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20 2a 2f  Cursor     /* */
1b20: 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  .){.  /* Find th
1b30: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
1b40: 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  at will be used 
1b50: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f  to store the blo
1b60: 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a  b of memory.  **
1b70: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
1b80: 69 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  is VdbeCursor st
1b90: 72 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63  ructure. It is c
1ba0: 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65  onvenient to use
1bb0: 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65   a .  ** vdbe me
1bc0: 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e  mory cell to man
1bd0: 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61  age the memory a
1be0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72  llocation requir
1bf0: 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64  ed for a.  ** Vd
1c00: 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75  beCursor structu
1c10: 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f  re for the follo
1c20: 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20  wing reasons:.  
1c30: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65  **.  **   * Some
1c40: 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d  times cursor num
1c50: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
1c60: 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69  r a couple of di
1c70: 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20  fferent.  **    
1c80: 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76   purposes in a v
1c90: 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65  dbe program. The
1ca0: 20 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20   different uses 
1cb0: 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20  might require.  
1cc0: 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74  **     different
1cd0: 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f   sized allocatio
1ce0: 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73  ns. Memory cells
1cf0: 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c   provide growabl
1d00: 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63  e.  **     alloc
1d10: 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ations..  **.  *
1d20: 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67  *   * When using
1d30: 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d   ENABLE_MEMORY_M
1d40: 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72  ANAGEMENT, memor
1d50: 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63  y cell buffers c
1d60: 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66  an.  **     be f
1d70: 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20  reed lazily via 
1d80: 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65  the sqlite3_rele
1d90: 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49  ase_memory() API
1da0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20  . This.  **     
1db0: 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75  minimizes the nu
1dc0: 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63  mber of malloc c
1dd0: 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65  alls made by the
1de0: 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20   system..  **.  
1df0: 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  ** Memory cells 
1e00: 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72 65 20  for cursors are 
1e10: 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65  allocated at the
1e20: 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72   top of the addr
1e30: 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20  ess.  ** space. 
1e40: 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e  Memory cell (p->
1e50: 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64  nMem) correspond
1e60: 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53  s to cursor 0. S
1e70: 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75  pace for.  ** cu
1e80: 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65  rsor 1 is manage
1e90: 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  d by memory cell
1ea0: 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74   (p->nMem-1), et
1eb0: 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  c..  */.  Mem *p
1ec0: 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Mem = &p->aMem[p
1ed0: 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20  ->nMem-iCur];.. 
1ee0: 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64   int nByte;.  Vd
1ef0: 62 65 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20  beCursor *pCx = 
1f00: 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20  0;.  nByte = .  
1f10: 20 20 20 20 73 69 7a 65 6f 66 28 56 64 62 65 43      sizeof(VdbeC
1f20: 75 72 73 6f 72 29 20 2b 20 0a 20 20 20 20 20 20  ursor) + .      
1f30: 28 69 73 42 74 72 65 65 43 75 72 73 6f 72 3f 73  (isBtreeCursor?s
1f40: 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1f50: 72 53 69 7a 65 28 29 3a 30 29 20 2b 20 0a 20 20  rSize():0) + .  
1f60: 20 20 20 20 32 2a 6e 46 69 65 6c 64 2a 73 69 7a      2*nField*siz
1f70: 65 6f 66 28 75 33 32 29 3b 0a 0a 20 20 61 73 73  eof(u32);..  ass
1f80: 65 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75  ert( iCur<p->nCu
1f90: 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d  rsor );.  if( p-
1fa0: 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a  >apCsr[iCur] ){.
1fb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46      sqlite3VdbeF
1fc0: 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e  reeCursor(p, p->
1fd0: 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20  apCsr[iCur]);.  
1fe0: 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d    p->apCsr[iCur]
1ff0: 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
2000: 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74  SQLITE_OK==sqlit
2010: 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d  e3VdbeMemGrow(pM
2020: 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b  em, nByte, 0) ){
2030: 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43  .    p->apCsr[iC
2040: 75 72 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62  ur] = pCx = (Vdb
2050: 65 43 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a  eCursor*)pMem->z
2060: 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 4d 65  ;.    memset(pMe
2070: 6d 2d 3e 7a 2c 20 30 2c 20 6e 42 79 74 65 29 3b  m->z, 0, nByte);
2080: 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20  .    pCx->iDb = 
2090: 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46  iDb;.    pCx->nF
20a0: 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20  ield = nField;. 
20b0: 20 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b     if( nField ){
20c0: 0a 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70  .      pCx->aTyp
20d0: 65 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d  e = (u32 *)&pMem
20e0: 2d 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65 43  ->z[sizeof(VdbeC
20f0: 75 72 73 6f 72 29 5d 3b 0a 20 20 20 20 7d 0a 20  ursor)];.    }. 
2100: 20 20 20 69 66 28 20 69 73 42 74 72 65 65 43 75     if( isBtreeCu
2110: 72 73 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43  rsor ){.      pC
2120: 78 2d 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74  x->pCursor = (Bt
2130: 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20  Cursor*).       
2140: 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a 65     &pMem->z[size
2150: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 2b 32  of(VdbeCursor)+2
2160: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
2170: 33 32 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  32)];.    }.  }.
2180: 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a    return pCx;.}.
2190: 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f  ./*.** Try to co
21a0: 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e  nvert a value in
21b0: 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70  to a numeric rep
21c0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77  resentation if w
21d0: 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77  e can.** do so w
21e0: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
21f0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20  nformation.  In 
2200: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
2210: 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f  the string.** lo
2220: 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65  oks like a numbe
2230: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e  r, convert it in
2240: 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  to a number.  If
2250: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   it does not.** 
2260: 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62  look like a numb
2270: 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f  er, leave it alo
2280: 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ne..*/.static vo
2290: 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  id applyNumericA
22a0: 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65  ffinity(Mem *pRe
22b0: 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63 2d  c){.  if( (pRec-
22c0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52 65  >flags & (MEM_Re
22d0: 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20  al|MEM_Int))==0 
22e0: 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 61 6c 6e  ){.    int realn
22f0: 75 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  um;.    sqlite3V
2300: 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61  dbeMemNulTermina
2310: 74 65 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66  te(pRec);.    if
2320: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ( (pRec->flags&M
2330: 45 4d 5f 53 74 72 29 0a 20 20 20 20 20 20 20 20  EM_Str).        
2340: 20 26 26 20 73 71 6c 69 74 65 33 49 73 4e 75 6d   && sqlite3IsNum
2350: 62 65 72 28 70 52 65 63 2d 3e 7a 2c 20 26 72 65  ber(pRec->z, &re
2360: 61 6c 6e 75 6d 2c 20 70 52 65 63 2d 3e 65 6e 63  alnum, pRec->enc
2370: 29 20 29 7b 0a 20 20 20 20 20 20 69 36 34 20 76  ) ){.      i64 v
2380: 61 6c 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  alue;.      sqli
2390: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
23a0: 6f 64 69 6e 67 28 70 52 65 63 2c 20 53 51 4c 49  oding(pRec, SQLI
23b0: 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 20 20  TE_UTF8);.      
23c0: 69 66 28 20 21 72 65 61 6c 6e 75 6d 20 26 26 20  if( !realnum && 
23d0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52  sqlite3Atoi64(pR
23e0: 65 63 2d 3e 7a 2c 20 26 76 61 6c 75 65 29 20 29  ec->z, &value) )
23f0: 7b 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e  {.        pRec->
2400: 75 2e 69 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20  u.i = value;.   
2410: 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
2420: 6c 61 67 28 70 52 65 63 2c 20 4d 45 4d 5f 49 6e  lag(pRec, MEM_In
2430: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
2440: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
2450: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
2460: 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Rec);.      }.  
2470: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
2480: 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64   Processing is d
2490: 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20  etermine by the 
24a0: 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74  affinity paramet
24b0: 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  er:.**.** SQLITE
24c0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a  _AFF_INTEGER:.**
24d0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
24e0: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
24f0: 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54  NUMERIC:.**    T
2500: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52  ry to convert pR
2510: 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ec to an integer
2520: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2530: 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61  or a .**    floa
2540: 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65  ting-point repre
2550: 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20  sentation if an 
2560: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2570: 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20  tation.**    is 
2580: 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e  not possible.  N
2590: 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e 74  ote that the int
25a0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
25b0: 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77  ion is.**    alw
25c0: 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20 65  ays preferred, e
25d0: 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e  ven if the affin
25e0: 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63  ity is REAL, bec
25f0: 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e  ause.**    an in
2600: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2610: 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61  tion is more spa
2620: 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20  ce efficient on 
2630: 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  disk..**.** SQLI
2640: 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20  TE_AFF_TEXT:.** 
2650: 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20     Convert pRec 
2660: 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65 73  to a text repres
2670: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
2680: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a  SQLITE_AFF_NONE:
2690: 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70  .**    No-op.  p
26a0: 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64  Rec is unchanged
26b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
26c0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a   applyAffinity(.
26d0: 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20    Mem *pRec,    
26e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c        /* The val
26f0: 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69  ue to apply affi
2700: 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61  nity to */.  cha
2710: 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20  r affinity,     
2720: 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
2730: 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a   to be applied *
2740: 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20 20  /.  u8 enc      
2750: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
2760: 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  his text encodin
2770: 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66  g */.){.  if( af
2780: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2790: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f  FF_TEXT ){.    /
27a0: 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74  * Only attempt t
27b0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f  he conversion to
27c0: 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69   TEXT if there i
27d0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  s an integer or 
27e0: 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72  real.    ** repr
27f0: 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62  esentation (blob
2800: 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74   and NULL do not
2810: 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20   get converted) 
2820: 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20  but no string.  
2830: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2840: 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ion..    */.    
2850: 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c  if( 0==(pRec->fl
2860: 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20  ags&MEM_Str) && 
2870: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45  (pRec->flags&(ME
2880: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29  M_Real|MEM_Int))
2890: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
28a0: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
28b0: 79 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20  y(pRec, enc);.  
28c0: 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c    }.    pRec->fl
28d0: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61  ags &= ~(MEM_Rea
28e0: 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65  l|MEM_Int);.  }e
28f0: 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79  lse if( affinity
2900: 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  !=SQLITE_AFF_NON
2910: 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  E ){.    assert(
2920: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2930: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c  E_AFF_INTEGER ||
2940: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
2950: 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20  E_AFF_REAL.     
2960: 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e          || affin
2970: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2980: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 61  NUMERIC );.    a
2990: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
29a0: 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69  ity(pRec);.    i
29b0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
29c0: 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20   MEM_Real ){.   
29d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
29e0: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
29f0: 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  ec);.    }.  }.}
2a00: 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63  ../*.** Try to c
2a10: 6f 6e 76 65 72 74 20 74 68 65 20 74 79 70 65 20  onvert the type 
2a20: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72  of a function ar
2a30: 67 75 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75  gument or a resu
2a40: 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74  lt column.** int
2a50: 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72  o a numeric repr
2a60: 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65  esentation.  Use
2a70: 20 65 69 74 68 65 72 20 49 4e 54 45 47 45 52 20   either INTEGER 
2a80: 6f 72 20 52 45 41 4c 20 77 68 69 63 68 65 76 65  or REAL whicheve
2a90: 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69  r.** is appropri
2aa0: 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64  ate.  But only d
2ab0: 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  o the conversion
2ac0: 20 69 66 20 69 74 20 69 73 20 70 6f 73 73 69 62   if it is possib
2ad0: 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f  le without.** lo
2ae0: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2af0: 6e 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65  n and return the
2b00: 20 72 65 76 69 73 65 64 20 74 79 70 65 20 6f 66   revised type of
2b10: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a   the argument..*
2b20: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20  *.** This is an 
2b30: 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 61 70 69  EXPERIMENTAL api
2b40: 20 61 6e 64 20 69 73 20 73 75 62 6a 65 63 74 20   and is subject 
2b50: 74 6f 20 63 68 61 6e 67 65 20 6f 72 20 72 65 6d  to change or rem
2b60: 6f 76 61 6c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oval..*/.int sql
2b70: 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72  ite3_value_numer
2b80: 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f  ic_type(sqlite3_
2b90: 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20  value *pVal){.  
2ba0: 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d  Mem *pMem = (Mem
2bb0: 2a 29 70 56 61 6c 3b 0a 20 20 61 70 70 6c 79 4e  *)pVal;.  applyN
2bc0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
2bd0: 4d 65 6d 29 3b 0a 20 20 73 74 6f 72 65 54 79 70  Mem);.  storeTyp
2be0: 65 49 6e 66 6f 28 70 4d 65 6d 2c 20 30 29 3b 0a  eInfo(pMem, 0);.
2bf0: 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74    return pMem->t
2c00: 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78  ype;.}../*.** Ex
2c10: 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 20 6f  ported version o
2c20: 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  f applyAffinity(
2c30: 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b  ). This one work
2c40: 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c  s on sqlite3_val
2c50: 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65  ue*, .** not the
2c60: 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74   internal Mem* t
2c70: 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ype..*/.void sql
2c80: 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
2c90: 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69 74 65  finity(.  sqlite
2ca0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a  3_value *pVal, .
2cb0: 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c 20 0a    u8 affinity, .
2cc0: 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70    u8 enc.){.  ap
2cd0: 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d 65 6d  plyAffinity((Mem
2ce0: 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e 69 74   *)pVal, affinit
2cf0: 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64  y, enc);.}..#ifd
2d00: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2d10: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
2d20: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
2d30: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
2d40: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
2d50: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
2d60: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
2d70: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
2d80: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
2d90: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
2da0: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
2db0: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
2dc0: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
2dd0: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
2de0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
2df0: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
2e00: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
2e10: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
2e20: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
2e30: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
2e40: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
2e50: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
2e60: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
2e70: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
2e80: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
2e90: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
2ea0: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
2eb0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
2ec0: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
2ed0: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
2ee0: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
2ef0: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
2f00: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2f10: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
2f20: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
2f30: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
2f40: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
2f50: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
2f60: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
2f70: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
2f80: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
2f90: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
2fa0: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
2fb0: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
2fc0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2fd0: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
2fe0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
2ff0: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
3000: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
3010: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3020: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
3030: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
3040: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3050: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
3060: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3070: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
3080: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3090: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
30a0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
30b0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
30c0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
30d0: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
30e0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
30f0: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
3100: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
3110: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
3120: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
3130: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
3140: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3150: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3160: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
3170: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3180: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3190: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
31a0: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
31b0: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
31c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
31d0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
31e0: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
31f0: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
3200: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3210: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3220: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
3230: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
3240: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
3250: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
3260: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
3270: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
3280: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3290: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
32a0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
32b0: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
32c0: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
32d0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
32e0: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
32f0: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3300: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3310: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3320: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3330: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3340: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3350: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3360: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3370: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3380: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3390: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
33a0: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
33b0: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
33c0: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
33d0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
33e0: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
33f0: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3400: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3410: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3420: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
3430: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
3440: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
3450: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
3460: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
3470: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
3480: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3490: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
34a0: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
34b0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
34c0: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
34d0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
34e0: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
34f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3500: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3510: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3520: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3530: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3540: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3550: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3560: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3570: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3580: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3590: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
35a0: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
35b0: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
35c0: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
35d0: 72 61 63 65 50 72 69 6e 74 28 46 49 4c 45 20 2a  racePrint(FILE *
35e0: 6f 75 74 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  out, Mem *p){.  
35f0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3600: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 66  EM_Null ){.    f
3610: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e 55  printf(out, " NU
3620: 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  LL");.  }else if
3630: 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d  ( (p->flags & (M
3640: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29  EM_Int|MEM_Str))
3650: 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53  ==(MEM_Int|MEM_S
3660: 74 72 29 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  tr) ){.    fprin
3670: 74 66 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c 6c  tf(out, " si:%ll
3680: 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d  d", p->u.i);.  }
3690: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
36a0: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  s & MEM_Int ){. 
36b0: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
36c0: 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e  " i:%lld", p->u.
36d0: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
36e0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
36f0: 65 61 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  eal ){.    fprin
3700: 74 66 28 6f 75 74 2c 20 22 20 72 3a 25 67 22 2c  tf(out, " r:%g",
3710: 20 70 2d 3e 72 29 3b 0a 20 20 7d 65 6c 73 65 20   p->r);.  }else 
3720: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3730: 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20 20  EM_RowSet ){.   
3740: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20   fprintf(out, " 
3750: 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65  (rowset)");.  }e
3760: 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42  lse{.    char zB
3770: 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c  uf[200];.    sql
3780: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
3790: 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b  yPrint(p, zBuf);
37a0: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74  .    fprintf(out
37b0: 2c 20 22 20 22 29 3b 0a 20 20 20 20 66 70 72 69  , " ");.    fpri
37c0: 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20 7a  ntf(out, "%s", z
37d0: 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74  Buf);.  }.}.stat
37e0: 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72  ic void register
37f0: 54 72 61 63 65 28 46 49 4c 45 20 2a 6f 75 74 2c  Trace(FILE *out,
3800: 20 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a   int iReg, Mem *
3810: 70 29 7b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75  p){.  fprintf(ou
3820: 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c  t, "REG[%d] = ",
3830: 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61   iReg);.  memTra
3840: 63 65 50 72 69 6e 74 28 6f 75 74 2c 20 70 29 3b  cePrint(out, p);
3850: 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20  .  fprintf(out, 
3860: 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  "\n");.}.#endif.
3870: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
3880: 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52  EBUG.#  define R
3890: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c  EGISTER_TRACE(R,
38a0: 4d 29 20 69 66 28 70 2d 3e 74 72 61 63 65 29 72  M) if(p->trace)r
38b0: 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e  egisterTrace(p->
38c0: 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65 6c 73 65  trace,R,M).#else
38d0: 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53  .#  define REGIS
38e0: 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23  TER_TRACE(R,M).#
38f0: 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56  endif...#ifdef V
3900: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20  DBE_PROFILE../* 
3910: 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e  .** hwtime.h con
3920: 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73  tains inline ass
3930: 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20  embler code for 
3940: 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a  implementing .**
3950: 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63   high-performanc
3960: 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65  e timing routine
3970: 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  s..*/.#include "
3980: 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69  hwtime.h"..#endi
3990: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48 45  f../*.** The CHE
39a0: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
39b0: 20 6d 61 63 72 6f 20 64 65 66 69 6e 65 64 20 68   macro defined h
39c0: 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65 65  ere looks to see
39d0: 20 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   if the.** sqlit
39e0: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 72  e3_interrupt() r
39f0: 6f 75 74 69 6e 65 20 68 61 73 20 62 65 65 6e 20  outine has been 
3a00: 63 61 6c 6c 65 64 2e 20 20 49 66 20 69 74 20 68  called.  If it h
3a10: 61 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a 2a  as been, then.**
3a20: 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20 74   processing of t
3a30: 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20  he VDBE program 
3a40: 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 2e 0a  is interrupted..
3a50: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f  **.** This macro
3a60: 20 61 64 64 65 64 20 74 6f 20 65 76 65 72 79 20   added to every 
3a70: 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 61 74  instruction that
3a80: 20 64 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e 20   does a jump in 
3a90: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70 6c  order to.** impl
3aa0: 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20 54  ement a loop.  T
3ab0: 68 69 73 20 74 65 73 74 20 75 73 65 64 20 74 6f  his test used to
3ac0: 20 62 65 20 6f 6e 20 65 76 65 72 79 20 73 69 6e   be on every sin
3ad0: 67 6c 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c  gle instruction,
3ae0: 0a 2a 2a 20 62 75 74 20 74 68 61 74 20 6d 65 61  .** but that mea
3af0: 6e 74 20 77 65 20 6d 6f 72 65 20 74 65 73 74 69  nt we more testi
3b00: 6e 67 20 74 68 61 74 20 77 65 20 6e 65 65 64 65  ng that we neede
3b10: 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65 73 74  d.  By only test
3b20: 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67 20  ing the.** flag 
3b30: 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75 63 74  on jump instruct
3b40: 69 6f 6e 73 2c 20 77 65 20 67 65 74 20 61 20 28  ions, we get a (
3b50: 73 6d 61 6c 6c 29 20 73 70 65 65 64 20 69 6d 70  small) speed imp
3b60: 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64 65  rovement..*/.#de
3b70: 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49  fine CHECK_FOR_I
3b80: 4e 54 45 52 52 55 50 54 20 5c 0a 20 20 20 69 66  NTERRUPT \.   if
3b90: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
3ba0: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
3bb0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
3bc0: 72 75 70 74 3b 0a 0a 23 69 66 64 65 66 20 53 51  rupt;..#ifdef SQ
3bd0: 4c 49 54 45 5f 44 45 42 55 47 0a 73 74 61 74 69  LITE_DEBUG.stati
3be0: 63 20 69 6e 74 20 66 69 6c 65 45 78 69 73 74 73  c int fileExists
3bf0: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f  (sqlite3 *db, co
3c00: 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 29  nst char *zFile)
3c10: 7b 0a 20 20 69 6e 74 20 72 65 73 20 3d 20 30 3b  {.  int res = 0;
3c20: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
3c30: 54 45 5f 4f 4b 3b 0a 23 69 66 64 65 66 20 53 51  TE_OK;.#ifdef SQ
3c40: 4c 49 54 45 5f 54 45 53 54 0a 20 20 2f 2a 20 49  LITE_TEST.  /* I
3c50: 66 20 77 65 20 61 72 65 20 63 75 72 72 65 6e 74  f we are current
3c60: 6c 79 20 74 65 73 74 69 6e 67 20 49 4f 20 65 72  ly testing IO er
3c70: 72 6f 72 73 2c 20 74 68 65 6e 20 64 6f 20 6e 6f  rors, then do no
3c80: 74 20 63 61 6c 6c 20 4f 73 41 63 63 65 73 73 28  t call OsAccess(
3c90: 29 20 74 6f 0a 20 20 2a 2a 20 74 65 73 74 20 66  ) to.  ** test f
3ca0: 6f 72 20 74 68 65 20 70 72 65 73 65 6e 63 65 20  or the presence 
3cb0: 6f 66 20 7a 46 69 6c 65 2e 20 54 68 69 73 20 69  of zFile. This i
3cc0: 73 20 62 65 63 61 75 73 65 20 61 6e 79 20 49 4f  s because any IO
3cd0: 20 65 72 72 6f 72 20 74 68 61 74 0a 20 20 2a 2a   error that.  **
3ce0: 20 6f 63 63 75 72 73 20 68 65 72 65 20 77 69 6c   occurs here wil
3cf0: 6c 20 6e 6f 74 20 62 65 20 72 65 70 6f 72 74 65  l not be reporte
3d00: 64 2c 20 63 61 75 73 69 6e 67 20 74 68 65 20 74  d, causing the t
3d10: 65 73 74 20 74 6f 20 66 61 69 6c 2e 0a 20 20 2a  est to fail..  *
3d20: 2f 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  /.  extern int s
3d30: 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72 6f 72 5f  qlite3_io_error_
3d40: 70 65 6e 64 69 6e 67 3b 0a 20 20 69 66 28 20 73  pending;.  if( s
3d50: 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72 6f 72 5f  qlite3_io_error_
3d60: 70 65 6e 64 69 6e 67 3c 3d 30 20 29 0a 23 65 6e  pending<=0 ).#en
3d70: 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  dif.    rc = sql
3d80: 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d  ite3OsAccess(db-
3d90: 3e 70 56 66 73 2c 20 7a 46 69 6c 65 2c 20 53 51  >pVfs, zFile, SQ
3da0: 4c 49 54 45 5f 41 43 43 45 53 53 5f 45 58 49 53  LITE_ACCESS_EXIS
3db0: 54 53 2c 20 26 72 65 73 29 3b 0a 20 20 72 65 74  TS, &res);.  ret
3dc0: 75 72 6e 20 28 72 65 73 20 26 26 20 72 63 3d 3d  urn (res && rc==
3dd0: 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d 0a 23 65  SQLITE_OK);.}.#e
3de0: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44  ndif..#ifndef ND
3df0: 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  EBUG./*.** This 
3e00: 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  function is only
3e10: 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
3e20: 68 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20  hin an assert() 
3e30: 65 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a  expression. It.*
3e40: 2a 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68  * checks that th
3e50: 65 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73  e sqlite3.nTrans
3e60: 61 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20  action variable 
3e70: 69 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74  is correctly set
3e80: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65   to.** the numbe
3e90: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
3ea0: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
3eb0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65  currently in the
3ec0: 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74   .** linked list
3ed0: 20 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c   starting at sql
3ee0: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
3ef0: 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a  .** .** Usage:.*
3f00: 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
3f10: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
3f20: 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73  ount(db) );.*/.s
3f30: 74 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53  tatic int checkS
3f40: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71  avepointCount(sq
3f50: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e  lite3 *db){.  in
3f60: 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70  t n = 0;.  Savep
3f70: 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70  oint *p;.  for(p
3f80: 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b  =db->pSavepoint;
3f90: 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20   p; p=p->pNext) 
3fa0: 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  n++;.  assert( n
3fb0: 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  ==(db->nSavepoin
3fc0: 74 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61  t + db->isTransa
3fd0: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20  ctionSavepoint) 
3fe0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d  );.  return 1;.}
3ff0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
4000: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
4010: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
4020: 20 61 73 20 77 65 20 63 61 6e 20 74 68 65 6e 20   as we can then 
4030: 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71  return..**.** sq
4040: 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65 61  lite3VdbeMakeRea
4050: 64 79 28 29 20 6d 75 73 74 20 62 65 20 63 61 6c  dy() must be cal
4060: 6c 65 64 20 62 65 66 6f 72 65 20 74 68 69 73 20  led before this 
4070: 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
4080: 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65   to.** close the
4090: 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20 61 20   program with a 
40a0: 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e  final OP_Halt an
40b0: 64 20 74 6f 20 73 65 74 20 75 70 20 74 68 65 20  d to set up the 
40c0: 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64  callbacks.** and
40d0: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
40e0: 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a  ge pointer..**.*
40f0: 2a 20 57 68 65 6e 65 76 65 72 20 61 20 72 6f 77  * Whenever a row
4100: 20 6f 72 20 72 65 73 75 6c 74 20 64 61 74 61 20   or result data 
4110: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 74 68  is available, th
4120: 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20  is routine will 
4130: 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65  either.** invoke
4140: 20 74 68 65 20 72 65 73 75 6c 74 20 63 61 6c 6c   the result call
4150: 62 61 63 6b 20 28 69 66 20 74 68 65 72 65 20 69  back (if there i
4160: 73 20 6f 6e 65 29 20 6f 72 20 72 65 74 75 72 6e  s one) or return
4170: 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f   with.** SQLITE_
4180: 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e  ROW..**.** If an
4190: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
41a0: 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65   to open a locke
41b0: 64 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  d database, then
41c0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a   this routine.**
41d0: 20 77 69 6c 6c 20 65 69 74 68 65 72 20 69 6e 76   will either inv
41e0: 6f 6b 65 20 74 68 65 20 62 75 73 79 20 63 61 6c  oke the busy cal
41f0: 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65 20  lback (if there 
4200: 69 73 20 6f 6e 65 29 20 6f 72 20 69 74 20 77 69  is one) or it wi
4210: 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c  ll.** return SQL
4220: 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20  ITE_BUSY..**.** 
4230: 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  If an error occu
4240: 72 73 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  rs, an error mes
4250: 73 61 67 65 20 69 73 20 77 72 69 74 74 65 6e 20  sage is written 
4260: 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  to memory obtain
4270: 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  ed.** from sqlit
4280: 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20  e3_malloc() and 
4290: 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73 20 6d 61  p->zErrMsg is ma
42a0: 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  de to point to t
42b0: 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54  hat memory..** T
42c0: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73  he error code is
42d0: 20 73 74 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63   stored in p->rc
42e0: 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e   and this routin
42f0: 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  e returns SQLITE
4300: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66  _ERROR..**.** If
4310: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 65 76   the callback ev
4320: 65 72 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  er returns non-z
4330: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 70 72  ero, then the pr
4340: 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69  ogram exits.** i
4350: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54 68 65  mmediately.  The
4360: 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72  re will be no er
4370: 72 6f 72 20 6d 65 73 73 61 67 65 20 62 75 74 20  ror message but 
4380: 74 68 65 20 70 2d 3e 72 63 20 66 69 65 6c 64 20  the p->rc field 
4390: 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c  is.** set to SQL
43a0: 49 54 45 5f 41 42 4f 52 54 20 61 6e 64 20 74 68  ITE_ABORT and th
43b0: 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20  is routine will 
43c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
43d0: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d  ROR..**.** A mem
43e0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65  ory allocation e
43f0: 72 72 6f 72 20 63 61 75 73 65 73 20 70 2d 3e 72  rror causes p->r
4400: 63 20 74 6f 20 62 65 20 73 65 74 20 74 6f 20 53  c to be set to S
4410: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20  QLITE_NOMEM and 
4420: 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20  this.** routine 
4430: 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  to return SQLITE
4440: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74  _ERROR..**.** Ot
4450: 68 65 72 20 66 61 74 61 6c 20 65 72 72 6f 72 73  her fatal errors
4460: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
4470: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65  RROR..**.** Afte
4480: 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 68  r this routine h
4490: 61 73 20 66 69 6e 69 73 68 65 64 2c 20 73 71 6c  as finished, sql
44a0: 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65  ite3VdbeFinalize
44b0: 28 29 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  () should be.** 
44c0: 75 73 65 64 20 74 6f 20 63 6c 65 61 6e 20 75 70  used to clean up
44d0: 20 74 68 65 20 6d 65 73 73 20 74 68 61 74 20 77   the mess that w
44e0: 61 73 20 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a  as left behind..
44f0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  */.int sqlite3Vd
4500: 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a  beExec(.  Vdbe *
4510: 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p               
4520: 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
4530: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3b   */.){.  int pc;
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4550: 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72      /* The progr
4560: 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  am counter */.  
4570: 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20  Op *pOp;        
4580: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
4590: 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrent operation 
45a0: 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  */.  int rc = SQ
45b0: 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
45c0: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
45d0: 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rn */.  sqlite3 
45e0: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20  *db = p->db;    
45f0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4600: 73 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  se */.  u8 encod
4610: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
4620: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4630: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  se encoding */. 
4640: 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20   Mem *pIn1 = 0; 
4650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
4660: 73 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  st input operand
4670: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20   */.  Mem *pIn2 
4680: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
4690: 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70   /* 2nd input op
46a0: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
46b0: 70 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn3 = 0;       
46c0: 20 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70        /* 3rd inp
46d0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
46e0: 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20  Mem *pOut = 0;  
46f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75             /* Ou
4700: 74 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  tput operand */.
4710: 20 20 75 38 20 6f 70 50 72 6f 70 65 72 74 79 3b    u8 opProperty;
4720: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4730: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4740: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4750: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4760: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  tion */.  int *a
4770: 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20  Permute = 0;    
4780: 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61 74       /* Permutat
4790: 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ion of columns f
47a0: 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f  or OP_Compare */
47b0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
47c0: 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74  FILE.  u64 start
47d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
47e0: 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63    /* CPU clock c
47f0: 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66  ount at start of
4800: 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74   opcode */.  int
4810: 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20 20 20   origPc;        
4820: 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72          /* Progr
4830: 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20 73 74  am counter at st
4840: 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f  art of opcode */
4850: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4860: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
4870: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
4880: 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  int nProgressOps
4890: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4f 70   = 0;      /* Op
48a0: 63 6f 64 65 73 20 65 78 65 63 75 74 65 64 20 73  codes executed s
48b0: 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20 63 61  ince progress ca
48c0: 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e 64 69  llback. */.#endi
48d0: 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20  f.  /*** INSERT 
48e0: 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45  STACK UNION HERE
48f0: 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28   ***/..  assert(
4900: 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f   p->magic==VDBE_
4910: 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a  MAGIC_RUN );  /*
4920: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
4930: 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f  verifies this */
4940: 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d  .  assert( db->m
4950: 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d 41 47  agic==SQLITE_MAG
4960: 49 43 5f 42 55 53 59 20 29 3b 0a 20 20 73 71 6c  IC_BUSY );.  sql
4970: 69 74 65 33 56 64 62 65 4d 75 74 65 78 41 72 72  ite3VdbeMutexArr
4980: 61 79 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66  ayEnter(p);.  if
4990: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
49a0: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20  NOMEM ){.    /* 
49b0: 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20  This happens if 
49c0: 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64  a malloc() insid
49d0: 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  e a call to sqli
49e0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
49f0: 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ) or.    ** sqli
4a00: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
4a10: 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a  6() failed.  */.
4a20: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
4a30: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
4a40: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
4a50: 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  || p->rc==SQLITE
4a60: 5f 42 55 53 59 20 29 3b 0a 20 20 70 2d 3e 72 63  _BUSY );.  p->rc
4a70: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
4a80: 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61  assert( p->expla
4a90: 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52  in==0 );.  p->pR
4aa0: 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20  esultSet = 0;.  
4ab0: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
4ac0: 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 43 48 45  nBusy = 0;.  CHE
4ad0: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
4ae0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
4af0: 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69  OTraceSql(p);.#i
4b00: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4b10: 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e  G.  sqlite3Begin
4b20: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
4b30: 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 20 0a    if( p->pc==0 .
4b40: 20 20 20 26 26 20 28 28 70 2d 3e 64 62 2d 3e 66     && ((p->db->f
4b50: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4b60: 62 65 4c 69 73 74 69 6e 67 29 20 7c 7c 20 66 69  beListing) || fi
4b70: 6c 65 45 78 69 73 74 73 28 64 62 2c 20 22 76 64  leExists(db, "vd
4b80: 62 65 5f 65 78 70 6c 61 69 6e 22 29 29 0a 20 20  be_explain")).  
4b90: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
4ba0: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50    printf("VDBE P
4bb0: 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c  rogram Listing:\
4bc0: 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  n");.    sqlite3
4bd0: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4be0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
4bf0: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4c00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4c10: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69  rintOp(stdout, i
4c20: 2c 20 26 70 2d 3e 61 4f 70 5b 69 5d 29 3b 0a 20  , &p->aOp[i]);. 
4c30: 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 66     }.  }.  if( f
4c40: 69 6c 65 45 78 69 73 74 73 28 64 62 2c 20 22 76  ileExists(db, "v
4c50: 64 62 65 5f 74 72 61 63 65 22 29 20 29 7b 0a 20  dbe_trace") ){. 
4c60: 20 20 20 70 2d 3e 74 72 61 63 65 20 3d 20 73 74     p->trace = st
4c70: 64 6f 75 74 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  dout;.  }.  sqli
4c80: 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
4c90: 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66  oc();.#endif.  f
4ca0: 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d  or(pc=p->pc; rc=
4cb0: 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b  =SQLITE_OK; pc++
4cc0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
4cd0: 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f  c>=0 && pc<p->nO
4ce0: 70 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  p );.    if( db-
4cf0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
4d00: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66  goto no_mem;.#if
4d10: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
4d20: 0a 20 20 20 20 6f 72 69 67 50 63 20 3d 20 70 63  .    origPc = pc
4d30: 3b 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71  ;.    start = sq
4d40: 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23  lite3Hwtime();.#
4d50: 65 6e 64 69 66 0a 20 20 20 20 70 4f 70 20 3d 20  endif.    pOp = 
4d60: 26 70 2d 3e 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20  &p->aOp[pc];..  
4d70: 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20    /* Only allow 
4d80: 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54  tracing if SQLIT
4d90: 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  E_DEBUG is defin
4da0: 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ed..    */.#ifde
4db0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
4dc0: 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20     if( p->trace 
4dd0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 63 3d  ){.      if( pc=
4de0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72  =0 ){.        pr
4df0: 69 6e 74 66 28 22 56 44 42 45 20 45 78 65 63 75  intf("VDBE Execu
4e00: 74 69 6f 6e 20 54 72 61 63 65 3a 5c 6e 22 29 3b  tion Trace:\n");
4e10: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4e20: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4e30: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
4e40: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
4e50: 70 28 70 2d 3e 74 72 61 63 65 2c 20 70 63 2c 20  p(p->trace, pc, 
4e60: 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  pOp);.    }.    
4e70: 69 66 28 20 70 2d 3e 74 72 61 63 65 3d 3d 30 20  if( p->trace==0 
4e80: 26 26 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20 20  && pc==0 ){.    
4e90: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65    sqlite3BeginBe
4ea0: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20  nignMalloc();.  
4eb0: 20 20 20 20 69 66 28 20 66 69 6c 65 45 78 69 73      if( fileExis
4ec0: 74 73 28 64 62 2c 20 22 76 64 62 65 5f 73 71 6c  ts(db, "vdbe_sql
4ed0: 74 72 61 63 65 22 29 20 29 7b 0a 20 20 20 20 20  trace") ){.     
4ee0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4ef0: 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 20  intSql(p);.     
4f00: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
4f10: 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
4f20: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
4f30: 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43        ..    /* C
4f40: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
4f50: 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61  e need to simula
4f60: 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e  te an interrupt.
4f70: 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70    This only happ
4f80: 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65  ens.    ** if we
4f90: 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20   have a special 
4fa0: 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20  test build..    
4fb0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4fc0: 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71  _TEST.    if( sq
4fd0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
4fe0: 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20  count>0 ){.     
4ff0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5000: 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20  pt_count--;.    
5010: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e    if( sqlite3_in
5020: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30  terrupt_count==0
5030: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
5040: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62  te3_interrupt(db
5050: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5060: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
5070: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
5080: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
5090: 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70     /* Call the p
50a0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
50b0: 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67   if it is config
50c0: 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71  ured and the req
50d0: 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 20  uired number.   
50e0: 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20   ** of VDBE ops 
50f0: 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74  have been execut
5100: 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65  ed (either since
5110: 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e   this invocation
5120: 20 6f 66 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74   of.    ** sqlit
5130: 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20  e3VdbeExec() or 
5140: 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20  since last time 
5150: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
5160: 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64  lback was called
5170: 29 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65  )..    ** If the
5180: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
5190: 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  ck returns non-z
51a0: 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69  ero, exit the vi
51b0: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69  rtual machine wi
51c0: 74 68 0a 20 20 20 20 2a 2a 20 61 20 72 65 74 75  th.    ** a retu
51d0: 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41  rn code SQLITE_A
51e0: 42 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  BORT..    */.   
51f0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
5200: 73 73 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ss ){.      if( 
5210: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
5220: 3d 3d 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29  ==nProgressOps )
5230: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 70 72  {.        int pr
5240: 63 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  c;.        if( s
5250: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
5260: 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
5270: 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
5280: 20 20 20 20 20 20 20 20 70 72 63 20 3d 64 62 2d          prc =db-
5290: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
52a0: 50 72 6f 67 72 65 73 73 41 72 67 29 3b 0a 20 20  ProgressArg);.  
52b0: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
52c0: 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
52d0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
52e0: 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 20 20  o_misuse;.      
52f0: 20 20 69 66 28 20 70 72 63 21 3d 30 20 29 7b 0a    if( prc!=0 ){.
5300: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
5310: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
5320: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
5330: 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
5340: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
5350: 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 20     nProgressOps 
5360: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
5370: 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 2b     nProgressOps+
5380: 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  +;.    }.#endif.
5390: 0a 20 20 20 20 2f 2a 20 44 6f 20 63 6f 6d 6d 6f  .    /* Do commo
53a0: 6e 20 73 65 74 75 70 20 70 72 6f 63 65 73 73 69  n setup processi
53b0: 6e 67 20 66 6f 72 20 61 6e 79 20 6f 70 63 6f 64  ng for any opcod
53c0: 65 20 74 68 61 74 20 69 73 20 6d 61 72 6b 65 64  e that is marked
53d0: 0a 20 20 20 20 2a 2a 20 77 69 74 68 20 74 68 65  .    ** with the
53e0: 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73   "out2-prereleas
53f0: 65 22 20 74 61 67 2e 20 20 53 75 63 68 20 6f 70  e" tag.  Such op
5400: 63 6f 64 65 73 20 68 61 76 65 20 61 20 73 69 6e  codes have a sin
5410: 67 6c 65 0a 20 20 20 20 2a 2a 20 6f 75 74 70 75  gle.    ** outpu
5420: 74 20 77 68 69 63 68 20 69 73 20 73 70 65 63 69  t which is speci
5430: 66 69 65 64 20 62 79 20 74 68 65 20 50 32 20 70  fied by the P2 p
5440: 61 72 61 6d 65 74 65 72 2e 20 20 54 68 65 20 50  arameter.  The P
5450: 32 20 72 65 67 69 73 74 65 72 0a 20 20 20 20 2a  2 register.    *
5460: 2a 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  * is initialized
5470: 20 74 6f 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20   to a NULL..    
5480: 2a 2f 0a 20 20 20 20 6f 70 50 72 6f 70 65 72 74  */.    opPropert
5490: 79 20 3d 20 6f 70 63 6f 64 65 50 72 6f 70 65 72  y = opcodeProper
54a0: 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b  ty[pOp->opcode];
54b0: 0a 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70  .    if( (opProp
54c0: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
54d0: 32 5f 50 52 45 52 45 4c 45 41 53 45 29 21 3d 30  2_PRERELEASE)!=0
54e0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
54f0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
5500: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5510: 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p2<=p->nMem );
5520: 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 70  .      pOut = &p
5530: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
5540: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
5550: 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65  beMemReleaseExte
5560: 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  rnal(pOut);.    
5570: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
5580: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
5590: 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20  pOut->n = 0;.   
55a0: 20 7d 65 6c 73 65 0a 20 0a 20 20 20 20 2f 2a 20   }else. .    /* 
55b0: 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74 75 70 20  Do common setup 
55c0: 66 6f 72 20 6f 70 63 6f 64 65 73 20 6d 61 72 6b  for opcodes mark
55d0: 65 64 20 77 69 74 68 20 6f 6e 65 20 6f 66 20 74  ed with one of t
55e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 20 20 20  he following.   
55f0: 20 2a 2a 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 73   ** combinations
5600: 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73 2e 0a   of properties..
5610: 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 20 20      **.    **   
5620: 20 20 20 20 20 20 20 20 69 6e 31 0a 20 20 20 20          in1.    
5630: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e 31  **           in1
5640: 20 69 6e 32 0a 20 20 20 20 2a 2a 20 20 20 20 20   in2.    **     
5650: 20 20 20 20 20 20 69 6e 31 20 69 6e 32 20 6f 75        in1 in2 ou
5660: 74 33 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20  t3.    **       
5670: 20 20 20 20 69 6e 31 20 69 6e 33 0a 20 20 20 20      in1 in3.    
5680: 2a 2a 0a 20 20 20 20 2a 2a 20 56 61 72 69 61 62  **.    ** Variab
5690: 6c 65 73 20 70 49 6e 31 2c 20 70 49 6e 32 2c 20  les pIn1, pIn2, 
56a0: 61 6e 64 20 70 49 6e 33 20 61 72 65 20 6d 61 64  and pIn3 are mad
56b0: 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 61 70  e to point to ap
56c0: 70 72 6f 70 72 69 61 74 65 0a 20 20 20 20 2a 2a  propriate.    **
56d0: 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 69   registers for i
56e0: 6e 70 75 74 73 2e 20 20 56 61 72 69 61 62 6c 65  nputs.  Variable
56f0: 20 70 4f 75 74 20 70 6f 69 6e 74 73 20 74 6f 20   pOut points to 
5700: 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
5710: 74 65 72 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ter..    */.    
5720: 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20  if( (opProperty 
5730: 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20  & OPFLG_IN1)!=0 
5740: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
5750: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
5760: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5770: 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p1<=p->nMem );.
5780: 20 20 20 20 20 20 70 49 6e 31 20 3d 20 26 70 2d        pIn1 = &p-
5790: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
57a0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
57b0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
57c0: 6e 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  n1);.      if( (
57d0: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
57e0: 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
57f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5800: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
5810: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5820: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
5830: 20 20 20 20 20 20 20 70 49 6e 32 20 3d 20 26 70         pIn2 = &p
5840: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
5850: 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
5860: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
5870: 20 70 49 6e 32 29 3b 0a 20 20 20 20 20 20 20 20   pIn2);.        
5880: 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20  if( (opProperty 
5890: 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30  & OPFLG_OUT3)!=0
58a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73   ){.          as
58b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
58c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  );.          ass
58d0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  ert( pOp->p3<=p-
58e0: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
58f0: 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d     pOut = &p->aM
5900: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
5910: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
5920: 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72  se if( (opProper
5930: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21  ty & OPFLG_IN3)!
5940: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
5950: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
5960: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5970: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  t( pOp->p3<=p->n
5980: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70  Mem );.        p
5990: 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In3 = &p->aMem[p
59a0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20  Op->p3];.       
59b0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
59c0: 70 4f 70 2d 3e 70 33 2c 20 70 49 6e 33 29 3b 0a  pOp->p3, pIn3);.
59d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
59e0: 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74  e if( (opPropert
59f0: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d  y & OPFLG_IN2)!=
5a00: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5a10: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
5a20: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5a30: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p2<=p->nMem )
5a40: 3b 0a 20 20 20 20 20 20 70 49 6e 32 20 3d 20 26  ;.      pIn2 = &
5a50: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
5a60: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
5a70: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
5a80: 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65  pIn2);.    }else
5a90: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5aa0: 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30   & OPFLG_IN3)!=0
5ab0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5ac0: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5ad0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5ae0: 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
5af0: 0a 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26 70  .      pIn3 = &p
5b00: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
5b10: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
5b20: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
5b30: 49 6e 33 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  In3);.    }..   
5b40: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
5b50: 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a  code ){../******
5b60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ba0: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20  *******.** What 
5bb0: 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73  follows is a mas
5bc0: 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74  sive switch stat
5bd0: 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68  ement where each
5be0: 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73   case implements
5bf0: 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69   a.** separate i
5c00: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
5c10: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
5c20: 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77  e.  If we follow
5c30: 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e   the usual.** in
5c40: 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e  dentation conven
5c50: 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65  tions, each case
5c60: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
5c70: 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e  ted by 6 spaces.
5c80: 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73    But.** that is
5c90: 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64   a lot of wasted
5ca0: 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65   space on the le
5cb0: 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74  ft margin.  So t
5cc0: 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a  he code within.*
5cd0: 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  * the switch sta
5ce0: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61  tement will brea
5cf0: 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f  k with conventio
5d00: 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c  n and be flush-l
5d10: 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20  eft. Another.** 
5d20: 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d  big comment (sim
5d30: 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65  ilar to this one
5d40: 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20  ) will mark the 
5d50: 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64  point in the cod
5d60: 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72  e where.** we tr
5d70: 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f  ansition back to
5d80: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
5d90: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
5da0: 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63  ormatting of eac
5db0: 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74  h case is import
5dc0: 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69  ant.  The makefi
5dd0: 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a  le for SQLite.**
5de0: 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43   generates two C
5df0: 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e   files "opcodes.
5e00: 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e  h" and "opcodes.
5e10: 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  c" by scanning t
5e20: 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b  his.** file look
5e30: 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68  ing for lines th
5e40: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63  at begin with "c
5e50: 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f  ase OP_".  The o
5e60: 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a  pcodes.h files.*
5e70: 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64  * will be filled
5e80: 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74   with #defines t
5e90: 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20  hat give unique 
5ea0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74  integer values t
5eb0: 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65  o each.** opcode
5ec0: 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73   and the opcodes
5ed0: 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65  .c file is fille
5ee0: 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20  d with an array 
5ef0: 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65  of strings where
5f00: 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20  .** each string 
5f10: 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  is the symbolic 
5f20: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72  name for the cor
5f30: 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64  responding opcod
5f40: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61  e.  If the.** ca
5f50: 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  se statement is 
5f60: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
5f70: 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  mment of the for
5f80: 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e  m "/# same as ..
5f90: 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f  . #/".** that co
5fa0: 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  mment is used to
5fb0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70   determine the p
5fc0: 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20  articular value 
5fd0: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a  of the opcode..*
5fe0: 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f  *.** Other keywo
5ff0: 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65  rds in the comme
6000: 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  nt that follows 
6010: 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73  each case are us
6020: 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75  ed to.** constru
6030: 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49  ct the OPFLG_INI
6040: 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74  TIALIZER value t
6050: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
6060: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
6070: 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e  ..** Keywords in
6080: 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c  clude: in1, in2,
6090: 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72 65   in3, out2_prere
60a0: 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74  lease, out2, out
60b0: 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d  3.  See.** the m
60c0: 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72  kopcodeh.awk scr
60d0: 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ipt for addition
60e0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
60f0: 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74  **.** Documentat
6100: 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f  ion about VDBE o
6110: 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61  pcodes is genera
6120: 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  ted by scanning 
6130: 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72  this file.** for
6140: 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63   lines of that c
6150: 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22  ontain "Opcode:"
6160: 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64  .  That line and
6170: 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a   all subsequent.
6180: 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73  ** comment lines
6190: 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65   are used in the
61a0: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   generation of t
61b0: 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64  he opcode.html d
61c0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  ocumentation.** 
61d0: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d  file..**.** SUMM
61e0: 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46  ARY:.**.**     F
61f0: 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70  ormatting is imp
6200: 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74  ortant to script
6210: 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73  s that scan this
6220: 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f   file..**     Do
6230: 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f   not deviate fro
6240: 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  m the formatting
6250: 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79   style currently
6260: 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a   in use..**.****
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f  *********/../* O
62c0: 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50  pcode:  Goto * P
62d0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e  2 * * *.**.** An
62e0: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a   unconditional j
62f0: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
6300: 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69  2..** The next i
6310: 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75  nstruction execu
6320: 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20  ted will be .** 
6330: 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78  the one at index
6340: 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   P2 from the beg
6350: 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65  inning of.** the
6360: 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73   program..*/.cas
6370: 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20  e OP_Goto: {    
6380: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6390: 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f   */.  CHECK_FOR_
63a0: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 63 20  INTERRUPT;.  pc 
63b0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
63c0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
63d0: 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20  code:  Gosub P1 
63e0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
63f0: 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
6400: 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65   address onto re
6410: 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64  gister P1.** and
6420: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64   then jump to ad
6430: 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73  dress P2..*/.cas
6440: 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20  e OP_Gosub: {   
6450: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6460: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6470: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73  p->p1>0 );.  ass
6480: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
6490: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31 20  >nMem );.  pIn1 
64a0: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
64b0: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
64c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
64d0: 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20 70  M_Dyn)==0 );.  p
64e0: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
64f0: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6500: 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54  i = pc;.  REGIST
6510: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
6520: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20  , pIn1);.  pc = 
6530: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62  pOp->p2 - 1;.  b
6540: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6550: 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a  de:  Return P1 *
6560: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
6570: 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  p to the next in
6580: 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20  struction after 
6590: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
65a0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63  egister P1..*/.c
65b0: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
65c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
65d0: 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
65e0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
65f0: 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20 28  _Int );.  pc = (
6600: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
6610: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6620: 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20  code:  Yield P1 
6630: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77  * * * *.**.** Sw
6640: 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63  ap the program c
6650: 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65 20  ounter with the 
6660: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
6670: 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
6680: 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20  _Yield: {       
6690: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
66a0: 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 61   int pcDest;.  a
66b0: 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
66c0: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d  ags & MEM_Dyn)==
66d0: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
66e0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
66f0: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
6700: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
6710: 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47  >u.i = pc;.  REG
6720: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
6730: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63  >p1, pIn1);.  pc
6740: 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72 65   = pcDest;.  bre
6750: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6760: 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50  :  HaltIfNull  P
6770: 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
6780: 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
6790: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
67a0: 33 2e 20 20 49 66 20 69 73 20 69 73 20 4e 55 4c  3.  If is is NUL
67b0: 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e  L then Halt usin
67c0: 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  g.** parameter P
67d0: 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73  1, P2, and P4 as
67e0: 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61 20   if this were a 
67f0: 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Halt instruction
6800: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c  .  If the.** val
6810: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6820: 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  3 is not NULL, t
6830: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
6840: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a   is a no-op..*/.
6850: 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75  case OP_HaltIfNu
6860: 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e  ll: {      /* in
6870: 33 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 33  3 */.  if( (pIn3
6880: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
6890: 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  ll)==0 ) break;.
68a0: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
68b0: 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a  h into OP_Halt *
68c0: 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  /.}../* Opcode: 
68d0: 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34   Halt P1 P2 * P4
68e0: 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d   *.**.** Exit im
68f0: 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20  mediately.  All 
6900: 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74  open cursors, et
6910: 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20  c are closed.** 
6920: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
6930: 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72  *.** P1 is the r
6940: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72  esult code retur
6950: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65  ned by sqlite3_e
6960: 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72  xec(), sqlite3_r
6970: 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71  eset(),.** or sq
6980: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
6990: 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20  .  For a normal 
69a0: 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c  halt, this shoul
69b0: 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28  d be SQLITE_OK (
69c0: 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72  0)..** For error
69d0: 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d  s, it can be som
69e0: 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20  e other value.  
69f0: 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32  If P1!=0 then P2
6a00: 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a   will determine.
6a10: 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
6a20: 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68  t to rollback th
6a30: 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
6a40: 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72  ction.  Do not r
6a50: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32  ollback.** if P2
6a60: 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68  ==OE_Fail. Do th
6a70: 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32  e rollback if P2
6a80: 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20  ==OE_Rollback.  
6a90: 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c  If P2==OE_Abort,
6aa0: 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75  .** then back ou
6ab0: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  t all changes th
6ac0: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
6ad0: 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65   during this exe
6ae0: 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  cution of the.**
6af0: 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f   VDBE, but do no
6b00: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  t rollback the t
6b10: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a  ransaction. .**.
6b20: 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
6b30: 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20  null then it is 
6b40: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
6b50: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54   string..**.** T
6b60: 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69  here is an impli
6b70: 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20  ed "Halt 0 0 0" 
6b80: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65  instruction inse
6b90: 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
6ba0: 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79   end of.** every
6bb0: 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20   program.  So a 
6bc0: 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61  jump past the la
6bd0: 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  st instruction o
6be0: 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a  f the program.**
6bf0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
6c00: 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a  executing Halt..
6c10: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a  */.case OP_Halt:
6c20: 20 7b 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70   {.  p->rc = pOp
6c30: 2d 3e 70 31 3b 0a 20 20 70 2d 3e 70 63 20 3d 20  ->p1;.  p->pc = 
6c40: 70 63 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63  pc;.  p->errorAc
6c50: 74 69 6f 6e 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  tion = pOp->p2;.
6c60: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
6c70: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
6c80: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
6c90: 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70  Msg, db, "%s", p
6ca0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d 0a 20  Op->p4.z);.  }. 
6cb0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
6cc0: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
6cd0: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
6ce0: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
6cf0: 45 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72 63  E_OK );.  if( rc
6d00: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
6d10: 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20  .    p->rc = rc 
6d20: 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
6d30: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
6d40: 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f   p->rc ? SQLITE_
6d50: 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44  ERROR : SQLITE_D
6d60: 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  ONE;.  }.  goto 
6d70: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
6d80: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
6d90: 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
6da0: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
6db0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
6dc0: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
6dd0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
6de0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
6df0: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
6e00: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
6e10: 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  /.  pOut->flags 
6e20: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75  = MEM_Int;.  pOu
6e30: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31  t->u.i = pOp->p1
6e40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6e50: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a   Opcode: Int64 *
6e60: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
6e70: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
6e80: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74   to a 64-bit int
6e90: 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  eger value..** W
6ea0: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
6eb0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
6ec0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
6ed0: 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  64: {           
6ee0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
6ef0: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
6f00: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20  pOp->p4.pI64!=0 
6f10: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
6f20: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f   = MEM_Int;.  pO
6f30: 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e  ut->u.i = *pOp->
6f40: 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
6f50: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6f60: 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a  Real * P2 * P4 *
6f70: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
6f80: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
6f90: 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  it floating poin
6fa0: 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  t value..** Writ
6fb0: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
6fc0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
6fd0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20  /.case OP_Real: 
6fe0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
6ff0: 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54  same as TK_FLOAT
7000: 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  , out2-prereleas
7010: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  e */.  pOut->fla
7020: 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  gs = MEM_Real;. 
7030: 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65   assert( !sqlite
7040: 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e  3IsNaN(*pOp->p4.
7050: 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74  pReal) );.  pOut
7060: 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  ->r = *pOp->p4.p
7070: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
7080: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72  ../* Opcode: Str
7090: 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a  ing8 * P2 * P4 *
70a0: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
70b0: 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e   to a nul termin
70c0: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
70d0: 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  g. This opcode i
70e0: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a  s transformed .*
70f0: 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72  * into an OP_Str
7100: 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69 73  ing before it is
7110: 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68   executed for th
7120: 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f  e first time..*/
7130: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38  .case OP_String8
7140: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73  : {         /* s
7150: 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47  ame as TK_STRING
7160: 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  , out2-prereleas
7170: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
7180: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
7190: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
71a0: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
71b0: 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72  >p1 = sqlite3Str
71c0: 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29  len30(pOp->p4.z)
71d0: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
71e0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69  E_OMIT_UTF16.  i
71f0: 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c  f( encoding!=SQL
7200: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
7210: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
7220: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
7230: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
7240: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
7250: 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 53  ATIC);.    if( S
7260: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
7270: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
7280: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
7290: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
72a0: 6d 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  m;.    if( SQLIT
72b0: 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62  E_OK!=sqlite3Vdb
72c0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
72d0: 65 28 70 4f 75 74 29 20 29 20 67 6f 74 6f 20 6e  e(pOut) ) goto n
72e0: 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 4f 75 74 2d  o_mem;.    pOut-
72f0: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
7300: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
7310: 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20   MEM_Static;.   
7320: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20   pOut->flags &= 
7330: 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66  ~MEM_Dyn;.    if
7340: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
7350: 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20  4_DYNAMIC ){.   
7360: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
7370: 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  (db, pOp->p4.z);
7380: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e  .    }.    pOp->
7390: 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41  p4type = P4_DYNA
73a0: 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  MIC;.    pOp->p4
73b0: 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20  .z = pOut->z;.  
73c0: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74    pOp->p1 = pOut
73d0: 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  ->n;.    if( pOp
73e0: 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  ->p1>db->aLimit[
73f0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
7400: 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
7410: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
7420: 7d 0a 20 20 20 20 55 50 44 41 54 45 5f 4d 41 58  }.    UPDATE_MAX
7430: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7440: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7450: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70  #endif.  if( pOp
7460: 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  ->p1>db->aLimit[
7470: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
7480: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
7490: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
74a0: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
74b0: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
74c0: 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d  , OP_String */.}
74d0: 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .  ./* Opcode: S
74e0: 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50 34  tring P1 P2 * P4
74f0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72   *.**.** The str
7500: 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20  ing value P4 of 
7510: 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73  length P1 (bytes
7520: 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  ) is stored in r
7530: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7540: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b  ase OP_String: {
7550: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
7560: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7570: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7580: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
7590: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
75a0: 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
75b0: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
75c0: 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
75d0: 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70  pOut->n = pOp->p
75e0: 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  1;.  pOut->enc =
75f0: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
7600: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
7610: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
7620: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
7630: 75 6c 6c 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  ull * P2 * * *.*
7640: 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c  *.** Write a NUL
7650: 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  L into register 
7660: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
7670: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
7680: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
7690: 61 73 65 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a  ase */.  break;.
76a0: 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  }.../* Opcode: B
76b0: 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 0a 2a  lob P1 P2 * P4.*
76c0: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
76d0: 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61  o a blob of data
76e0: 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20   P1 bytes long. 
76f0: 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62   Store this.** b
7700: 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20  lob in register 
7710: 50 32 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  P2. This instruc
7720: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6f 64 65  tion is not code
7730: 64 20 64 69 72 65 63 74 6c 79 0a 2a 2a 20 62 79  d directly.** by
7740: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 2e 20 49   the compiler. I
7750: 6e 73 74 65 61 64 2c 20 74 68 65 20 63 6f 6d 70  nstead, the comp
7760: 69 6c 65 72 20 6c 61 79 65 72 20 73 70 65 63 69  iler layer speci
7770: 66 69 65 73 0a 2a 2a 20 61 6e 20 4f 50 5f 48 65  fies.** an OP_He
7780: 78 42 6c 6f 62 20 6f 70 63 6f 64 65 2c 20 77 69  xBlob opcode, wi
7790: 74 68 20 74 68 65 20 68 65 78 20 73 74 72 69 6e  th the hex strin
77a0: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
77b0: 20 6f 66 0a 2a 2a 20 74 68 65 20 62 6c 6f 62 20   of.** the blob 
77c0: 61 73 20 50 34 2e 20 54 68 69 73 20 6f 70 63 6f  as P4. This opco
77d0: 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65  de is transforme
77e0: 64 20 74 6f 20 61 6e 20 4f 50 5f 42 6c 6f 62 0a  d to an OP_Blob.
77f0: 2a 2a 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  ** the first tim
7800: 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64  e it is executed
7810: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f  ..*/.case OP_Blo
7820: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
7830: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7840: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
7850: 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53  rt( pOp->p1 <= S
7860: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
7870: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
7880: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
7890: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d   pOp->p4.z, pOp-
78a0: 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f  >p1, 0, 0);.  pO
78b0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
78c0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
78d0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
78e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
78f0: 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65  Opcode: Variable
7900: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
7910: 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68  *.** Transfer th
7920: 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e  e values of boun
7930: 64 20 70 61 72 61 6d 65 74 65 72 73 20 50 31 2e  d parameters P1.
7940: 2e 50 31 2b 50 33 2d 31 20 69 6e 74 6f 20 72 65  .P1+P3-1 into re
7950: 67 69 73 74 65 72 73 0a 2a 2a 20 50 32 2e 2e 50  gisters.** P2..P
7960: 32 2b 50 33 2d 31 2e 0a 2a 2a 0a 2a 2a 20 49 66  2+P3-1..**.** If
7970: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69   the parameter i
7980: 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74  s named, then it
7990: 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69  s name appears i
79a0: 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31 2e 0a  n P4 and P3==1..
79b0: 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
79c0: 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  is used by sqlit
79d0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
79e0: 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73  r_name()..*/.cas
79f0: 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b  e OP_Variable: {
7a00: 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
7a10: 20 20 20 20 2f 2a 20 56 61 72 69 61 62 6c 65 20      /* Variable 
7a20: 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a  to copy from */.
7a30: 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
7a40: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
7a50: 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 20 20 69  o copy to */.  i
7a60: 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
7a70: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 61 6c  /* Number of val
7a80: 75 65 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79  ues left to copy
7a90: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b   */.  Mem *pVar;
7aa0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
7ab0: 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65  being transferre
7ac0: 64 20 2a 2f 0a 0a 20 20 70 31 20 3d 20 70 4f 70  d */..  p1 = pOp
7ad0: 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 70 32 20 3d  ->p1 - 1;.  p2 =
7ae0: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 6e 20 3d 20   pOp->p2;.  n = 
7af0: 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
7b00: 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 2b 6e  t( p1>=0 && p1+n
7b10: 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61  <=p->nVar );.  a
7b20: 73 73 65 72 74 28 20 70 32 3e 3d 31 20 26 26 20  ssert( p2>=1 && 
7b30: 70 32 2b 6e 2d 31 3c 3d 70 2d 3e 6e 4d 65 6d 20  p2+n-1<=p->nMem 
7b40: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
7b50: 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70  ->p4.z==0 || pOp
7b60: 2d 3e 70 33 3d 3d 31 20 29 3b 0a 0a 20 20 77 68  ->p3==1 );..  wh
7b70: 69 6c 65 28 20 6e 2d 2d 20 3e 20 30 20 29 7b 0a  ile( n-- > 0 ){.
7b80: 20 20 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61      pVar = &p->a
7b90: 56 61 72 5b 70 31 2b 2b 5d 3b 0a 20 20 20 20 69  Var[p1++];.    i
7ba0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
7bb0: 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b  mTooBig(pVar) ){
7bc0: 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
7bd0: 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  big;.    }.    p
7be0: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
7bf0: 32 2b 2b 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65  2++];.    sqlite
7c00: 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45  3VdbeMemReleaseE
7c10: 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20  xternal(pOut);. 
7c20: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
7c30: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 73   MEM_Null;.    s
7c40: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
7c50: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
7c60: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
7c70: 3b 0a 20 20 20 20 55 50 44 41 54 45 5f 4d 41 58  ;.    UPDATE_MAX
7c80: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7c90: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
7ca0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65  ./* Opcode: Move
7cb0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
7cc0: 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c  .** Move the val
7cd0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
7ce0: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72  P1..P1+P3-1 over
7cf0: 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
7d00: 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20  rs P2..P2+P3-1. 
7d10: 20 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50   Registers P1..P
7d20: 31 2b 50 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65  1+P1-1 are.** le
7d30: 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c  ft holding a NUL
7d40: 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72  L.  It is an err
7d50: 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20  or for register 
7d60: 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31  ranges.** P1..P1
7d70: 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32  +P3-1 and P2..P2
7d80: 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70  +P3-1 to overlap
7d90: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76  ..*/.case OP_Mov
7da0: 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61  e: {.  char *zMa
7db0: 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69  lloc;   /* Holdi
7dc0: 6e 67 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20  ng variable for 
7dd0: 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79  allocated memory
7de0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
7df0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7e00: 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65   of registers le
7e10: 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20  ft to copy */.  
7e20: 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
7e30: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
7e40: 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69  copy from */.  i
7e50: 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  nt p2;          
7e60: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
7e70: 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d  opy to */..  n =
7e80: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d   pOp->p3;.  p1 =
7e90: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
7ea0: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
7eb0: 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20  rt( n>0 && p1>0 
7ec0: 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  && p2>0 );.  ass
7ed0: 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c  ert( p1+n<=p2 ||
7ee0: 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20   p2+n<=p1 );..  
7ef0: 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn1 = &p->aMem[
7f00: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70  p1];.  pOut = &p
7f10: 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 77 68  ->aMem[p2];.  wh
7f20: 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20 20 20  ile( n-- ){.    
7f30: 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 70  assert( pOut<=&p
7f40: 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20  ->aMem[p->nMem] 
7f50: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
7f60: 49 6e 31 3c 3d 26 70 2d 3e 61 4d 65 6d 5b 70 2d  In1<=&p->aMem[p-
7f70: 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 7a 4d  >nMem] );.    zM
7f80: 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d  alloc = pOut->zM
7f90: 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d  alloc;.    pOut-
7fa0: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
7fb0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
7fc0: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
7fd0: 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c  ;.    pIn1->zMal
7fe0: 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20  loc = zMalloc;. 
7ff0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
8000: 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20  E(p2++, pOut);. 
8010: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70     pIn1++;.    p
8020: 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  Out++;.  }.  bre
8030: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8040: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a  : Copy P1 P2 * *
8050: 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20   *.**.** Make a 
8060: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
8070: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
8080: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
8090: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
80a0: 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f  es a deep copy o
80b0: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20  f the value.  A 
80c0: 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20  duplicate.** is 
80d0: 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69  made of any stri
80e0: 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74  ng or blob const
80f0: 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f  ant.  See also O
8100: 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  P_SCopy..*/.case
8110: 20 4f 50 5f 43 6f 70 79 3a 20 7b 20 20 20 20 20   OP_Copy: {     
8120: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
8130: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
8140: 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p2>0 );.  asser
8150: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e  t( pOp->p2<=p->n
8160: 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  Mem );.  pOut = 
8170: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
8180: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
8190: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
81a0: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
81b0: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
81c0: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
81d0: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
81e0: 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45  pOut);.  REGISTE
81f0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
8200: 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b   pOut);.  break;
8210: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
8220: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
8230: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
8240: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
8250: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
8260: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
8270: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
8280: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
8290: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
82a0: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
82b0: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
82c0: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
82d0: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
82e0: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
82f0: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
8300: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
8310: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
8320: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
8330: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
8340: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
8350: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
8360: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
8370: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
8380: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
8390: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
83a0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
83b0: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
83c0: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
83d0: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
83e0: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
83f0: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
8400: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
8410: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
8420: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
8430: 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  /.  REGISTER_TRA
8440: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
8450: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
8460: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p2>0 );.  asse
8470: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
8480: 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d  nMem );.  pOut =
8490: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
84a0: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
84b0: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
84c0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
84d0: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
84e0: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
84f0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
8500: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
8510: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8520: 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f  Opcode: ResultRo
8530: 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  w P1 P2 * * *.**
8540: 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
8550: 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b  s P1 through P1+
8560: 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73  P2-1 contain a s
8570: 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20  ingle row of.** 
8580: 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70  results. This op
8590: 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20  code causes the 
85a0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
85b0: 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  all to terminate
85c0: 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49  .** with an SQLI
85d0: 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f  TE_ROW return co
85e0: 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75  de and it sets u
85f0: 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  p the sqlite3_st
8600: 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  mt.** structure 
8610: 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73  to provide acces
8620: 73 20 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20  s to the top P1 
8630: 76 61 6c 75 65 73 20 61 73 20 74 68 65 20 72 65  values as the re
8640: 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a  sult.** row..*/.
8650: 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f  case OP_ResultRo
8660: 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  w: {.  Mem *pMem
8670: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73  ;.  int i;.  ass
8680: 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75  ert( p->nResColu
8690: 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  mn==pOp->p2 );. 
86a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
86b0: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
86c0: 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c  pOp->p1+pOp->p2<
86d0: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20  =p->nMem+1 );.. 
86e0: 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54   /* If the SQLIT
86f0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67  E_CountRows flag
8700: 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74   is set in sqlit
8710: 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  e3.flags mask, t
8720: 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74  hen .  ** DML st
8730: 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20  atements invoke 
8740: 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72  this opcode to r
8750: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
8760: 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d   of rows .  ** m
8770: 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75  odified to the u
8780: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65  ser. This is the
8790: 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61   only way that a
87a0: 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70   VM that.  ** op
87b0: 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ens a statement 
87c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
87d0: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
87e0: 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  de..  **.  ** In
87f0: 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75   case this is su
8800: 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20  ch a statement, 
8810: 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d  close any statem
8820: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
8830: 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74    ** opened by t
8840: 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65  his VM before re
8850: 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20  turning control 
8860: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
8870: 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73  s is to.  ** ens
8880: 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65  ure that stateme
8890: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
88a0: 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65  are always neste
88b0: 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69  d, not overlappi
88c0: 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  ng..  ** If the 
88d0: 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74  open statement-t
88e0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
88f0: 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74  t closed here, t
8900: 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a  hen the user.  *
8910: 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68  * may step anoth
8920: 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73  er VM that opens
8930: 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65   its own stateme
8940: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
8950: 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65  This.  ** may le
8960: 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e  ad to overlappin
8970: 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  g statement tran
8980: 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2f 0a 20  sactions..  */. 
8990: 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61   assert( p->iSta
89a0: 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  tement==0 || db-
89b0: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
89c0: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 69 66 28  untRows );.  if(
89d0: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20   SQLITE_OK!=(rc 
89e0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f  = sqlite3VdbeClo
89f0: 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53  seStatement(p, S
8a00: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
8a10: 29 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  )) ){.    break;
8a20: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c  .  }..  /* Inval
8a30: 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65  idate all epheme
8a40: 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63  ral cursor row c
8a50: 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61  aches */.  p->ca
8a60: 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63  cheCtr = (p->cac
8a70: 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20  heCtr + 2)|1;.. 
8a80: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
8a90: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
8aa0: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65   current row are
8ab0: 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64   \000 terminated
8ac0: 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61  .  ** and have a
8ad0: 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e  n assigned type.
8ae0: 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61 72    The results ar
8af0: 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a  e de-ephemeraliz
8b00: 65 64 20 61 73 0a 20 20 2a 2a 20 61 73 20 73 69  ed as.  ** as si
8b10: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
8b20: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
8b30: 75 6c 74 53 65 74 20 3d 20 26 70 2d 3e 61 4d 65  ultSet = &p->aMe
8b40: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
8b50: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
8b60: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  ; i++){.    sqli
8b70: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72  te3VdbeMemNulTer
8b80: 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29  minate(&pMem[i])
8b90: 3b 0a 20 20 20 20 73 74 6f 72 65 54 79 70 65 49  ;.    storeTypeI
8ba0: 6e 66 6f 28 26 70 4d 65 6d 5b 69 5d 2c 20 65 6e  nfo(&pMem[i], en
8bb0: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 52 45 47  coding);.    REG
8bc0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
8bd0: 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29  >p1+i, &pMem[i])
8be0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
8bf0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
8c00: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f  oto no_mem;..  /
8c10: 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  * Return SQLITE_
8c20: 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63  ROW.  */.  p->pc
8c30: 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20   = pc + 1;.  rc 
8c40: 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  = SQLITE_ROW;.  
8c50: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
8c60: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8c70: 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20  Concat P1 P2 P3 
8c80: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  * *.**.** Add th
8c90: 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74  e text in regist
8ca0: 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65  er P1 onto the e
8cb0: 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69  nd of the text i
8cc0: 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  n.** register P2
8cd0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
8ce0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
8cf0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
8d00: 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20  er the P1 or P2 
8d10: 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68  text are NULL th
8d20: 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e  en store NULL in
8d30: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20   P3..**.**   P3 
8d40: 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a  = P2 || P1.**.**
8d50: 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66   It is illegal f
8d60: 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20  or P1 and P3 to 
8d70: 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  be the same regi
8d80: 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c  ster. Sometimes,
8d90: 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65  .** if P3 is the
8da0: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61   same register a
8db0: 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d  s P2, the implem
8dc0: 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65  entation is able
8dd0: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d  .** to avoid a m
8de0: 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65  emcpy()..*/.case
8df0: 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20   OP_Concat: {   
8e00: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
8e10: 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e  as TK_CONCAT, in
8e20: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
8e30: 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20    i64 nByte;..  
8e40: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f  assert( pIn1!=pO
8e50: 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ut );.  if( (pIn
8e60: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
8e70: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
8e80: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
8e90: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
8ea0: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
8eb0: 3b 0a 20 20 7d 0a 20 20 45 78 70 61 6e 64 42 6c  ;.  }.  ExpandBl
8ec0: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 53 74 72 69  ob(pIn1);.  Stri
8ed0: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
8ee0: 64 69 6e 67 29 3b 0a 20 20 45 78 70 61 6e 64 42  ding);.  ExpandB
8ef0: 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 53 74 72  lob(pIn2);.  Str
8f00: 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63  ingify(pIn2, enc
8f10: 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20  oding);.  nByte 
8f20: 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32  = pIn1->n + pIn2
8f30: 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ->n;.  if( nByte
8f40: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
8f50: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
8f60: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
8f70: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53  _big;.  }.  MemS
8f80: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
8f90: 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28   MEM_Str);.  if(
8fa0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
8fb0: 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  row(pOut, (int)n
8fc0: 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49  Byte+2, pOut==pI
8fd0: 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  n2) ){.    goto 
8fe0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69 66  no_mem;.  }.  if
8ff0: 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a  ( pOut!=pIn2 ){.
9000: 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d      memcpy(pOut-
9010: 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e  >z, pIn2->z, pIn
9020: 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d  2->n);.  }.  mem
9030: 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e  cpy(&pOut->z[pIn
9040: 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20  2->n], pIn1->z, 
9050: 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74  pIn1->n);.  pOut
9060: 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b 0a  ->z[nByte] = 0;.
9070: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b    pOut->z[nByte+
9080: 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  1] = 0;.  pOut->
9090: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
90a0: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  m;.  pOut->n = (
90b0: 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
90c0: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
90d0: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
90e0: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
90f0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9100: 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32  pcode: Add P1 P2
9110: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64   P3 * *.**.** Ad
9120: 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
9130: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
9140: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9150: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
9160: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
9170: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
9180: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
9190: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
91a0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
91b0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c  /./* Opcode: Mul
91c0: 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a  tiply P1 P2 P3 *
91d0: 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74   *.**.**.** Mult
91e0: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
91f0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
9200: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
9210: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
9220: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
9230: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
9240: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
9250: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
9260: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9270: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
9280: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
9290: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62 74  3 * *.**.** Subt
92a0: 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69  ract the value i
92b0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72  n register P1 fr
92c0: 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  om the value in 
92d0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
92e0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
92f0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9300: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
9310: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
9320: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9330: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
9340: 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50  : Divide P1 P2 P
9350: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76 69  3 * *.**.** Divi
9360: 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  de the value in 
9370: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
9380: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
9390: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
93a0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
93b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
93c0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
93d0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
93e0: 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  is zero, then th
93f0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9400: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
9410: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
9420: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9430: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
9440: 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20  Remainder P1 P2 
9450: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P3 * *.**.** Com
9460: 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64  pute the remaind
9470: 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72  er after integer
9480: 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68 65   division of the
9490: 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67   value in.** reg
94a0: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
94b0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
94c0: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
94d0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33 2e  he result in P3.
94e0: 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75   .** If the valu
94f0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9500: 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73   is zero the res
9510: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20  ult is NULL..** 
9520: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
9530: 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  d is NULL, the r
9540: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9550: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20  /.case OP_Add:  
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9570: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50   /* same as TK_P
9580: 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  LUS, in1, in2, o
9590: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
95a0: 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20 20  ubtract:        
95b0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
95c0: 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20   TK_MINUS, in1, 
95d0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
95e0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
9600: 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20  ame as TK_STAR, 
9610: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
9620: 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65  /.case OP_Divide
9630: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
9640: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
9650: 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  LASH, in1, in2, 
9660: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
9670: 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20  Remainder: {    
9680: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9690: 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69  s TK_REM, in1, i
96a0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e  n2, out3 */.  in
96b0: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a  t flags;      /*
96c0: 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20   Combined MEM_* 
96d0: 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20  flags from both 
96e0: 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36 34 20  inputs */.  i64 
96f0: 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iA;         /* I
9700: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
9710: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
9720: 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20    i64 iB;       
9730: 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c    /* Integer val
9740: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
9750: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
9760: 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rA;      /* Real
9770: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
9780: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
9790: 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52  le rB;      /* R
97a0: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67  eal value of rig
97b0: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20  ht operand */.. 
97c0: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
97d0: 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a 20 20 61  inity(pIn1);.  a
97e0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
97f0: 69 74 79 28 70 49 6e 32 29 3b 0a 20 20 66 6c 61  ity(pIn2);.  fla
9800: 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  gs = pIn1->flags
9810: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a   | pIn2->flags;.
9820: 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d    if( (flags & M
9830: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f  EM_Null)!=0 ) go
9840: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
9850: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
9860: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
9870: 20 26 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26   & pIn2->flags &
9880: 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49   MEM_Int)==MEM_I
9890: 6e 74 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70  nt ){.    iA = p
98a0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42  In1->u.i;.    iB
98b0: 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
98c0: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
98d0: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
98e0: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
98f0: 20 20 20 20 69 42 20 2b 3d 20 69 41 3b 20 20 20      iB += iA;   
9900: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9910: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
9920: 74 3a 20 20 20 20 69 42 20 2d 3d 20 69 41 3b 20  t:    iB -= iA; 
9930: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9940: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
9950: 70 6c 79 3a 20 20 20 20 69 42 20 2a 3d 20 69 41  ply:    iB *= iA
9960: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
9970: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
9980: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ide: {.        i
9990: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
99a0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
99b0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
99c0: 20 20 20 2f 2a 20 44 69 76 69 64 69 6e 67 20 74     /* Dividing t
99d0: 68 65 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69  he largest possi
99e0: 62 6c 65 20 6e 65 67 61 74 69 76 65 20 36 34 2d  ble negative 64-
99f0: 62 69 74 20 69 6e 74 65 67 65 72 20 28 31 3c 3c  bit integer (1<<
9a00: 36 33 29 20 62 79 20 0a 20 20 20 20 20 20 20 20  63) by .        
9a10: 2a 2a 20 2d 31 20 72 65 74 75 72 6e 73 20 61 6e  ** -1 returns an
9a20: 20 69 6e 74 65 67 65 72 20 74 6f 6f 20 6c 61 72   integer too lar
9a30: 67 65 20 74 6f 20 73 74 6f 72 65 20 69 6e 20 61  ge to store in a
9a40: 20 36 34 2d 62 69 74 20 64 61 74 61 2d 74 79 70   64-bit data-typ
9a50: 65 2e 20 4f 6e 0a 20 20 20 20 20 20 20 20 2a 2a  e. On.        **
9a60: 20 73 6f 6d 65 20 61 72 63 68 69 74 65 63 74 75   some architectu
9a70: 72 65 73 2c 20 74 68 65 20 76 61 6c 75 65 20 6f  res, the value o
9a80: 76 65 72 66 6c 6f 77 73 20 74 6f 20 28 31 3c 3c  verflows to (1<<
9a90: 36 33 29 2e 20 4f 6e 20 6f 74 68 65 72 73 2c 0a  63). On others,.
9aa0: 20 20 20 20 20 20 20 20 2a 2a 20 61 20 53 49 47          ** a SIG
9ab0: 46 50 45 20 69 73 20 69 73 73 75 65 64 2e 20 54  FPE is issued. T
9ac0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
9ad0: 74 65 6d 65 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65  tement normalize
9ae0: 73 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a  s this.        *
9af0: 2a 20 62 65 68 61 76 69 6f 72 20 73 6f 20 74 68  * behavior so th
9b00: 61 74 20 61 6c 6c 20 61 72 63 68 69 74 65 63 74  at all architect
9b10: 75 72 65 73 20 62 65 68 61 76 65 20 61 73 20 69  ures behave as i
9b20: 66 20 69 6e 74 65 67 65 72 20 0a 20 20 20 20 20  f integer .     
9b30: 20 20 20 2a 2a 20 6f 76 65 72 66 6c 6f 77 20 6f     ** overflow o
9b40: 63 63 75 72 72 65 64 2e 0a 20 20 20 20 20 20 20  ccurred..       
9b50: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
9b60: 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d  iA==-1 && iB==SM
9b70: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 69  ALLEST_INT64 ) i
9b80: 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  A = 1;.        i
9b90: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
9ba0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
9bb0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
9bc0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
9bd0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
9be0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
9bf0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
9c00: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
9c10: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
9c20: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
9c30: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
9c40: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
9c50: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
9c60: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
9c70: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  M_Int);.  }else{
9c80: 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65  .    rA = sqlite
9c90: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
9ca0: 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73  In1);.    rB = s
9cb0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
9cc0: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73  lue(pIn2);.    s
9cd0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
9ce0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
9cf0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
9d00: 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20   rB += rA;      
9d10: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
9d20: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
9d30: 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20     rB -= rA;    
9d40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9d50: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
9d60: 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20  :    rB *= rA;  
9d70: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9d80: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
9d90: 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28  : {.        /* (
9da0: 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65  double)0 In case
9db0: 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   of SQLITE_OMIT_
9dc0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e  FLOATING_POINT..
9dd0: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
9de0: 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29   rA==(double)0 )
9df0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
9e00: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
9e10: 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72  .        rB /= r
9e20: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
9e30: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
9e40: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
9e50: 20 20 20 69 41 20 3d 20 72 41 3b 0a 20 20 20 20     iA = rA;.    
9e60: 20 20 20 20 69 42 20 3d 20 72 42 3b 0a 20 20 20      iB = rB;.   
9e70: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
9e80: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
9e90: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
9ea0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
9eb0: 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20  =-1 ) iA = 1;.  
9ec0: 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62        rB = (doub
9ed0: 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20  le)(iB % iA);.  
9ee0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9ef0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
9f00: 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  f( sqlite3IsNaN(
9f10: 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  rB) ){.      got
9f20: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
9f30: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
9f40: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d   }.    pOut->r =
9f50: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
9f60: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
9f70: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
9f80: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65   (flags & MEM_Re
9f90: 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
9fa0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
9fb0: 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29  erAffinity(pOut)
9fc0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
9fd0: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
9fe0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
9ff0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
a000: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
a010: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a020: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a  pcode: CollSeq *
a030: 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69   * P4.**.** P4 i
a040: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
a050: 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e   CollSeq struct.
a060: 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c   If the next cal
a070: 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63  l to a user func
a080: 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65  tion.** or aggre
a090: 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74  gate calls sqlit
a0a0: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
a0b0: 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69  (), this collati
a0c0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c  on sequence will
a0d0: 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e  .** be returned.
a0e0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
a0f0: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69   the built-in mi
a100: 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e  n(), max() and n
a110: 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74  ullif().** funct
a120: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ions..**.** The 
a130: 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62  interface used b
a140: 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
a150: 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72  tion of the afor
a160: 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74  ementioned funct
a170: 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69  ions.** to retri
a180: 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  eve the collatio
a190: 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  n sequence set b
a1a0: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
a1b0: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a   not available.*
a1c0: 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79  * publicly, only
a1d0: 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
a1e0: 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75  ns defined in fu
a1f0: 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  nc.c..*/.case OP
a200: 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73  _CollSeq: {.  as
a210: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
a220: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
a230: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a240: 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e  Opcode: Function
a250: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
a260: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
a270: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
a280: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
a290: 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75   a Function stru
a2a0: 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65  cture that.** de
a2b0: 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69  fines the functi
a2c0: 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75  on) with P5 argu
a2d0: 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d  ments taken from
a2e0: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
a2f0: 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20  .** successors. 
a300: 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   The result of t
a310: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  he function is s
a320: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
a330: 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65  r P3..** Registe
a340: 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65  r P3 must not be
a350: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63   one of the func
a360: 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a  tion inputs..**.
a370: 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69  ** P1 is a 32-bi
a380: 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61  t bitmask indica
a390: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
a3a0: 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e  not each argumen
a3b0: 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e  t to the .** fun
a3c0: 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d  ction was determ
a3d0: 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74  ined to be const
a3e0: 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74  ant at compile t
a3f0: 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73  ime. If the firs
a400: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61  t.** argument wa
a410: 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20  s constant then 
a420: 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73  bit 0 of P1 is s
a430: 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
a440: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a   to determine.**
a450: 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61   whether meta da
a460: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
a470: 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  th a user functi
a480: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e  on argument usin
a490: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
a4a0: 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41  _set_auxdata() A
a4b0: 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79  PI may be safely
a4c0: 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20   retained until 
a4d0: 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f  the next.** invo
a4e0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f  cation of this o
a4f0: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
a500: 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61   also: AggStep a
a510: 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63  nd AggFinal.*/.c
a520: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a  ase OP_Function:
a530: 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65   {.  int i;.  Me
a540: 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74  m *pArg;.  sqlit
a550: 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
a560: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
a570: 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e  **apVal;.  int n
a580: 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35  ;..  n = pOp->p5
a590: 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61  ;.  apVal = p->a
a5a0: 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20  pArg;.  assert( 
a5b0: 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b  apVal || n==0 );
a5c0: 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30  ..  assert( n==0
a5d0: 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26   || (pOp->p2>0 &
a5e0: 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e  & pOp->p2+n<=p->
a5f0: 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73  nMem+1) );.  ass
a600: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
a610: 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p2 || pOp->p3>
a620: 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20  =pOp->p2+n );.  
a630: 70 41 72 67 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pArg = &p->aMem[
a640: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28  pOp->p2];.  for(
a650: 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70  i=0; i<n; i++, p
a660: 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 70 56 61  Arg++){.    apVa
a670: 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20  l[i] = pArg;.   
a680: 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70   storeTypeInfo(p
a690: 41 72 67 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Arg, encoding);.
a6a0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
a6b0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 41 72 67  CE(pOp->p2, pArg
a6c0: 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  );.  }..  assert
a6d0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
a6e0: 34 5f 46 55 4e 43 44 45 46 20 7c 7c 20 70 4f 70  4_FUNCDEF || pOp
a6f0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 44 42  ->p4type==P4_VDB
a700: 45 46 55 4e 43 20 29 3b 0a 20 20 69 66 28 20 70  EFUNC );.  if( p
a710: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
a720: 55 4e 43 44 45 46 20 29 7b 0a 20 20 20 20 63 74  UNCDEF ){.    ct
a730: 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  x.pFunc = pOp->p
a740: 34 2e 70 46 75 6e 63 3b 0a 20 20 20 20 63 74 78  4.pFunc;.    ctx
a750: 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 30 3b 0a  .pVdbeFunc = 0;.
a760: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 74 78    }else{.    ctx
a770: 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 28 56 64  .pVdbeFunc = (Vd
a780: 62 65 46 75 6e 63 2a 29 70 4f 70 2d 3e 70 34 2e  beFunc*)pOp->p4.
a790: 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 63  pVdbeFunc;.    c
a7a0: 74 78 2e 70 46 75 6e 63 20 3d 20 63 74 78 2e 70  tx.pFunc = ctx.p
a7b0: 56 64 62 65 46 75 6e 63 2d 3e 70 46 75 6e 63 3b  VdbeFunc->pFunc;
a7c0: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
a7d0: 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
a7e0: 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
a7f0: 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
a800: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 63  em[pOp->p3];.  c
a810: 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  tx.s.flags = MEM
a820: 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 64  _Null;.  ctx.s.d
a830: 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 73 2e  b = db;.  ctx.s.
a840: 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e  xDel = 0;.  ctx.
a850: 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a  s.zMalloc = 0;..
a860: 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20    /* The output 
a870: 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79  cell may already
a880: 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61   have a buffer a
a890: 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20  llocated. Move. 
a8a0: 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72 20   ** the pointer 
a8b0: 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20 63  to ctx.s so in c
a8c0: 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e  ase the user-fun
a8d0: 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20  ction can use.  
a8e0: 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20 61  ** the already a
a8f0: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20  llocated buffer 
a900: 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63  instead of alloc
a910: 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e  ating a new one.
a920: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
a930: 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e  dbeMemMove(&ctx.
a940: 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53  s, pOut);.  MemS
a950: 65 74 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e  etTypeFlag(&ctx.
a960: 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20  s, MEM_Null);.. 
a970: 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30   ctx.isError = 0
a980: 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e  ;.  if( ctx.pFun
a990: 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  c->flags & SQLIT
a9a0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
a9b0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
a9c0: 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20  Op>p->aOp );.   
a9d0: 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
a9e0: 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  .p4type==P4_COLL
a9f0: 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72  SEQ );.    asser
aa00: 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
aa10: 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b  e==OP_CollSeq );
aa20: 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d  .    ctx.pColl =
aa30: 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c   pOp[-1].p4.pCol
aa40: 6c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  l;.  }.  if( sql
aa50: 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
aa60: 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
aa70: 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
aa80: 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75  (*ctx.pFunc->xFu
aa90: 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56  nc)(&ctx, n, apV
aaa0: 61 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  al);.  if( sqlit
aab0: 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
aac0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
aad0: 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78  eMemRelease(&ctx
aae0: 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  .s);.    goto ab
aaf0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
ab00: 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d  e;.  }.  if( db-
ab10: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
ab20: 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f  .    /* Even tho
ab30: 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68  ugh a malloc() h
ab40: 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69  as failed, the i
ab50: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
ab60: 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72   the.    ** user
ab70: 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61   function may ha
ab80: 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c  ve called an sql
ab90: 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28  ite3_result_XXX(
aba0: 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a  ) function.    *
abb0: 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61  * to return a va
abc0: 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69  lue. The followi
abd0: 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73  ng call releases
abe0: 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20   any resources. 
abf0: 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64     ** associated
ac00: 20 77 69 74 68 20 73 75 63 68 20 61 20 76 61 6c   with such a val
ac10: 75 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  ue..    **.    *
ac20: 2a 20 4e 6f 74 65 3a 20 4d 61 79 62 65 20 4d 65  * Note: Maybe Me
ac30: 6d 52 65 6c 65 61 73 65 28 29 20 73 68 6f 75 6c  mRelease() shoul
ac40: 64 20 62 65 20 63 61 6c 6c 65 64 20 69 66 20 73  d be called if s
ac50: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 29  qlite3SafetyOn()
ac60: 0a 20 20 20 20 2a 2a 20 66 61 69 6c 73 20 61 6c  .    ** fails al
ac70: 73 6f 20 28 74 68 65 20 69 66 28 2e 2e 2e 29 20  so (the if(...) 
ac80: 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 29  statement above)
ac90: 2e 20 42 75 74 20 69 66 20 70 65 6f 70 6c 65 20  . But if people 
aca0: 61 72 65 0a 20 20 20 20 2a 2a 20 6d 69 73 75 73  are.    ** misus
acb0: 69 6e 67 20 73 71 6c 69 74 65 2c 20 74 68 65 79  ing sqlite, they
acc0: 20 68 61 76 65 20 62 69 67 67 65 72 20 70 72 6f   have bigger pro
acd0: 62 6c 65 6d 73 20 74 68 61 6e 20 61 20 6c 65 61  blems than a lea
ace0: 6b 65 64 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  ked value..    *
acf0: 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
ad00: 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78  eMemRelease(&ctx
ad10: 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  .s);.    goto no
ad20: 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _mem;.  }..  /* 
ad30: 49 66 20 61 6e 79 20 61 75 78 69 6c 69 61 72 79  If any auxiliary
ad40: 20 64 61 74 61 20 66 75 6e 63 74 69 6f 6e 73 20   data functions 
ad50: 68 61 76 65 20 62 65 65 6e 20 63 61 6c 6c 65 64  have been called
ad60: 20 62 79 20 74 68 69 73 20 75 73 65 72 20 66 75   by this user fu
ad70: 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d 6d  nction,.  ** imm
ad80: 65 64 69 61 74 65 6c 79 20 63 61 6c 6c 20 74 68  ediately call th
ad90: 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f 72  e destructor for
ada0: 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63 20   any non-static 
adb0: 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20 69  values..  */.  i
adc0: 66 28 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63  f( ctx.pVdbeFunc
add0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
ade0: 64 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61  dbeDeleteAuxData
adf0: 28 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2c 20  (ctx.pVdbeFunc, 
ae00: 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 70 4f  pOp->p1);.    pO
ae10: 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 20  p->p4.pVdbeFunc 
ae20: 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 3b  = ctx.pVdbeFunc;
ae30: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  .    pOp->p4type
ae40: 20 3d 20 50 34 5f 56 44 42 45 46 55 4e 43 3b 0a   = P4_VDBEFUNC;.
ae50: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65    }..  /* If the
ae60: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
ae70: 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72  ed an error, thr
ae80: 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ow an exception 
ae90: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45  */.  if( ctx.isE
aea0: 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rror ){.    sqli
aeb0: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
aec0: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
aed0: 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
aee0: 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b  e_text(&ctx.s));
aef0: 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73  .    rc = ctx.is
af00: 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  Error;.  }..  /*
af10: 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
af20: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
af30: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
af40: 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  3 */.  sqlite3Vd
af50: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
af60: 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e  (&ctx.s, encodin
af70: 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
af80: 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 26  eMemMove(pOut, &
af90: 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73 71  ctx.s);.  if( sq
afa0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
afb0: 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20  ig(pOut) ){.    
afc0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
afd0: 7d 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  }.  REGISTER_TRA
afe0: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  CE(pOp->p3, pOut
aff0: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
b000: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
b010: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b020: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
b030: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
b040: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
b050: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
b060: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
b070: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
b080: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
b090: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b0a0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b0b0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b0c0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b0d0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b0e0: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
b0f0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  * *.**.** Take t
b100: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
b110: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
b120: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
b130: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
b140: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b150: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b160: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b170: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b180: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b190: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
b1a0: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
b1b0: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
b1c0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
b1d0: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
b1e0: 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a  the left by the.
b1f0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
b200: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
b210: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
b220: 67 69 73 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  giser P1..** Sto
b230: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b240: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b250: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b260: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b270: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b280: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
b290: 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20  tRight P1 P2 P3 
b2a0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  * *.**.** Shift 
b2b0: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
b2c0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b2d0: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
b2e0: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
b2f0: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
b300: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
b310: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
b320: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
b330: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b340: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b350: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b360: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b370: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
b380: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
b390: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b3a0: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
b3b0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
b3c0: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b3e0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
b3f0: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
b400: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
b410: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
b420: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b430: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
b440: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
b450: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
b460: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
b470: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
b480: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
b490: 74 33 20 2a 2f 0a 20 20 69 36 34 20 61 3b 0a 20  t3 */.  i64 a;. 
b4a0: 20 69 36 34 20 62 3b 0a 0a 20 20 69 66 28 20 28   i64 b;..  if( (
b4b0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
b4c0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
b4d0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
b4e0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
b4f0: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
b500: 65 61 6b 3b 0a 20 20 7d 0a 20 20 61 20 3d 20 73  eak;.  }.  a = s
b510: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
b520: 75 65 28 70 49 6e 32 29 3b 0a 20 20 62 20 3d 20  ue(pIn2);.  b = 
b530: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
b540: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 73 77 69  lue(pIn1);.  swi
b550: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
b560: 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
b570: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 61 20 26  BitAnd:      a &
b580: 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  = b;     break;.
b590: 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74 4f      case OP_BitO
b5a0: 72 3a 20 20 20 20 20 20 20 61 20 7c 3d 20 62 3b  r:       a |= b;
b5b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b5c0: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66  case OP_ShiftLef
b5d0: 74 3a 20 20 20 61 20 3c 3c 3d 20 62 3b 20 20 20  t:   a <<= b;   
b5e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
b5f0: 75 6c 74 3a 20 20 61 73 73 65 72 74 28 20 70 4f  ult:  assert( pO
b600: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 68  p->opcode==OP_Sh
b610: 69 66 74 52 69 67 68 74 20 29 3b 0a 20 20 20 20  iftRight );.    
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b630: 20 20 20 20 20 61 20 3e 3e 3d 20 62 3b 20 20 20       a >>= b;   
b640: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4f   break;.  }.  pO
b650: 75 74 2d 3e 75 2e 69 20 3d 20 61 3b 0a 20 20 4d  ut->u.i = a;.  M
b660: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
b670: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
b680: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
b690: 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20  ode: AddImm  P1 
b6a0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
b6b0: 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  Add the constant
b6c0: 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P2 to the value
b6d0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
b6e0: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
b6f0: 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65  s always an inte
b700: 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f  ger..**.** To fo
b710: 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72  rce any register
b720: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
b730: 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a  r, just add 0..*
b740: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d  /.case OP_AddImm
b750: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
b760: 2a 20 69 6e 31 20 2a 2f 0a 20 20 73 71 6c 69 74  * in1 */.  sqlit
b770: 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
b780: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
b790: 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
b7a0: 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
b7b0: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65  * Opcode: MustBe
b7c0: 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Int P1 P2 * * *.
b7d0: 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  ** .** Force the
b7e0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b7f0: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
b800: 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20  nteger.  If the 
b810: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
b820: 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
b830: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63   and cannot be c
b840: 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
b850: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68   integer.** with
b860: 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74  out data loss, t
b870: 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
b880: 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69  tely to P2, or i
b890: 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65  f P2==0.** raise
b8a0: 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41   an SQLITE_MISMA
b8b0: 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a  TCH exception..*
b8c0: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65  /.case OP_MustBe
b8d0: 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Int: {          
b8e0: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
b8f0: 2f 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  /.  applyAffinit
b900: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
b910: 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f  FF_NUMERIC, enco
b920: 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28 70 49  ding);.  if( (pI
b930: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
b940: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  Int)==0 ){.    i
b950: 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b  f( pOp->p2==0 ){
b960: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
b970: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
b980: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
b990: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
b9a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 63 20  }else{.      pc 
b9b0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
b9c0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
b9d0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
b9e0: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
b9f0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
ba00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
ba10: 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20  Affinity P1 * * 
ba20: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67  * *.**.** If reg
ba30: 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61  ister P1 holds a
ba40: 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72  n integer conver
ba50: 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76  t it to a real v
ba60: 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  alue..**.** This
ba70: 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
ba80: 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20  when extracting 
ba90: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
baa0: 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a   a column that.*
bab0: 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e  * has REAL affin
bac0: 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d  ity.  Such colum
bad0: 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69  n values may sti
bae0: 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a  ll be stored as.
baf0: 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72  ** integers, for
bb00: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63   space efficienc
bb10: 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74  y, but after ext
bb20: 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20  raction we want 
bb30: 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20  them.** to have 
bb40: 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75  only a real valu
bb50: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  e..*/.case OP_Re
bb60: 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20  alAffinity: {   
bb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bb80: 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70  * in1 */.  if( p
bb90: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
bba0: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69  _Int ){.    sqli
bbb0: 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66  te3VdbeMemRealif
bbc0: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
bbd0: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
bbe0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
bbf0: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54  T./* Opcode: ToT
bc00: 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ext P1 * * * *.*
bc10: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
bc20: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
bc30: 20 50 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a   P1 to be text..
bc40: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
bc50: 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76  is numeric, conv
bc60: 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69  ert it to a stri
bc70: 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ng using the.** 
bc80: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 70 72  equivalent of pr
bc90: 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61  intf().  Blob va
bca0: 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67  lues are unchang
bcb0: 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66  ed and.** are af
bcc0: 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20  terwards simply 
bcd0: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74  interpreted as t
bce0: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ext..**.** A NUL
bcf0: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
bd00: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
bd10: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
bd20: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
bd30: 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20  e OP_ToText: {  
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd50: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
bd60: 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20  _TEXT, in1 */.  
bd70: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
bd80: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65  & MEM_Null ) bre
bd90: 61 6b 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45  ak;.  assert( ME
bda0: 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62  M_Str==(MEM_Blob
bdb0: 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  >>3) );.  pIn1->
bdc0: 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e  flags |= (pIn1->
bdd0: 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e  flags&MEM_Blob)>
bde0: 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  >3;.  applyAffin
bdf0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
be00: 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64  _AFF_TEXT, encod
be10: 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  ing);.  rc = Exp
be20: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
be30: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
be40: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c  lags & MEM_Str |
be50: 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
be60: 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  ed );.  pIn1->fl
be70: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74  ags &= ~(MEM_Int
be80: 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c  |MEM_Real|MEM_Bl
be90: 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20  ob|MEM_Zero);.  
bea0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
beb0: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  IZE(pIn1);.  bre
bec0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
bed0: 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20  : ToBlob P1 * * 
bee0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
bef0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
bf00: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
bf10: 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65   BLOB..** If the
bf20: 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69   value is numeri
bf30: 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  c, convert it to
bf40: 20 61 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e   a string first.
bf50: 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20  .** Strings are 
bf60: 73 69 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72  simply reinterpr
bf70: 65 74 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69  eted as blobs wi
bf80: 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20  th no change.** 
bf90: 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  to the underlyin
bfa0: 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20  g data..**.** A 
bfb0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
bfc0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
bfd0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
bfe0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
bff0: 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20  case OP_ToBlob: 
c000: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
c010: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c020: 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f  _TO_BLOB, in1 */
c030: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
c040: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20  gs & MEM_Null ) 
c050: 62 72 65 61 6b 3b 0a 20 20 69 66 28 20 28 70 49  break;.  if( (pI
c060: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
c070: 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Blob)==0 ){.    
c080: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
c090: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  n1, SQLITE_AFF_T
c0a0: 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  EXT, encoding);.
c0b0: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
c0c0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
c0d0: 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  r || db->mallocF
c0e0: 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d  ailed );.    Mem
c0f0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
c100: 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d  , MEM_Blob);.  }
c110: 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  else{.    pIn1->
c120: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54  flags &= ~(MEM_T
c130: 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f  ypeMask&~MEM_Blo
c140: 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  b);.  }.  UPDATE
c150: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
c160: 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n1);.  break;.}.
c170: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75  ./* Opcode: ToNu
c180: 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a  meric P1 * * * *
c190: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
c1a0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c1b0: 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75 6d 65  er P1 to be nume
c1c0: 72 69 63 20 28 65 69 74 68 65 72 20 61 6e 0a 2a  ric (either an.*
c1d0: 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 66  * integer or a f
c1e0: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75  loating-point nu
c1f0: 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65  mber.).** If the
c200: 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f   value is text o
c210: 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63  r blob, try to c
c220: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20  onvert it to an 
c230: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
c240: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
c250: 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e 64 20  ) or atof() and 
c260: 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75  store 0 if no su
c270: 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a  ch conversion .*
c280: 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  * is possible..*
c290: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
c2a0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
c2b0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
c2c0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
c2d0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
c2e0: 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20 20 20  oNumeric: {     
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c300: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55  same as TK_TO_NU
c310: 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20  MERIC, in1 */.  
c320: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
c330: 20 26 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d   & (MEM_Null|MEM
c340: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
c350: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
c360: 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79  3VdbeMemNumerify
c370: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
c380: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
c390: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
c3a0: 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
c3b0: 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20 2a 20   ToInt P1 * * * 
c3c0: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
c3d0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c3e0: 74 65 72 20 50 31 20 62 65 20 61 6e 20 69 6e 74  ter P1 be an int
c3f0: 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65  eger.  If.** The
c400: 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e   value is curren
c410: 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d 62 65  tly a real numbe
c420: 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72 61 63  r, drop its frac
c430: 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20  tional part..** 
c440: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
c450: 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72  text or blob, tr
c460: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  y to convert it 
c470: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73  to an integer us
c480: 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76  ing the.** equiv
c490: 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20  alent of atoi() 
c4a0: 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e  and store 0 if n
c4b0: 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f  o such conversio
c4c0: 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  n is possible..*
c4d0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
c4e0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
c4f0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
c500: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
c510: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
c520: 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  oInt: {         
c530: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c540: 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69   as TK_TO_INT, i
c550: 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e  n1 */.  if( (pIn
c560: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
c570: 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  ull)==0 ){.    s
c580: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
c590: 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
c5a0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
c5b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c5c0: 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64  IT_CAST./* Opcod
c5d0: 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a  e: ToReal P1 * *
c5e0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65   * *.**.** Force
c5f0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
c600: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
c610: 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
c620: 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54   number..** If T
c630: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
c640: 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67 65 72  ently an integer
c650: 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a  , convert it..**
c660: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
c670: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
c680: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
c690: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75   to an integer u
c6a0: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
c6b0: 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29  valent of atoi()
c6c0: 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30 20 69   and store 0.0 i
c6d0: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
c6e0: 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65  sion is possible
c6f0: 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  ..**.** A NULL v
c700: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
c710: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
c720: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
c730: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
c740: 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20  P_ToReal: {     
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c760: 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45  same as TK_TO_RE
c770: 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28  AL, in1 */.  if(
c780: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
c790: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
c7a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c7b0: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
c7c0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
c7d0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
c7e0: 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f  _OMIT_CAST */../
c7f0: 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20  * Opcode: Lt P1 
c800: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
c810: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
c820: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
c830: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
c840: 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20  reg(P3)<reg(P1) 
c850: 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
c860: 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a  address P2.  .**
c870: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
c880: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
c890: 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
c8a0: 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29  d either reg(P1)
c8b0: 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69   or.** reg(P3) i
c8c0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
c8d0: 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74   the jump.  If t
c8e0: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
c8f0: 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20  NULL .** bit is 
c900: 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20  clear then fall 
c910: 74 68 72 75 20 69 66 20 65 69 74 68 65 72 20 6f  thru if either o
c920: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a  perand is NULL..
c930: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
c940: 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f  _AFF_MASK portio
c950: 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20  n of P5 must be 
c960: 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72  an affinity char
c970: 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54  acter -.** SQLIT
c980: 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49  E_AFF_TEXT, SQLI
c990: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20  TE_AFF_INTEGER, 
c9a0: 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e  and so forth. An
c9b0: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
c9c0: 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62   .** to coerce b
c9d0: 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72  oth inputs accor
c9e0: 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66  ding to this aff
c9f0: 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65  inity before the
ca00: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  .** comparison i
ca10: 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53  s made. If the S
ca20: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69  QLITE_AFF_MASK i
ca30: 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d  s 0x00, then num
ca40: 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79  eric.** affinity
ca50: 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74   is used. Note t
ca60: 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79  hat the affinity
ca70: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65   conversions are
ca80: 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20   stored.** back 
ca90: 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  into the input r
caa0: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
cab0: 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63  P3.  So this opc
cac0: 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a  ode can cause.**
cad0: 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e   persistent chan
cae0: 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ges to registers
caf0: 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a   P1 and P3..**.*
cb00: 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65  * Once any conve
cb10: 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65  rsions have take
cb20: 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69  n place, and nei
cb30: 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55  ther value is NU
cb40: 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  LL, .** the valu
cb50: 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  es are compared.
cb60: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
cb70: 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d  are blobs then m
cb80: 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73  emcmp() is.** us
cb90: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
cba0: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
cbb0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
cbc0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a  If both values.*
cbd0: 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e  * are text, then
cbe0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
cbf0: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
cc00: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e  ion specified in
cc10: 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20  .** P4 is  used 
cc20: 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72  to do the compar
cc30: 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20  ison.  If P4 is 
cc40: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68  not specified th
cc50: 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69  en.** memcmp() i
cc60: 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  s used to compar
cc70: 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20  e text string.  
cc80: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
cc90: 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74  re.** numeric, t
cca0: 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f  hen a numeric co
ccb0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64  mparison is used
ccc0: 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c  . If the two val
ccd0: 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69  ues.** are of di
cce0: 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74  fferent types, t
ccf0: 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20  hen numbers are 
cd00: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
cd10: 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20  than.** strings 
cd20: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
cd30: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
cd40: 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a  than blobs..**.*
cd50: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
cd60: 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50  STOREP2 bit of P
cd70: 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64  5 is set, then d
cd80: 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73  o not jump.  Ins
cd90: 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61  tead,.** store a
cda0: 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20   boolean result 
cdb0: 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c  (either 0, or 1,
cdc0: 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67   or NULL) in reg
cdd0: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20  ister P2..*/./* 
cde0: 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32  Opcode: Ne P1 P2
cdf0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
ce00: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
ce10: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
ce20: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
ce30: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
ce40: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
ce50: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
ce60: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e   P1 and P3 are n
ce70: 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74  ot equal.  See t
ce80: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
ce90: 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  .** additional i
cea0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
ceb0: 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20  * Opcode: Eq P1 
cec0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
ced0: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
cee0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
cef0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
cf00: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
cf10: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
cf20: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
cf30: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
cf40: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
cf50: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
cf60: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
cf70: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
cf80: 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20  pcode: Le P1 P2 
cf90: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
cfa0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
cfb0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
cfc0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
cfd0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
cfe0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
cff0: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
d000: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
d010: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
d020: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
d030: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
d040: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
d050: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
d060: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
d070: 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50  code: Gt P1 P2 P
d080: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
d090: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
d0a0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
d0b0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
d0c0: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
d0d0: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
d0e0: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
d0f0: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
d100: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
d110: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
d120: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
d130: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
d140: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
d150: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50  ./* Opcode: Ge P
d160: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
d170: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
d180: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
d190: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
d1a0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
d1b0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
d1c0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
d1d0: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
d1e0: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
d1f0: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
d200: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
d210: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
d220: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
d230: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
d240: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20  */.case OP_Eq:  
d250: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d260: 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a  same as TK_EQ, j
d270: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
d280: 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20  .case OP_Ne:    
d290: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d2a0: 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d  me as TK_NE, jum
d2b0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
d2c0: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20  ase OP_Lt:      
d2d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d2e0: 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c   as TK_LT, jump,
d2f0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
d300: 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20  e OP_Le:        
d310: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d320: 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69  s TK_LE, jump, i
d330: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
d340: 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Gt:          
d350: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
d360: 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GT, jump, in1
d370: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
d380: 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Ge: {          
d390: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d3a0: 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GE, jump, in1, 
d3b0: 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  in3 */.  int fla
d3c0: 67 73 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  gs;.  int res;. 
d3d0: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 0a   char affinity;.
d3e0: 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d  .  flags = pIn1-
d3f0: 3e 66 6c 61 67 73 7c 70 49 6e 33 2d 3e 66 6c 61  >flags|pIn3->fla
d400: 67 73 3b 0a 0a 20 20 69 66 28 20 66 6c 61 67 73  gs;..  if( flags
d410: 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20  &MEM_Null ){.   
d420: 20 2f 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70   /* If either op
d430: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
d440: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
d450: 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20   always NULL..  
d460: 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73    ** The jump is
d470: 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51   taken if the SQ
d480: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
d490: 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20  bit is set..    
d4a0: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
d4b0: 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
d4c0: 45 50 32 20 29 7b 0a 20 20 20 20 20 20 70 4f 75  EP2 ){.      pOu
d4d0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
d4e0: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 4d 65 6d  ->p2];.      Mem
d4f0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
d500: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20  , MEM_Null);.   
d510: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
d520: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
d530: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
d540: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
d550: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20  _JUMPIFNULL ){. 
d560: 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
d570: 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  2-1;.    }.    b
d580: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 61 66 66  reak;.  }..  aff
d590: 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20  inity = pOp->p5 
d5a0: 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  & SQLITE_AFF_MAS
d5b0: 4b 3b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74  K;.  if( affinit
d5c0: 79 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  y ){.    applyAf
d5d0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66  finity(pIn1, aff
d5e0: 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29  inity, encoding)
d5f0: 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  ;.    applyAffin
d600: 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69 6e 69  ity(pIn3, affini
d610: 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ty, encoding);. 
d620: 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f     if( db->mallo
d630: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
d640: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73  o_mem;.  }..  as
d650: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
d660: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c  e==P4_COLLSEQ ||
d670: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d   pOp->p4.pColl==
d680: 30 20 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f  0 );.  ExpandBlo
d690: 62 28 70 49 6e 31 29 3b 0a 20 20 45 78 70 61 6e  b(pIn1);.  Expan
d6a0: 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 72  dBlob(pIn3);.  r
d6b0: 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  es = sqlite3MemC
d6c0: 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e  ompare(pIn3, pIn
d6d0: 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  1, pOp->p4.pColl
d6e0: 29 3b 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70  );.  switch( pOp
d6f0: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
d700: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72  case OP_Eq:    r
d710: 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20  es = res==0;    
d720: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
d730: 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d   OP_Ne:    res =
d740: 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65   res!=0;     bre
d750: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
d760: 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Lt:    res = res
d770: 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  <0;      break;.
d780: 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20      case OP_Le: 
d790: 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b     res = res<=0;
d7a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
d7b0: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72  case OP_Gt:    r
d7c0: 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20  es = res>0;     
d7d0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
d7e0: 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d  ult:       res =
d7f0: 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65   res>=0;     bre
d800: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  ak;.  }..  if( p
d810: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
d820: 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70  STOREP2 ){.    p
d830: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
d840: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 4d 65 6d  Op->p2];.    Mem
d850: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
d860: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20  , MEM_Int);.    
d870: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b  pOut->u.i = res;
d880: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
d890: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
d8a0: 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  t);.  }else if( 
d8b0: 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
d8c0: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
d8d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d8e0: 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f  code: Permutatio
d8f0: 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
d900: 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75  ** Set the permu
d910: 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  tation used by t
d920: 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  he OP_Compare op
d930: 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65  erator to be the
d940: 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74   array.** of int
d950: 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a  egers in P4..**.
d960: 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
d970: 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
d980: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
d990: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 2c 20  OP_Permutation, 
d9a0: 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20 4f  OP_Compare,.** O
d9b0: 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50 5f 52 65  P_Halt, or OP_Re
d9c0: 73 75 6c 74 52 6f 77 2e 20 20 54 79 70 69 63 61  sultRow.  Typica
d9d0: 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75  lly the OP_Permu
d9e0: 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6f 63  tation should oc
d9f0: 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  cur.** immediate
da00: 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
da10: 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63  OP_Compare..*/.c
da20: 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ase OP_Permutati
da30: 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  on: {.  assert( 
da40: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
da50: 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73  INTARRAY );.  as
da60: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69  sert( pOp->p4.ai
da70: 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d   );.  aPermute =
da80: 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62   pOp->p4.ai;.  b
da90: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
daa0: 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50  de: Compare P1 P
dab0: 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
dac0: 43 6f 6d 70 61 72 65 20 74 6f 20 76 65 63 74 6f  Compare to vecto
dad0: 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  rs of registers 
dae0: 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28  in reg(P1)..reg(
daf0: 50 31 2b 50 33 2d 31 29 20 28 61 6c 6c 20 74 68  P1+P3-1) (all th
db00: 69 73 0a 2a 2a 20 6f 6e 65 20 22 41 22 29 20 61  is.** one "A") a
db10: 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72  nd in reg(P2)..r
db20: 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22  eg(P2+P3-1) ("B"
db30: 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73  ).  Save the res
db40: 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ult of.** the co
db50: 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65  mparison for use
db60: 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f   by the next OP_
db70: 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a  Jump instruct..*
db80: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
db90: 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
dba0: 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
dbb0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
dbc0: 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
dbd0: 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
dbe0: 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
dbf0: 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
dc00: 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
dc10: 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
dc20: 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
dc30: 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
dc40: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
dc50: 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
dc60: 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
dc70: 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
dc80: 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
dc90: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
dca0: 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
dcb0: 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
dcc0: 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
dcd0: 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
dce0: 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
dcf0: 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
dd00: 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
dd10: 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
dd20: 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
dd30: 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
dd40: 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
dd50: 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
dd60: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
dd70: 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
dd80: 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
dd90: 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
dda0: 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
ddb0: 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
ddc0: 64 65 72 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f  der */..  n = pO
ddd0: 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66  p->p3;.  pKeyInf
dde0: 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
ddf0: 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
de00: 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  n>0 );.  assert(
de10: 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a   pKeyInfo!=0 );.
de20: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
de30: 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
de40: 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b  & p1+n<=p->nMem+
de50: 31 20 29 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  1 );.  p2 = pOp-
de60: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
de70: 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 70 2d 3e  2>0 && p2+n<=p->
de80: 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 66 6f 72 28  nMem+1 );.  for(
de90: 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
dea0: 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
deb0: 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
dec0: 20 3a 20 69 3b 0a 20 20 20 20 52 45 47 49 53 54   : i;.    REGIST
ded0: 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c  ER_TRACE(p1+idx,
dee0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78   &p->aMem[p1+idx
def0: 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  ]);.    REGISTER
df00: 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26  _TRACE(p2+idx, &
df10: 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  p->aMem[p2+idx])
df20: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c  ;.    assert( i<
df30: 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
df40: 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20   );.    pColl = 
df50: 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b  pKeyInfo->aColl[
df60: 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70  i];.    bRev = p
df70: 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72  KeyInfo->aSortOr
df80: 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d  der[i];.    iCom
df90: 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65  pare = sqlite3Me
dfa0: 6d 43 6f 6d 70 61 72 65 28 26 70 2d 3e 61 4d 65  mCompare(&p->aMe
dfb0: 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 70 2d 3e 61  m[p1+idx], &p->a
dfc0: 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f  Mem[p2+idx], pCo
dfd0: 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f  ll);.    if( iCo
dfe0: 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69  mpare ){.      i
dff0: 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61  f( bRev ) iCompa
e000: 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a  re = -iCompare;.
e010: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
e020: 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74   }.  }.  aPermut
e030: 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
e040: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75  }../* Opcode: Ju
e050: 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  mp P1 P2 P3 * *.
e060: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
e070: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
e080: 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c   address P1, P2,
e090: 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67   or P3 depending
e0a0: 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69   on whether.** i
e0b0: 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  n the most recen
e0c0: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73  t OP_Compare ins
e0d0: 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20  truction the P1 
e0e0: 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20  vector was less 
e0f0: 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f  than.** equal to
e100: 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  , or greater tha
e110: 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c  n the P2 vector,
e120: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a   respectively..*
e130: 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20  /.case OP_Jump: 
e140: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
e150: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69   jump */.  if( i
e160: 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20  Compare<0 ){.   
e170: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20   pc = pOp->p1 - 
e180: 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  1;.  }else if( i
e190: 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20  Compare==0 ){.  
e1a0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
e1b0: 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
e1c0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20   pc = pOp->p3 - 
e1d0: 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
e1e0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e  }../* Opcode: An
e1f0: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
e200: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f  *.** Take the lo
e210: 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65  gical AND of the
e220: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
e230: 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61  ters P1 and P2 a
e240: 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20  nd.** write the 
e250: 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69  result into regi
e260: 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
e270: 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50  f either P1 or P
e280: 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74  2 is 0 (false) t
e290: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
e2a0: 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74  s 0 even if.** t
e2b0: 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
e2c0: 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
e2d0: 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20  and true or two 
e2e0: 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20  NULLs give.** a 
e2f0: 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  NULL output..*/.
e300: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31  /* Opcode: Or P1
e310: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
e320: 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61   Take the logica
e330: 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75  l OR of the valu
e340: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
e350: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
e360: 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72  store the answer
e370: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
e380: 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
e390: 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e   P1 or P2 is non
e3a0: 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e  zero (true) then
e3b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31   the result is 1
e3c0: 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20   (true).** even 
e3d0: 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  if the other inp
e3e0: 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
e3f0: 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72  ULL and false or
e400: 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69   two NULLs.** gi
e410: 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74  ve a NULL output
e420: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64  ..*/.case OP_And
e430: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
e440: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44  * same as TK_AND
e450: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
e460: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20   */.case OP_Or: 
e470: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
e480: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20   same as TK_OR, 
e490: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
e4a0: 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f  /.  int v1;    /
e4b0: 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20  * Left operand: 
e4c0: 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52   0==FALSE, 1==TR
e4d0: 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f  UE, 2==UNKNOWN o
e4e0: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20  r NULL */.  int 
e4f0: 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20  v2;    /* Right 
e500: 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53  operand: 0==FALS
e510: 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55  E, 1==TRUE, 2==U
e520: 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a  NKNOWN or NULL *
e530: 2f 0a 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  /..  if( pIn1->f
e540: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
e550: 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
e560: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
e570: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
e580: 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
e590: 20 7d 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66   }.  if( pIn2->f
e5a0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
e5b0: 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20  ){.    v2 = 2;. 
e5c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d   }else{.    v2 =
e5d0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
e5e0: 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20  alue(pIn2)!=0;. 
e5f0: 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
e600: 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a  code==OP_And ){.
e610: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
e620: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
e630: 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  nd_logic[] = { 0
e640: 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c  , 0, 0, 0, 1, 2,
e650: 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20   0, 2, 2 };.    
e660: 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76  v1 = and_logic[v
e670: 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65  1*3+v2];.  }else
e680: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
e690: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
e6a0: 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20   or_logic[] = { 
e6b0: 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31  0, 1, 2, 1, 1, 1
e6c0: 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20  , 2, 1, 2 };.   
e6d0: 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76   v1 = or_logic[v
e6e0: 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 69  1*3+v2];.  }.  i
e6f0: 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20  f( v1==2 ){.    
e700: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
e710: 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
e720: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
e730: 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20  t->u.i = v1;.   
e740: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
e750: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
e760: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
e770: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50  /* Opcode: Not P
e780: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
e790: 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76   Interpret the v
e7a0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
e7b0: 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e   P1 as a boolean
e7c0: 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74   value.  Store t
e7d0: 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f  he.** boolean co
e7e0: 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69  mplement in regi
e7f0: 73 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65  ster P2.  If the
e800: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e810: 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c  er P1 is .** NUL
e820: 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69  L, then a NULL i
e830: 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a  s stored in P2..
e840: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20  */.case OP_Not: 
e850: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
e860: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
e870: 4f 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 4f 75  OT, in1 */.  pOu
e880: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
e890: 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
e8a0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
e8b0: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
e8c0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
e8d0: 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pOut);.  }else{
e8e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
e8f0: 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
e900: 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e  , !sqlite3VdbeIn
e910: 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20  tValue(pIn1));. 
e920: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
e930: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74  * Opcode: BitNot
e940: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
e950: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
e960: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
e970: 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e  ster P1 as an in
e980: 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68  teger.  Store th
e990: 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65  e.** ones-comple
e9a0: 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76  ment of the P1 v
e9b0: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
e9c0: 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f  er P2.  If P1 ho
e9d0: 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68  lds.** a NULL th
e9e0: 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  en store a NULL 
e9f0: 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
ea00: 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20  P_BitNot: {     
ea10: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ea20: 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e  as TK_BITNOT, in
ea30: 31 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 70  1 */.  pOut = &p
ea40: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
ea50: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
ea60: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
ea70: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ea80: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
ea90: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
eaa0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
eab0: 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c  Int64(pOut, ~sql
eac0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
ead0: 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62  (pIn1));.  }.  b
eae0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
eaf0: 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20  de: If P1 P2 P3 
eb00: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
eb10: 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
eb20: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
eb30: 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76   is true.  The v
eb40: 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f  alue is.** is co
eb50: 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66  nsidered true if
eb60: 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61   it is numeric a
eb70: 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66  nd non-zero.  If
eb80: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
eb90: 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
eba0: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
ebb0: 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f  f P3 is true..*/
ebc0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
ebd0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
ebe0: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
ebf0: 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
ec00: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46  register P1 is F
ec10: 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65  alse.  The value
ec20: 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64   is.** is consid
ec30: 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20  ered true if it 
ec40: 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61  has a numeric va
ec50: 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66  lue of zero.  If
ec60: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
ec70: 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
ec80: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
ec90: 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f  f P3 is true..*/
eca0: 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20  .case OP_If:    
ecb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ecc0: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73  jump, in1 */.cas
ecd0: 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20  e OP_IfNot: {   
ece0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
ecf0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63  , in1 */.  int c
ed00: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
ed10: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
ed20: 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70  {.    c = pOp->p
ed30: 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64  3;.  }else{.#ifd
ed40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
ed50: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
ed60: 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
ed70: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
ed80: 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20  =0;.#else.    c 
ed90: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
eda0: 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e  lValue(pIn1)!=0.
edb0: 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  0;.#endif.    if
edc0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
edd0: 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63  P_IfNot ) c = !c
ede0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20 29 7b  ;.  }.  if( c ){
edf0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
ee00: 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
ee10: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
ee20: 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20  IsNull P1 P2 P3 
ee30: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
ee40: 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
ee50: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
ee60: 20 69 73 20 4e 55 4c 4c 2e 20 20 49 66 20 50 33   is NULL.  If P3
ee70: 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74   is greater.** t
ee80: 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 63  han zero, then c
ee90: 68 65 63 6b 20 61 6c 6c 20 76 61 6c 75 65 73 20  heck all values 
eea0: 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b  reg(P1), reg(P1+
eeb0: 31 29 2c 20 0a 2a 2a 20 72 65 67 28 50 31 2b 32  1), .** reg(P1+2
eec0: 29 2c 20 2e 2e 2e 2c 20 72 65 67 28 50 31 2b 50  ), ..., reg(P1+P
eed0: 33 2d 31 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  3-1)..*/.case OP
eee0: 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  _IsNull: {      
eef0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ef00: 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70   TK_ISNULL, jump
ef10: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 6e  , in1 */.  int n
ef20: 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  ;..  n = pOp->p3
ef30: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
ef40: 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p3==0 || pOp->p
ef50: 31 3e 30 20 29 3b 0a 20 20 64 6f 7b 0a 20 20 20  1>0 );.  do{.   
ef60: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
ef70: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
ef80: 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
ef90: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
efa0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
efb0: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68     pIn1++;.  }wh
efc0: 69 6c 65 28 20 2d 2d 6e 20 3e 20 30 20 29 3b 0a  ile( --n > 0 );.
efd0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
efe0: 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50  pcode: NotNull P
eff0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
f000: 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
f010: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
f020: 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e  ster P1 is not N
f030: 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ULL.  .*/.case O
f040: 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20  P_NotNull: {    
f050: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f060: 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a  as TK_NOTNULL, j
f070: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66  ump, in1 */.  if
f080: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
f090: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
f0a0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
f0b0: 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
f0c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
f0d0: 3a 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20  : SetNumColumns 
f0e0: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
f0f0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 73 65 74   This opcode set
f100: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
f110: 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68 65 20  columns for the 
f120: 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 62 79  cursor opened by
f130: 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e   the.** followin
f140: 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f  g instruction to
f150: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 4f 50   P2..**.** An OP
f160: 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69  _SetNumColumns i
f170: 73 20 6f 6e 6c 79 20 75 73 65 66 75 6c 20 69 66  s only useful if
f180: 20 69 74 20 6f 63 63 75 72 73 20 69 6d 6d 65 64   it occurs immed
f190: 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20 0a 2a  iately before .*
f1a0: 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  * one of the fol
f1b0: 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73 3a 0a  lowing opcodes:.
f1c0: 2a 2a 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 52 65  **.**     OpenRe
f1d0: 61 64 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 57 72  ad.**     OpenWr
f1e0: 69 74 65 0a 2a 2a 20 20 20 20 20 4f 70 65 6e 50  ite.**     OpenP
f1f0: 73 65 75 64 6f 0a 2a 2a 0a 2a 2a 20 49 66 20 74  seudo.**.** If t
f200: 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
f210: 6f 64 65 20 69 73 20 74 6f 20 62 65 20 65 78 65  ode is to be exe
f220: 63 75 74 65 64 20 6f 6e 20 61 20 63 75 72 73 6f  cuted on a curso
f230: 72 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73 20  r, then.** this 
f240: 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 70  opcode must be p
f250: 72 65 73 65 6e 74 20 69 6d 6d 65 64 69 61 74 65  resent immediate
f260: 6c 79 20 62 65 66 6f 72 65 20 74 68 65 20 6f 70  ly before the op
f270: 63 6f 64 65 20 74 68 61 74 0a 2a 2a 20 6f 70 65  code that.** ope
f280: 6e 73 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 2a  ns the cursor..*
f290: 2f 0a 23 69 66 20 30 0a 63 61 73 65 20 4f 50 5f  /.#if 0.case OP_
f2a0: 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 3a 20 7b  SetNumColumns: {
f2b0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
f2c0: 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  if../* Opcode: C
f2d0: 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50  olumn P1 P2 P3 P
f2e0: 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  4 *.**.** Interp
f2f0: 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
f300: 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
f310: 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
f320: 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
f330: 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
f340: 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
f350: 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
f360: 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
f370: 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
f380: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
f390: 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
f3a0: 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
f3b0: 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
f3c0: 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
f3d0: 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
f3e0: 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
f3f0: 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
f400: 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
f410: 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
f420: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
f430: 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
f440: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
f450: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
f460: 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  e column contain
f470: 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
f480: 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
f490: 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
f4a0: 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
f4b0: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
f4c0: 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
f4d0: 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
f4e0: 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
f4f0: 65 73 75 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  esult..*/.case O
f500: 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75 33  P_Column: {.  u3
f510: 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20 20  2 payloadSize;  
f520: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
f530: 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
f540: 64 20 2a 2f 0a 20 20 69 36 34 20 70 61 79 6c 6f  d */.  i64 paylo
f550: 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d  adSize64; /* Num
f560: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
f570: 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
f580: 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
f590: 20 20 20 2f 2a 20 50 31 20 76 61 6c 75 65 20 6f     /* P1 value o
f5a0: 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f 0a  f the opcode */.
f5b0: 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
f5c0: 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e       /* column n
f5d0: 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76  umber to retriev
f5e0: 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
f5f0: 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65  r *pC;    /* The
f600: 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a   VDBE cursor */.
f610: 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20 20 20    char *zRec;   
f620: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
f630: 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f  to complete reco
f640: 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74 43  rd-data */.  BtC
f650: 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
f660: 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
f670: 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54  sor */.  u32 *aT
f680: 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 61  ype;        /* a
f690: 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68  Type[i] holds th
f6a0: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  e numeric type o
f6b0: 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d  f the i-th colum
f6c0: 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  n */.  u32 *aOff
f6d0: 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
f6e0: 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
f6f0: 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
f700: 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
f710: 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  mn */.  int nFie
f720: 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e 75  ld;        /* nu
f730: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
f740: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
f750: 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
f760: 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67       /* The leng
f770: 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c  th of the serial
f780: 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68  ized data for th
f790: 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  e column */.  in
f7a0: 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
f7b0: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
f7c0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61 74   */.  char *zDat
f7d0: 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74  a;       /* Part
f7e0: 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 62   of the record b
f7f0: 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
f800: 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20    Mem *pDest;   
f810: 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f       /* Where to
f820: 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61   write the extra
f830: 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20  cted value */.  
f840: 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
f850: 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
f860: 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
f870: 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
f880: 75 38 20 2a 7a 49 64 78 3b 20 20 20 20 20 20 20  u8 *zIdx;       
f890: 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f     /* Index into
f8a0: 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 38 20   header */.  u8 
f8b0: 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20 20 20 20  *zEndHdr;       
f8c0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69  /* Pointer to fi
f8d0: 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20 74  rst byte after t
f8e0: 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75  he header */.  u
f8f0: 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20  32 offset;      
f900: 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f    /* Offset into
f910: 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75   the data */.  u
f920: 36 34 20 6f 66 66 73 65 74 36 34 3b 20 20 20 20  64 offset64;    
f930: 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 66 66 73    /* 64-bit offs
f940: 65 74 2e 20 20 36 34 20 62 69 74 73 20 6e 65 65  et.  64 bits nee
f950: 64 65 64 20 74 6f 20 63 61 74 63 68 20 6f 76 65  ded to catch ove
f960: 72 66 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74 20 73  rflow */.  int s
f970: 7a 48 64 72 3b 20 20 20 20 20 20 20 20 20 2f 2a  zHdr;         /*
f980: 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   Size of the hea
f990: 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61  der size field a
f9a0: 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72  t start of recor
f9b0: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c  d */.  int avail
f9c0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
f9d0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
f9e0: 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a  available data *
f9f0: 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  /...  p1 = pOp->
fa00: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
fa10: 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b 0a 20 20  p2;.  pC = 0;.  
fa20: 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
fa30: 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
fa40: 20 20 61 73 73 65 72 74 28 20 70 31 3c 70 2d 3e    assert( p1<p->
fa50: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
fa60: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
fa70: 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
fa80: 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  em );.  pDest = 
fa90: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
faa0: 5d 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  ];.  MemSetTypeF
fab0: 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e  lag(pDest, MEM_N
fac0: 75 6c 6c 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73  ull);..  /* This
fad0: 20 62 6c 6f 63 6b 20 73 65 74 73 20 74 68 65 20   block sets the 
fae0: 76 61 72 69 61 62 6c 65 20 70 61 79 6c 6f 61 64  variable payload
faf0: 53 69 7a 65 20 74 6f 20 62 65 20 74 68 65 20 74  Size to be the t
fb00: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20  otal number of. 
fb10: 20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74 68 65   ** bytes in the
fb20: 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20   record..  **.  
fb30: 2a 2a 20 7a 52 65 63 20 69 73 20 73 65 74 20 74  ** zRec is set t
fb40: 6f 20 62 65 20 74 68 65 20 63 6f 6d 70 6c 65 74  o be the complet
fb50: 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 72 65  e text of the re
fb60: 63 6f 72 64 20 69 66 20 69 74 20 69 73 20 61 76  cord if it is av
fb70: 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68  ailable..  ** Th
fb80: 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72  e complete recor
fb90: 64 20 74 65 78 74 20 69 73 20 61 6c 77 61 79 73  d text is always
fba0: 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70   available for p
fbb0: 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a  seudo-tables.  *
fbc0: 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20  * If the record 
fbd0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 63  is stored in a c
fbe0: 75 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c  ursor, the compl
fbf0: 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 0a  ete record text.
fc00: 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20 61 76    ** might be av
fc10: 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 20  ailable in the  
fc20: 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20  pC->aRow cache. 
fc30: 20 4f 72 20 69 74 20 6d 69 67 68 74 20 6e 6f 74   Or it might not
fc40: 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65   be..  ** If the
fc50: 20 64 61 74 61 20 69 73 20 75 6e 61 76 61 69 6c   data is unavail
fc60: 61 62 6c 65 2c 20 20 7a 52 65 63 20 69 73 20 73  able,  zRec is s
fc70: 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a  et to NULL..  **
fc80: 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f  .  ** We also co
fc90: 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
fca0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
fcb0: 68 65 20 72 65 63 6f 72 64 2e 20 20 46 6f 72 20  he record.  For 
fcc0: 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68  cursors,.  ** th
fcd0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
fce0: 6d 6e 73 20 69 73 20 73 74 6f 72 65 64 20 69 6e  mns is stored in
fcf0: 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
fd00: 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a  nField element..
fd10: 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d 3e 61    */.  pC = p->a
fd20: 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73 73 65  pCsr[p1];.  asse
fd30: 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
fd40: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
fd50: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
fd60: 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61  assert( pC->pVta
fd70: 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a 23 65  bCursor==0 );.#e
fd80: 6e 64 69 66 0a 20 20 69 66 28 20 70 43 2d 3e 70  ndif.  if( pC->p
fd90: 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20  Cursor!=0 ){.   
fda0: 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69   /* The record i
fdb0: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 42 2d  s stored in a B-
fdc0: 54 72 65 65 20 2a 2f 0a 20 20 20 20 72 63 20 3d  Tree */.    rc =
fdd0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
fde0: 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
fdf0: 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
fe00: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
fe10: 6f 72 3b 0a 20 20 20 20 7a 52 65 63 20 3d 20 30  or;.    zRec = 0
fe20: 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43  ;.    pCrsr = pC
fe30: 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 69  ->pCursor;.    i
fe40: 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
fe50: 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53  {.      payloadS
fe60: 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ize = 0;.    }el
fe70: 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65  se if( pC->cache
fe80: 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65  Status==p->cache
fe90: 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70 61 79  Ctr ){.      pay
fea0: 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 70  loadSize = pC->p
feb0: 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
fec0: 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72 2a 29    zRec = (char*)
fed0: 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d 65  pC->aRow;.    }e
fee0: 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73 49 6e  lse if( pC->isIn
fef0: 64 65 78 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  dex ){.      sql
ff00: 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
ff10: 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64  (pCrsr, &payload
ff20: 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 69  Size64);.      i
ff30: 66 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36  f( (payloadSize6
ff40: 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  4 & SQLITE_MAX_U
ff50: 33 32 29 21 3d 28 75 36 34 29 70 61 79 6c 6f 61  32)!=(u64)payloa
ff60: 64 53 69 7a 65 36 34 20 29 7b 0a 20 20 20 20 20  dSize64 ){.     
ff70: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
ff80: 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
ff90: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
ffa0: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
ffb0: 20 20 20 20 7d 0a 20 20 20 20 20 20 70 61 79 6c      }.      payl
ffc0: 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70  oadSize = (u32)p
ffd0: 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20  ayloadSize64;.  
ffe0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
fff0: 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53  qlite3BtreeDataS
10000 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
10010 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  oadSize);.    }.
10020 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d      nField = pC-
10030 3e 6e 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65  >nField;.  }else
10040 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
10050 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 3b  ->pseudoTable );
10060 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f  .    /* The reco
10070 72 64 20 69 73 20 74 68 65 20 73 6f 6c 65 20 65  rd is the sole e
10080 6e 74 72 79 20 6f 66 20 61 20 70 73 65 75 64 6f  ntry of a pseudo
10090 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 70 61  -table */.    pa
100a0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
100b0 6e 44 61 74 61 3b 0a 20 20 20 20 7a 52 65 63 20  nData;.    zRec 
100c0 3d 20 70 43 2d 3e 70 44 61 74 61 3b 0a 20 20 20  = pC->pData;.   
100d0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
100e0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
100f0 20 20 20 20 61 73 73 65 72 74 28 20 70 61 79 6c      assert( payl
10100 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52  oadSize==0 || zR
10110 65 63 21 3d 30 20 29 3b 0a 20 20 20 20 6e 46 69  ec!=0 );.    nFi
10120 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64  eld = pC->nField
10130 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b  ;.    pCrsr = 0;
10140 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70 61  .  }..  /* If pa
10150 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c 20  yloadSize is 0, 
10160 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65 20  then just store 
10170 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28 20  a NULL */.  if( 
10180 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 29  payloadSize==0 )
10190 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44  {.    assert( pD
101a0 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  est->flags&MEM_N
101b0 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ull );.    goto 
101c0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
101d0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d   }.  assert( db-
101e0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
101f0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30 20  IMIT_LENGTH]>=0 
10200 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61 64  );.  if( payload
10210 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
10220 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
10230 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
10240 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
10250 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
10260 70 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a 20 20  p2<nField );..  
10270 2f 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73  /* Read and pars
10280 65 20 74 68 65 20 74 61 62 6c 65 20 68 65 61 64  e the table head
10290 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 20 72  er.  Store the r
102a0 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 70 61  esults of the pa
102b0 72 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20 74 68  rse.  ** into th
102c0 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
102d0 63 61 63 68 65 20 66 69 65 6c 64 73 20 6f 66 20  cache fields of 
102e0 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f  the cursor..  */
102f0 0a 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61  .  aType = pC->a
10300 54 79 70 65 3b 0a 20 20 69 66 28 20 70 43 2d 3e  Type;.  if( pC->
10310 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e  cacheStatus==p->
10320 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20  cacheCtr ){.    
10330 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f  aOffset = pC->aO
10340 66 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ffset;.  }else{.
10350 20 20 20 20 61 73 73 65 72 74 28 61 54 79 70 65      assert(aType
10360 29 3b 0a 20 20 20 20 61 76 61 69 6c 20 3d 20 30  );.    avail = 0
10370 3b 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66 73 65  ;.    pC->aOffse
10380 74 20 3d 20 61 4f 66 66 73 65 74 20 3d 20 26 61  t = aOffset = &a
10390 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  Type[nField];.  
103a0 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a    pC->payloadSiz
103b0 65 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b  e = payloadSize;
103c0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
103d0 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43  atus = p->cacheC
103e0 74 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 67 75  tr;..    /* Figu
103f0 72 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20  re out how many 
10400 62 79 74 65 73 20 61 72 65 20 69 6e 20 74 68 65  bytes are in the
10410 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 69   header */.    i
10420 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20  f( zRec ){.     
10430 20 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b 0a 20   zData = zRec;. 
10440 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
10450 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  if( pC->isIndex 
10460 29 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  ){.        zData
10470 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
10480 33 42 74 72 65 65 4b 65 79 46 65 74 63 68 28 70  3BtreeKeyFetch(p
10490 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
104a0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
104b0 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61      zData = (cha
104c0 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 44  r*)sqlite3BtreeD
104d0 61 74 61 46 65 74 63 68 28 70 43 72 73 72 2c 20  ataFetch(pCrsr, 
104e0 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d  &avail);.      }
104f0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 4b 65 79  .      /* If Key
10500 46 65 74 63 68 28 29 2f 44 61 74 61 46 65 74 63  Fetch()/DataFetc
10510 68 28 29 20 6d 61 6e 61 67 65 64 20 74 6f 20 67  h() managed to g
10520 65 74 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  et the entire pa
10530 79 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a 2a 20  yload,.      ** 
10540 73 61 76 65 20 74 68 65 20 70 61 79 6c 6f 61 64  save the payload
10550 20 69 6e 20 74 68 65 20 70 43 2d 3e 61 52 6f 77   in the pC->aRow
10560 20 63 61 63 68 65 2e 20 20 54 68 61 74 20 77 69   cache.  That wi
10570 6c 6c 20 73 61 76 65 20 75 73 20 66 72 6f 6d 0a  ll save us from.
10580 20 20 20 20 20 20 2a 2a 20 68 61 76 69 6e 67 20        ** having 
10590 74 6f 20 6d 61 6b 65 20 61 64 64 69 74 69 6f 6e  to make addition
105a0 61 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65 74 63  al calls to fetc
105b0 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 70 6f  h the content po
105c0 72 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20 20 2a  rtion of.      *
105d0 2a 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  * the record..  
105e0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
105f0 65 72 74 28 20 61 76 61 69 6c 3e 3d 30 20 29 3b  ert( avail>=0 );
10600 0a 20 20 20 20 20 20 69 66 28 20 70 61 79 6c 6f  .      if( paylo
10610 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61  adSize <= (u32)a
10620 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  vail ){.        
10630 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a 20 20  zRec = zData;.  
10640 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
10650 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20 20 20   (u8*)zData;.   
10660 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
10670 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
10680 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
10690 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
106a0 6e 67 20 61 73 73 65 72 74 20 69 73 20 74 72 75  ng assert is tru
106b0 65 20 69 6e 20 61 6c 6c 20 63 61 73 65 73 20 61  e in all cases a
106c0 63 63 65 70 74 20 77 68 65 6e 0a 20 20 20 20 2a  ccept when.    *
106d0 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  * the database f
106e0 69 6c 65 20 68 61 73 20 62 65 65 6e 20 63 6f 72  ile has been cor
106f0 72 75 70 74 65 64 20 65 78 74 65 72 6e 61 6c 6c  rupted externall
10700 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61 73 73  y..    **    ass
10710 65 72 74 28 20 7a 52 65 63 21 3d 30 20 7c 7c 20  ert( zRec!=0 || 
10720 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64 53 69  avail>=payloadSi
10730 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39 20 29  ze || avail>=9 )
10740 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72 20 3d  ; */.    szHdr =
10750 20 67 65 74 56 61 72 69 6e 74 33 32 28 28 75 38   getVarint32((u8
10760 2a 29 7a 44 61 74 61 2c 20 6f 66 66 73 65 74 29  *)zData, offset)
10770 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  ;..    /* Make s
10780 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61  ure a corrupt da
10790 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67  tabase has not g
107a0 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73  iven us an overs
107b0 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20  ize header..    
107c0 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74  ** Do this now t
107d0 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73  o avoid an overs
107e0 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ize memory alloc
107f0 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20  ation..    **.  
10800 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65    ** Type entrie
10810 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e  s can be between
10820 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65   1 and 5 bytes e
10830 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20  ach.  But 4 and 
10840 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 74 79  5 byte.    ** ty
10850 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20  pes use so much 
10860 64 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20  data space that 
10870 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  there can only b
10880 65 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66  e 4096 and 32 of
10890 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65  .    ** them, re
108a0 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20  spectively.  So 
108b0 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64  the maximum head
108c0 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74  er length result
108d0 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20  s from a.    ** 
108e0 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20  3-byte type for 
108f0 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69  each of the maxi
10900 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c  mum of 32768 col
10910 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a  umns plus three.
10920 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74      ** extra byt
10930 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64 65  es for the heade
10940 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e  r length itself.
10950 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20    32768*3 + 3 = 
10960 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20  98307..    */.  
10970 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39    if( offset > 9
10980 38 33 30 37 20 29 7b 0a 20 20 20 20 20 20 72 63  8307 ){.      rc
10990 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
109a0 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f  T_BKPT;.      go
109b0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
109c0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
109d0 43 6f 6d 70 75 74 65 20 69 6e 20 6c 65 6e 20 74  Compute in len t
109e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
109f0 65 73 20 6f 66 20 64 61 74 61 20 77 65 20 6e 65  es of data we ne
10a00 65 64 20 74 6f 20 72 65 61 64 20 69 6e 20 6f 72  ed to read in or
10a10 64 65 72 0a 20 20 20 20 2a 2a 20 74 6f 20 67 65  der.    ** to ge
10a20 74 20 6e 46 69 65 6c 64 20 74 79 70 65 20 76 61  t nField type va
10a30 6c 75 65 73 2e 20 20 6f 66 66 73 65 74 20 69 73  lues.  offset is
10a40 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20   an upper bound 
10a50 6f 6e 20 74 68 69 73 2e 20 20 42 75 74 0a 20 20  on this.  But.  
10a60 20 20 2a 2a 20 6e 46 69 65 6c 64 20 6d 69 67 68    ** nField migh
10a70 74 20 62 65 20 73 69 67 6e 69 66 69 63 61 6e 74  t be significant
10a80 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  ly less than the
10a90 20 74 72 75 65 20 6e 75 6d 62 65 72 20 6f 66 20   true number of 
10aa0 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a 20 69  columns.    ** i
10ab0 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 61 6e 64  n the table, and
10ac0 20 69 6e 20 74 68 61 74 20 63 61 73 65 2c 20 35   in that case, 5
10ad0 2a 6e 46 69 65 6c 64 2b 33 20 6d 69 67 68 74 20  *nField+3 might 
10ae0 62 65 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20  be smaller than 
10af0 6f 66 66 73 65 74 2e 0a 20 20 20 20 2a 2a 20 57  offset..    ** W
10b00 65 20 77 61 6e 74 20 74 6f 20 6d 69 6e 69 6d 69  e want to minimi
10b10 7a 65 20 6c 65 6e 20 69 6e 20 6f 72 64 65 72 20  ze len in order 
10b20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 73 69 7a  to limit the siz
10b30 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 0a  e of the memory.
10b40 20 20 20 20 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f      ** allocatio
10b50 6e 2c 20 65 73 70 65 63 69 61 6c 6c 79 20 69 66  n, especially if
10b60 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
10b70 61 73 65 20 66 69 6c 65 20 68 61 73 20 63 61 75  ase file has cau
10b80 73 65 64 20 6f 66 66 73 65 74 0a 20 20 20 20 2a  sed offset.    *
10b90 2a 20 74 6f 20 62 65 20 6f 76 65 72 73 69 7a 65  * to be oversize
10ba0 64 2e 20 4f 66 66 73 65 74 20 69 73 20 6c 69 6d  d. Offset is lim
10bb0 69 74 65 64 20 74 6f 20 39 38 33 30 37 20 61 62  ited to 98307 ab
10bc0 6f 76 65 2e 20 20 42 75 74 20 39 38 33 30 37 20  ove.  But 98307 
10bd0 6d 69 67 68 74 0a 20 20 20 20 2a 2a 20 73 74 69  might.    ** sti
10be0 6c 6c 20 65 78 63 65 65 64 20 52 6f 62 73 6f 6e  ll exceed Robson
10bf0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
10c00 6f 6e 20 6c 69 6d 69 74 73 20 6f 6e 20 73 6f 6d  on limits on som
10c10 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  e configurations
10c20 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 73 79 73 74  ..    ** On syst
10c30 65 6d 73 20 74 68 61 74 20 63 61 6e 6e 6f 74 20  ems that cannot 
10c40 74 6f 6c 65 72 61 74 65 20 6c 61 72 67 65 20 6d  tolerate large m
10c50 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
10c60 73 2c 20 6e 46 69 65 6c 64 2a 35 2b 33 0a 20 20  s, nField*5+3.  
10c70 20 20 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65 6c 79    ** will likely
10c80 20 62 65 20 6d 75 63 68 20 73 6d 61 6c 6c 65 72   be much smaller
10c90 20 73 69 6e 63 65 20 6e 46 69 65 6c 64 20 77 69   since nField wi
10ca0 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6c 65 73  ll likely be les
10cb0 73 20 74 68 61 6e 0a 20 20 20 20 2a 2a 20 32 30  s than.    ** 20
10cc0 20 6f 72 20 73 6f 2e 20 20 54 68 69 73 20 69 6e   or so.  This in
10cd0 73 75 72 65 73 20 74 68 61 74 20 52 6f 62 73 6f  sures that Robso
10ce0 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  n memory allocat
10cf0 69 6f 6e 20 6c 69 6d 69 74 73 20 61 72 65 0a 20  ion limits are. 
10d00 20 20 20 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64     ** not exceed
10d10 65 64 20 65 76 65 6e 20 66 6f 72 20 63 6f 72 72  ed even for corr
10d20 75 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c  upt database fil
10d30 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6c  es..    */.    l
10d40 65 6e 20 3d 20 6e 46 69 65 6c 64 2a 35 20 2b 20  en = nField*5 + 
10d50 33 3b 0a 20 20 20 20 69 66 28 20 6c 65 6e 20 3e  3;.    if( len >
10d60 20 6f 66 66 73 65 74 20 29 20 6c 65 6e 20 3d 20   offset ) len = 
10d70 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a 20  offset;..    /* 
10d80 54 68 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f  The KeyFetch() o
10d90 72 20 44 61 74 61 46 65 74 63 68 28 29 20 61 62  r DataFetch() ab
10da0 6f 76 65 20 61 72 65 20 66 61 73 74 20 61 6e 64  ove are fast and
10db0 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e   will get the en
10dc0 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f  tire.    ** reco
10dd0 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73  rd header in mos
10de0 74 20 63 61 73 65 73 2e 20 20 42 75 74 20 74 68  t cases.  But th
10df0 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20  ey will fail to 
10e00 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  get the complete
10e10 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68  .    ** record h
10e20 65 61 64 65 72 20 69 66 20 74 68 65 20 72 65 63  eader if the rec
10e30 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65 73 20  ord header does 
10e40 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e  not fit on a sin
10e50 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20  gle page.    ** 
10e60 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20  in the B-Tree.  
10e70 57 68 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e  When that happen
10e80 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56 64  s, use sqlite3Vd
10e90 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29  beMemFromBtree()
10ea0 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69   to.    ** acqui
10eb0 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  re the complete 
10ec0 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20  header text..   
10ed0 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65   */.    if( !zRe
10ee0 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e 20 29  c && avail<len )
10ef0 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61  {.      sMem.fla
10f00 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 73 4d  gs = 0;.      sM
10f10 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20 20 20  em.db = 0;.     
10f20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
10f30 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
10f40 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70 43 2d  rsr, 0, len, pC-
10f50 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29  >isIndex, &sMem)
10f60 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
10f70 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
10f80 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
10f90 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  umn_out;.      }
10fa0 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73  .      zData = s
10fb0 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20  Mem.z;.    }.   
10fc0 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38 20 2a   zEndHdr = (u8 *
10fd0 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20  )&zData[len];.  
10fe0 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a 29 26    zIdx = (u8 *)&
10ff0 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20  zData[szHdr];.. 
11000 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65 20 68     /* Scan the h
11010 65 61 64 65 72 20 61 6e 64 20 75 73 65 20 69 74  eader and use it
11020 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68 65 20   to fill in the 
11030 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f 66 66  aType[] and aOff
11040 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61 72 72  set[].    ** arr
11050 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d 20 77  ays.  aType[i] w
11060 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the 
11070 74 79 70 65 20 69 6e 74 65 67 65 72 20 66 6f 72  type integer for
11080 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20 2a 2a   the i-th.    **
11090 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f 66 66   column and aOff
110a0 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74  set[i] will cont
110b0 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74 20 66  ain the offset f
110c0 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
110d0 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  g.    ** of the 
110e0 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20 73 74  record to the st
110f0 61 72 74 20 6f 66 20 74 68 65 20 64 61 74 61 20  art of the data 
11100 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63 6f 6c  for the i-th col
11110 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f  umn.    */.    o
11120 66 66 73 65 74 36 34 20 3d 20 6f 66 66 73 65 74  ffset64 = offset
11130 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
11140 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20  <nField; i++){. 
11150 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a 45       if( zIdx<zE
11160 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20  ndHdr ){.       
11170 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28 75   aOffset[i] = (u
11180 33 32 29 6f 66 66 73 65 74 36 34 3b 0a 20 20 20  32)offset64;.   
11190 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 67 65 74       zIdx += get
111a0 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c 20 61  Varint32(zIdx, a
111b0 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20  Type[i]);.      
111c0 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
111d0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
111e0 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 69 5d 29  ypeLen(aType[i])
111f0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
11200 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69 20 69         /* If i i
11210 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46 69 65  s less that nFie
11220 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 61  ld, then there a
11230 72 65 20 6c 65 73 73 20 66 69 65 6c 64 73 20 69  re less fields i
11240 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a  n this.        *
11250 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20 53 65  * record than Se
11260 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69  tNumColumns indi
11270 63 61 74 65 64 20 74 68 65 72 65 20 61 72 65 20  cated there are 
11280 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20  columns in the. 
11290 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e         ** table.
112a0 20 53 65 74 20 74 68 65 20 6f 66 66 73 65 74 20   Set the offset 
112b0 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20 63 6f  for any extra co
112c0 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e  lumns not presen
112d0 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20  t in.        ** 
112e0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 30 2e  the record to 0.
112f0 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f 64 65   This tells code
11300 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20   below to store 
11310 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 2a  a NULL.        *
11320 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 64 65 73  * instead of des
11330 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76 61 6c  erializing a val
11340 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  ue from the reco
11350 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  rd..        */. 
11360 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69         aOffset[i
11370 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  ] = 0;.      }. 
11380 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
11390 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
113a0 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d 2e  sMem);.    sMem.
113b0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
113c0 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77 65 20  ;..    /* If we 
113d0 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20 68  have read more h
113e0 65 61 64 65 72 20 64 61 74 61 20 74 68 61 6e 20  eader data than 
113f0 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  was contained in
11400 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20 20   the header,.   
11410 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 65 6e   ** or if the en
11420 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69  d of the last fi
11430 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62  eld appears to b
11440 65 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  e past the end o
11450 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72 65 63  f the.    ** rec
11460 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65  ord, or if the e
11470 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66  nd of the last f
11480 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20  ield appears to 
11490 62 65 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e  be before the en
114a0 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  d.    ** of the 
114b0 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c  record (when all
114c0 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29   fields present)
114d0 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62  , then we must b
114e0 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 2a  e dealing .    *
114f0 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75 70 74  * with a corrupt
11500 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 2a   database..    *
11510 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64 78 20  /.    if( (zIdx 
11520 3e 20 7a 45 6e 64 48 64 72 29 7c 7c 20 28 6f 66  > zEndHdr)|| (of
11530 66 73 65 74 36 34 20 3e 20 70 61 79 6c 6f 61 64  fset64 > payload
11540 53 69 7a 65 29 0a 20 20 20 20 20 7c 7c 20 28 7a  Size).     || (z
11550 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20  Idx==zEndHdr && 
11560 6f 66 66 73 65 74 36 34 21 3d 28 75 36 34 29 70  offset64!=(u64)p
11570 61 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20  ayloadSize) ){. 
11580 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
11590 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
115a0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
115b0 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
115c0 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65   }..  /* Get the
115d0 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74   column informat
115e0 69 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65 74 5b  ion. If aOffset[
115f0 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  p2] is non-zero,
11600 20 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65   then .  ** dese
11610 72 69 61 6c 69 7a 65 20 74 68 65 20 76 61 6c 75  rialize the valu
11620 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  e from the recor
11630 64 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32  d. If aOffset[p2
11640 5d 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20  ] is zero,.  ** 
11650 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6e  then there are n
11660 6f 74 20 65 6e 6f 75 67 68 20 66 69 65 6c 64 73  ot enough fields
11670 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 74   in the record t
11680 6f 20 73 61 74 69 73 66 79 20 74 68 65 0a 20 20  o satisfy the.  
11690 2a 2a 20 72 65 71 75 65 73 74 2e 20 20 49 6e 20  ** request.  In 
116a0 74 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 74  this case, set t
116b0 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72  he value NULL or
116c0 20 74 6f 20 50 34 20 69 66 20 50 34 20 69 73 0a   to P4 if P4 is.
116d0 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74    ** a pointer t
116e0 6f 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a  o a Mem object..
116f0 20 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66 66 73    */.  if( aOffs
11700 65 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20 61 73  et[p2] ){.    as
11710 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
11720 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  _OK );.    if( z
11730 52 65 63 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  Rec ){.      sql
11740 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
11750 73 65 45 78 74 65 72 6e 61 6c 28 70 44 65 73 74  seExternal(pDest
11760 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
11770 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75  VdbeSerialGet((u
11780 38 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66 73 65  8 *)&zRec[aOffse
11790 74 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32  t[p2]], aType[p2
117a0 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  ], pDest);.    }
117b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20  else{.      len 
117c0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
117d0 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65  ialTypeLen(aType
117e0 5b 70 32 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c  [p2]);.      sql
117f0 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
11800 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20  &sMem, pDest);. 
11810 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
11820 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
11830 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74  e(pCrsr, aOffset
11840 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69  [p2], len, pC->i
11850 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a  sIndex, &sMem);.
11860 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
11870 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
11880 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
11890 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  n_out;.      }. 
118a0 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65       zData = sMe
118b0 6d 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  m.z;.      sqlit
118c0 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
118d0 28 75 38 2a 29 7a 44 61 74 61 2c 20 61 54 79 70  (u8*)zData, aTyp
118e0 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20  e[p2], pDest);. 
118f0 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e     }.    pDest->
11900 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
11910 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28    }else{.    if(
11920 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
11930 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 73 71  _MEM ){.      sq
11940 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
11950 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70  lowCopy(pDest, p
11960 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d  Op->p4.pMem, MEM
11970 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 7d 65  _Static);.    }e
11980 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
11990 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26  t( pDest->flags&
119a0 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20  MEM_Null );.    
119b0 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77  }.  }..  /* If w
119c0 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  e dynamically al
119d0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f  located space to
119e0 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28   hold the data (
119f0 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69  in the.  ** sqli
11a00 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
11a10 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  ree() call above
11a20 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65 72 20  ) then transfer 
11a30 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a  control of that.
11a40 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79    ** dynamically
11a50 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
11a60 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70 44 65   over to the pDe
11a70 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20  st structure..  
11a80 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73  ** This prevents
11a90 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a   a memory copy..
11aa0 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e    */.  if( sMem.
11ab0 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61  zMalloc ){.    a
11ac0 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73  ssert( sMem.z==s
11ad0 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20  Mem.zMalloc );. 
11ae0 20 20 20 61 73 73 65 72 74 28 20 21 28 70 44 65     assert( !(pDe
11af0 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  st->flags & MEM_
11b00 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73 73 65  Dyn) );.    asse
11b10 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c 61  rt( !(pDest->fla
11b20 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
11b30 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44 65 73  EM_Str)) || pDes
11b40 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a  t->z==sMem.z );.
11b50 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
11b60 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c   &= ~(MEM_Ephem|
11b70 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
11b80 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d   pDest->flags |=
11b90 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70   MEM_Term;.    p
11ba0 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a  Dest->z = sMem.z
11bb0 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61  ;.    pDest->zMa
11bc0 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c  lloc = sMem.zMal
11bd0 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d  loc;.  }..  rc =
11be0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
11bf0 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 44 65  akeWriteable(pDe
11c00 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  st);..op_column_
11c10 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  out:.  UPDATE_MA
11c20 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
11c30 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
11c40 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
11c50 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st);.  break;.}.
11c60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
11c70 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
11c80 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  *.**.** Apply af
11c90 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
11ca0 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
11cb0 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
11cc0 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
11cd0 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
11ce0 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
11cf0 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63   long. The nth c
11d00 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
11d10 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
11d20 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
11d30 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
11d40 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
11d50 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72  the nth.** memor
11d60 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
11d70 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
11d80 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 68  Affinity: {.  ch
11d90 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20  ar *zAffinity;  
11da0 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
11db0 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a   to be applied *
11dc0 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b  /.  Mem *pData0;
11dd0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
11de0 72 65 67 69 73 74 65 72 20 74 6f 20 77 68 69 63  register to whic
11df0 68 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e  h to apply affin
11e00 69 74 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ity */.  Mem *pL
11e10 61 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  ast;        /* L
11e20 61 73 74 20 72 65 67 69 73 74 65 72 20 74 6f 20  ast register to 
11e30 77 68 69 63 68 20 74 6f 20 61 70 70 6c 79 20 61  which to apply a
11e40 66 66 69 6e 69 74 79 20 2a 2f 0a 20 20 4d 65 6d  ffinity */.  Mem
11e50 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
11e60 2f 2a 20 43 75 72 72 65 6e 74 20 72 65 67 69 73  /* Current regis
11e70 74 65 72 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e  ter */..  zAffin
11e80 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
11e90 0a 20 20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e  .  pData0 = &p->
11ea0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
11eb0 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30   pLast = &pData0
11ec0 5b 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20 66  [pOp->p2-1];.  f
11ed0 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
11ee0 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
11ef0 63 2b 2b 29 7b 0a 20 20 20 20 45 78 70 61 6e 64  c++){.    Expand
11f00 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20  Blob(pRec);.    
11f10 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
11f20 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52  ec, zAffinity[pR
11f30 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f  ec-pData0], enco
11f40 64 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 62 72 65  ding);.  }.  bre
11f50 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11f60 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20  : MakeRecord P1 
11f70 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
11f80 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
11f90 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
11fa0 77 69 74 68 20 50 31 20 69 6e 74 6f 20 61 20 73  with P1 into a s
11fb0 69 6e 67 6c 65 20 65 6e 74 72 79 0a 2a 2a 20 73  ingle entry.** s
11fc0 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65 20  uitable for use 
11fd0 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64  as a data record
11fe0 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74   in a database t
11ff0 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79  able or as a key
12000 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e  .** in an index.
12010 20 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66    The details of
12020 20 74 68 65 20 66 6f 72 6d 61 74 20 61 72 65 20   the format are 
12030 69 72 72 65 6c 65 76 61 6e 74 20 61 73 20 6c 6f  irrelevant as lo
12040 6e 67 20 61 73 0a 2a 2a 20 74 68 65 20 4f 50 5f  ng as.** the OP_
12050 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61  Column opcode ca
12060 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63  n decode the rec
12070 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65  ord later..** Re
12080 66 65 72 20 74 6f 20 73 6f 75 72 63 65 20 63 6f  fer to source co
12090 64 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20  de comments for 
120a0 74 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74  the details of t
120b0 68 65 20 72 65 63 6f 72 64 0a 2a 2a 20 66 6f 72  he record.** for
120c0 6d 61 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  mat..**.** P4 ma
120d0 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68  y be a string th
120e0 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74  at is P2 charact
120f0 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e  ers long.  The n
12100 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
12110 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
12120 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
12130 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
12140 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
12150 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66  for the nth.** f
12160 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65  ield of the inde
12170 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  x key..**.** The
12180 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68   mapping from ch
12190 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e  aracter to affin
121a0 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20  ity is given by 
121b0 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a  the SQLITE_AFF_.
121c0 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  ** macros define
121d0 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68  d in sqliteInt.h
121e0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
121f0 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69   NULL then all i
12200 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65  ndex fields have
12210 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f   the affinity NO
12220 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  NE..*/.case OP_M
12230 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75  akeRecord: {.  u
12240 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20  8 *zNewRecord;  
12250 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65        /* A buffe
12260 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61  r to hold the da
12270 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ta for the new r
12280 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
12290 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  pRec;           
122a0 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63    /* The new rec
122b0 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61  ord */.  u64 nDa
122c0 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ta;             
122d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
122e0 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
122f0 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20   */.  int nHdr; 
12300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12310 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
12320 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
12330 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20  */.  i64 nByte; 
12340 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
12350 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72  ata space requir
12360 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f  ed for this reco
12370 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72  rd */.  int nZer
12380 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  o;             /
12390 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
123a0 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
123b0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
123c0 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74  */.  int nVarint
123d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
123e0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
123f0 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20  n a varint */.  
12400 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b  u32 serial_type;
12410 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66         /* Type f
12420 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ield */.  Mem *p
12430 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20  Data0;          
12440 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20   /* First field 
12450 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69  to be combined i
12460 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a  nto the record *
12470 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20  /.  Mem *pLast; 
12480 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
12490 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  st field of the 
124a0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
124b0 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
124c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
124d0 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
124e0 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cord */.  char *
124f0 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20  zAffinity;      
12500 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
12510 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the 
12520 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
12530 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
12540 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61     /* File forma
12550 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63  t to use for enc
12560 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
12570 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
12580 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20    /* Space used 
12590 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20  in zNewRecord[] 
125a0 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20  */.  int len;   
125b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
125c0 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64  ength of a field
125d0 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69   */..  /* Assumi
125e0 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f  ng the record co
125f0 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c  ntains N fields,
12600 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d   the record form
12610 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69  at looks.  ** li
12620 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20  ke this:.  **.  
12630 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
12640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12650 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12660 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12670 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
12680 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79   | hdr-size | ty
12690 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20  pe 0 | type 1 | 
126a0 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c  ... | type N-1 |
126b0 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64   data0 | ... | d
126c0 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20  ata N-1 | .  ** 
126d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12700 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12710 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20  --------.  **.  
12720 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61  ** Data(0) is ta
12730 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
12740 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63  r P1.  Data(1) c
12750 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74  omes from regist
12760 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64  er P1+1.  ** and
12770 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a   so froth..  **.
12780 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66    ** Each type f
12790 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74  ield is a varint
127a0 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
127b0 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66  e serial type of
127c0 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65   the .  ** corre
127d0 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c  sponding data el
127e0 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74  ement (see sqlit
127f0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
12800 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64  ()). The.  ** hd
12810 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20  r-size field is 
12820 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68  also a varint wh
12830 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65  ich is the offse
12840 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
12850 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65  ning.  ** of the
12860 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30   record to data0
12870 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d  ..  */.  nData =
12880 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
12890 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
128a0 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a  f data space */.
128b0 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20    nHdr = 0;     
128c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
128d0 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
128e0 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 42 79  r space */.  nBy
128f0 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  te = 0;         
12900 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65  /* Data space re
12910 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20  quired for this 
12920 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 5a 65 72  record */.  nZer
12930 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  o = 0;         /
12940 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f  * Number of zero
12950 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
12960 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
12970 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  */.  nField = pO
12980 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69  p->p1;.  zAffini
12990 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
129a0 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
129b0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20  >0 && pOp->p2>0 
129c0 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c  && pOp->p2+nFiel
129d0 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  d<=p->nMem+1 );.
129e0 20 20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61    pData0 = &p->a
129f0 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e  Mem[nField];.  n
12a00 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b  Field = pOp->p2;
12a10 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
12a20 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20  a0[nField-1];.  
12a30 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d  file_format = p-
12a40 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
12a50 6d 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20  mat;..  /* Loop 
12a60 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d  through the elem
12a70 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d  ents that will m
12a80 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72  ake up the recor
12a90 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a  d to figure.  **
12aa0 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70   out how much sp
12ab0 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20  ace is required 
12ac0 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
12ad0 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70  rd..  */.  for(p
12ae0 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
12af0 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
12b00 7b 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69 6e  {.    if( zAffin
12b10 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70  ity ){.      app
12b20 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c  lyAffinity(pRec,
12b30 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d   zAffinity[pRec-
12b40 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e  pData0], encodin
12b50 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  g);.    }.    if
12b60 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45  ( pRec->flags&ME
12b70 4d 5f 5a 65 72 6f 20 26 26 20 70 52 65 63 2d 3e  M_Zero && pRec->
12b80 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  n>0 ){.      sql
12b90 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
12ba0 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20  dBlob(pRec);.   
12bb0 20 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79   }.    serial_ty
12bc0 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
12bd0 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
12be0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20   file_format);. 
12bf0 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33     len = sqlite3
12c00 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
12c10 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
12c20 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
12c30 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 71  ;.    nHdr += sq
12c40 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73  lite3VarintLen(s
12c50 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20  erial_type);.   
12c60 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
12c70 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
12c80 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72       /* Only pur
12c90 65 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c  e zero-filled BL
12ca0 4f 42 73 20 63 61 6e 20 62 65 20 69 6e 70 75 74  OBs can be input
12cb0 20 74 6f 20 74 68 69 73 20 4f 70 63 6f 64 65 2e   to this Opcode.
12cc0 0a 20 20 20 20 20 20 2a 2a 20 57 65 20 64 6f 20  .      ** We do 
12cd0 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20  not allow blobs 
12ce0 77 69 74 68 20 61 20 70 72 65 66 69 78 20 61 6e  with a prefix an
12cf0 64 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20  d a zero-filled 
12d00 74 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e  tail. */.      n
12d10 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e  Zero += pRec->u.
12d20 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65  nZero;.    }else
12d30 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20 20 20   if( len ){.    
12d40 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20    nZero = 0;.   
12d50 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64   }.  }..  /* Add
12d60 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61   the initial hea
12d70 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20 74  der varint and t
12d80 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f  otal the size */
12d90 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69  .  nHdr += nVari
12da0 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69  nt = sqlite3Vari
12db0 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 69  ntLen(nHdr);.  i
12dc0 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
12dd0 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
12de0 29 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b 2b 3b  ) ){.    nHdr++;
12df0 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e  .  }.  nByte = n
12e00 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b  Hdr+nData-nZero;
12e10 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
12e20 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
12e30 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
12e40 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
12e50 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  ;.  }..  /* Make
12e60 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74   sure the output
12e70 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20   register has a 
12e80 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f  buffer large eno
12e90 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20  ugh to store .  
12ea0 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  ** the new recor
12eb0 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65  d. The output re
12ec0 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29  gister (pOp->p3)
12ed0 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
12ee0 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  to.  ** be one o
12ef0 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  f the input regi
12f00 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74  sters (because t
12f10 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
12f20 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
12f30 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20 63  3VdbeMemGrow() c
12f40 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65  ould clobber the
12f50 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74   value before it
12f60 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a   is used)..  */.
12f70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12f80 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70  3<pOp->p1 || pOp
12f90 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f  ->p3>=pOp->p1+pO
12fa0 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20  p->p2 );.  pOut 
12fb0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
12fc0 70 33 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  p3];.  if( sqlit
12fd0 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
12fe0 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20  ut, (int)nByte, 
12ff0 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  0) ){.    goto n
13000 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65  o_mem;.  }.  zNe
13010 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29  wRecord = (u8 *)
13020 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57  pOut->z;..  /* W
13030 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  rite the record 
13040 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69  */.  i = putVari
13050 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c  nt32(zNewRecord,
13060 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70 52   nHdr);.  for(pR
13070 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
13080 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
13090 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
130a0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
130b0 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66  rialType(pRec, f
130c0 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20  ile_format);.   
130d0 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33   i += putVarint3
130e0 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  2(&zNewRecord[i]
130f0 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
13100 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74       /* serial t
13110 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72  ype */.  }.  for
13120 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
13130 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
13140 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20 64  +){  /* serial d
13150 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20  ata */.    i += 
13160 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13170 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64  lPut(&zNewRecord
13180 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74 65  [i], (int)(nByte
13190 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66  -i), pRec,file_f
131a0 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73  ormat);.  }.  as
131b0 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20 29  sert( i==nByte )
131c0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
131d0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
131e0 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  3<=p->nMem );.  
131f0 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
13200 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  Byte;.  pOut->fl
13210 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c  ags = MEM_Blob |
13220 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74   MEM_Dyn;.  pOut
13230 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66  ->xDel = 0;.  if
13240 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70  ( nZero ){.    p
13250 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e  Out->u.nZero = n
13260 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Zero;.    pOut->
13270 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72  flags |= MEM_Zer
13280 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65  o;.  }.  pOut->e
13290 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
132a0 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68  ;  /* In case th
132b0 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63  e blob is ever c
132c0 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74  onverted to text
132d0 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54   */.  REGISTER_T
132e0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
132f0 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
13300 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
13310 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
13320 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50   Opcode: Count P
13330 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
13340 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
13350 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
13360 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
13370 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
13380 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
13390 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
133a0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
133b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
133c0 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
133d0 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
133e0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
133f0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
13400 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74  i64 nEntry;.  Bt
13410 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a  Cursor *pCrsr;..
13420 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43    pCrsr = p->apC
13430 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75  sr[pOp->p1]->pCu
13440 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72 73  rsor;.  if( pCrs
13450 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  r ){.    rc = sq
13460 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28  lite3BtreeCount(
13470 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b  pCrsr, &nEntry);
13480 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 45  .  }else{.    nE
13490 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ntry = 0;.  }.  
134a0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
134b0 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d 3e 75  M_Int;.  pOut->u
134c0 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62  .i = nEntry;.  b
134d0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
134e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 61 74 65  /* Opcode: State
134f0 6d 65 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ment P1 * * * *.
13500 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 6e 20 69  **.** Begin an i
13510 6e 64 69 76 69 64 75 61 6c 20 73 74 61 74 65 6d  ndividual statem
13520 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
13530 77 68 69 63 68 20 69 73 20 70 61 72 74 20 6f 66  which is part of
13540 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 74 72 61   a larger.** tra
13550 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 69 73 20  nsaction.  This 
13560 69 73 20 6e 65 65 64 65 64 20 73 6f 20 74 68 61  is needed so tha
13570 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  t the statement.
13580 2a 2a 20 63 61 6e 20 62 65 20 72 6f 6c 6c 65 64  ** can be rolled
13590 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65   back after an e
135a0 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76  rror without hav
135b0 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b  ing to roll back
135c0 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74   the.** entire t
135d0 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 65  ransaction.  The
135e0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
135f0 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 75 74 6f  action will auto
13600 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 63 6f 6d  matically.** com
13610 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
13620 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
13630 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
13640 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
13650 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f 63 6f  rently in autoco
13660 6d 6d 69 74 20 6d 6f 64 65 20 28 74 68 61 74 20  mmit mode (that 
13670 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 2c 20 69  .** is to say, i
13680 66 20 69 74 20 69 73 20 69 6e 20 62 65 74 77 65  f it is in betwe
13690 65 6e 20 42 45 47 49 4e 20 61 6e 64 20 43 4f 4d  en BEGIN and COM
136a0 4d 49 54 29 0a 2a 2a 20 61 6e 64 20 69 66 20 74  MIT).** and if t
136b0 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74 68 65  here are no othe
136c0 72 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  r active stateme
136d0 6e 74 73 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  nts on the same 
136e0 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
136f0 65 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 69  ection, then thi
13700 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 61  s operation is a
13710 20 6e 6f 2d 6f 70 2e 20 20 4e 6f 20 73 74 61 74   no-op.  No stat
13720 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
13730 6e 0a 2a 2a 20 69 73 20 6e 65 65 64 65 64 20 73  n.** is needed s
13740 69 6e 63 65 20 61 6e 79 20 65 72 72 6f 72 20 63  ince any error c
13750 61 6e 20 75 73 65 20 74 68 65 20 6e 6f 72 6d 61  an use the norma
13760 6c 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65  l ROLLBACK proce
13770 73 73 20 74 6f 0a 2a 2a 20 75 6e 64 6f 20 63 68  ss to.** undo ch
13780 61 6e 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  anges..**.** If 
13790 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
137a0 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
137b0 65 64 2c 20 74 68 65 6e 20 61 20 73 74 61 74 65  ed, then a state
137c0 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  ment journal fil
137d0 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 61 6c 6c  e.** will be all
137e0 6f 63 61 74 65 64 20 61 6e 64 20 69 6e 69 74 69  ocated and initi
137f0 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  alized..**.** Th
13800 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 62  e statement is b
13810 65 67 75 6e 20 6f 6e 20 74 68 65 20 64 61 74 61  egun on the data
13820 62 61 73 65 20 66 69 6c 65 20 77 69 74 68 20 69  base file with i
13830 6e 64 65 78 20 50 31 2e 20 20 54 68 65 20 6d 61  ndex P1.  The ma
13840 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  in.** database f
13850 69 6c 65 20 68 61 73 20 61 6e 20 69 6e 64 65 78  ile has an index
13860 20 6f 66 20 30 20 61 6e 64 20 74 68 65 20 66 69   of 0 and the fi
13870 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  le used for temp
13880 6f 72 61 72 79 20 74 61 62 6c 65 73 0a 2a 2a 20  orary tables.** 
13890 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
138a0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  1..*/.case OP_St
138b0 61 74 65 6d 65 6e 74 3a 20 7b 0a 20 20 69 6e 74  atement: {.  int
138c0 20 69 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74   i;.  Btree *pBt
138d0 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f  ;.  if( db->auto
138e0 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
138f0 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 31  >activeVdbeCnt>1
13900 20 29 7b 0a 20 20 20 20 69 20 3d 20 70 4f 70 2d   ){.    i = pOp-
13910 3e 70 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p1;.    assert(
13920 20 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e   i>=0 && i<db->n
13930 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Db );.    assert
13940 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  ( db->aDb[i].pBt
13950 21 3d 30 20 29 3b 0a 20 20 20 20 70 42 74 20 3d  !=0 );.    pBt =
13960 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b   db->aDb[i].pBt;
13970 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
13980 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
13990 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 61  ns(pBt) );.    a
139a0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
139b0 4d 61 73 6b 20 26 20 28 31 3c 3c 69 29 29 21 3d  Mask & (1<<i))!=
139c0 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  0 );.    if( p->
139d0 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b  iStatement==0 ){
139e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
139f0 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30  b->nStatement>=0
13a00 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69   && db->nSavepoi
13a10 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 64  nt>=0 );.      d
13a20 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b  b->nStatement++;
13a30 20 0a 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74   .      p->iStat
13a40 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  ement = db->nSav
13a50 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74  epoint + db->nSt
13a60 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 7d 0a 20  atement;.    }. 
13a70 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
13a80 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42  treeBeginStmt(pB
13a90 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t, p->iStatement
13aa0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
13ab0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61  }../* Opcode: Sa
13ac0 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50  vepoint P1 * * P
13ad0 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20  4 *.**.** Open, 
13ae0 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62  release or rollb
13af0 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ack the savepoin
13b00 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d  t named by param
13b10 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69  eter P4, dependi
13b20 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c  ng.** on the val
13b30 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65  ue of P1. To ope
13b40 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  n a new savepoin
13b50 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c  t, P1==0. To rel
13b60 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e  ease (commit) an
13b70 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76  .** existing sav
13b80 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f  epoint, P1==1, o
13b90 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  r to rollback an
13ba0 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
13bb0 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61  int P1==2..*/.ca
13bc0 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a  se OP_Savepoint:
13bd0 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
13be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bf0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
13c00 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20   P1 operand */. 
13c10 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65   /* Name of save
13c40 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  point */.  int n
13c50 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e  Name;.  Savepoin
13c60 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70  t *pNew;.  Savep
13c70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
13c80 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
13c90 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65  Tmp;.  int iSave
13ca0 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b  point;.  int ii;
13cb0 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
13cc0 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d  ;.  zName = pOp-
13cd0 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73  >p4.z;..  /* Ass
13ce0 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20  ert that the p1 
13cf0 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c  parameter is val
13d00 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66  id. Also that if
13d10 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
13d20 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  n.  ** transacti
13d30 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63  on, then there c
13d40 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76  annot be any sav
13d50 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20  epoints. .  */. 
13d60 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
13d70 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62  vepoint==0 || db
13d80 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
13d90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d  );.  assert( p1=
13da0 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
13db0 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
13dc0 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56  RELEASE||p1==SAV
13dd0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
13de0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
13df0 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64  >pSavepoint || d
13e00 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
13e10 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
13e20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
13e30 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
13e40 29 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d  ) );..  if( p1==
13e50 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
13e60 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 77  ){.    if( db->w
13e70 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 29 7b  riteVdbeCnt>0 ){
13e80 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20  .      /* A new 
13e90 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74  savepoint cannot
13ea0 20 62 65 20 63 72 65 61 74 65 64 20 69 66 20 74   be created if t
13eb0 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
13ec0 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20  write .      ** 
13ed0 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e  statements (i.e.
13ee0 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65   open read/write
13ef0 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f   incremental blo
13f00 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20  b handles)..    
13f10 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
13f20 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
13f30 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
13f40 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f  nnot open savepo
13f50 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20  int - ".        
13f60 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
13f70 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
13f80 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
13f90 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
13fa0 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20  {.      nName = 
13fb0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
13fc0 7a 4e 61 6d 65 29 3b 0a 0a 20 20 20 20 20 20 2f  zName);..      /
13fd0 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73  * Create a new s
13fe0 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75  avepoint structu
13ff0 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65  re. */.      pNe
14000 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  w = sqlite3DbMal
14010 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
14020 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61  f(Savepoint)+nNa
14030 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28  me+1);.      if(
14040 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20   pNew ){.       
14050 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28   pNew->zName = (
14060 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b  char *)&pNew[1];
14070 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28  .        memcpy(
14080 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  pNew->zName, zNa
14090 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  me, nName+1);.  
140a0 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66    .        /* If
140b0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
140c0 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  n transaction, t
140d0 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73  hen mark this as
140e0 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20   a special.     
140f0 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69     ** "transacti
14100 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a  on savepoint". *
14110 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62  /.        if( db
14120 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
14130 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
14140 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
14150 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
14160 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
14170 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt = 1;.        
14180 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
14190 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b   db->nSavepoint+
141a0 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  +;.        }.   
141b0 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e   .        /* Lin
141c0 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f  k the new savepo
141d0 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  int into the dat
141e0 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c  abase handle's l
141f0 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ist. */.        
14200 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62  pNew->pNext = db
14210 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
14220 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
14230 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20  oint = pNew;.   
14240 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
14250 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69  se{.    iSavepoi
14260 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20  nt = 0;..    /* 
14270 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73  Find the named s
14280 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65  avepoint. If the
14290 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61  re is no such sa
142a0 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e  vepoint, then an
142b0 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  .    ** an error
142c0 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
142d0 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20  the user.  */.  
142e0 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61    for(.      pSa
142f0 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53  vepoint = db->pS
14300 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20  avepoint; .     
14310 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73   pSavepoint && s
14320 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53  qlite3StrICmp(pS
14330 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c  avepoint->zName,
14340 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70   zName);.      p
14350 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
14360 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20  epoint->pNext.  
14370 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65    ){.      iSave
14380 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20  point++;.    }. 
14390 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69     if( !pSavepoi
143a0 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
143b0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
143c0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e  >zErrMsg, db, "n
143d0 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
143e0 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  : %s", zName);. 
143f0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
14400 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73  _ERROR;.    }els
14410 65 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 64  e if( .        d
14420 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e  b->writeVdbeCnt>
14430 30 20 7c 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f  0 || (p1==SAVEPO
14440 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20  INT_ROLLBACK && 
14450 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
14460 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20  t>1) .    ){.   
14470 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20     /* It is not 
14480 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65  possible to rele
14490 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73  ase (commit) a s
144a0 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72  avepoint if ther
144b0 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20  e are .      ** 
144c0 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61  active write sta
144d0 74 65 6d 65 6e 74 73 2e 20 49 74 20 69 73 20 6e  tements. It is n
144e0 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  ot possible to r
144f0 6f 6c 6c 62 61 63 6b 20 61 20 73 61 76 65 70 6f  ollback a savepo
14500 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 69 66 20  int.      ** if 
14510 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63  there are any ac
14520 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20  tive statements 
14530 61 74 20 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f  at all..      */
14540 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
14550 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
14560 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20  Msg, db, .      
14570 20 20 22 63 61 6e 6e 6f 74 20 25 73 20 73 61 76    "cannot %s sav
14580 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61  epoint - SQL sta
14590 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
145a0 65 73 73 22 2c 0a 20 20 20 20 20 20 20 20 28 70  ess",.        (p
145b0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
145c0 4c 42 41 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63  LBACK ? "rollbac
145d0 6b 22 3a 20 22 72 65 6c 65 61 73 65 22 29 0a 20  k": "release"). 
145e0 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63       );.      rc
145f0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
14600 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20      }else{..    
14610 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77    /* Determine w
14620 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
14630 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
14640 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49  ion savepoint. I
14650 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61  f so,.      ** a
14660 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  nd this is a REL
14670 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68  EASE command, th
14680 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
14690 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20  ransaction .    
146a0 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65    ** is committe
146b0 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  d. .      */.   
146c0 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63     int isTransac
146d0 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e  tion = pSavepoin
146e0 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64  t->pNext==0 && d
146f0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
14700 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
14710 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69   if( isTransacti
14720 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  on && p1==SAVEPO
14730 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
14740 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
14750 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20  ommit = 1;.     
14760 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
14770 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
14780 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
14790 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a      p->pc = pc;.
147a0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
147b0 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
147c0 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
147d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
147e0 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
147f0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
14800 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
14810 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
14820 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  nSavepoint = 0;.
14830 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e          rc = p->
14840 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  rc;.      }else{
14850 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f  .        iSavepo
14860 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  int = db->nSavep
14870 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e  oint - iSavepoin
14880 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 66  t - 1;.        f
14890 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
148a0 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
148b0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
148c0 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74  e3BtreeSavepoint
148d0 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
148e0 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
148f0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
14900 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
14910 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f  {.            go
14920 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
14930 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
14940 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
14950 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
14960 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
14970 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  && (db->flags&SQ
14980 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
14990 65 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  es)!=0 ){.      
149a0 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
149b0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
149c0 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20  nts(db);.       
149d0 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
149e0 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
149f0 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  , 0);.        }.
14a00 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
14a10 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f   /* Regardless o
14a20 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  f whether this i
14a30 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52  s a RELEASE or R
14a40 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79  OLLBACK, destroy
14a50 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73   all .      ** s
14a60 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64  avepoints nested
14a70 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73   inside of the s
14a80 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
14a90 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20  perated on. */. 
14aa0 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e       while( db->
14ab0 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76  pSavepoint!=pSav
14ac0 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
14ad0 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61    pTmp = db->pSa
14ae0 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20  vepoint;.       
14af0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
14b00 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20  = pTmp->pNext;. 
14b10 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
14b20 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a  Free(db, pTmp);.
14b30 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
14b40 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
14b50 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69  }..      /* If i
14b60 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20  t is a RELEASE, 
14b70 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65  then destroy the
14b80 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
14b90 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 74 6f 6f   operated on too
14ba0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31   */.      if( p1
14bb0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
14bc0 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ASE ){.        a
14bd0 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e  ssert( pSavepoin
14be0 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t==db->pSavepoin
14bf0 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  t );.        db-
14c00 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53  >pSavepoint = pS
14c10 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b  avepoint->pNext;
14c20 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
14c30 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65  DbFree(db, pSave
14c40 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
14c50 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
14c60 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  on ){.          
14c70 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
14c80 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
14c90 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
14ca0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
14cb0 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
14cc0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
14cd0 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
14ce0 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
14cf0 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
14d00 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
14d10 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
14d20 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
14d30 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
14d40 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
14d50 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
14d60 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
14d70 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
14d80 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
14d90 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
14da0 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
14db0 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
14dc0 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
14dd0 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
14de0 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
14df0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
14e00 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
14e10 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
14e20 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
14e30 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
14e40 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
14e50 20 69 6e 74 20 72 6f 6c 6c 62 61 63 6b 3b 0a 20   int rollback;. 
14e60 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a   int turnOnAC;..
14e70 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d    desiredAutoCom
14e80 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  mit = pOp->p1;. 
14e90 20 72 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d   rollback = pOp-
14ea0 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20  >p2;.  turnOnAC 
14eb0 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  = desiredAutoCom
14ec0 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f  mit && !db->auto
14ed0 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74  Commit;.  assert
14ee0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
14ef0 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65  mit==1 || desire
14f00 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  dAutoCommit==0 )
14f10 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
14f20 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
14f30 20 7c 7c 20 72 6f 6c 6c 62 61 63 6b 3d 3d 30 20   || rollback==0 
14f40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
14f50 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3e 30  >activeVdbeCnt>0
14f60 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
14f70 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
14f80 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69 66 28  active */..  if(
14f90 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 72 6f 6c   turnOnAC && rol
14fa0 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 61 63 74  lback && db->act
14fb0 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a  iveVdbeCnt>1 ){.
14fc0 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
14fd0 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
14fe0 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b  ments a ROLLBACK
14ff0 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
15000 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  re.    ** still 
15010 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74  running, and a t
15020 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
15030 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  tive, return an 
15040 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
15050 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
15060 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
15070 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
15080 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
15090 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
150a0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
150b0 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  annot rollback t
150c0 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
150d0 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
150e0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
150f0 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
15100 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
15110 6c 73 65 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  lse if( turnOnAC
15120 20 26 26 20 21 72 6f 6c 6c 62 61 63 6b 20 26 26   && !rollback &&
15130 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e   db->writeVdbeCn
15140 74 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  t>1 ){.    /* If
15150 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
15160 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43  n implements a C
15170 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20  OMMIT and other 
15180 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a  VMs are writing.
15190 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e      ** return an
151a0 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
151b0 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  g that the other
151c0 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
151d0 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a  te first. .    *
151e0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  /.    sqlite3Set
151f0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
15200 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
15210 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69  commit transacti
15220 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22  on - ".        "
15230 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
15240 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
15250 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
15260 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  SY;.  }else if( 
15270 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
15280 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  t!=db->autoCommi
15290 74 20 29 7b 0a 20 20 20 20 69 66 28 20 72 6f 6c  t ){.    if( rol
152a0 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61  lback ){.      a
152b0 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
152c0 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20  toCommit==1 );. 
152d0 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c       sqlite3Roll
152e0 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20 20  backAll(db);.   
152f0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
15300 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 1;.    }else
15310 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  {.      db->auto
15320 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73  Commit = (u8)des
15330 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
15340 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
15350 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
15360 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
15370 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
15380 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
15390 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31  oCommit = (u8)(1
153a0 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  -desiredAutoComm
153b0 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  it);.        p->
153c0 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
153d0 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67  _BUSY;.        g
153e0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
153f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
15400 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
15410 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a  Statement==0 );.
15420 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65      sqlite3Close
15430 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a  Savepoints(db);.
15440 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
15450 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
15460 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f    rc = SQLITE_DO
15470 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  NE;.    }else{. 
15480 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
15490 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
154a0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
154b0 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rn;.  }else{.   
154c0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
154d0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
154e0 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73  b,.        (!des
154f0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f  iredAutoCommit)?
15500 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20  "cannot start a 
15510 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
15520 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
15530 22 3a 28 0a 20 20 20 20 20 20 20 20 28 72 6f 6c  ":(.        (rol
15540 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72  lback)?"cannot r
15550 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61  ollback - no tra
15560 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
15570 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ve":.           
15580 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
15590 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e  commit - no tran
155a0 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
155b0 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a  e"));.         .
155c0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
155d0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65  ERROR;.  }.  bre
155e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
155f0 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31  : Transaction P1
15600 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
15610 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74  Begin a transact
15620 69 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e 73 61  ion.  The transa
15630 63 74 69 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20  ction ends when 
15640 61 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c  a Commit or Roll
15650 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69  back.** opcode i
15660 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20  s encountered.  
15670 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  Depending on the
15680 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73 65 74   ON CONFLICT set
15690 74 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61  ting, the.** tra
156a0 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 61  nsaction might a
156b0 6c 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61  lso be rolled ba
156c0 63 6b 20 69 66 20 61 6e 20 65 72 72 6f 72 20 69  ck if an error i
156d0 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a  s encountered..*
156e0 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
156f0 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
15700 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69  base file on whi
15710 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ch the transacti
15720 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64  on is.** started
15730 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68  .  Index 0 is th
15740 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
15750 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31  file and index 1
15760 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20   is the.** file 
15770 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
15780 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69  ry tables.  Indi
15790 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65  ces of 2 or more
157a0 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a   are used for.**
157b0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
157c0 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  ses..**.** If P2
157d0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
157e0 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
157f0 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
15800 64 2e 20 20 41 20 52 45 53 45 52 56 45 44 20 6c  d.  A RESERVED l
15810 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e  ock is.** obtain
15820 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ed on the databa
15830 73 65 20 66 69 6c 65 20 77 68 65 6e 20 61 20 77  se file when a w
15840 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
15850 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 4e 6f   is started.  No
15860 0a 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63 65 73  .** other proces
15870 73 20 63 61 6e 20 73 74 61 72 74 20 61 6e 6f 74  s can start anot
15880 68 65 72 20 77 72 69 74 65 20 74 72 61 6e 73 61  her write transa
15890 63 74 69 6f 6e 20 77 68 69 6c 65 20 74 68 69 73  ction while this
158a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
158b0 2a 2a 20 75 6e 64 65 72 77 61 79 2e 20 20 53 74  ** underway.  St
158c0 61 72 74 69 6e 67 20 61 20 77 72 69 74 65 20 74  arting a write t
158d0 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20  ransaction also 
158e0 63 72 65 61 74 65 73 20 61 20 72 6f 6c 6c 62 61  creates a rollba
158f0 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a  ck journal. A.**
15900 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
15910 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  on must be start
15920 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 63 68  ed before any ch
15930 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64  anges can be mad
15940 65 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61  e to the.** data
15950 62 61 73 65 2e 20 20 49 66 20 50 32 20 69 73 20  base.  If P2 is 
15960 32 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 65  2 or greater the
15970 6e 20 61 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  n an EXCLUSIVE l
15980 6f 63 6b 20 69 73 20 61 6c 73 6f 20 6f 62 74 61  ock is also obta
15990 69 6e 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66  ined.** on the f
159a0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  ile..**.** If P2
159b0 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
159c0 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20 6f 62   read-lock is ob
159d0 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20 64 61  tained on the da
159e0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2f 0a  tabase file..*/.
159f0 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
15a00 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  ion: {.  int i;.
15a10 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
15a20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
15a30 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
15a40 69 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  i<db->nDb );.  a
15a50 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
15a60 4d 61 73 6b 20 26 20 28 31 3c 3c 69 29 29 21 3d  Mask & (1<<i))!=
15a70 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
15a80 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 0a 20 20  >aDb[i].pBt;..  
15a90 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
15aa0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
15ab0 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
15ac0 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66  pOp->p2);.    if
15ad0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
15ae0 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
15af0 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e   = pc;.      p->
15b00 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
15b10 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
15b20 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
15b30 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
15b40 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63  =SQLITE_OK && rc
15b50 21 3d 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c  !=SQLITE_READONL
15b60 59 20 2f 2a 20 26 26 20 72 63 21 3d 53 51 4c 49  Y /* && rc!=SQLI
15b70 54 45 5f 42 55 53 59 20 2a 2f 20 29 7b 0a 20 20  TE_BUSY */ ){.  
15b80 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
15b90 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
15ba0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
15bb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
15bc0 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  adCookie P1 P2 P
15bd0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  3 * *.**.** Read
15be0 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
15bf0 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20  3 from database 
15c00 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20  P1 and write it 
15c10 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
15c20 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68  ..** P3==1 is th
15c30 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
15c40 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20  .  P3==2 is the 
15c50 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
15c60 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65  .** P3==3 is the
15c70 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
15c80 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61  er cache size, a
15c90 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
15ca0 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61  ==0 is.** the ma
15cb0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
15cc0 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
15cd0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
15ce0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a  used to store.**
15cf0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
15d00 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d  s..**.** There m
15d10 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f  ust be a read-lo
15d20 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
15d30 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61  se (either a tra
15d40 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74  nsaction.** must
15d50 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74   be started or t
15d60 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20  here must be an 
15d70 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66  open cursor) bef
15d80 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67  ore.** executing
15d90 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
15da0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
15db0 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  adCookie: {     
15dc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
15dd0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
15de0 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
15df0 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43  nt iDb;.  int iC
15e00 6f 6f 6b 69 65 3b 0a 0a 20 20 69 44 62 20 3d 20  ookie;..  iDb = 
15e10 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
15e20 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
15e30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
15e40 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
15e50 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
15e60 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
15e70 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
15e80 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
15e90 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
15ea0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
15eb0 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d  sk & (1<<iDb))!=
15ec0 30 20 29 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  0 );..  rc = sql
15ed0 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
15ee0 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
15ef0 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32  t, iCookie, (u32
15f00 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f   *)&iMeta);.  pO
15f10 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b  ut->u.i = iMeta;
15f20 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
15f30 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
15f40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
15f50 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
15f60 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
15f70 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
15f80 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
15f90 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65  ter P3 (interpre
15fa0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
15fb0 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69  r).** into cooki
15fc0 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
15fd0 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d  atabase P1.  P2=
15fe0 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
15ff0 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50   version.  .** P
16000 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
16010 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d  base format. P2=
16020 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
16030 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
16040 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
16050 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
16060 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
16070 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
16080 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
16090 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
160a0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
160b0 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
160c0 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
160d0 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
160e0 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
160f0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
16100 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
16110 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
16120 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
16130 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
16140 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
16150 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
16160 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
16170 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
16180 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
16190 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
161a0 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d   (1<<pOp->p1))!=
161b0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
161c0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
161d0 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
161e0 42 74 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74  Bt!=0 );.  sqlit
161f0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
16200 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20  ify(pIn3);.  /* 
16210 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69  See note about i
16220 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e  ndex shifting on
16230 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a   OP_ReadCookie *
16240 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
16250 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28  BtreeUpdateMeta(
16260 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70  pDb->pBt, pOp->p
16270 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e  2, (int)pIn3->u.
16280 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  i);.  if( pOp->p
16290 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
162a0 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
162b0 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
162c0 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
162d0 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
162e0 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
162f0 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
16300 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
16310 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e  ookie = (int)pIn
16320 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e  3->u.i;.    db->
16330 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
16340 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20  InternChanges;. 
16350 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
16360 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46  p2==BTREE_FILE_F
16370 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20  ORMAT ){.    /* 
16380 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69  Record changes i
16390 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  n the file forma
163a0 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  t */.    pDb->pS
163b0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
163c0 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75  at = (u8)pIn3->u
163d0 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  .i;.  }.  if( pO
163e0 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
163f0 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
16400 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
16410 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
16420 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
16430 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
16440 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
16450 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
16460 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
16470 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
16480 64 62 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  db);.  }.  break
16490 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
164a0 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31 20  VerifyCookie P1 
164b0 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b  P2 *.**.** Check
164c0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c   the value of gl
164d0 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20 70 61  obal database pa
164e0 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30  rameter number 0
164f0 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20   (the.** schema 
16500 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b  version) and mak
16510 65 20 73 75 72 65 20 69 74 20 69 73 20 65 71 75  e sure it is equ
16520 61 6c 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 50  al to P2.  .** P
16530 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
16540 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69  e number which i
16550 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e  s 0 for the main
16560 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
16570 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20  * and 1 for the 
16580 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d  file holding tem
16590 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
165a0 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75  d some higher nu
165b0 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69  mber.** for auxi
165c0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73 2e  liary databases.
165d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69  .**.** The cooki
165e0 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61  e changes its va
165f0 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  lue whenever the
16600 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
16610 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69   changes..** Thi
16620 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  s operation is u
16630 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68  sed to detect wh
16640 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b  en that the cook
16650 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ie has changed.*
16660 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63  * and that the c
16670 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e  urrent process n
16680 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74  eeds to reread t
16690 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  he schema..**.**
166a0 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73 61   Either a transa
166b0 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68  ction needs to h
166c0 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65 64  ave been started
166d0 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e   or an OP_Open n
166e0 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78  eeds.** to be ex
166f0 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61 62  ecuted (to estab
16700 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b  lish a read lock
16710 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70  ) before this op
16720 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b  code is.** invok
16730 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
16740 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20  erifyCookie: {. 
16750 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 42 74   int iMeta;.  Bt
16760 72 65 65 20 2a 70 42 74 3b 0a 20 20 61 73 73 65  ree *pBt;.  asse
16770 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
16780 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
16790 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
167a0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
167b0 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
167c0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
167d0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
167e0 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
167f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
16800 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
16810 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
16820 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d  SION, (u32 *)&iM
16830 65 74 61 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  eta);.  }else{. 
16840 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
16850 4b 3b 0a 20 20 20 20 69 4d 65 74 61 20 3d 20 30  K;.    iMeta = 0
16860 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d  ;.  }.  if( rc==
16870 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 65  SQLITE_OK && iMe
16880 74 61 21 3d 70 4f 70 2d 3e 70 32 20 29 7b 0a 20  ta!=pOp->p2 ){. 
16890 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
168a0 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
168b0 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
168c0 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44   = sqlite3DbStrD
168d0 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65  up(db, "database
168e0 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
168f0 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66  ged");.    /* If
16900 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   the schema-cook
16910 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ie from the data
16920 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65  base file matche
16930 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20  s the cookie .  
16940 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68    ** stored with
16950 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72   the in-memory r
16960 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
16970 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a   the schema, do.
16980 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61      ** not reloa
16990 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f  d the schema fro
169a0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
169b0 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ile..    **.    
169c0 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61  ** If virtual-ta
169d0 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c  bles are in use,
169e0 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73   this is not jus
169f0 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  t an optimizatio
16a00 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c  n..    ** Often,
16a10 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20   v-tables store 
16a20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74  their data in ot
16a30 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65  her SQLite table
16a40 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20  s, which.    ** 
16a50 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d  are queried from
16a60 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20   within xNext() 
16a70 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c  and other v-tabl
16a80 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a  e methods using.
16a90 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20      ** prepared 
16aa0 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68  queries. If such
16ab0 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d   a query is out-
16ac0 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e  of-date, we do n
16ad0 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a  ot want to.    *
16ae0 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61  * discard the da
16af0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61  tabase schema, a
16b00 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20  s the user code 
16b10 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
16b20 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20  .    ** v-table 
16b30 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65  would have to be
16b40 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73   ready for the s
16b50 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
16b60 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20  cture itself.   
16b70 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69   ** to be invali
16b80 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73  dated whenever s
16b90 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73  qlite3_step() is
16ba0 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
16bb0 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d  hin .    ** a v-
16bc0 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20  table method..  
16bd0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
16be0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
16bf0 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
16c00 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20  okie!=iMeta ){. 
16c10 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
16c20 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
16c30 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
16c40 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
16c50 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
16c60 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
16c70 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43    rc = SQLITE_SC
16c80 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61  HEMA;.  }.  brea
16c90 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
16ca0 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20   OpenRead P1 P2 
16cb0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f  P3 P4 P5.**.** O
16cc0 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20  pen a read-only 
16cd0 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64  cursor for the d
16ce0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77 68  atabase table wh
16cf0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  ose root page is
16d00 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61  .** P2 in a data
16d10 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
16d20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
16d30 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50   determined by P
16d40 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61  3. .** P3==0 mea
16d50 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ns the main data
16d60 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e  base, P3==1 mean
16d70 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  s the database u
16d80 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70  sed for .** temp
16d90 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e  orary tables, an
16da0 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65  d P3>1 means use
16db0 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  d the correspond
16dc0 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20  ing attached.** 
16dd0 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65 20  database.  Give 
16de0 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61  the new cursor a
16df0 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20  n identifier of 
16e00 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76  P1.  The P1.** v
16e10 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62  alues need not b
16e20 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74  e contiguous but
16e30 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73   all P1 values s
16e40 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69  hould be small i
16e50 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69  ntegers..** It i
16e60 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50  s an error for P
16e70 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65  1 to be negative
16e80 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30  ..**.** If P5!=0
16e90 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f   then use the co
16ea0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
16eb0 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74  r P2 as the root
16ec0 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68   page, not.** th
16ed0 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74  e value of P2 it
16ee0 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  self..**.** Ther
16ef0 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64  e will be a read
16f00 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74   lock on the dat
16f10 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20 74  abase whenever t
16f20 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70  here is an.** op
16f30 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74  en cursor.  If t
16f40 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73 20  he database was 
16f50 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74  unlocked prior t
16f60 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  o this instructi
16f70 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61  on.** then a rea
16f80 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  d lock is acquir
16f90 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
16fa0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
16fb0 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20   A read.** lock 
16fc0 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f  allows other pro
16fd0 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20 74  cesses to read t
16fe0 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74 20  he database but 
16ff0 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79  prohibits.** any
17000 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 66   other process f
17010 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  rom modifying th
17020 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
17030 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a   read lock is.**
17040 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61   released when a
17050 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 63  ll cursors are c
17060 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73 20  losed.  If this 
17070 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65  instruction atte
17080 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61  mpts.** to get a
17090 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66   read lock but f
170a0 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74  ails, the script
170b0 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68   terminates with
170c0 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55   an.** SQLITE_BU
170d0 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a  SY error code..*
170e0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
170f0 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
17100 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
17110 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
17120 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
17130 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
17140 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
17150 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
17160 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
17170 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
17180 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
17190 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
171a0 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
171b0 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
171c0 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
171d0 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
171e0 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
171f0 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
17200 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
17210 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
17220 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
17230 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
17240 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a  o OpenWrite..*/.
17250 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57  /* Opcode: OpenW
17260 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50 34  rite P1 P2 P3 P4
17270 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61   P5.**.** Open a
17280 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
17290 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74  or named P1 on t
172a0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
172b0 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20  x whose root.** 
172c0 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20  page is P2.  Or 
172d0 69 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65  if P5!=0 use the
172e0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
172f0 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20  ster P2 to find 
17300 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  the.** root page
17310 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
17320 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
17330 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
17340 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
17350 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
17360 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
17370 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
17380 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
17390 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
173a0 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
173b0 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
173c0 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
173d0 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
173e0 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
173f0 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
17400 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
17410 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
17420 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
17430 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
17440 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
17450 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
17460 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a  able, or to the.
17470 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78  ** largest index
17480 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f   of any column o
17490 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
174a0 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65   is actually use
174b0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  d..**.** This in
174c0 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20  struction works 
174d0 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65  just like OpenRe
174e0 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ad except that i
174f0 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73  t opens the curs
17500 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72  or.** in read/wr
17510 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61  ite mode.  For a
17520 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68   given table, th
17530 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f  ere can be one o
17540 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79  r more read-only
17550 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61  .** cursors or a
17560 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69   single read/wri
17570 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f  te cursor but no
17580 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65  t both..**.** Se
17590 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e  e also OpenRead.
175a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
175b0 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70  Read:.case OP_Op
175c0 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74  enWrite: {.  int
175d0 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e   nField;.  KeyIn
175e0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
175f0 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 32 3b  int i;.  int p2;
17600 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
17610 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65  t wrFlag;.  Btre
17620 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72  e *pX;.  VdbeCur
17630 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20  sor *pCur;.  Db 
17640 2a 70 44 62 3b 0a 20 20 69 6e 74 20 66 6c 61 67  *pDb;.  int flag
17650 73 3b 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30  s;..  nField = 0
17660 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30  ;.  pKeyInfo = 0
17670 3b 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ;.  i = pOp->p1;
17680 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
17690 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33  .  iDb = pOp->p3
176a0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
176b0 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
176c0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
176d0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
176e0 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20  1<<iDb))!=0 );. 
176f0 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
17700 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62  iDb];.  pX = pDb
17710 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28  ->pBt;.  assert(
17720 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pX!=0 );.  if( 
17730 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
17740 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20  OpenWrite ){.   
17750 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20   wrFlag = 1;.   
17760 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d   if( pDb->pSchem
17770 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c  a->file_format <
17780 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
17790 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20  Format ){.      
177a0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
177b0 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63  ormat = pDb->pSc
177c0 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
177d0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
177e0 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30  {.    wrFlag = 0
177f0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
17800 3e 70 35 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p5 ){.    asser
17810 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
17820 73 73 65 72 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d  ssert( p2<=p->nM
17830 65 6d 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d  em );.    pIn2 =
17840 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20   &p->aMem[p2];. 
17850 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
17860 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
17870 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74  );.    p2 = (int
17880 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn2->u.i;.    
17890 69 66 28 20 70 32 3c 32 20 29 20 7b 0a 20 20 20  if( p2<2 ) {.   
178a0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
178b0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
178c0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
178d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
178e0 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  }.  }.  assert( 
178f0 69 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  i>=0 );.  if( pO
17900 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
17910 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65  YINFO ){.    pKe
17920 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
17930 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 70 4b  pKeyInfo;.    pK
17940 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e  eyInfo->enc = EN
17950 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 6e 46  C(p->db);.    nF
17960 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  ield = pKeyInfo-
17970 3e 6e 46 69 65 6c 64 2b 31 3b 0a 20 20 7d 65 6c  >nField+1;.  }el
17980 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  se if( pOp->p4ty
17990 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a  pe==P4_INT32 ){.
179a0 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
179b0 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 70 43  ->p4.i;.  }.  pC
179c0 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
179d0 73 6f 72 28 70 2c 20 69 2c 20 6e 46 69 65 6c 64  sor(p, i, nField
179e0 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28  , iDb, 1);.  if(
179f0 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20   pCur==0 ) goto 
17a00 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e  no_mem;.  pCur->
17a10 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72  nullRow = 1;.  r
17a20 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
17a30 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77  Cursor(pX, p2, w
17a40 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c  rFlag, pKeyInfo,
17a50 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b   pCur->pCursor);
17a60 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66  .  pCur->pKeyInf
17a70 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20  o = pKeyInfo;.. 
17a80 20 73 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20   switch( rc ){. 
17a90 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42     case SQLITE_B
17aa0 55 53 59 3a 20 7b 0a 20 20 20 20 20 20 70 2d 3e  USY: {.      p->
17ab0 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70  pc = pc;.      p
17ac0 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
17ad0 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
17ae0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
17af0 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
17b00 53 51 4c 49 54 45 5f 4f 4b 3a 20 7b 0a 20 20 20  SQLITE_OK: {.   
17b10 20 20 20 66 6c 61 67 73 20 3d 20 73 71 6c 69 74     flags = sqlit
17b20 65 33 42 74 72 65 65 46 6c 61 67 73 28 70 43 75  e3BtreeFlags(pCu
17b30 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  r->pCursor);.   
17b40 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65     /* Sanity che
17b50 63 6b 69 6e 67 2e 20 20 4f 6e 6c 79 20 74 68 65  cking.  Only the
17b60 20 6c 6f 77 65 72 20 66 6f 75 72 20 62 69 74 73   lower four bits
17b70 20 6f 66 20 74 68 65 20 66 6c 61 67 73 20 62 79   of the flags by
17b80 74 65 20 73 68 6f 75 6c 64 0a 20 20 20 20 20 20  te should.      
17b90 2a 2a 20 62 65 20 75 73 65 64 2e 20 20 42 69 74  ** be used.  Bit
17ba0 20 33 20 28 6d 61 73 6b 20 30 78 30 38 29 20 69   3 (mask 0x08) i
17bb0 73 20 75 6e 70 72 65 64 69 63 74 61 62 6c 65 2e  s unpredictable.
17bc0 20 20 54 68 65 20 6c 6f 77 65 72 20 33 20 62 69    The lower 3 bi
17bd0 74 73 0a 20 20 20 20 20 20 2a 2a 20 28 6d 61 73  ts.      ** (mas
17be0 6b 20 30 78 30 37 29 20 73 68 6f 75 6c 64 20 62  k 0x07) should b
17bf0 65 20 65 69 74 68 65 72 20 35 20 28 69 6e 74 6b  e either 5 (intk
17c00 65 79 2b 6c 65 61 66 64 61 74 61 20 66 6f 72 20  ey+leafdata for 
17c10 74 61 62 6c 65 73 29 20 6f 72 0a 20 20 20 20 20  tables) or.     
17c20 20 2a 2a 20 32 20 28 7a 65 72 6f 64 61 74 61 20   ** 2 (zerodata 
17c30 66 6f 72 20 69 6e 64 69 63 65 73 29 2e 20 20 49  for indices).  I
17c40 66 20 74 68 65 73 65 20 63 6f 6e 64 69 74 69 6f  f these conditio
17c50 6e 73 20 61 72 65 20 6e 6f 74 20 6d 65 74 20 69  ns are not met i
17c60 74 20 63 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f  t can.      ** o
17c70 6e 6c 79 20 6d 65 61 6e 20 74 68 61 74 20 77 65  nly mean that we
17c80 20 61 72 65 20 64 65 61 6c 69 6e 67 20 77 69 74   are dealing wit
17c90 68 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  h a corrupt data
17ca0 62 61 73 65 20 66 69 6c 65 0a 20 20 20 20 20 20  base file.      
17cb0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  */.      if( (fl
17cc0 61 67 73 20 26 20 30 78 66 30 29 21 3d 30 20 7c  ags & 0xf0)!=0 |
17cd0 7c 20 28 28 66 6c 61 67 73 20 26 20 30 78 30 37  | ((flags & 0x07
17ce0 29 21 3d 35 20 26 26 20 28 66 6c 61 67 73 20 26  )!=5 && (flags &
17cf0 20 30 78 30 37 29 21 3d 32 29 20 29 7b 0a 20 20   0x07)!=2) ){.  
17d00 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
17d10 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
17d20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
17d30 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17d40 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
17d50 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 28  Cur->isTable = (
17d60 66 6c 61 67 73 20 26 20 42 54 52 45 45 5f 49 4e  flags & BTREE_IN
17d70 54 4b 45 59 29 21 3d 30 20 3f 31 3a 30 3b 0a 20  TKEY)!=0 ?1:0;. 
17d80 20 20 20 20 20 70 43 75 72 2d 3e 69 73 49 6e 64       pCur->isInd
17d90 65 78 20 3d 20 28 66 6c 61 67 73 20 26 20 42 54  ex = (flags & BT
17da0 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 21 3d 30  REE_ZERODATA)!=0
17db0 20 3f 31 3a 30 3b 0a 20 20 20 20 20 20 2f 2a 20   ?1:0;.      /* 
17dc0 49 66 20 50 34 3d 3d 30 20 69 74 20 6d 65 61 6e  If P4==0 it mean
17dd0 73 20 77 65 20 61 72 65 20 65 78 70 65 63 74 65  s we are expecte
17de0 64 20 74 6f 20 6f 70 65 6e 20 61 20 74 61 62 6c  d to open a tabl
17df0 65 2e 20 20 49 66 20 50 34 21 3d 30 20 74 68 65  e.  If P4!=0 the
17e00 6e 0a 20 20 20 20 20 20 2a 2a 20 77 65 20 65 78  n.      ** we ex
17e10 70 65 63 74 20 74 6f 20 62 65 20 6f 70 65 6e 69  pect to be openi
17e20 6e 67 20 61 6e 20 69 6e 64 65 78 2e 20 20 49 66  ng an index.  If
17e30 20 74 68 69 73 20 69 73 20 6e 6f 74 20 77 68 61   this is not wha
17e40 74 20 68 61 70 70 65 6e 65 64 2c 0a 20 20 20 20  t happened,.    
17e50 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 64 61    ** then the da
17e60 74 61 62 61 73 65 20 69 73 20 63 6f 72 72 75 70  tabase is corrup
17e70 74 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  t.      */.     
17e80 20 69 66 28 20 28 70 43 75 72 2d 3e 69 73 54 61   if( (pCur->isTa
17e90 62 6c 65 20 26 26 20 70 4f 70 2d 3e 70 34 74 79  ble && pOp->p4ty
17ea0 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 29 0a  pe==P4_KEYINFO).
17eb0 20 20 20 20 20 20 20 7c 7c 20 28 70 43 75 72 2d         || (pCur-
17ec0 3e 69 73 49 6e 64 65 78 20 26 26 20 70 4f 70 2d  >isIndex && pOp-
17ed0 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49  >p4type!=P4_KEYI
17ee0 4e 46 4f 29 20 29 7b 0a 20 20 20 20 20 20 20 20  NFO) ){.        
17ef0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
17f00 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
17f10 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
17f20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
17f30 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a   }.      break;.
17f40 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53      }.    case S
17f50 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20 7b 0a 20  QLITE_EMPTY: {. 
17f60 20 20 20 20 20 70 43 75 72 2d 3e 69 73 54 61 62       pCur->isTab
17f70 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
17f80 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20  !=P4_KEYINFO;.  
17f90 20 20 20 20 70 43 75 72 2d 3e 69 73 49 6e 64 65      pCur->isInde
17fa0 78 20 3d 20 21 70 43 75 72 2d 3e 69 73 54 61 62  x = !pCur->isTab
17fb0 6c 65 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e  le;.      pCur->
17fc0 70 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 20  pCursor = 0;.   
17fd0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
17fe0 4b 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  K;.      break;.
17ff0 20 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75 6c      }.    defaul
18000 74 3a 20 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  t: {.      goto 
18010 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18020 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  or;.    }.  }.  
18030 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18040 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72  ode: OpenEphemer
18050 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  al P1 P2 * P4 *.
18060 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
18070 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
18080 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
18090 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
180a0 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
180b0 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
180c0 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
180d0 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
180e0 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 74 72 61 6e  -only.  The tran
180f0 73 69 65 6e 74 20 6f 72 20 76 69 72 74 75 61 6c  sient or virtual
18100 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c  .** table is del
18110 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  eted automatical
18120 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73  ly when the curs
18130 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a  or is closed..**
18140 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75  .** P2 is the nu
18150 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
18160 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  in the virtual t
18170 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
18180 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  sor points to a 
18190 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50  BTree table if P
181a0 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54  4==0 and to a BT
181b0 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20  ree index.** if 
181c0 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66  P4 is not 0.  If
181d0 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
181e0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   it points to a 
181f0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
18200 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65  e.** that define
18210 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  s the format of 
18220 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65  keys in the inde
18230 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  x..**.** This op
18240 63 6f 64 65 20 77 61 73 20 6f 6e 63 65 20 63 61  code was once ca
18250 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20  lled OpenTemp.  
18260 42 75 74 20 74 68 61 74 20 63 72 65 61 74 65 64  But that created
18270 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65  .** confusion be
18280 63 61 75 73 65 20 74 68 65 20 74 65 72 6d 20 22  cause the term "
18290 74 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69 67  temp table", mig
182a0 68 74 20 72 65 66 65 72 20 65 69 74 68 65 72 0a  ht refer either.
182b0 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20 74 61 62  ** to a TEMP tab
182c0 6c 65 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  le at the SQL le
182d0 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61 62  vel, or to a tab
182e0 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20  le opened by.** 
182f0 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 54 68  this opcode.  Th
18300 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  en this opcode w
18310 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74  as call OpenVirt
18320 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ual.  But.** tha
18330 74 20 63 72 65 61 74 65 64 20 63 6f 6e 66 75 73  t created confus
18340 69 6f 6e 20 77 69 74 68 20 74 68 65 20 77 68 6f  ion with the who
18350 6c 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  le virtual-table
18360 20 69 64 65 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f   idea..*/.case O
18370 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a  P_OpenEphemeral:
18380 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 56 64   {.  int i;.  Vd
18390 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20  beCursor *pCx;. 
183a0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
183b0 74 20 6f 70 65 6e 46 6c 61 67 73 20 3d 20 0a 20  t openFlags = . 
183c0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
183d0 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20  _READWRITE |.   
183e0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43     SQLITE_OPEN_C
183f0 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51  REATE |.      SQ
18400 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53  LITE_OPEN_EXCLUS
18410 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  IVE |.      SQLI
18420 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e  TE_OPEN_DELETEON
18430 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51  CLOSE |.      SQ
18440 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49  LITE_OPEN_TRANSI
18450 45 4e 54 5f 44 42 3b 0a 0a 20 20 69 20 3d 20 70  ENT_DB;..  i = p
18460 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
18470 28 20 69 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  ( i>=0 );.  pCx 
18480 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
18490 28 70 2c 20 69 2c 20 70 4f 70 2d 3e 70 32 2c 20  (p, i, pOp->p2, 
184a0 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43  -1, 1);.  if( pC
184b0 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
184c0 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
184d0 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  ow = 1;.  rc = s
184e0 71 6c 69 74 65 33 42 74 72 65 65 46 61 63 74 6f  qlite3BtreeFacto
184f0 72 79 28 64 62 2c 20 30 2c 20 31 2c 20 53 51 4c  ry(db, 0, 1, SQL
18500 49 54 45 5f 44 45 46 41 55 4c 54 5f 54 45 4d 50  ITE_DEFAULT_TEMP
18510 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20 6f 70 65  _CACHE_SIZE, ope
18520 6e 46 6c 61 67 73 2c 0a 20 20 20 20 20 20 20 20  nFlags,.        
18530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18540 20 20 20 26 70 43 78 2d 3e 70 42 74 29 3b 0a 20     &pCx->pBt);. 
18550 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
18560 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  OK ){.    rc = s
18570 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
18580 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20  Trans(pCx->pBt, 
18590 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  1);.  }.  if( rc
185a0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
185b0 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73     /* If a trans
185c0 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65  ient index is re
185d0 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69  quired, create i
185e0 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20  t by calling.   
185f0 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
18600 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69  CreateTable() wi
18610 74 68 20 74 68 65 20 42 54 52 45 45 5f 5a 45 52  th the BTREE_ZER
18620 4f 44 41 54 41 20 66 6c 61 67 20 62 65 66 6f 72  ODATA flag befor
18630 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67  e.    ** opening
18640 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
18650 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
18660 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
18670 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d  the.    ** autom
18680 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
18690 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
186a0 2d 70 61 67 65 20 31 20 28 61 6e 20 49 4e 54 4b  -page 1 (an INTK
186b0 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  EY table)..    *
186c0 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  /.    if( pOp->p
186d0 34 2e 70 4b 65 79 49 6e 66 6f 20 29 7b 0a 20 20  4.pKeyInfo ){.  
186e0 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20      int pgno;.  
186f0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
18700 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
18710 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20  NFO );.      rc 
18720 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
18730 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70  eateTable(pCx->p
18740 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45  Bt, &pgno, BTREE
18750 5f 5a 45 52 4f 44 41 54 41 29 3b 20 0a 20 20 20  _ZERODATA); .   
18760 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
18770 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
18780 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41  assert( pgno==MA
18790 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20  STER_ROOT+1 );. 
187a0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
187b0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
187c0 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31  Cx->pBt, pgno, 1
187d0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 20 20 28 4b 65 79 49 6e 66 6f 2a 29 70 4f 70     (KeyInfo*)pOp
18800 2d 3e 70 34 2e 7a 2c 20 70 43 78 2d 3e 70 43 75  ->p4.z, pCx->pCu
18810 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 70  rsor);.        p
18820 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
18830 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
18840 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b  .        pCx->pK
18850 65 79 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e  eyInfo->enc = EN
18860 43 28 70 2d 3e 64 62 29 3b 0a 20 20 20 20 20 20  C(p->db);.      
18870 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  }.      pCx->isT
18880 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  able = 0;.    }e
18890 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
188a0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
188b0 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53  or(pCx->pBt, MAS
188c0 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20  TER_ROOT, 1, 0, 
188d0 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  pCx->pCursor);. 
188e0 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
188f0 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  e = 1;.    }.  }
18900 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20  .  pCx->isIndex 
18910 3d 20 21 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b  = !pCx->isTable;
18920 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
18930 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75  Opcode: OpenPseu
18940 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  do P1 P2 P3 * *.
18950 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
18960 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69   cursor that poi
18970 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61  nts to a fake ta
18980 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
18990 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  s a single.** ro
189a0 77 20 6f 66 20 64 61 74 61 2e 20 20 41 6e 79 20  w of data.  Any 
189b0 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65  attempt to write
189c0 20 61 20 73 65 63 6f 6e 64 20 72 6f 77 20 6f 66   a second row of
189d0 20 64 61 74 61 20 63 61 75 73 65 73 20 74 68 65   data causes the
189e0 0a 2a 2a 20 66 69 72 73 74 20 72 6f 77 20 74 6f  .** first row to
189f0 20 62 65 20 64 65 6c 65 74 65 64 2e 20 20 41 6c   be deleted.  Al
18a00 6c 20 64 61 74 61 20 69 73 20 64 65 6c 65 74 65  l data is delete
18a10 64 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f  d when the curso
18a20 72 20 69 73 0a 2a 2a 20 63 6c 6f 73 65 64 2e 0a  r is.** closed..
18a30 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74  **.** A pseudo-t
18a40 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
18a50 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  this opcode is u
18a60 73 65 66 75 6c 20 66 6f 72 20 68 6f 6c 64 69 6e  seful for holdin
18a70 67 20 74 68 65 0a 2a 2a 20 4e 45 57 20 6f 72 20  g the.** NEW or 
18a80 4f 4c 44 20 74 61 62 6c 65 73 20 69 6e 20 61 20  OLD tables in a 
18a90 74 72 69 67 67 65 72 2e 20 20 41 6c 73 6f 20 75  trigger.  Also u
18aa0 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  sed to hold the 
18ab0 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
18ac0 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20  output from the 
18ad0 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74  sorter so that t
18ae0 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65  he row can be de
18af0 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a  composed into.**
18b00 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75   individual colu
18b10 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50  mns using the OP
18b20 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a  _Column opcode..
18b30 2a 2a 0a 2a 2a 20 57 68 65 6e 20 4f 50 5f 49 6e  **.** When OP_In
18b40 73 65 72 74 20 69 73 20 65 78 65 63 75 74 65 64  sert is executed
18b50 20 74 6f 20 69 6e 73 65 72 74 20 61 20 72 6f 77   to insert a row
18b60 20 69 6e 20 74 6f 20 74 68 65 20 70 73 65 75 64   in to the pseud
18b70 6f 20 74 61 62 6c 65 2c 0a 2a 2a 20 74 68 65 20  o table,.** the 
18b80 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
18b90 73 6f 72 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  sor may or may n
18ba0 6f 74 20 6d 61 6b 65 20 69 74 27 73 20 6f 77 6e  ot make it's own
18bb0 20 63 6f 70 79 20 6f 66 20 74 68 65 0a 2a 2a 20   copy of the.** 
18bc0 6f 72 69 67 69 6e 61 6c 20 72 6f 77 20 64 61 74  original row dat
18bd0 61 2e 20 49 66 20 50 32 20 69 73 20 30 2c 20 74  a. If P2 is 0, t
18be0 68 65 6e 20 74 68 65 20 70 73 65 75 64 6f 2d 74  hen the pseudo-t
18bf0 61 62 6c 65 20 77 69 6c 6c 20 63 6f 70 79 20 74  able will copy t
18c00 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72  he.** original r
18c10 6f 77 20 64 61 74 61 2e 20 4f 74 68 65 72 77 69  ow data. Otherwi
18c20 73 65 2c 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  se, a pointer to
18c30 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 65   the original me
18c40 6d 6f 72 79 20 63 65 6c 6c 0a 2a 2a 20 69 73 20  mory cell.** is 
18c50 73 74 6f 72 65 64 2e 20 49 6e 20 74 68 69 73 20  stored. In this 
18c60 63 61 73 65 2c 20 74 68 65 20 76 64 62 65 20 70  case, the vdbe p
18c70 72 6f 67 72 61 6d 20 6d 75 73 74 20 65 6e 73 75  rogram must ensu
18c80 72 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20  re that the .** 
18c90 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 63 6f 6e 74  memory cell cont
18ca0 61 69 6e 69 6e 67 20 74 68 65 20 72 6f 77 20 64  aining the row d
18cb0 61 74 61 20 69 73 20 6e 6f 74 20 6f 76 65 72 77  ata is not overw
18cc0 72 69 74 74 65 6e 20 75 6e 74 69 6c 20 74 68 65  ritten until the
18cd0 0a 2a 2a 20 70 73 65 75 64 6f 20 74 61 62 6c 65  .** pseudo table
18ce0 20 69 73 20 63 6c 6f 73 65 64 20 28 6f 72 20 61   is closed (or a
18cf0 20 6e 65 77 20 72 6f 77 20 69 73 20 69 6e 73 65   new row is inse
18d00 72 74 65 64 20 69 6e 74 6f 20 69 74 29 2e 0a 2a  rted into it)..*
18d10 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e  *.** P3 is the n
18d20 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
18d30 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74  in the records t
18d40 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  hat will be stor
18d50 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65  ed by.** the pse
18d60 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
18d70 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f  se OP_OpenPseudo
18d80 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 56  : {.  int i;.  V
18d90 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
18da0 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .  i = pOp->p1;.
18db0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29    assert( i>=0 )
18dc0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
18dd0 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c 20 70  teCursor(p, i, p
18de0 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a  Op->p3, -1, 0);.
18df0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
18e00 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
18e10 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
18e20 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62    pCx->pseudoTab
18e30 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 65  le = 1;.  pCx->e
18e40 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20  phemPseudoTable 
18e50 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20  = (u8)pOp->p2;. 
18e60 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
18e70 31 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65  1;.  pCx->isInde
18e80 78 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  x = 0;.  break;.
18e90 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
18ea0 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ose P1 * * * *.*
18eb0 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72  *.** Close a cur
18ec0 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  sor previously o
18ed0 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66  pened as P1.  If
18ee0 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75   P1 is not.** cu
18ef0 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68  rrently open, th
18f00 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
18f10 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
18f20 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20  se OP_Close: {. 
18f30 20 69 6e 74 20 69 3b 0a 20 20 69 20 3d 20 70 4f   int i;.  i = pO
18f40 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
18f50 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
18f60 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74  ursor );.  sqlit
18f70 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
18f80 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29  (p, p->apCsr[i])
18f90 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 69 5d 20  ;.  p->apCsr[i] 
18fa0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
18fb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
18fc0 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Ge P1 P2 P3 P4 *
18fd0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
18fe0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
18ff0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
19000 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
19010 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
19020 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
19030 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
19040 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72  the key.  If cur
19050 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
19060 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
19070 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
19080 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
19090 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
190a0 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
190b0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
190c0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
190d0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
190e0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
190f0 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
19100 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
19110 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
19120 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
19130 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
19140 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
19150 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
19160 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61   .** greater tha
19170 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
19180 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
19190 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
191a0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
191b0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
191c0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
191d0 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65  inct, SeekLt, Se
191e0 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
191f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
19200 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  t P1 P2 P3 P4 *.
19210 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
19220 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
19230 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
19240 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
19250 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
19260 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
19270 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
19280 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
19290 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
192a0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
192b0 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
192c0 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
192d0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
192e0 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
192f0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
19300 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
19310 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
19320 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
19330 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
19340 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
19350 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
19360 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65  ater than the ke
19370 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
19380 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
19390 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a   greater than .*
193a0 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
193b0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
193c0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
193d0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
193e0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
193f0 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74  Distinct, SeekLt
19400 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
19410 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
19420 65 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50  eekLt P1 P2 P3 P
19430 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  4 * .**.** If cu
19440 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
19450 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
19460 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
19470 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
19480 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
19490 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
194a0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
194b0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
194c0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
194d0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
194e0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
194f0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
19500 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
19510 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
19520 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
19530 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
19540 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
19550 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
19560 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
19570 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
19580 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
19590 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
195a0 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
195b0 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20  s less than .** 
195c0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
195d0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
195e0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
195f0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
19600 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
19610 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20  stinct, SeekGt, 
19620 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
19630 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
19640 6b 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20  kLe P1 P2 P3 P4 
19650 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  *.**.** If curso
19660 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
19670 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
19680 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
19690 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
196a0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
196b0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
196c0 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
196d0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
196e0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
196f0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
19700 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
19710 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
19720 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
19730 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
19740 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
19750 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
19760 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
19770 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
19780 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
19790 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
197a0 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
197b0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
197c0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
197d0 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
197e0 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
197f0 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
19800 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
19810 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
19820 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
19830 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
19840 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
19850 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
19860 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  Lt.*/.case OP_Se
19870 65 6b 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekLt:         /*
19880 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
19890 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20  se OP_SeekLe:   
198a0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
198b0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  n3 */.case OP_Se
198c0 65 6b 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a  ekGe:         /*
198d0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
198e0 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20  se OP_SeekGt: { 
198f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
19900 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 0a 20  n3 */.  int i;. 
19910 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
19920 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  oc;.  VdbeCursor
19930 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64   *pC;.  Unpacked
19940 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20  Record r;.  int 
19950 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b  nField;.  i64 iK
19960 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ey;      /* The 
19970 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20  rowid we are to 
19980 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 69 20  seek to */..  i 
19990 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
199a0 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
199b0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
199c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
199d0 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
199e0 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72  pCsr[i];.  asser
199f0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
19a00 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
19a10 20 29 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70   ){.    oc = pOp
19a20 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43  ->opcode;.    pC
19a30 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
19a40 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62     if( pC->isTab
19a50 6c 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54  le ){.      /* T
19a60 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69  he input value i
19a70 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66  n P3 might be of
19a80 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67   any type: integ
19a90 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67  er, real, string
19aa0 2c 0a 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c  ,.      ** blob,
19ab0 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69   or NULL.  But i
19ac0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e  t needs to be an
19ad0 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20   integer before 
19ae0 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20  we can do.      
19af0 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20  ** the seek, so 
19b00 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20  covert it. */.  
19b10 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
19b20 41 66 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a  Affinity(pIn3);.
19b30 20 20 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c        iKey = sql
19b40 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
19b50 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 70 43  (pIn3);.      pC
19b60 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
19b70 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66   0;..      /* If
19b80 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f   the P3 value co
19b90 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65  uld not be conve
19ba0 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
19bb0 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20  eger without.   
19bc0 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e     ** loss of in
19bd0 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20  formation, then 
19be0 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69  special processi
19bf0 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e  ng is required..
19c00 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  . */.      if( (
19c10 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
19c20 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
19c30 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
19c40 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
19c50 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
19c60 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
19c70 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  alue cannot be c
19c80 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
19c90 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62  y kind of a numb
19ca0 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a  er,.          **
19cb0 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69   then the seek i
19cc0 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20  s not possible, 
19cd0 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  so jump to P2 */
19ce0 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20  .          pc = 
19cf0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
19d00 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
19d10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
19d20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74  /* If we reach t
19d30 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 6e 20  his point, then 
19d40 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73  the P3 value mus
19d50 74 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 0a  t be a floating.
19d60 20 20 20 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74          ** point
19d70 20 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20 20 20 20   number. */.    
19d80 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
19d90 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
19da0 65 61 6c 29 21 3d 30 20 29 3b 0a 0a 20 20 20 20  eal)!=0 );..    
19db0 20 20 20 20 69 66 28 20 69 4b 65 79 3d 3d 53 4d      if( iKey==SM
19dc0 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26 26 20  ALLEST_INT64 && 
19dd0 28 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65  (pIn3->r<(double
19de0 29 69 4b 65 79 20 7c 7c 20 70 49 6e 33 2d 3e 72  )iKey || pIn3->r
19df0 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  >0) ){.         
19e00 20 2f 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65   /* The P3 value
19e10 20 69 73 20 74 6f 20 6c 61 72 67 65 20 69 6e 20   is to large in 
19e20 6d 61 67 6e 69 74 75 64 65 20 74 6f 20 62 65 20  magnitude to be 
19e30 65 78 70 72 65 73 73 65 64 20 61 73 20 61 6e 0a  expressed as an.
19e40 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 74            ** int
19e50 65 67 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20  eger. */.       
19e60 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20     res = 1;.    
19e70 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
19e80 72 3c 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  r<0 ){.         
19e90 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65     if( oc==OP_Se
19ea0 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGt || oc==OP_S
19eb0 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20  eekGe ){.       
19ec0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
19ed0 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
19ee0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
19ef0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
19f00 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
19f10 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
19f20 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
19f30 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
19f40 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
19f50 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3d 3d          if( oc==
19f60 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
19f70 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a 20 20  =OP_SeekLe ){.  
19f80 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
19f90 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
19fa0 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
19fb0 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20  res);.          
19fc0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
19fd0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
19fe0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
19ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
1a000 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1a010 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
1a020 20 20 20 20 20 20 20 20 20 20 20 20 70 63 20 3d              pc =
1a030 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1a040 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a050 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1a060 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d     }else if( oc=
1a070 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63  =OP_SeekLt || oc
1a080 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20  ==OP_SeekGe ){. 
1a090 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1a0a0 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75  the ceiling() fu
1a0b0 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72  nction to conver
1a0c0 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20  t real->int */. 
1a0d0 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1a0e0 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69  3->r > (double)i
1a0f0 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20  Key ) iKey++;.  
1a100 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1a110 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
1a120 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69  e floor() functi
1a130 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65  on to convert re
1a140 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20  al->int */.     
1a150 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d       assert( oc=
1a160 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63  =OP_SeekLe || oc
1a170 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1a180 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1a190 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69  3->r < (double)i
1a1a0 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20  Key ) iKey--;.  
1a1b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
1a1c0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1a1d0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1a1e0 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1a1f0 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79  or, 0, (u64)iKey
1a200 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1a210 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1a220 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
1a230 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a240 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1a250 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30        if( res==0
1a260 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   ){.        pC->
1a270 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31  rowidIsValid = 1
1a280 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61  ;.        pC->la
1a290 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a  stRowid = iKey;.
1a2a0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
1a2b0 65 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20  e{.      nField 
1a2c0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
1a2d0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1a2e0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1a2f0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1a300 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1a310 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1a320 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1a330 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20       r.nField = 
1a340 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 20 20 20  (u16)nField;.   
1a350 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65     if( oc==OP_Se
1a360 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGt || oc==OP_S
1a370 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 20  eekLe ){.       
1a380 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
1a390 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a 20 20 20  KED_INCRKEY;.   
1a3a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1a3b0 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20    r.flags = 0;. 
1a3c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 2e 61       }.      r.a
1a3d0 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Mem = &p->aMem[p
1a3e0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 72  Op->p3];.      r
1a3f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1a400 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1a410 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20  C->pCursor, &r, 
1a420 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
1a430 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1a440 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1a450 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a460 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
1a470 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  .      pC->rowid
1a480 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1a490 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72   }.    pC->defer
1a4a0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
1a4b0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
1a4c0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1a4d0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1a4e0 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33  TEST.    sqlite3
1a4f0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
1a500 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
1a510 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c  oc==OP_SeekGe ||
1a520 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29   oc==OP_SeekGt )
1a530 7b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3c  {.      if( res<
1a540 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
1a550 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29 20 29  oc==OP_SeekGt) )
1a560 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
1a570 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
1a580 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1a590 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  s);.        if( 
1a5a0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1a5b0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a5c0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1a5d0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1a5e0 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c  d = 0;.      }el
1a5f0 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20  se{.        res 
1a600 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
1a610 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
1a620 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1a630 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLt || oc==OP_Se
1a640 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 69 66  ekLe );.      if
1a650 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d  ( res>0 || (res=
1a660 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1a670 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20  kLt) ){.        
1a680 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1a690 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43  ePrevious(pC->pC
1a6a0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1a6b0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1a6c0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1a6d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1a6e0 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72  r;.        pC->r
1a6f0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1a700 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
1a710 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67        /* res mig
1a720 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62  ht be negative b
1a730 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
1a740 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63   is empty.  Chec
1a750 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20  k to.        ** 
1a760 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74  see if this is t
1a770 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20  he case..       
1a780 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20   */.        res 
1a790 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f  = sqlite3BtreeEo
1a7a0 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  f(pC->pCursor);.
1a7b0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1a7c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1a7d0 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72  2>0 );.    if( r
1a7e0 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  es ){.      pc =
1a7f0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1a800 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20    }.  }else if( 
1a810 21 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  !pC->pseudoTable
1a820 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
1a830 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 74 74  happens when att
1a840 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20  empting to open 
1a850 74 68 65 20 73 71 6c 69 74 65 33 5f 6d 61 73 74  the sqlite3_mast
1a860 65 72 20 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20  er table.    ** 
1a870 66 6f 72 20 72 65 61 64 20 61 63 63 65 73 73 20  for read access 
1a880 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45  returns SQLITE_E
1a890 4d 50 54 59 2e 20 49 6e 20 74 68 69 73 20 63 61  MPTY. In this ca
1a8a0 73 65 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a  se always.    **
1a8b0 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 28   take the jump (
1a8c0 73 69 6e 63 65 20 74 68 65 72 65 20 61 72 65 20  since there are 
1a8d0 6e 6f 20 72 65 63 6f 72 64 73 20 69 6e 20 74 68  no records in th
1a8e0 65 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  e table)..    */
1a8f0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
1a900 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
1a910 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1a920 3a 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a  : Seek P1 P2 * *
1a930 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61   *.**.** P1 is a
1a940 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72  n open table cur
1a950 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61 20  sor and P2 is a 
1a960 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20  rowid integer.  
1a970 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50  Arrange.** for P
1a980 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61  1 to move so tha
1a990 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1a9a0 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62  he rowid given b
1a9b0 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  y P2..**.** This
1a9c0 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64   is actually a d
1a9d0 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e  eferred seek.  N
1a9e0 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20  othing actually 
1a9f0 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a  happens until.**
1aa00 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75   the cursor is u
1aa10 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65  sed to read a re
1aa20 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c  cord.  That way,
1aa30 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20   if no reads.** 
1aa40 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65  occur, no unnece
1aa50 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e  ssary I/O happen
1aa60 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  s..*/.case OP_Se
1aa70 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20  ek: {    /* in2 
1aa80 2a 2f 0a 20 20 69 6e 74 20 69 3b 0a 20 20 56 64  */.  int i;.  Vd
1aa90 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
1aaa0 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
1aab0 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
1aac0 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
1aad0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1aae0 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
1aaf0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  !=0 );.  if( pC-
1ab00 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20  >pCursor!=0 ){. 
1ab10 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
1ab20 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 43  sTable );.    pC
1ab30 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
1ab40 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
1ab50 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62  get = sqlite3Vdb
1ab60 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b  eIntValue(pIn2);
1ab70 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
1ab80 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70  Valid = 0;.    p
1ab90 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1aba0 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  o = 1;.  }.  bre
1abb0 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63  ak;.}.  ../* Opc
1abc0 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32  ode: Found P1 P2
1abd0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   P3 * *.**.** Re
1abe0 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
1abf0 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1ac00 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
1ac10 2e 20 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65  .  P1 is an inde
1ac20 78 2e 0a 2a 2a 20 49 66 20 61 6e 20 65 6e 74 72  x..** If an entr
1ac30 79 20 74 68 61 74 20 6d 61 74 63 68 65 73 20 74  y that matches t
1ac40 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1ac50 73 74 65 72 20 70 33 20 65 78 69 73 74 73 20 69  ster p3 exists i
1ac60 6e 20 50 31 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  n P1 then.** jum
1ac70 70 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65  p to P2.  If the
1ac80 20 50 33 20 76 61 6c 75 65 20 64 6f 65 73 20 6e   P3 value does n
1ac90 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 65 6e 74  ot match any ent
1aca0 72 79 20 69 6e 20 50 31 0a 2a 2a 20 74 68 65 6e  ry in P1.** then
1acb0 20 66 61 6c 6c 20 74 68 72 75 2e 20 20 54 68 65   fall thru.  The
1acc0 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 6c 65   P1 cursor is le
1acd0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1ace0 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
1acf0 79 0a 2a 2a 20 69 66 20 69 74 20 65 78 69 73 74  y.** if it exist
1ad00 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  s..**.** This in
1ad10 73 74 72 75 63 74 69 6f 6e 20 69 73 20 75 73 65  struction is use
1ad20 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
1ad30 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 77  he IN operator w
1ad40 68 65 72 65 20 74 68 65 0a 2a 2a 20 6c 65 66 74  here the.** left
1ad50 2d 68 61 6e 64 20 73 69 64 65 20 69 73 20 61 20  -hand side is a 
1ad60 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1ad70 2e 20 20 50 31 20 6d 61 79 20 62 65 20 61 20 74  .  P1 may be a t
1ad80 72 75 65 20 69 6e 64 65 78 2c 20 6f 72 20 69 74  rue index, or it
1ad90 0a 2a 2a 20 6d 61 79 20 62 65 20 61 20 74 65 6d  .** may be a tem
1ada0 70 6f 72 61 72 79 20 69 6e 64 65 78 20 74 68 61  porary index tha
1adb0 74 20 68 6f 6c 64 73 20 74 68 65 20 72 65 73 75  t holds the resu
1adc0 6c 74 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43  lts of the SELEC
1add0 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20  T.** statement. 
1ade0 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69    This instructi
1adf0 6f 6e 20 69 73 20 61 6c 73 6f 20 75 73 65 64 20  on is also used 
1ae00 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
1ae10 0a 2a 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79  .** DISTINCT key
1ae20 77 6f 72 64 20 69 6e 20 53 45 4c 45 43 54 20 73  word in SELECT s
1ae30 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
1ae40 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
1ae50 6e 20 63 68 65 63 6b 73 20 69 66 20 69 6e 64 65  n checks if inde
1ae60 78 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61 20  x P1 contains a 
1ae70 72 65 63 6f 72 64 20 66 6f 72 20 77 68 69 63 68  record for which
1ae80 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 4e   .** the first N
1ae90 20 73 65 72 69 61 6c 69 7a 65 64 20 76 61 6c 75   serialized valu
1aea0 65 73 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68  es exactly match
1aeb0 20 74 68 65 20 4e 20 73 65 72 69 61 6c 69 7a 65   the N serialize
1aec0 64 20 76 61 6c 75 65 73 0a 2a 2a 20 69 6e 20 74  d values.** in t
1aed0 68 65 20 72 65 63 6f 72 64 20 69 6e 20 72 65 67  he record in reg
1aee0 69 73 74 65 72 20 50 33 2c 20 77 68 65 72 65 20  ister P3, where 
1aef0 4e 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  N is the total n
1af00 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20  umber of values 
1af10 69 6e 0a 2a 2a 20 74 68 65 20 50 33 20 72 65 63  in.** the P3 rec
1af20 6f 72 64 20 28 74 68 65 20 50 33 20 72 65 63 6f  ord (the P3 reco
1af30 72 64 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  rd is a prefix o
1af40 66 20 74 68 65 20 50 31 20 72 65 63 6f 72 64 29  f the P1 record)
1af50 2e 20 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  . .**.** See als
1af60 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55  o: NotFound, IsU
1af70 6e 69 71 75 65 2c 20 4e 6f 74 45 78 69 73 74 73  nique, NotExists
1af80 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
1af90 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  otFound P1 P2 P3
1afa0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73   * *.**.** Regis
1afb0 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1afc0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1afd0 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1afe0 50 31 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 64 65  P1 is.** an inde
1aff0 78 2e 20 20 49 66 20 6e 6f 20 65 6e 74 72 79 20  x.  If no entry 
1b000 65 78 69 73 74 73 20 69 6e 20 50 31 20 74 68 61  exists in P1 tha
1b010 74 20 6d 61 74 63 68 65 73 20 74 68 65 20 62 6c  t matches the bl
1b020 6f 62 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20  ob then jump.** 
1b030 74 6f 20 50 32 2e 20 20 49 66 20 61 6e 20 65 6e  to P2.  If an en
1b040 74 72 79 20 64 6f 65 73 20 65 78 69 73 74 69 6e  try does existin
1b050 67 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  g, fall through.
1b060 20 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20    The cursor is 
1b070 6c 65 66 74 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67  left.** pointing
1b080 20 74 6f 20 74 68 65 20 65 6e 74 72 79 20 74 68   to the entry th
1b090 61 74 20 6d 61 74 63 68 65 73 2e 0a 2a 2a 0a 2a  at matches..**.*
1b0a0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1b0b0 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 49 73  d, NotExists, Is
1b0c0 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f  Unique.*/.case O
1b0d0 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20  P_NotFound:     
1b0e0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1b0f0 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a  /.case OP_Found:
1b100 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1b110 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
1b120 69 3b 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79  i;.  int already
1b130 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65 43 75  Exists;.  VdbeCu
1b140 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
1b150 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
1b160 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a  ecord *pIdxKey;.
1b170 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b    char aTempRec[
1b180 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e  ROUND8(sizeof(Un
1b190 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b  packedRecord)) +
1b1a0 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33 20 2b   sizeof(Mem)*3 +
1b1b0 20 37 5d 3b 0a 0a 20 20 69 20 3d 20 70 4f 70 2d   7];..  i = pOp-
1b1c0 3e 70 31 3b 0a 20 20 61 6c 72 65 61 64 79 45 78  >p1;.  alreadyEx
1b1d0 69 73 74 73 20 3d 20 30 3b 0a 20 20 61 73 73 65  ists = 0;.  asse
1b1e0 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d  rt( i>=0 && i<p-
1b1f0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1b200 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69  sert( p->apCsr[i
1b210 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  ]!=0 );.  if( (p
1b220 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29  C = p->apCsr[i])
1b230 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a  ->pCursor!=0 ){.
1b240 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1b250 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
1b260 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
1b270 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
1b280 62 20 29 3b 0a 20 20 20 20 70 49 64 78 4b 65 79  b );.    pIdxKey
1b290 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
1b2a0 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
1b2b0 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
1b2c0 2c 20 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20 20  , pIn3->z,.     
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2f0 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f   aTempRec, sizeo
1b300 66 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20 20  f(aTempRec));.  
1b310 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30    if( pIdxKey==0
1b320 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
1b330 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
1b340 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1b350 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20  ==OP_Found ){.  
1b360 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c 61      pIdxKey->fla
1b370 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f 50  gs |= UNPACKED_P
1b380 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20  REFIX_MATCH;.   
1b390 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69   }.    rc = sqli
1b3a0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1b3b0 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1b3c0 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20  or, pIdxKey, 0, 
1b3d0 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 73 71  0, &res);.    sq
1b3e0 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 55  lite3VdbeDeleteU
1b3f0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 49  npackedRecord(pI
1b400 64 78 4b 65 79 29 3b 0a 20 20 20 20 69 66 28 20  dxKey);.    if( 
1b410 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1b420 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
1b430 20 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79 45    }.    alreadyE
1b440 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29  xists = (res==0)
1b450 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1b460 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1b470 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1b480 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1b490 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1b4a0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
1b4b0 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72 65   ){.    if( alre
1b4c0 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
1b4d0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1b4e0 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 21  }else{.    if( !
1b4f0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
1b500 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1b510 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1b520 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 55  ../* Opcode: IsU
1b530 6e 69 71 75 65 20 50 31 20 50 32 20 50 33 20 50  nique P1 P2 P3 P
1b540 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  4 *.**.** Cursor
1b550 20 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61   P1 is open on a
1b560 6e 20 69 6e 64 65 78 2e 20 20 53 6f 20 69 74 20  n index.  So it 
1b570 68 61 73 20 6e 6f 20 64 61 74 61 20 61 6e 64 20  has no data and 
1b580 69 74 73 20 6b 65 79 20 63 6f 6e 73 69 73 74 73  its key consists
1b590 20 0a 2a 2a 20 6f 66 20 61 20 72 65 63 6f 72 64   .** of a record
1b5a0 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 4f 50   generated by OP
1b5b0 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77 68 65 72  _MakeRecord wher
1b5c0 65 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  e the last field
1b5d0 20 69 73 20 74 68 65 20 0a 2a 2a 20 72 6f 77 69   is the .** rowi
1b5e0 64 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74  d of the entry t
1b5f0 68 61 74 20 74 68 65 20 69 6e 64 65 78 20 72 65  hat the index re
1b600 66 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54  fers to..**.** T
1b610 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 63  he P3 register c
1b620 6f 6e 74 61 69 6e 73 20 61 6e 20 69 6e 74 65 67  ontains an integ
1b630 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
1b640 2e 20 43 61 6c 6c 20 74 68 69 73 20 72 65 63 6f  . Call this reco
1b650 72 64 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 52 2e  rd .** number R.
1b660 20 52 65 67 69 73 74 65 72 20 50 34 20 69 73 20   Register P4 is 
1b670 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 20 73  the first in a s
1b680 65 74 20 6f 66 20 4e 20 63 6f 6e 74 69 67 75 6f  et of N contiguo
1b690 75 73 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  us registers.** 
1b6a0 74 68 61 74 20 6d 61 6b 65 20 75 70 20 61 6e 20  that make up an 
1b6b0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1b6c0 65 79 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  ey that can be u
1b6d0 73 65 64 20 77 69 74 68 20 63 75 72 73 6f 72 20  sed with cursor 
1b6e0 50 31 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  P1..** The value
1b6f0 20 6f 66 20 4e 20 63 61 6e 20 62 65 20 69 6e 66   of N can be inf
1b700 65 72 72 65 64 20 66 72 6f 6d 20 74 68 65 20 63  erred from the c
1b710 75 72 73 6f 72 2e 20 4e 20 69 6e 63 6c 75 64 65  ursor. N include
1b720 73 20 74 68 65 20 72 6f 77 69 64 0a 2a 2a 20 76  s the rowid.** v
1b730 61 6c 75 65 20 61 70 70 65 6e 64 65 64 20 74 6f  alue appended to
1b740 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
1b750 69 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 54 68  index record. Th
1b760 69 73 20 72 6f 77 69 64 20 76 61 6c 75 65 20 6d  is rowid value m
1b770 61 79 0a 2a 2a 20 6f 72 20 6d 61 79 20 6e 6f 74  ay.** or may not
1b780 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20   be the same as 
1b790 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 79 20  R..**.** If any 
1b7a0 6f 66 20 74 68 65 20 4e 20 72 65 67 69 73 74 65  of the N registe
1b7b0 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  rs beginning wit
1b7c0 68 20 72 65 67 69 73 74 65 72 20 50 34 20 63 6f  h register P4 co
1b7d0 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 0a 2a 2a  ntains a NULL.**
1b7e0 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d   value, jump imm
1b7f0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
1b800 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c  **.** Otherwise,
1b810 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1b820 6e 20 63 68 65 63 6b 73 20 69 66 20 63 75 72 73  n checks if curs
1b830 6f 72 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 61  or P1 contains a
1b840 6e 20 65 6e 74 72 79 0a 2a 2a 20 77 68 65 72 65  n entry.** where
1b850 20 74 68 65 20 66 69 72 73 74 20 28 4e 2d 31 29   the first (N-1)
1b860 20 66 69 65 6c 64 73 20 6d 61 74 63 68 20 62 75   fields match bu
1b870 74 20 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75  t the rowid valu
1b880 65 20 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20  e at the end.** 
1b890 6f 66 20 74 68 65 20 69 6e 64 65 78 20 65 6e 74  of the index ent
1b8a0 72 79 20 69 73 20 6e 6f 74 20 52 2e 20 49 66 20  ry is not R. If 
1b8b0 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
1b8c0 20 65 6e 74 72 79 2c 20 63 6f 6e 74 72 6f 6c 20   entry, control 
1b8d0 6a 75 6d 70 73 0a 2a 2a 20 74 6f 20 69 6e 73 74  jumps.** to inst
1b8e0 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
1b8f0 72 77 69 73 65 2c 20 74 68 65 20 72 6f 77 69 64  rwise, the rowid
1b900 20 6f 66 20 74 68 65 20 63 6f 6e 66 6c 69 63 74   of the conflict
1b910 69 6e 67 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74  ing index.** ent
1b920 72 79 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20  ry is copied to 
1b930 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20  register P3 and 
1b940 63 6f 6e 74 72 6f 6c 20 66 61 6c 6c 73 20 74 68  control falls th
1b950 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1b960 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  t.** instruction
1b970 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1b980 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45  : NotFound, NotE
1b990 78 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a  xists, Found.*/.
1b9a0 63 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65  case OP_IsUnique
1b9b0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
1b9c0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 75 31 36  mp, in3 */.  u16
1b9d0 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   ii;.  VdbeCurso
1b9e0 72 20 2a 70 43 78 3b 0a 20 20 42 74 43 75 72 73  r *pCx;.  BtCurs
1b9f0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 31 36  or *pCrsr;.  u16
1ba00 20 6e 46 69 65 6c 64 3b 0a 20 20 4d 65 6d 20 2a   nField;.  Mem *
1ba10 61 4d 65 6d 3b 0a 20 20 55 6e 70 61 63 6b 65 64  aMem;.  Unpacked
1ba20 52 65 63 6f 72 64 20 72 3b 20 20 20 20 20 20 20  Record r;       
1ba30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 2d             /* B-
1ba40 54 72 65 65 20 69 6e 64 65 78 20 73 65 61 72 63  Tree index searc
1ba50 68 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 52  h key */.  i64 R
1ba60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ba80 20 52 6f 77 69 64 20 73 74 6f 72 65 64 20 69 6e   Rowid stored in
1ba90 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a   register P3 */.
1baa0 0a 20 20 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d  .  aMem = &p->aM
1bab0 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20  em[pOp->p4.i];. 
1bac0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
1bad0 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 70 61  the values of pa
1bae0 72 61 6d 65 74 65 72 73 20 50 31 20 61 6e 64 20  rameters P1 and 
1baf0 50 34 20 61 72 65 20 69 6e 20 72 61 6e 67 65 2e  P4 are in range.
1bb00 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
1bb10 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1bb20 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
1bb30 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20   pOp->p4.i>0 && 
1bb40 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d  pOp->p4.i<=p->nM
1bb50 65 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  em );.  assert( 
1bb60 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1bb70 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1bb80 20 29 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74   );..  /* Find t
1bb90 68 65 20 69 6e 64 65 78 20 63 75 72 73 6f 72 2e  he index cursor.
1bba0 20 2a 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61   */.  pCx = p->a
1bbb0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1bbc0 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65   assert( pCx->de
1bbd0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
1bbe0 29 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65  );.  pCx->seekRe
1bbf0 73 75 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d  sult = 0;.  pCx-
1bc00 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1bc10 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
1bc20 72 73 72 20 3d 20 70 43 78 2d 3e 70 43 75 72 73  rsr = pCx->pCurs
1bc30 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79  or;..  /* If any
1bc40 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 61   of the values a
1bc50 72 65 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68  re NULL, take th
1bc60 65 20 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69  e jump. */.  nFi
1bc70 65 6c 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49  eld = pCx->pKeyI
1bc80 6e 66 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66  nfo->nField;.  f
1bc90 6f 72 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65  or(ii=0; ii<nFie
1bca0 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69  ld; ii++){.    i
1bcb0 66 28 20 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67  f( aMem[ii].flag
1bcc0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
1bcd0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1bce0 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 70 43  p2 - 1;.      pC
1bcf0 72 73 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 62  rsr = 0;.      b
1bd00 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
1bd10 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b    assert( (aMem[
1bd20 6e 46 69 65 6c 64 5d 2e 66 6c 61 67 73 20 26 20  nField].flags & 
1bd30 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a  MEM_Null)==0 );.
1bd40 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20  .  if( pCrsr!=0 
1bd50 29 7b 0a 20 20 20 20 2f 2a 20 50 6f 70 75 6c 61  ){.    /* Popula
1bd60 74 65 20 74 68 65 20 69 6e 64 65 78 20 73 65 61  te the index sea
1bd70 72 63 68 20 6b 65 79 2e 20 2a 2f 0a 20 20 20 20  rch key. */.    
1bd80 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 78  r.pKeyInfo = pCx
1bd90 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
1bda0 72 2e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c  r.nField = nFiel
1bdb0 64 20 2b 20 31 3b 0a 20 20 20 20 72 2e 66 6c 61  d + 1;.    r.fla
1bdc0 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  gs = UNPACKED_PR
1bdd0 45 46 49 58 5f 53 45 41 52 43 48 3b 0a 20 20 20  EFIX_SEARCH;.   
1bde0 20 72 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d 3b 0a   r.aMem = aMem;.
1bdf0 0a 20 20 20 20 2f 2a 20 45 78 74 72 61 63 74 20  .    /* Extract 
1be00 74 68 65 20 76 61 6c 75 65 20 6f 66 20 52 20 66  the value of R f
1be10 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33 2e  rom register P3.
1be20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
1be30 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1be40 28 70 49 6e 33 29 3b 0a 20 20 20 20 52 20 3d 20  (pIn3);.    R = 
1be50 70 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20  pIn3->u.i;..    
1be60 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 42 2d  /* Search the B-
1be70 54 72 65 65 20 69 6e 64 65 78 2e 20 49 66 20 6e  Tree index. If n
1be80 6f 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65  o conflicting re
1be90 63 6f 72 64 20 69 73 20 66 6f 75 6e 64 2c 20 6a  cord is found, j
1bea0 75 6d 70 0a 20 20 20 20 2a 2a 20 74 6f 20 50 32  ump.    ** to P2
1beb0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 63 6f 70  . Otherwise, cop
1bec0 79 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  y the rowid of t
1bed0 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72  he conflicting r
1bee0 65 63 6f 72 64 20 74 6f 0a 20 20 20 20 2a 2a 20  ecord to.    ** 
1bef0 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20  register P3 and 
1bf00 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
1bf10 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1bf20 74 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20 72 63  tion.  */.    rc
1bf30 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1bf40 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1bf50 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
1bf60 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 29  pCx->seekResult)
1bf70 3b 0a 20 20 20 20 69 66 28 20 28 72 2e 66 6c 61  ;.    if( (r.fla
1bf80 67 73 20 26 20 55 4e 50 41 43 4b 45 44 5f 50 52  gs & UNPACKED_PR
1bf90 45 46 49 58 5f 53 45 41 52 43 48 29 20 7c 7c 20  EFIX_SEARCH) || 
1bfa0 72 2e 72 6f 77 69 64 3d 3d 52 20 29 7b 0a 20 20  r.rowid==R ){.  
1bfb0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1bfc0 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   - 1;.    }else{
1bfd0 0a 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69  .      pIn3->u.i
1bfe0 20 3d 20 72 2e 72 6f 77 69 64 3b 0a 20 20 20 20   = r.rowid;.    
1bff0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
1c000 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
1c010 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20  Exists P1 P2 P3 
1c020 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20 74 68  * *.**.** Use th
1c030 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
1c040 69 73 74 65 72 20 50 33 20 61 73 20 61 20 69 6e  ister P3 as a in
1c050 74 65 67 65 72 20 6b 65 79 2e 20 20 49 66 20 61  teger key.  If a
1c060 20 72 65 63 6f 72 64 20 0a 2a 2a 20 77 69 74 68   record .** with
1c070 20 74 68 61 74 20 6b 65 79 20 64 6f 65 73 20 6e   that key does n
1c080 6f 74 20 65 78 69 73 74 20 69 6e 20 74 61 62 6c  ot exist in tabl
1c090 65 20 6f 66 20 50 31 2c 20 74 68 65 6e 20 6a 75  e of P1, then ju
1c0a0 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66  mp to P2. .** If
1c0b0 20 74 68 65 20 72 65 63 6f 72 64 20 64 6f 65 73   the record does
1c0c0 20 65 78 69 73 74 2c 20 74 68 65 6e 20 66 61 6c   exist, then fal
1c0d0 6c 20 74 68 72 75 2e 20 20 54 68 65 20 63 75 72  l thru.  The cur
1c0e0 73 6f 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20  sor is left .** 
1c0f0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
1c100 72 65 63 6f 72 64 20 69 66 20 69 74 20 65 78 69  record if it exi
1c110 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  sts..**.** The d
1c120 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
1c130 6e 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  n this operation
1c140 20 61 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73   and NotFound is
1c150 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70   that this.** op
1c160 65 72 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20  eration assumes 
1c170 74 68 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e  the key is an in
1c180 74 65 67 65 72 20 61 6e 64 20 74 68 61 74 20 50  teger and that P
1c190 31 20 69 73 20 61 20 74 61 62 6c 65 20 77 68 65  1 is a table whe
1c1a0 72 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64  reas.** NotFound
1c1b0 20 61 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20   assumes key is 
1c1c0 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
1c1d0 65 64 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f  ed from MakeReco
1c1e0 72 64 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20  rd and.** P1 is 
1c1f0 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  an index..**.** 
1c200 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1c210 20 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69   NotFound, IsUni
1c220 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  que.*/.case OP_N
1c230 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20  otExists: {     
1c240 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1c250 2a 2f 0a 20 20 69 6e 74 20 69 3b 0a 20 20 56 64  */.  int i;.  Vd
1c260 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1c270 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
1c280 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
1c290 34 20 69 4b 65 79 3b 0a 0a 20 20 69 20 3d 20 70  4 iKey;..  i = p
1c2a0 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
1c2b0 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1c2c0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1c2d0 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21  rt( p->apCsr[i]!
1c2e0 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72  =0 );.  if( (pCr
1c2f0 73 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70  sr = (pC = p->ap
1c300 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72  Csr[i])->pCursor
1c310 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 65 73 20  )!=0 ){.    res 
1c320 3d 20 30 3b 0a 20 20 20 20 61 73 73 65 72 74 28  = 0;.    assert(
1c330 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
1c340 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73  EM_Int );.    as
1c350 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69  sert( p->apCsr[i
1c360 5d 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  ]->isTable );.  
1c370 20 20 69 4b 65 79 20 3d 20 69 6e 74 54 6f 4b 65    iKey = intToKe
1c380 79 28 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  y(pIn3->u.i);.  
1c390 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1c3a0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1c3b0 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79  d(pCrsr, 0, iKey
1c3c0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1c3d0 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  pC->lastRowid = 
1c3e0 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 70  pIn3->u.i;.    p
1c3f0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1c400 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20  = res==0 ?1:0;. 
1c410 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
1c420 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1c430 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1c440 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 64  STALE;.    pC->d
1c450 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1c460 30 3b 0a 20 20 20 20 69 66 28 20 72 65 73 21 3d  0;.    if( res!=
1c470 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  0 ){.      pc = 
1c480 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1c490 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72     assert( pC->r
1c4a0 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29  owidIsValid==0 )
1c4b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1c4c0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
1c4d0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 21 70  ;.  }else if( !p
1c4e0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29  C->pseudoTable )
1c4f0 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
1c500 70 70 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74  ppens when an at
1c510 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20  tempt to open a 
1c520 72 65 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74  read cursor on t
1c530 68 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  he .    ** sqlit
1c540 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72  e_master table r
1c550 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d  eturns SQLITE_EM
1c560 50 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  PTY..    */.    
1c570 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1c580 62 6c 65 20 29 3b 0a 20 20 20 20 70 63 20 3d 20  ble );.    pc = 
1c590 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1c5a0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77   assert( pC->row
1c5b0 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a  idIsValid==0 );.
1c5c0 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75      pC->seekResu
1c5d0 6c 74 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72  lt = 0;.  }.  br
1c5e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c5f0 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50  e: Sequence P1 P
1c600 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69  2 * * *.**.** Fi
1c610 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69  nd the next avai
1c620 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e  lable sequence n
1c630 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72  umber for cursor
1c640 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68   P1..** Write th
1c650 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
1c660 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  r into register 
1c670 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65  P2..** The seque
1c680 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68  nce number on th
1c690 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72  e cursor is incr
1c6a0 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68  emented after th
1c6b0 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  is.** instructio
1c6c0 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n.  .*/.case OP_
1c6d0 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20  Sequence: {     
1c6e0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
1c6f0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
1c700 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
1c710 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
1c720 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
1c730 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
1c740 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 70  Csr[i]!=0 );.  p
1c750 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70  Out->u.i = p->ap
1c760 43 73 72 5b 69 5d 2d 3e 73 65 71 43 6f 75 6e 74  Csr[i]->seqCount
1c770 2b 2b 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  ++;.  MemSetType
1c780 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
1c790 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
1c7a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77  ../* Opcode: New
1c7b0 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a  Rowid P1 P2 P3 *
1c7c0 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e   *.**.** Get a n
1c7d0 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  ew integer recor
1c7e0 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20  d number (a.k.a 
1c7f0 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73  "rowid") used as
1c800 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61   the key to a ta
1c810 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f  ble..** The reco
1c820 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
1c830 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
1c840 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65   as a key in the
1c850 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62   database.** tab
1c860 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  le that cursor P
1c870 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  1 points to.  Th
1c880 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  e new record num
1c890 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a  ber is written.*
1c8a0 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67  * written to reg
1c8b0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
1c8c0 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20  If P3>0 then P3 
1c8d0 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68  is a register th
1c8e0 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6c 61 72  at holds the lar
1c8f0 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 0a  gest previously.
1c900 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ** generated rec
1c910 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 4e 6f 20  ord number.  No 
1c920 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
1c930 72 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 74  rs are allowed t
1c940 6f 20 62 65 20 6c 65 73 73 0a 2a 2a 20 74 68 61  o be less.** tha
1c950 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20 57  n this value.  W
1c960 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
1c970 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
1c980 75 6d 2c 20 61 20 53 51 4c 49 54 45 5f 46 55 4c  um, a SQLITE_FUL
1c990 4c 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 67 65  L.** error is ge
1c9a0 6e 65 72 61 74 65 64 2e 20 20 54 68 65 20 50 33  nerated.  The P3
1c9b0 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64   register is upd
1c9c0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 67 65  ated with the ge
1c9d0 6e 65 72 61 74 65 64 0a 2a 2a 20 72 65 63 6f 72  nerated.** recor
1c9e0 64 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20  d number.  This 
1c9f0 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  P3 mechanism is 
1ca00 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
1ca10 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55  lement the.** AU
1ca20 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74  TOINCREMENT feat
1ca30 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
1ca40 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  NewRowid: {     
1ca50 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
1ca60 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
1ca70 74 20 69 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20  t i;.  i64 v;.  
1ca80 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1ca90 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
1caa0 20 72 78 3b 0a 20 20 69 6e 74 20 63 6e 74 3b 0a   rx;.  int cnt;.
1cab0 20 20 69 36 34 20 78 3b 0a 20 20 4d 65 6d 20 2a    i64 x;.  Mem *
1cac0 70 4d 65 6d 3b 0a 0a 20 20 69 20 3d 20 70 4f 70  pMem;..  i = pOp
1cad0 2d 3e 70 31 3b 0a 20 20 76 20 3d 20 30 3b 0a 20  ->p1;.  v = 0;. 
1cae0 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 78 20 3d   res = 0;.  rx =
1caf0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73   SQLITE_OK;.  as
1cb00 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1cb10 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1cb20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1cb30 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  [i]!=0 );.  if( 
1cb40 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  (pC = p->apCsr[i
1cb50 5d 29 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 20 29  ])->pCursor==0 )
1cb60 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72  {.    /* The zer
1cb70 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  o initialization
1cb80 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68   above is all th
1cb90 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a  at is needed */.
1cba0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
1cbb0 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f  The next rowid o
1cbc0 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
1cbd0 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73  (different terms
1cbe0 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20   for the same.  
1cbf0 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f    ** thing) is o
1cc00 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f  btained in a two
1cc10 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e  -step algorithm.
1cc20 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46  .    **.    ** F
1cc30 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20  irst we attempt 
1cc40 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67  to find the larg
1cc50 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
1cc60 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20  id and add one. 
1cc70 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20     ** to that.  
1cc80 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65  But if the large
1cc90 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
1cca0 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65  d is already the
1ccb0 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20   maximum.    ** 
1ccc0 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
1ccd0 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c  , we have to fal
1cce0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
1ccf0 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70   second.    ** p
1cd00 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67  robabilistic alg
1cd10 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20  orithm.    **.  
1cd20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
1cd30 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20  algorithm is to 
1cd40 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61  select a rowid a
1cd50 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65  t random and see
1cd60 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c   if.    ** it al
1cd70 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20  ready exists in 
1cd80 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69  the table.  If i
1cd90 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
1cda0 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a  , we have.    **
1cdb0 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20   succeeded.  If 
1cdc0 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  the random rowid
1cdd0 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20   does exist, we 
1cde0 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65  select a new one
1cdf0 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20  .    ** and try 
1ce00 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30  again, up to 100
1ce10 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2a 0a  0 times..    **.
1ce20 20 20 20 20 2a 2a 20 46 6f 72 20 61 20 74 61 62      ** For a tab
1ce30 6c 65 20 77 69 74 68 20 6c 65 73 73 20 74 68 61  le with less tha
1ce40 6e 20 32 20 62 69 6c 6c 69 6f 6e 20 65 6e 74 72  n 2 billion entr
1ce50 69 65 73 2c 20 74 68 65 20 70 72 6f 62 61 62 69  ies, the probabi
1ce60 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 6e  lity.    ** of n
1ce70 6f 74 20 66 69 6e 64 69 6e 67 20 61 20 75 6e 75  ot finding a unu
1ce80 73 65 64 20 72 6f 77 69 64 20 69 73 20 61 62 6f  sed rowid is abo
1ce90 75 74 20 31 2e 30 65 2d 33 30 30 2e 20 20 54 68  ut 1.0e-300.  Th
1cea0 69 73 20 69 73 20 61 20 0a 20 20 20 20 2a 2a 20  is is a .    ** 
1ceb0 6e 6f 6e 2d 7a 65 72 6f 20 70 72 6f 62 61 62 69  non-zero probabi
1cec0 6c 69 74 79 2c 20 62 75 74 20 69 74 20 69 73 20  lity, but it is 
1ced0 73 74 69 6c 6c 20 76 61 6e 69 73 68 69 6e 67 6c  still vanishingl
1cee0 79 20 73 6d 61 6c 6c 20 61 6e 64 20 73 68 6f 75  y small and shou
1cef0 6c 64 0a 20 20 20 20 2a 2a 20 6e 65 76 65 72 20  ld.    ** never 
1cf00 63 61 75 73 65 20 61 20 70 72 6f 62 6c 65 6d 2e  cause a problem.
1cf10 20 20 59 6f 75 20 61 72 65 20 6d 75 63 68 2c 20    You are much, 
1cf20 6d 75 63 68 20 6d 6f 72 65 20 6c 69 6b 65 6c 79  much more likely
1cf30 20 74 6f 20 68 61 76 65 20 61 0a 20 20 20 20 2a   to have a.    *
1cf40 2a 20 68 61 72 64 77 61 72 65 20 66 61 69 6c 75  * hardware failu
1cf50 72 65 20 74 68 61 6e 20 66 6f 72 20 74 68 69 73  re than for this
1cf60 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 66 61   algorithm to fa
1cf70 69 6c 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  il..    **.    *
1cf80 2a 20 54 68 65 20 61 6e 61 6c 79 73 69 73 20 69  * The analysis i
1cf90 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 70  n the previous p
1cfa0 61 72 61 67 72 61 70 68 20 61 73 73 75 6d 65 73  aragraph assumes
1cfb0 20 74 68 61 74 20 79 6f 75 20 68 61 76 65 20 61   that you have a
1cfc0 20 67 6f 6f 64 0a 20 20 20 20 2a 2a 20 73 6f 75   good.    ** sou
1cfd0 72 63 65 20 6f 66 20 72 61 6e 64 6f 6d 20 6e 75  rce of random nu
1cfe0 6d 62 65 72 73 2e 20 20 49 73 20 61 20 6c 69 62  mbers.  Is a lib
1cff0 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 20 6c 69  rary function li
1d000 6b 65 20 6c 72 61 6e 64 34 38 28 29 0a 20 20 20  ke lrand48().   
1d010 20 2a 2a 20 67 6f 6f 64 20 65 6e 6f 75 67 68 3f   ** good enough?
1d020 20 20 4d 61 79 62 65 2e 20 4d 61 79 62 65 20 6e    Maybe. Maybe n
1d030 6f 74 2e 20 49 74 27 73 20 68 61 72 64 20 74 6f  ot. It's hard to
1d040 20 6b 6e 6f 77 20 77 68 65 74 68 65 72 20 74 68   know whether th
1d050 65 72 65 0a 20 20 20 20 2a 2a 20 6d 69 67 68 74  ere.    ** might
1d060 20 62 65 20 73 75 62 74 6c 65 20 62 75 67 73 20   be subtle bugs 
1d070 69 73 20 73 6f 6d 65 20 69 6d 70 6c 65 6d 65 6e  is some implemen
1d080 74 61 74 69 6f 6e 73 20 6f 66 20 6c 72 61 6e 64  tations of lrand
1d090 34 38 28 29 20 74 68 61 74 0a 20 20 20 20 2a 2a  48() that.    **
1d0a0 20 63 6f 75 6c 64 20 63 61 75 73 65 20 70 72 6f   could cause pro
1d0b0 62 6c 65 6d 73 2e 20 54 6f 20 61 76 6f 69 64 20  blems. To avoid 
1d0c0 75 6e 63 65 72 74 61 69 6e 74 79 2c 20 53 51 4c  uncertainty, SQL
1d0d0 69 74 65 20 75 73 65 73 20 69 74 73 20 6f 77 6e  ite uses its own
1d0e0 20 0a 20 20 20 20 2a 2a 20 72 61 6e 64 6f 6d 20   .    ** random 
1d0f0 6e 75 6d 62 65 72 20 67 65 6e 65 72 61 74 6f 72  number generator
1d100 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 52 43   based on the RC
1d110 34 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20  4 algorithm..   
1d120 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 6f 20 70 72   **.    ** To pr
1d130 6f 6d 6f 74 65 20 6c 6f 63 61 6c 69 74 79 20 6f  omote locality o
1d140 66 20 72 65 66 65 72 65 6e 63 65 20 66 6f 72 20  f reference for 
1d150 72 65 70 65 74 69 74 69 76 65 20 69 6e 73 65 72  repetitive inser
1d160 74 73 2c 20 74 68 65 0a 20 20 20 20 2a 2a 20 66  ts, the.    ** f
1d170 69 72 73 74 20 66 65 77 20 61 74 74 65 6d 70 74  irst few attempt
1d180 73 20 61 74 20 63 68 6f 6f 73 69 6e 67 20 61 20  s at choosing a 
1d190 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 70 69 63  random rowid pic
1d1a0 6b 20 76 61 6c 75 65 73 20 6a 75 73 74 20 61 20  k values just a 
1d1b0 6c 69 74 74 6c 65 0a 20 20 20 20 2a 2a 20 6c 61  little.    ** la
1d1c0 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 70 72  rger than the pr
1d1d0 65 76 69 6f 75 73 20 72 6f 77 69 64 2e 20 20 54  evious rowid.  T
1d1e0 68 69 73 20 68 61 73 20 62 65 65 6e 20 73 68 6f  his has been sho
1d1f0 77 6e 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 6c  wn experimentall
1d200 79 0a 20 20 20 20 2a 2a 20 74 6f 20 64 6f 75 62  y.    ** to doub
1d210 6c 65 20 74 68 65 20 73 70 65 65 64 20 6f 66 20  le the speed of 
1d220 74 68 65 20 43 4f 50 59 20 6f 70 65 72 61 74 69  the COPY operati
1d230 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63  on..    */.    c
1d240 6e 74 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  nt = 0;.    if( 
1d250 28 73 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61  (sqlite3BtreeFla
1d260 67 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 26  gs(pC->pCursor)&
1d270 28 42 54 52 45 45 5f 49 4e 54 4b 45 59 7c 42 54  (BTREE_INTKEY|BT
1d280 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 29 20 21  REE_ZERODATA)) !
1d290 3d 0a 20 20 20 20 20 20 20 20 20 20 42 54 52 45  =.          BTRE
1d2a0 45 5f 49 4e 54 4b 45 59 20 29 7b 0a 20 20 20 20  E_INTKEY ){.    
1d2b0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
1d2c0 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
1d2d0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1d2e0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1d2f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 73 71  .    assert( (sq
1d300 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67 73 28  lite3BtreeFlags(
1d310 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 26 20 42  pC->pCursor) & B
1d320 54 52 45 45 5f 49 4e 54 4b 45 59 29 21 3d 30 20  TREE_INTKEY)!=0 
1d330 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
1d340 73 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67  sqlite3BtreeFlag
1d350 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 26  s(pC->pCursor) &
1d360 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29   BTREE_ZERODATA)
1d370 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ==0 );..#ifdef S
1d380 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49  QLITE_32BIT_ROWI
1d390 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  D.#   define MAX
1d3a0 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66  _ROWID 0x7ffffff
1d3b0 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53  f.#else.    /* S
1d3c0 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f  ome compilers co
1d3d0 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e  mplain about con
1d3e0 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f  stants of the fo
1d3f0 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66  rm 0x7ffffffffff
1d400 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74  fffff..    ** Ot
1d410 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  hers complain ab
1d420 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66  out 0x7fffffffff
1d430 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20  fffffffLL.  The 
1d440 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
1d450 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20  seems.    ** to 
1d460 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73  provide the cons
1d470 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e  tant while makin
1d480 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20  g all compilers 
1d490 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20  happy..    */.# 
1d4a0 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
1d4b0 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36  ID  (i64)( (((u6
1d4c0 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
1d4d0 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66  2) | (u64)0xffff
1d4e0 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20  ffff ).#endif.. 
1d4f0 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52     if( !pC->useR
1d500 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
1d510 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42      v = sqlite3B
1d520 74 72 65 65 47 65 74 43 61 63 68 65 64 52 6f 77  treeGetCachedRow
1d530 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  id(pC->pCursor);
1d540 0a 20 20 20 20 20 20 69 66 28 20 76 3d 3d 30 20  .      if( v==0 
1d550 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
1d560 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
1d570 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1d580 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
1d590 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1d5a0 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
1d5b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1d5c0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1d5d0 20 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29         if( res )
1d5e0 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d 20  {.          v = 
1d5f0 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
1d600 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
1d610 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
1d620 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29  pC->pCursor, &v)
1d630 3b 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d 20  ;.          v = 
1d640 6b 65 79 54 6f 49 6e 74 28 76 29 3b 0a 20 20 20  keyToInt(v);.   
1d650 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d 4d 41         if( v==MA
1d660 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
1d670 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61         pC->useRa
1d680 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20  ndomRowid = 1;. 
1d690 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b              v++;
1d6b0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
1d6c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
1d6d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1d6e0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
1d6f0 54 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  T.      if( pOp-
1d700 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 20 20 61  >p3 ){.        a
1d710 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
1d720 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
1d730 6e 4d 65 6d 20 29 3b 20 2f 2a 20 50 33 20 69 73  nMem ); /* P3 is
1d740 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1d750 63 65 6c 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  cell */.        
1d760 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pMem = &p->aMem[
1d770 70 4f 70 2d 3e 70 33 5d 3b 0a 09 52 45 47 49 53  pOp->p3];..REGIS
1d780 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
1d790 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  3, pMem);.      
1d7a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1d7b0 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29  Integerify(pMem)
1d7c0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1d7d0 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
1d7e0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20   MEM_Int)!=0 ); 
1d7f0 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64   /* mem(P3) hold
1d800 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a  s an integer */.
1d810 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d          if( pMem
1d820 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44  ->u.i==MAX_ROWID
1d830 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f   || pC->useRando
1d840 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
1d850 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1d860 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 20 20  FULL;.          
1d870 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1d880 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1d890 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 76   }.        if( v
1d8a0 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a  <pMem->u.i+1 ){.
1d8b0 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d            v = pM
1d8c0 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
1d8d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
1d8e0 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Mem->u.i = v;.  
1d8f0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
1d900 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
1d910 53 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70  SetCachedRowid(p
1d920 43 2d 3e 70 43 75 72 73 6f 72 2c 20 76 3c 4d 41  C->pCursor, v<MA
1d930 58 5f 52 4f 57 49 44 20 3f 20 76 2b 31 20 3a 20  X_ROWID ? v+1 : 
1d940 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  0);.    }.    if
1d950 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  ( pC->useRandomR
1d960 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 61 73  owid ){.      as
1d970 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30  sert( pOp->p3==0
1d980 20 29 3b 20 20 2f 2a 20 53 51 4c 49 54 45 5f 46   );  /* SQLITE_F
1d990 55 4c 4c 20 6d 75 73 74 20 68 61 76 65 20 6f 63  ULL must have oc
1d9a0 63 75 72 72 65 64 20 70 72 69 6f 72 20 74 6f 20  curred prior to 
1d9b0 74 68 69 73 20 2a 2f 0a 20 20 20 20 20 20 76 20  this */.      v 
1d9c0 3d 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52 6f  = db->priorNewRo
1d9d0 77 69 64 3b 0a 20 20 20 20 20 20 63 6e 74 20 3d  wid;.      cnt =
1d9e0 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   0;.      do{.  
1d9f0 20 20 20 20 20 20 69 66 28 20 63 6e 74 3d 3d 30        if( cnt==0
1da00 20 26 26 20 28 76 26 30 78 66 66 66 66 66 66 29   && (v&0xffffff)
1da10 3d 3d 76 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==v ){.         
1da20 20 76 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65   v++;.        }e
1da30 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73  lse{.          s
1da40 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73  qlite3_randomnes
1da50 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29  s(sizeof(v), &v)
1da60 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
1da70 63 6e 74 3c 35 20 29 20 76 20 26 3d 20 30 78 66  cnt<5 ) v &= 0xf
1da80 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20 20 7d  fffff;.        }
1da90 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d  .        if( v==
1daa0 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
1dab0 20 20 20 20 20 20 78 20 3d 20 69 6e 74 54 6f 4b        x = intToK
1dac0 65 79 28 76 29 3b 0a 20 20 20 20 20 20 20 20 72  ey(v);.        r
1dad0 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  x = sqlite3Btree
1dae0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1daf0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  C->pCursor, 0, (
1db00 75 36 34 29 78 2c 20 30 2c 20 26 72 65 73 29 3b  u64)x, 0, &res);
1db10 0a 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a  .        cnt++;.
1db20 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 63 6e        }while( cn
1db30 74 3c 31 30 30 20 26 26 20 72 78 3d 3d 53 51 4c  t<100 && rx==SQL
1db40 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
1db50 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 70 72   );.      db->pr
1db60 69 6f 72 4e 65 77 52 6f 77 69 64 20 3d 20 76 3b  iorNewRowid = v;
1db70 0a 20 20 20 20 20 20 69 66 28 20 72 78 3d 3d 53  .      if( rx==S
1db80 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
1db90 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
1dba0 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a   = SQLITE_FULL;.
1dbb0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
1dbc0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1dbd0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1dbe0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1dbf0 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  lid = 0;.    pC-
1dc00 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1dc10 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
1dc20 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1dc30 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 4d 65  _STALE;.  }.  Me
1dc40 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
1dc50 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 70  t, MEM_Int);.  p
1dc60 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
1dc70 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1dc80 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50  ode: Insert P1 P
1dc90 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
1dca0 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
1dcb0 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
1dcc0 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
1dcd0 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
1dce0 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
1dcf0 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
1dd00 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
1dd10 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
1dd20 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
1dd30 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
1dd40 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
1dd50 73 74 6f 72 65 64 20 72 65 67 69 73 74 65 72 0a  stored register.
1dd60 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68  ** number P2. Th
1dd70 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20  e key is stored 
1dd80 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
1dd90 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20  The key must.** 
1dda0 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  be an integer..*
1ddb0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
1ddc0 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
1ddd0 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
1dde0 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
1ddf0 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
1de00 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
1de10 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74  wise not).  If t
1de20 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  he OPFLAG_LASTRO
1de30 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69  WID flag of P5 i
1de40 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72  s set,.** then r
1de50 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66  owid is stored f
1de60 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65  or subsequent re
1de70 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73  turn by the.** s
1de80 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
1de90 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74  rt_rowid() funct
1dea0 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69  ion (otherwise i
1deb0 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29  t is unmodified)
1dec0 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ..**.** Paramete
1ded0 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74  r P4 may point t
1dee0 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  o a string conta
1def0 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d  ining the table-
1df00 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20  name, or.** may 
1df10 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
1df20 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
1df30 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1df40 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55   .** (sqlite3.xU
1df50 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
1df60 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77  s invoked follow
1df70 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c  ing a successful
1df80 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28   insert..**.** (
1df90 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66  WARNING/TODO: If
1dfa0 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
1dfb0 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
1dfc0 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20   dynamically.** 
1dfd0 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20  allocated, then 
1dfe0 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20  ownership of P2 
1dff0 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74  is transferred t
1e000 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72  o the pseudo-cur
1e010 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73  sor.** and regis
1e020 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65  ter P2 becomes e
1e030 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68  phemeral.  If th
1e040 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e  e cursor is chan
1e050 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75  ged, the.** valu
1e060 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  e of register P2
1e070 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67   will then chang
1e080 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  e.  Make sure th
1e090 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63  is does not.** c
1e0a0 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d  ause any problem
1e0b0 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  s.).**.** This i
1e0c0 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
1e0d0 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e  works on tables.
1e0e0 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
1e0f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
1e100 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f  for indices is O
1e110 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a  P_IdxInsert..*/.
1e120 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20  case OP_Insert: 
1e130 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 0a  {.  Mem *pData;.
1e140 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 0a 20 20 69    Mem *pKey;.  i
1e150 36 34 20 69 4b 65 79 3b 20 20 20 2f 2a 20 54 68  64 iKey;   /* Th
1e160 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20  e integer ROWID 
1e170 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72  or key for the r
1e180 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
1e190 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  rted */.  int i;
1e1a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1e1b0 43 3b 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 0a  C;.  int nZero;.
1e1c0 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
1e1d0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
1e1e0 7a 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  zDb;.  const cha
1e1f0 72 20 2a 7a 54 62 6c 3b 0a 20 20 69 6e 74 20 6f  r *zTbl;.  int o
1e200 70 3b 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 70  p;..  pData = &p
1e210 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
1e220 0a 20 20 70 4b 65 79 20 3d 20 26 70 2d 3e 61 4d  .  pKey = &p->aM
1e230 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
1e240 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73   = pOp->p1;.  as
1e250 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1e260 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1e270 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
1e280 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1e290 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1e2a0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 7c 7c  C->pCursor!=0 ||
1e2b0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1e2c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
1e2d0 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
1e2e0 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
1e2f0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1e300 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
1e310 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
1e320 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
1e330 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79  CE(pOp->p3, pKey
1e340 29 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 69 6e 74  );..  iKey = int
1e350 54 6f 4b 65 79 28 70 4b 65 79 2d 3e 75 2e 69 29  ToKey(pKey->u.i)
1e360 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
1e370 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
1e380 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
1e390 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
1e3a0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
1e3b0 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  D ) db->lastRowi
1e3c0 64 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  d = pKey->u.i;. 
1e3d0 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
1e3e0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
1e3f0 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30      pData->z = 0
1e400 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d  ;.    pData->n =
1e410 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
1e420 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e   assert( pData->
1e430 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f  flags & (MEM_Blo
1e440 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20  b|MEM_Str) );.  
1e450 7d 0a 20 20 69 66 28 20 70 43 2d 3e 70 73 65 75  }.  if( pC->pseu
1e460 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 69  doTable ){.    i
1e470 66 28 20 21 70 43 2d 3e 65 70 68 65 6d 50 73 65  f( !pC->ephemPse
1e480 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  udoTable ){.    
1e490 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1e4a0 64 62 2c 20 70 43 2d 3e 70 44 61 74 61 29 3b 0a  db, pC->pData);.
1e4b0 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 69 4b      }.    pC->iK
1e4c0 65 79 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 70  ey = iKey;.    p
1e4d0 43 2d 3e 6e 44 61 74 61 20 3d 20 70 44 61 74 61  C->nData = pData
1e4e0 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20 70 44 61  ->n;.    if( pDa
1e4f0 74 61 2d 3e 7a 3d 3d 70 44 61 74 61 2d 3e 7a 4d  ta->z==pData->zM
1e500 61 6c 6c 6f 63 20 7c 7c 20 70 43 2d 3e 65 70 68  alloc || pC->eph
1e510 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20 29 7b  emPseudoTable ){
1e520 0a 20 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61  .      pC->pData
1e530 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 20   = pData->z;.   
1e540 20 20 20 69 66 28 20 21 70 43 2d 3e 65 70 68 65     if( !pC->ephe
1e550 6d 50 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a  mPseudoTable ){.
1e560 20 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 66          pData->f
1e570 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e  lags &= ~MEM_Dyn
1e580 3b 0a 20 20 20 20 20 20 20 20 70 44 61 74 61 2d  ;.        pData-
1e590 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 45 70  >flags |= MEM_Ep
1e5a0 68 65 6d 3b 0a 20 20 20 20 20 20 20 20 70 44 61  hem;.        pDa
1e5b0 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  ta->zMalloc = 0;
1e5c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
1e5d0 73 65 7b 0a 20 20 20 20 20 20 70 43 2d 3e 70 44  se{.      pC->pD
1e5e0 61 74 61 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c  ata = sqlite3Mal
1e5f0 6c 6f 63 28 20 70 43 2d 3e 6e 44 61 74 61 2b 32  loc( pC->nData+2
1e600 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 21 70   );.      if( !p
1e610 43 2d 3e 70 44 61 74 61 20 29 20 67 6f 74 6f 20  C->pData ) goto 
1e620 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 6d 65  no_mem;.      me
1e630 6d 63 70 79 28 70 43 2d 3e 70 44 61 74 61 2c 20  mcpy(pC->pData, 
1e640 70 44 61 74 61 2d 3e 7a 2c 20 70 43 2d 3e 6e 44  pData->z, pC->nD
1e650 61 74 61 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  ata);.      pC->
1e660 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61 74 61 5d  pData[pC->nData]
1e670 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = 0;.      pC->
1e680 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61 74 61 2b  pData[pC->nData+
1e690 31 5d 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  1] = 0;.    }.  
1e6a0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1e6b0 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
1e6c0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70  seekResult = ((p
1e6d0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1e6e0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
1e6f0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1e700 3a 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 44  : 0);.    if( pD
1e710 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ata->flags & MEM
1e720 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 6e  _Zero ){.      n
1e730 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e  Zero = pData->u.
1e740 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65  nZero;.    }else
1e750 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20  {.      nZero = 
1e760 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  0;.    }.    sql
1e770 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
1e780 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72  edRowid(pC->pCur
1e790 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20 72 63 20  sor, 0);.    rc 
1e7a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
1e7b0 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  sert(pC->pCursor
1e7c0 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20  , 0, iKey,.     
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7e0 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c         pData->z,
1e7f0 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f   pData->n, nZero
1e800 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4f                pO
1e820 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41  p->p5 & OPFLAG_A
1e830 50 50 45 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c  PPEND, seekResul
1e840 74 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 0a  t.    );.  }.  .
1e850 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1e860 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65  id = 0;.  pC->de
1e870 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1e880 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1e890 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1e8a0 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
1e8b0 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
1e8c0 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
1e8d0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1e8e0 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
1e8f0 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
1e900 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a  p->p4.z ){.    z
1e910 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
1e920 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
1e930 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e   zTbl = pOp->p4.
1e940 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f  z;.    op = ((pO
1e950 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
1e960 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
1e970 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
1e980 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61  E_INSERT);.    a
1e990 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1e9a0 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55  le );.    db->xU
1e9b0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
1e9c0 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70  ->pUpdateArg, op
1e9d0 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65  , zDb, zTbl, iKe
1e9e0 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
1e9f0 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
1ea00 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1ea10 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20   Opcode: Delete 
1ea20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
1ea30 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65  ** Delete the re
1ea40 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68  cord at which th
1ea50 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63  e P1 cursor is c
1ea60 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
1ea70 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72  g..**.** The cur
1ea80 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74  sor will be left
1ea90 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74   pointing at eit
1eaa0 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20  her the next or 
1eab0 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20  the previous.** 
1eac0 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61  record in the ta
1ead0 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65  ble. If it is le
1eae0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1eaf0 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20  he next record, 
1eb00 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74  then.** the next
1eb10 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
1eb20 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f  n will be a no-o
1eb30 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73 20  p.  Hence it is 
1eb40 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20  OK to delete.** 
1eb50 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69  a record from wi
1eb60 74 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f  thin an Next loo
1eb70 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  p..**.** If the 
1eb80 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
1eb90 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74  lag of P2 is set
1eba0 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
1ebb0 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
1ebc0 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
1ebd0 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a  therwise not)..*
1ebe0 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74  *.** P1 must not
1ebf0 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   be pseudo-table
1ec00 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20  .  It has to be 
1ec10 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74  a real table wit
1ec20 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f  h.** multiple ro
1ec30 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  ws..**.** If P4 
1ec40 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
1ec50 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65  n it is the name
1ec60 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
1ec70 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e  at P1 is.** poin
1ec80 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70  ting to.  The up
1ec90 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62  date hook will b
1eca0 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74  e invoked, if it
1ecb0 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50   exists..** If P
1ecc0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68  4 is not NULL th
1ecd0 65 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  en the P1 cursor
1ece0 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20   must have been 
1ecf0 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73  positioned.** us
1ed00 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ing OP_NotFound 
1ed10 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e  prior to invokin
1ed20 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
1ed30 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65  /.case OP_Delete
1ed40 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69  : {.  int i;.  i
1ed50 36 34 20 69 4b 65 79 3b 0a 20 20 56 64 62 65 43  64 iKey;.  VdbeC
1ed60 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 69 20  ursor *pC;..  i 
1ed70 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 4b 65  = pOp->p1;.  iKe
1ed80 79 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  y = 0;.  assert(
1ed90 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1eda0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1edb0 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1edc0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1edd0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1ede0 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20  ursor!=0 );  /* 
1edf0 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72  Only valid for r
1ee00 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70  eal tables, no p
1ee10 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a  seudotables */..
1ee20 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61    /* If the upda
1ee30 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te-hook will be 
1ee40 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65  invoked, set iKe
1ee50 79 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f  y to the rowid o
1ee60 66 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62  f the.  ** row b
1ee70 65 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20  eing deleted..  
1ee80 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70  */.  if( db->xUp
1ee90 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
1eea0 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
1eeb0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1eec0 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65  able );.    asse
1eed0 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  rt( pC->rowidIsV
1eee0 61 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74  alid );  /* last
1eef0 52 6f 77 69 64 20 73 65 74 20 62 79 20 70 72 65  Rowid set by pre
1ef00 76 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e  vious OP_NotFoun
1ef10 64 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20  d */.    iKey = 
1ef20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  pC->lastRowid;. 
1ef30 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   }..  rc = sqlit
1ef40 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
1ef50 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
1ef60 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1ef70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 73 71  e_to_error;.  sq
1ef80 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
1ef90 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
1efa0 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d  rsor, 0);.  rc =
1efb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
1efc0 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  ete(pC->pCursor)
1efd0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1efe0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1eff0 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
1f000 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
1f010 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
1f020 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1f030 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
1f040 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
1f050 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63  p->p4.z ){.    c
1f060 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
1f070 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
1f080 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e  ].zName;.    con
1f090 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20  st char *zTbl = 
1f0a0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 64  pOp->p4.z;.    d
1f0b0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
1f0c0 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
1f0d0 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  g, SQLITE_DELETE
1f0e0 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65  , zDb, zTbl, iKe
1f0f0 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  y);.    assert( 
1f100 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
1f110 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  }.  if( pOp->p2 
1f120 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
1f130 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
1f140 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1f150 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
1f160 6e 74 20 50 31 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  nt P1 * *.**.** 
1f170 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 73 65  This opcode rese
1f180 74 73 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  ts the VMs inter
1f190 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
1f1a0 65 72 20 74 6f 20 30 2e 20 49 66 20 50 31 20 69  er to 0. If P1 i
1f1b0 73 20 74 72 75 65 2c 0a 2a 2a 20 74 68 65 6e 20  s true,.** then 
1f1c0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1f1d0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
1f1e0 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65  is copied to the
1f1f0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
1f200 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
1f210 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20  er (returned by 
1f220 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73  subsequent calls
1f230 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   to sqlite3_chan
1f240 67 65 73 28 29 29 0a 2a 2a 20 62 65 66 6f 72 65  ges()).** before
1f250 20 69 74 20 69 73 20 72 65 73 65 74 2e 20 54 68   it is reset. Th
1f260 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
1f270 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
1f280 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
1f290 43 6f 75 6e 74 3a 20 7b 0a 20 20 69 66 28 20 70  Count: {.  if( p
1f2a0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
1f2b0 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
1f2c0 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
1f2d0 67 65 29 3b 0a 20 20 7d 0a 20 20 70 2d 3e 6e 43  ge);.  }.  p->nC
1f2e0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65  hange = 0;.  bre
1f2f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1f300 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
1f310 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
1f320 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
1f330 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
1f340 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72  row data for cur
1f350 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
1f360 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
1f370 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
1f380 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
1f390 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
1f3a0 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
1f3b0 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
1f3c0 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
1f3d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1f3e0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
1f3f0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
1f400 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
1f410 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
1f420 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
1f430 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
1f440 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1f450 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  */./* Opcode: Ro
1f460 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  wKey P1 P2 * * *
1f470 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
1f480 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
1f490 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b  e complete row k
1f4a0 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  ey for cursor P1
1f4b0 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f  ..** There is no
1f4c0 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
1f4d0 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a  of the data.  .*
1f4e0 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70  * The key is cop
1f4f0 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33 20  ied onto the P3 
1f500 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79  register exactly
1f510 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f   as .** it is fo
1f520 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  und in the datab
1f530 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
1f540 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
1f550 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
1f560 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
1f570 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
1f580 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
1f590 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
1f5a0 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
1f5b0 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73  e OP_RowKey:.cas
1f5c0 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a  e OP_RowData: {.
1f5d0 20 20 69 6e 74 20 69 3b 0a 20 20 56 64 62 65 43    int i;.  VdbeC
1f5e0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
1f5f0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1f600 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34  u32 n;.  i64 n64
1f610 3b 0a 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31  ;..  i = pOp->p1
1f620 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61  ;.  pOut = &p->a
1f630 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 0a 20  Mem[pOp->p2];.. 
1f640 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f   /* Note that Ro
1f650 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61  wKey and RowData
1f660 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63   are really exac
1f670 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73  tly the same ins
1f680 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73  truction */.  as
1f690 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1f6a0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1f6b0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
1f6c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f6d0 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e  isTable || pOp->
1f6e0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 4b 65  opcode==OP_RowKe
1f6f0 79 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  y );.  assert( p
1f700 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70 4f  C->isIndex || pO
1f710 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f  p->opcode==OP_Ro
1f720 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72  wData );.  asser
1f730 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
1f740 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f  sert( pC->nullRo
1f750 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  w==0 );.  assert
1f760 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1f770 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  e==0 );.  assert
1f780 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1f790 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
1f7a0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72 63 20  ->pCursor;.  rc 
1f7b0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
1f7c0 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
1f7d0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1f7e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1f7f0 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49  r;.  if( pC->isI
1f800 6e 64 65 78 20 29 7b 0a 20 20 20 20 61 73 73 65  ndex ){.    asse
1f810 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65  rt( !pC->isTable
1f820 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   );.    sqlite3B
1f830 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73  treeKeySize(pCrs
1f840 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 69 66  r, &n64);.    if
1f850 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74  ( n64>db->aLimit
1f860 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
1f870 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
1f880 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
1f890 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29   }.    n = (u32)
1f8a0 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  n64;.  }else{.  
1f8b0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61    sqlite3BtreeDa
1f8c0 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e  taSize(pCrsr, &n
1f8d0 29 3b 0a 20 20 20 20 69 66 28 20 6e 3e 64 62 2d  );.    if( n>db-
1f8e0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
1f8f0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
1f900 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
1f910 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ig;.    }.  }.  
1f920 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
1f930 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20  emGrow(pOut, n, 
1f940 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  0) ){.    goto n
1f950 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75  o_mem;.  }.  pOu
1f960 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53  t->n = n;.  MemS
1f970 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
1f980 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66   MEM_Blob);.  if
1f990 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
1f9a0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1f9b0 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c  3BtreeKey(pCrsr,
1f9c0 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
1f9d0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
1f9e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
1f9f0 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  ata(pCrsr, 0, n,
1fa00 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20   pOut->z);.  }. 
1fa10 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
1fa20 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
1fa30 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
1fa40 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74  s ever cast to t
1fa50 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f  ext */.  UPDATE_
1fa60 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
1fa70 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
1fa80 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64  /* Opcode: Rowid
1fa90 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1faa0 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69  ** Store in regi
1fab0 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
1fac0 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
1fad0 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
1fae0 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50   entry that.** P
1faf0 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
1fb00 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50  oint to..**.** P
1fb10 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  1 can be either 
1fb20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  an ordinary tabl
1fb30 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74  e or a virtual t
1fb40 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65  able.  There use
1fb50 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70  d to.** be a sep
1fb60 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20  arate OP_VRowid 
1fb70 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77  opcode for use w
1fb80 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ith virtual tabl
1fb90 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20  es, but this.** 
1fba0 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77  one opcode now w
1fbb0 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61  orks for both ta
1fbc0 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61  ble types..*/.ca
1fbd0 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20  se OP_Rowid: {  
1fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fbf0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
1fc00 65 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 0a 20 20  e */.  int i;.  
1fc10 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1fc20 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
1fc30 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
1fc40 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
1fc50 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
1fc60 0a 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ..  i = pOp->p1;
1fc70 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1fc80 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1fc90 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1fca0 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  sr[i];.  assert(
1fcb0 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
1fcc0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
1fcd0 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67     /* Do nothing
1fce0 20 73 6f 20 74 68 61 74 20 72 65 67 5b 50 32 5d   so that reg[P2]
1fcf0 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 20 2a 2f   remains NULL */
1fd00 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65  .    break;.  }e
1fd10 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65  lse if( pC->defe
1fd20 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20  rredMoveto ){.  
1fd30 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f    v = pC->moveto
1fd40 54 61 72 67 65 74 3b 0a 20 20 7d 65 6c 73 65 20  Target;.  }else 
1fd50 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  if( pC->pseudoTa
1fd60 62 6c 65 20 29 7b 0a 20 20 20 20 76 20 3d 20 6b  ble ){.    v = k
1fd70 65 79 54 6f 49 6e 74 28 70 43 2d 3e 69 4b 65 79  eyToInt(pC->iKey
1fd80 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
1fd90 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1fda0 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  BLE.  }else if( 
1fdb0 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  pC->pVtabCursor 
1fdc0 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70  ){.    pVtab = p
1fdd0 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  C->pVtabCursor->
1fde0 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
1fdf0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
1fe00 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
1fe10 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
1fe20 20 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   );.    if( sqli
1fe30 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
1fe40 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1fe50 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20  e_to_misuse;.   
1fe60 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
1fe70 52 6f 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43  Rowid(pC->pVtabC
1fe80 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
1fe90 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
1fea0 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
1feb0 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
1fec0 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a  pVtab->zErrMsg;.
1fed0 20 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d      pVtab->zErrM
1fee0 73 67 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  sg = 0;.    if( 
1fef0 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
1ff00 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
1ff10 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
1ff20 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
1ff30 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1ff40 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  LE */.  }else{. 
1ff50 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
1ff60 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1ff70 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  pC);.    if( rc 
1ff80 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1ff90 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69  _to_error;.    i
1ffa0 66 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  f( pC->rowidIsVa
1ffb0 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  lid ){.      v =
1ffc0 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   pC->lastRowid;.
1ffd0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1ffe0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1fff0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20  rsor!=0 );.     
20000 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
20010 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  Size(pC->pCursor
20020 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 76 20 3d  , &v);.      v =
20030 20 6b 65 79 54 6f 49 6e 74 28 76 29 3b 0a 20 20   keyToInt(v);.  
20040 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e    }.  }.  pOut->
20050 75 2e 69 20 3d 20 76 3b 0a 20 20 4d 65 6d 53 65  u.i = v;.  MemSe
20060 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
20070 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
20080 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
20090 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20   NullRow P1 * * 
200a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
200b0 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
200c0 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79  a null row.  Any
200d0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61   OP_Column opera
200e0 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63  tions.** that oc
200f0 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75  cur while the cu
20100 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e  rsor is on the n
20110 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77  ull row will alw
20120 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e  ays.** write a N
20130 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
20140 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 69 6e 74  NullRow: {.  int
20150 20 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72   i;.  VdbeCursor
20160 20 2a 70 43 3b 0a 0a 20 20 69 20 3d 20 70 4f 70   *pC;..  i = pOp
20170 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
20180 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
20190 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
201a0 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73  ->apCsr[i];.  as
201b0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
201c0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
201d0 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
201e0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66 28 20  alid = 0;.  if( 
201f0 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20  pC->pCursor ){. 
20200 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
20210 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70  learCursor(pC->p
20220 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
20230 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
20240 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a  de: Last P1 P2 *
20250 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
20260 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
20270 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
20280 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
20290 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
202a0 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
202b0 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
202c0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
202d0 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
202e0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
202f0 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
20300 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
20310 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
20320 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
20330 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
20340 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
20350 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
20360 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
20370 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
20380 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
20390 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Last: {       
203a0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
203b0 74 20 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  t i;.  VdbeCurso
203c0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
203d0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
203e0 72 65 73 3b 0a 0a 20 20 69 20 3d 20 70 4f 70 2d  res;..  i = pOp-
203f0 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
20400 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
20410 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
20420 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73  >apCsr[i];.  ass
20430 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
20440 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
20450 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
20460 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 63 20  Crsr!=0 );.  rc 
20470 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
20480 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
20490 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
204a0 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
204b0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
204c0 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   0;.  pC->rowidI
204d0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
204e0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
204f0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
20500 66 28 20 72 65 73 20 26 26 20 70 4f 70 2d 3e 70  f( res && pOp->p
20510 32 3e 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  2>0 ){.    pc = 
20520 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
20530 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
20540 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31   Opcode: Sort P1
20550 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
20560 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
20570 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
20580 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65  e thing as OP_Re
20590 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74  wind except that
205a0 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74  .** it increment
205b0 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s an undocumente
205c0 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  d global variabl
205d0 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69  e used for testi
205e0 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e  ng..**.** Sortin
205f0 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65  g is accomplishe
20600 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63  d by writing rec
20610 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74  ords into a sort
20620 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68  ing index,.** th
20630 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61  en rewinding tha
20640 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79  t index and play
20650 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d  ing it back from
20660 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a   beginning to.**
20670 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68   end.  We use th
20680 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65  e OP_Sort opcode
20690 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52   instead of OP_R
206a0 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a  ewind to do the.
206b0 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20  ** rewinding so 
206c0 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20  that the global 
206d0 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65  variable will be
206e0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64   incremented and
206f0 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74  .** regression t
20700 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69  ests can determi
20710 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
20720 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  t the optimizer 
20730 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20  is.** correctly 
20740 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73  optimizing out s
20750 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  orts..*/.case OP
20760 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20  _Sort: {        
20770 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65  /* jump */.#ifde
20780 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
20790 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
207a0 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt++;.  sqlite3_
207b0 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a  search_count--;.
207c0 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75  #endif.  p->aCou
207d0 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
207e0 53 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b 2b  STATUS_SORT-1]++
207f0 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
20800 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69  ugh into OP_Rewi
20810 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  nd */.}./* Opcod
20820 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20  e: Rewind P1 P2 
20830 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
20840 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
20850 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
20860 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
20870 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
20880 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
20890 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20   first entry in 
208a0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
208b0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
208c0 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
208d0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
208e0 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
208f0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
20900 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
20910 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
20920 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
20930 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
20940 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
20950 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
20960 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
20970 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20   OP_Rewind: {   
20980 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
20990 20 20 69 6e 74 20 69 3b 0a 20 20 56 64 62 65 43    int i;.  VdbeC
209a0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
209b0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
209c0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 69 20 3d 20  int res;..  i = 
209d0 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
209e0 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
209f0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
20a00 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20  = p->apCsr[i];. 
20a10 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
20a20 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d  ;.  if( (pCrsr =
20a30 20 70 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30   pC->pCursor)!=0
20a40 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
20a50 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70  ite3BtreeFirst(p
20a60 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  Crsr, &res);.   
20a70 20 70 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72   pC->atFirst = r
20a80 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20  es==0 ?1:0;.    
20a90 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
20aa0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
20ab0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
20ac0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70  CHE_STALE;.    p
20ad0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
20ae0 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 0;.  }else{.  
20af0 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20    res = 1;.  }. 
20b00 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
20b10 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
20b20 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
20b30 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
20b40 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
20b50 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
20b60 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
20b70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
20b80 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ext P1 P2 * * *.
20b90 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75  **.** Advance cu
20ba0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
20bb0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
20bc0 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70   next key/data p
20bd0 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
20be0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
20bf0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
20c00 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ore key/value pa
20c10 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
20c20 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
20c30 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
20c40 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
20c50 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63  he cursor advanc
20c60 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  e was successful
20c70 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
20c80 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
20c90 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
20ca0 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
20cb0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
20cc0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
20cd0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50  *.** See also: P
20ce0 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rev.*/./* Opcode
20cf0 3a 20 50 72 65 76 20 50 31 20 50 32 20 2a 20 2a  : Prev P1 P2 * *
20d00 20 2a 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70   *.**.** Back up
20d10 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
20d20 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
20d30 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79  the previous key
20d40 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
20d50 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
20d60 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69  dex.  If there i
20d70 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65  s no previous ke
20d80 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
20d90 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
20da0 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
20db0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
20dc0 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
20dd0 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73  sor backup was s
20de0 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
20df0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
20e00 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
20e10 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
20e20 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
20e30 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
20e40 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
20e50 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20  OP_Prev:        
20e60 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
20e70 65 20 4f 50 5f 4e 65 78 74 3a 20 7b 20 20 20 20  e OP_Next: {    
20e80 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
20e90 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20ea0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
20eb0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
20ec0 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45    CHECK_FOR_INTE
20ed0 52 52 55 50 54 3b 0a 20 20 61 73 73 65 72 74 28  RRUPT;.  assert(
20ee0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
20ef0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
20f00 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
20f10 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
20f20 20 69 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20   if( pC==0 ){.  
20f30 20 20 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65    break;  /* See
20f40 20 74 69 63 6b 65 74 20 23 32 32 37 33 20 2a 2f   ticket #2273 */
20f50 0a 20 20 7d 0a 20 20 70 43 72 73 72 20 3d 20 70  .  }.  pCrsr = p
20f60 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
20f70 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
20f80 20 72 65 73 20 3d 20 31 3b 0a 20 20 61 73 73 65   res = 1;.  asse
20f90 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
20fa0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72  Moveto==0 );.  r
20fb0 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  c = pOp->opcode=
20fc0 3d 4f 50 5f 4e 65 78 74 20 3f 20 73 71 6c 69 74  =OP_Next ? sqlit
20fd0 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 72 73  e3BtreeNext(pCrs
20fe0 72 2c 20 26 72 65 73 29 20 3a 0a 20 20 20 20 20  r, &res) :.     
20ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21000 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
21010 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
21020 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43  rsr, &res);.  pC
21030 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
21040 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  res;.  pC->cache
21050 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
21060 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 3d  TALE;.  if( res=
21070 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
21080 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
21090 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20 70 2d  if( pOp->p5 ) p-
210a0 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70  >aCounter[pOp->p
210b0 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  5-1]++;.#ifdef S
210c0 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
210d0 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
210e0 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
210f0 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  }.  pC->rowidIsV
21100 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72 65 61  alid = 0;.  brea
21110 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
21120 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32   IdxInsert P1 P2
21130 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 52   P3 * P5.**.** R
21140 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73  egister P2 holds
21150 20 61 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79   a SQL index key
21160 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
21170 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
21180 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
21190 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
211a0 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
211b0 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20   the index P1.  
211c0 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
211d0 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a  ry is nil..**.**
211e0 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74 68   P3 is a flag th
211f0 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68 69  at provides a hi
21200 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65  nt to the b-tree
21210 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69 73   layer that this
21220 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69  .** insert is li
21230 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
21240 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  pend..**.** This
21250 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
21260 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69  y works for indi
21270 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  ces.  The equiva
21280 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
21290 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69  .** for tables i
212a0 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a  s OP_Insert..*/.
212b0 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72  case OP_IdxInser
212c0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  t: {        /* i
212d0 6e 32 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 0a 20  n2 */.  int i;. 
212e0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
212f0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
21300 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a  sr;.  int nKey;.
21310 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b    const char *zK
21320 65 79 3b 0a 0a 20 20 69 20 3d 20 70 4f 70 2d 3e  ey;..  i = pOp->
21330 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e  p1;.  assert( i>
21340 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
21350 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
21360 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29  p->apCsr[i]!=0 )
21370 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32  ;.  assert( pIn2
21380 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
21390 6f 62 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72  ob );.  if( (pCr
213a0 73 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70  sr = (pC = p->ap
213b0 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72  Csr[i])->pCursor
213c0 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  )!=0 ){.    asse
213d0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
213e0 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45  =0 );.    rc = E
213f0 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b  xpandBlob(pIn2);
21400 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
21410 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
21420 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
21430 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e        zKey = pIn
21440 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d  2->z;.      rc =
21450 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
21460 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c  ert(pCrsr, zKey,
21470 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
21480 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
21490 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
214a0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
214b0 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
214c0 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
214d0 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65     );.      asse
214e0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
214f0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
21500 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
21510 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
21520 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
21530 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21540 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20  e: IdxDelete P1 
21550 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
21560 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
21570 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
21580 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
21590 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
215a0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
215b0 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
215c0 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
215d0 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
215e0 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
215f0 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
21600 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
21610 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 56 64 62  {.  int i;.  Vdb
21620 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
21630 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
21640 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .  i = pOp->p1;.
21650 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21660 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  3>0 );.  assert(
21670 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
21680 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70  p->p2+pOp->p3<=p
21690 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 61 73  ->nMem+1 );.  as
216a0 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
216b0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
216c0 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
216d0 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  [i]!=0 );.  if( 
216e0 28 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20 70  (pCrsr = (pC = p
216f0 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75  ->apCsr[i])->pCu
21700 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20  rsor)!=0 ){.    
21710 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 55 6e 70  int res;.    Unp
21720 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
21730 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
21740 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
21750 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
21760 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72  6)pOp->p3;.    r
21770 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  .flags = 0;.    
21780 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65  r.aMem = &p->aMe
21790 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
217a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
217b0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
217c0 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
217d0 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
217e0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
217f0 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
21800 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
21810 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b  eeDelete(pCrsr);
21820 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
21830 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
21840 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
21850 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
21860 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
21870 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
21880 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77  * Opcode: IdxRow
21890 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
218a0 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
218b0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
218c0 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
218d0 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
218e0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a  n the record at.
218f0 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  ** the end of th
21900 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e  e index key poin
21910 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72  ted to by cursor
21920 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67   P1.  This integ
21930 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  er should be.** 
21940 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
21950 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20   table entry to 
21960 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78  which this index
21970 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a   entry points..*
21980 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52  *.** See also: R
21990 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64  owid, MakeRecord
219a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
219b0 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
219c0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
219d0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
219e0 74 20 69 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  t i;.  BtCursor 
219f0 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75  *pCrsr;.  VdbeCu
21a00 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
21a10 72 6f 77 69 64 3b 0a 0a 20 20 69 20 3d 20 70 4f  rowid;..  i = pO
21a20 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
21a30 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
21a40 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
21a50 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d  t( p->apCsr[i]!=
21a60 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73  0 );.  if( (pCrs
21a70 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43  r = (pC = p->apC
21a80 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29  sr[i])->pCursor)
21a90 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  !=0 ){.    rc = 
21aa0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
21ab0 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
21ac0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
21ad0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
21ae0 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  r;.    assert( p
21af0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
21b00 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  o==0 );.    asse
21b10 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
21b20 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70  =0 );.    if( !p
21b30 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
21b40 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21b50 56 64 62 65 49 64 78 52 6f 77 69 64 28 70 43 72  VdbeIdxRowid(pCr
21b60 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  sr, &rowid);.   
21b70 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
21b80 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
21b90 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
21ba0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
21bb0 0a 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70  .      MemSetTyp
21bc0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
21bd0 49 6e 74 29 3b 0a 20 20 20 20 20 20 70 4f 75 74  Int);.      pOut
21be0 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20  ->u.i = rowid;. 
21bf0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
21c00 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21c10 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50  IdxGE P1 P2 P3 P
21c20 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  4 P5.**.** The P
21c30 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
21c40 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
21c50 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
21c60 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
21c70 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
21c80 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  e ROWID.  Compar
21c90 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
21ca0 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
21cb0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
21cc0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
21cd0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
21ce0 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74  g the ROWID on t
21cf0 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
21d00 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
21d10 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
21d20 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
21d30 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
21d40 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20  ue.** then jump 
21d50 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73  to P2.  Otherwis
21d60 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
21d70 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
21d80 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
21d90 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20   P5 is non-zero 
21da0 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  then the key val
21db0 75 65 20 69 73 20 69 6e 63 72 65 61 73 65 64 20  ue is increased 
21dc0 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a  by an epsilon .*
21dd0 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 63  * prior to the c
21de0 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73  omparison.  This
21df0 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f 64 65   make the opcode
21e00 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 47 54   work like IdxGT
21e10 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61 74 20   except.** that 
21e20 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f 6d 20  if the key from 
21e30 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61  register P3 is a
21e40 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b   prefix of the k
21e50 65 79 20 69 6e 20 74 68 65 20 63 75 72 73 6f 72  ey in the cursor
21e60 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  ,.** the result 
21e70 69 73 20 66 61 6c 73 65 20 77 68 65 72 65 61 73  is false whereas
21e80 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74 72 75   it would be tru
21e90 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f  e with IdxGT..*/
21ea0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
21eb0 54 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  T P1 P2 P3 * P5.
21ec0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
21ed0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
21ee0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
21ef0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
21f00 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
21f10 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57  at omits the ROW
21f20 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
21f30 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
21f40 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
21f50 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
21f60 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
21f70 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
21f80 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
21f90 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
21fa0 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
21fb0 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
21fc0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74   the key value t
21fd0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
21fe0 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  ** Otherwise fal
21ff0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
22000 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
22010 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  n..**.** If P5 i
22020 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s non-zero then 
22030 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73  the key value is
22040 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e   increased by an
22050 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a   epsilon prior .
22060 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72  ** to the compar
22070 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65  ison.  This make
22080 73 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72  s the opcode wor
22090 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f  k like IdxLE..*/
220a0 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20  .case OP_IdxLT: 
220b0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
220c0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
220d0 5f 49 64 78 47 45 3a 20 7b 20 20 20 20 20 20 20  _IdxGE: {       
220e0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
220f0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 56 64 62 65  .  int i;.  Vdbe
22100 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
22110 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
22120 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 69 20  dRecord r;..  i 
22130 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
22140 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70  ert( i>=0 && i<p
22150 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
22160 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
22170 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  i]!=0 );.  if( (
22180 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
22190 29 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b  )->pCursor!=0 ){
221a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
221b0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
221c0 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
221d0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
221e0 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
221f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22200 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
22210 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  );.    r.pKeyInf
22220 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
22230 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
22240 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
22250 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
22260 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67   ){.      r.flag
22270 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43  s = UNPACKED_INC
22280 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f  RKEY | UNPACKED_
22290 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20  IGNORE_ROWID;.  
222a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
222b0 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45  .flags = UNPACKE
222c0 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a  D_IGNORE_ROWID;.
222d0 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d      }.    r.aMem
222e0 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
222f0 3e 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73  >p3];.    rc = s
22300 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
22310 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20  Compare(pC, &r, 
22320 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70  &res);.    if( p
22330 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
22340 64 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65  dxLT ){.      re
22350 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65  s = -res;.    }e
22360 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
22370 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
22380 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20  OP_IdxGE );.    
22390 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20    res++;.    }. 
223a0 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a     if( res>0 ){.
223b0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
223c0 70 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20  p2 - 1 ;.    }. 
223d0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
223e0 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
223f0 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
22400 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
22410 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
22420 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
22430 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
22440 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
22450 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
22460 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
22470 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
22480 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
22490 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
224a0 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
224b0 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
224c0 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
224d0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
224e0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
224f0 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
22500 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
22510 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
22520 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
22530 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
22540 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
22550 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
22560 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
22570 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
22580 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
22590 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
225a0 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
225b0 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
225c0 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
225d0 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
225e0 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
225f0 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
22600 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
22610 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
22620 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
22630 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
22640 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
22650 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
22660 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
22670 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
22680 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f  f no page .** mo
22690 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69  vement was requi
226a0 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65  red (because the
226b0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
226c0 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
226d0 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e   .** the last on
226e0 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
226f0 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  e) then a zero i
22700 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
22710 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41  ster P2..** If A
22720 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73  UTOVACUUM is dis
22730 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72  abled then a zer
22740 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
22750 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
22760 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
22770 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
22780 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
22790 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
227a0 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a  /.  int iMoved;.
227b0 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64    int iCnt;.  Vd
227c0 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74  be *pVdbe;.  int
227d0 20 69 44 62 3b 0a 23 69 66 6e 64 65 66 20 53 51   iDb;.#ifndef SQ
227e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
227f0 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20  LTABLE.  iCnt = 
22800 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64  0;.  for(pVdbe=d
22810 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b  b->pVdbe; pVdbe;
22820 20 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e   pVdbe = pVdbe->
22830 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20  pNext){.    if( 
22840 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44  pVdbe->magic==VD
22850 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20  BE_MAGIC_RUN && 
22860 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74  pVdbe->inVtabMet
22870 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e  hod<2 && pVdbe->
22880 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  pc>=0 ){.      i
22890 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  Cnt++;.    }.  }
228a0 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20  .#else.  iCnt = 
228b0 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e  db->activeVdbeCn
228c0 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  t;.#endif.  if( 
228d0 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72 63  iCnt>1 ){.    rc
228e0 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
228f0 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63  ;.    p->errorAc
22900 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b  tion = OE_Abort;
22910 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44  .  }else{.    iD
22920 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  b = pOp->p3;.   
22930 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d 31   assert( iCnt==1
22940 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
22950 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
22960 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a  (1<<iDb))!=0 );.
22970 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
22980 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64  BtreeDropTable(d
22990 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
229a0 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65   pOp->p1, &iMove
229b0 64 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  d);.    MemSetTy
229c0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
229d0 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  _Int);.    pOut-
229e0 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23  >u.i = iMoved;.#
229f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22a00 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
22a10 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
22a20 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30  _OK && iMoved!=0
22a30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
22a40 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 26  3RootPageMoved(&
22a50 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20 69 4d  db->aDb[iDb], iM
22a60 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  oved, pOp->p1);.
22a70 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
22a80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
22a90 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
22aa0 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
22ab0 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
22ac0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
22ad0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
22ae0 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
22af0 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
22b00 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
22b10 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
22b20 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
22b30 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
22b40 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
22b50 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
22b60 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
22b70 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
22b80 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
22b90 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
22ba0 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
22bb0 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
22bc0 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
22bd0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
22be0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
22bf0 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
22c00 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
22c10 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
22c20 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
22c30 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
22c40 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
22c50 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
22c60 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
22c70 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
22c80 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
22c90 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
22ca0 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
22cb0 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
22cc0 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
22cd0 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
22ce0 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
22cf0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
22d00 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
22d10 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
22d20 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
22d30 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
22d40 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
22d50 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
22d60 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
22d70 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
22d80 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
22d90 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
22da0 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
22db0 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
22dc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
22dd0 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
22de0 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
22df0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   0;.  assert( (p
22e00 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
22e10 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d 30 20 29  <<pOp->p2))!=0 )
22e20 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
22e30 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28  BtreeClearTable(
22e40 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70  .      db->aDb[p
22e50 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70  Op->p2].pBt, pOp
22e60 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f  ->p1, (pOp->p3 ?
22e70 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20   &nChange : 0). 
22e80 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
22e90 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  3 ){.    p->nCha
22ea0 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  nge += nChange;.
22eb0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e      if( pOp->p3>
22ec0 30 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 61 4d  0 ){.      p->aM
22ed0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
22ee0 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
22ef0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
22f00 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  ../* Opcode: Cre
22f10 61 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a  ateTable P1 P2 *
22f20 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63   * *.**.** Alloc
22f30 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20  ate a new table 
22f40 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
22f50 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
22f60 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
22f70 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
22f80 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
22f90 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
22fa0 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
22fb0 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
22fc0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
22fd0 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
22fe0 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
22ff0 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54  ister P2.**.** T
23000 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
23010 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e  tween a table an
23020 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68  d an index is th
23030 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73  is:  A table mus
23040 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79  t.** have a 4-by
23050 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61  te integer key a
23060 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69  nd can have arbi
23070 74 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20  trary data.  An 
23080 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20  index.** has an 
23090 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75  arbitrary key bu
230a0 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a  t no data..**.**
230b0 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74   See also: Creat
230c0 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63  eIndex.*/./* Opc
230d0 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78  ode: CreateIndex
230e0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
230f0 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
23100 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d  w index in the m
23110 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
23120 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
23130 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
23140 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
23150 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
23160 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
23170 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
23180 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
23190 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
231a0 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
231b0 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
231c0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75  ..**.** See docu
231d0 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f  mentation on OP_
231e0 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20  CreateTable for 
231f0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
23200 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
23210 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20  OP_CreateIndex: 
23220 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
23230 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
23240 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54  .case OP_CreateT
23250 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
23260 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
23270 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e  ase */.  int pgn
23280 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a  o;.  int flags;.
23290 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67    Db *pDb;..  pg
232a0 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  no = 0;.  assert
232b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
232c0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
232d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
232e0 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
232f0 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
23300 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
23310 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
23320 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
23330 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
23340 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
23350 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
23360 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
23370 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
23380 61 67 73 20 3d 20 42 54 52 45 45 5f 4c 45 41 46  ags = BTREE_LEAF
23390 44 41 54 41 7c 42 54 52 45 45 5f 49 4e 54 4b 45  DATA|BTREE_INTKE
233a0 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
233b0 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 5a 45  flags = BTREE_ZE
233c0 52 4f 44 41 54 41 3b 0a 20 20 7d 0a 20 20 72 63  RODATA;.  }.  rc
233d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
233e0 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
233f0 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
23400 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  s);.  pOut->u.i 
23410 3d 20 70 67 6e 6f 3b 0a 20 20 4d 65 6d 53 65 74  = pgno;.  MemSet
23420 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
23430 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
23440 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
23450 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 50  ParseSchema P1 P
23460 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 * P4 *.**.** R
23470 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c  ead and parse al
23480 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
23490 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
234a0 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61   table of databa
234b0 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61  se P1.** that ma
234c0 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  tch the WHERE cl
234d0 61 75 73 65 20 50 34 2e 20 20 50 32 20 69 73 20  ause P4.  P2 is 
234e0 74 68 65 20 22 66 6f 72 63 65 22 20 66 6c 61 67  the "force" flag
234f0 2e 20 20 20 41 6c 77 61 79 73 20 64 6f 0a 2a 2a  .   Always do.**
23500 20 74 68 65 20 70 61 72 73 69 6e 67 20 69 66 20   the parsing if 
23510 50 32 20 69 73 20 74 72 75 65 2e 20 20 49 66 20  P2 is true.  If 
23520 50 32 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  P2 is false, the
23530 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  n this routine i
23540 73 20 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20  s a.** no-op if 
23550 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e 6f  the schema is no
23560 74 20 63 75 72 72 65 6e 74 6c 79 20 6c 6f 61 64  t currently load
23570 65 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ed.  In other wo
23580 72 64 73 2c 20 69 66 20 50 32 0a 2a 2a 20 69 73  rds, if P2.** is
23590 20 66 61 6c 73 65 2c 20 74 68 65 20 53 51 4c 49   false, the SQLI
235a0 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
235b0 69 73 20 6f 6e 6c 79 20 70 61 72 73 65 64 20 69  is only parsed i
235c0 66 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  f the rest of th
235d0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 61  e.** schema is a
235e0 6c 72 65 61 64 79 20 6c 6f 61 64 65 64 20 69 6e  lready loaded in
235f0 74 6f 20 74 68 65 20 73 79 6d 62 6f 6c 20 74 61  to the symbol ta
23600 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ble..**.** This 
23610 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
23620 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65  he parser to cre
23630 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61  ate a new virtua
23640 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68  l machine,.** th
23650 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20  en runs the new 
23660 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
23670 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72    It is thus a r
23680 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65  e-entrant opcode
23690 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
236a0 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e  seSchema: {.  in
236b0 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63  t iDb;.  const c
236c0 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20  har *zMaster;.  
236d0 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e  char *zSql;.  In
236e0 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b  itData initData;
236f0 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ..  iDb = pOp->p
23700 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  1;.  assert( iDb
23710 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
23720 44 62 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 70  Db );..  /* If p
23730 4f 70 2d 3e 70 32 20 69 73 20 30 2c 20 74 68 65  Op->p2 is 0, the
23740 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  n this opcode is
23750 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 20   being executed 
23760 74 6f 20 72 65 61 64 20 61 0a 20 20 2a 2a 20 73  to read a.  ** s
23770 69 6e 67 6c 65 20 72 6f 77 2c 20 66 6f 72 20 65  ingle row, for e
23780 78 61 6d 70 6c 65 20 74 68 65 20 72 6f 77 20 63  xample the row c
23790 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
237a0 61 20 6e 65 77 20 69 6e 64 65 78 0a 20 20 2a 2a  a new index.  **
237b0 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
237c0 20 56 44 42 45 2c 20 66 72 6f 6d 20 74 68 65 20   VDBE, from the 
237d0 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
237e0 62 6c 65 2e 20 49 74 20 6f 6e 6c 79 0a 20 20 2a  ble. It only.  *
237f0 2a 20 64 6f 65 73 20 74 68 69 73 20 69 66 20 74  * does this if t
23800 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
23810 20 69 6e 2d 6d 65 6d 6f 72 79 20 73 63 68 65 6d   in-memory schem
23820 61 20 69 73 20 63 75 72 72 65 6e 74 6c 79 0a 20  a is currently. 
23830 20 2a 2a 20 6c 6f 61 64 65 64 2e 20 4f 74 68 65   ** loaded. Othe
23840 72 77 69 73 65 2c 20 74 68 65 20 6e 65 77 20 69  rwise, the new i
23850 6e 64 65 78 20 64 65 66 69 6e 69 74 69 6f 6e 20  ndex definition 
23860 63 61 6e 20 62 65 20 6c 6f 61 64 65 64 20 61 6c  can be loaded al
23870 6f 6e 67 0a 20 20 2a 2a 20 77 69 74 68 20 74 68  ong.  ** with th
23880 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 73 63  e rest of the sc
23890 68 65 6d 61 20 77 68 65 6e 20 69 74 20 69 73 20  hema when it is 
238a0 72 65 71 75 69 72 65 64 2e 0a 20 20 2a 2a 0a 20  required..  **. 
238b0 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 74 68 65   ** Although the
238c0 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 42 74   mutex on the Bt
238d0 53 68 61 72 65 64 20 6f 62 6a 65 63 74 20 74 68  Shared object th
238e0 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
238f0 6f 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  o.  ** database 
23900 69 44 62 20 28 74 68 65 20 64 61 74 61 62 61 73  iDb (the databas
23910 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
23920 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
23930 61 62 6c 65 0a 20 20 2a 2a 20 72 65 61 64 20 62  able.  ** read b
23940 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
23950 6f 6e 29 20 69 73 20 63 75 72 72 65 6e 74 6c 79  on) is currently
23960 20 68 65 6c 64 2c 20 69 74 20 69 73 20 6e 65 63   held, it is nec
23970 65 73 73 61 72 79 20 74 6f 0a 20 20 2a 2a 20 6f  essary to.  ** o
23980 62 74 61 69 6e 20 74 68 65 20 6d 75 74 65 78 65  btain the mutexe
23990 73 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65  s on all attache
239a0 64 20 64 61 74 61 62 61 73 65 73 20 62 65 66 6f  d databases befo
239b0 72 65 20 63 68 65 63 6b 69 6e 67 20 69 66 0a 20  re checking if. 
239c0 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 20 6f   ** the schema o
239d0 66 20 69 44 62 20 69 73 20 6c 6f 61 64 65 64 2e  f iDb is loaded.
239e0 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
239f0 2c 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f  , at the start o
23a00 66 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74  f.  ** the sqlit
23a10 65 33 5f 65 78 65 63 28 29 20 63 61 6c 6c 20 62  e3_exec() call b
23a20 65 6c 6f 77 2c 20 53 51 4c 69 74 65 20 77 69 6c  elow, SQLite wil
23a30 6c 20 69 6e 76 6f 6b 65 20 0a 20 20 2a 2a 20 73  l invoke .  ** s
23a40 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72  qlite3BtreeEnter
23a50 41 6c 6c 28 29 2e 20 49 66 20 61 6c 6c 20 6d 75  All(). If all mu
23a60 74 65 78 65 73 20 61 72 65 20 6e 6f 74 20 61 6c  texes are not al
23a70 72 65 61 64 79 20 68 65 6c 64 2c 20 74 68 65 0a  ready held, the.
23a80 20 20 2a 2a 20 69 44 62 20 6d 75 74 65 78 20 6d    ** iDb mutex m
23a90 61 79 20 62 65 20 74 65 6d 70 6f 72 61 72 69 6c  ay be temporaril
23aa0 79 20 72 65 6c 65 61 73 65 64 20 74 6f 20 61 76  y released to av
23ab0 6f 69 64 20 64 65 61 64 6c 6f 63 6b 2e 20 49 66  oid deadlock. If
23ac0 20 0a 20 20 2a 2a 20 74 68 69 73 20 68 61 70 70   .  ** this happ
23ad0 65 6e 73 2c 20 74 68 65 6e 20 73 6f 6d 65 20 6f  ens, then some o
23ae0 74 68 65 72 20 74 68 72 65 61 64 20 6d 61 79 20  ther thread may 
23af0 64 65 6c 65 74 65 20 74 68 65 20 69 6e 2d 6d 65  delete the in-me
23b00 6d 6f 72 79 20 0a 20 20 2a 2a 20 73 63 68 65 6d  mory .  ** schem
23b10 61 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44  a of database iD
23b20 62 20 62 65 66 6f 72 65 20 74 68 65 20 53 51 4c  b before the SQL
23b30 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2e   statement runs.
23b40 20 54 68 65 20 73 63 68 65 6d 61 0a 20 20 2a 2a   The schema.  **
23b50 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 6c   will not be rel
23b60 6f 61 64 65 64 20 62 65 63 75 61 73 65 20 74 68  oaded becuase th
23b70 65 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20  e db->init.busy 
23b80 66 6c 61 67 20 69 73 20 73 65 74 2e 20 54 68 69  flag is set. Thi
23b90 73 0a 20 20 2a 2a 20 63 61 6e 20 72 65 73 75 6c  s.  ** can resul
23ba0 74 20 69 6e 20 61 20 22 6e 6f 20 73 75 63 68 20  t in a "no such 
23bb0 74 61 62 6c 65 3a 20 73 71 6c 69 74 65 5f 6d 61  table: sqlite_ma
23bc0 73 74 65 72 22 20 6f 72 20 22 6d 61 6c 66 6f 72  ster" or "malfor
23bd0 6d 65 64 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  med.  ** databas
23be0 65 20 73 63 68 65 6d 61 22 20 65 72 72 6f 72 20  e schema" error 
23bf0 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 74  being returned t
23c00 6f 20 74 68 65 20 75 73 65 72 2e 0a 20 20 2a 2f  o the user..  */
23c10 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
23c20 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65  e3BtreeHoldsMute
23c30 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  x(db->aDb[iDb].p
23c40 42 74 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  Bt) );.  sqlite3
23c50 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 64 62  BtreeEnterAll(db
23c60 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
23c70 20 7c 7c 20 44 62 48 61 73 50 72 6f 70 65 72 74   || DbHasPropert
23c80 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63  y(db, iDb, DB_Sc
23c90 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a 20  hemaLoaded) ){. 
23ca0 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48     zMaster = SCH
23cb0 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a  EMA_TABLE(iDb);.
23cc0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20      initData.db 
23cd0 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61  = db;.    initDa
23ce0 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  ta.iDb = pOp->p1
23cf0 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70  ;.    initData.p
23d00 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45  zErrMsg = &p->zE
23d10 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20  rrMsg;.    zSql 
23d20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
23d30 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c  (db,.       "SEL
23d40 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61  ECT name, rootpa
23d50 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71  ge, sql FROM '%q
23d60 27 2e 25 73 20 57 48 45 52 45 20 25 73 22 2c 0a  '.%s WHERE %s",.
23d70 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69         db->aDb[i
23d80 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74  Db].zName, zMast
23d90 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  er, pOp->p4.z);.
23da0 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20      if( zSql==0 
23db0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
23dc0 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20  LITE_NOMEM;.    
23dd0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 28 76 6f  }else{.      (vo
23de0 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74 79  id)sqlite3Safety
23df0 4f 66 66 28 64 62 29 3b 0a 20 20 20 20 20 20 61  Off(db);.      a
23e00 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
23e10 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20  busy==0 );.     
23e20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
23e30 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61   1;.      initDa
23e40 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
23e50 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  K;.      assert(
23e60 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
23e70 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ed );.      rc =
23e80 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
23e90 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49  , zSql, sqlite3I
23ea0 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e  nitCallback, &in
23eb0 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  itData, 0);.    
23ec0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
23ed0 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44  _OK ) rc = initD
23ee0 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71  ata.rc;.      sq
23ef0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
23f00 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d  zSql);.      db-
23f10 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a  >init.busy = 0;.
23f20 20 20 20 20 20 20 28 76 6f 69 64 29 73 71 6c 69        (void)sqli
23f30 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 3b  te3SafetyOn(db);
23f40 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
23f50 69 74 65 33 42 74 72 65 65 4c 65 61 76 65 41 6c  ite3BtreeLeaveAl
23f60 6c 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  l(db);.  if( rc=
23f70 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
23f80 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
23f90 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
23fa0 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
23fb0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
23fc0 4c 59 5a 45 29 20 26 26 20 21 64 65 66 69 6e 65  LYZE) && !define
23fd0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
23fe0 52 53 45 52 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  RSER)./* Opcode:
23ff0 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
24000 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
24010 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
24020 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
24030 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
24040 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
24050 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
24060 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
24070 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
24080 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
24090 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
240a0 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
240b0 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
240c0 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
240d0 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
240e0 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
240f0 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
24100 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
24110 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
24120 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
24130 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
24140 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20  ->p1);.  break; 
24150 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   .}.#endif /* !d
24160 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
24170 49 54 5f 41 4e 41 4c 59 5a 45 29 20 26 26 20 21  IT_ANALYZE) && !
24180 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
24190 4d 49 54 5f 50 41 52 53 45 52 29 20 20 2a 2f 0a  MIT_PARSER)  */.
241a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
241b0 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20  Table P1 * * P4 
241c0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
241d0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
241e0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
241f0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
24200 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62  cribe.** the tab
24210 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  le named P4 in d
24220 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
24230 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
24240 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  r a table.** is 
24250 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
24260 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
24270 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
24280 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
24290 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
242a0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
242b0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
242c0 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20  P_DropTable: {. 
242d0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
242e0 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c  dDeleteTable(db,
242f0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
24300 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
24310 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
24320 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34  pIndex P1 * * P4
24330 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
24340 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
24350 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
24360 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
24370 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e  scribe.** the in
24380 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  dex named P4 in 
24390 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
243a0 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
243b0 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69  er an index.** i
243c0 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64  s dropped in ord
243d0 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
243e0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
243f0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
24400 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
24410 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
24420 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
24430 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b   OP_DropIndex: {
24440 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
24450 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64  AndDeleteIndex(d
24460 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
24470 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
24480 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
24490 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20  ropTrigger P1 * 
244a0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
244b0 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
244c0 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
244d0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
244e0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
244f0 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20  e trigger named 
24500 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
24510 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
24520 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67  ed after a trigg
24530 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  er.** is dropped
24540 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
24550 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
24560 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
24570 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
24580 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
24590 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
245a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
245b0 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69  rigger: {.  sqli
245c0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
245d0 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
245e0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
245f0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
24600 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
24610 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
24620 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
24630 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
24640 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44   P3 * P5.**.** D
24650 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
24660 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
24670 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
24680 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
24690 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
246a0 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
246b0 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
246c0 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
246d0 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
246e0 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
246f0 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
24700 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
24710 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
24720 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  tains the maximu
24730 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
24740 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
24750 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
24760 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
24770 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
24780 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
24790 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
247a0 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
247b0 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
247c0 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
247d0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
247e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
247f0 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
24800 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
24810 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
24820 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
24830 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
24840 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69  eger.** stored i
24850 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50  n reg(P1), reg(P
24860 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c  1+1), reg(P1+2),
24870 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65   ....  There are
24880 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f   P2 tables.** to
24890 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  tal..**.** If P5
248a0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
248b0 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
248c0 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
248d0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
248e0 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
248f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
24900 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
24910 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
24920 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
24930 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
24940 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
24950 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
24960 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a  t nRoot;      /*
24970 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
24980 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75  s to check.  (Nu
24990 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67  mber of root pag
249a0 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  es.) */.  int *a
249b0 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72  Root;     /* Arr
249c0 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e  ay of rootpage n
249d0 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65  umbers for table
249e0 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20  s to be checked 
249f0 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
24a00 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
24a10 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  nter */.  int nE
24a20 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rr;       /* Num
24a30 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
24a40 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ported */.  char
24a50 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54   *z;        /* T
24a60 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72  ext of the error
24a70 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d   report */.  Mem
24a80 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20   *pnErr;     /* 
24a90 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67  Register keeping
24aa0 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73   track of errors
24ab0 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20 20   remaining */.  
24ac0 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e  .  nRoot = pOp->
24ad0 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52  p2;.  assert( nR
24ae0 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74  oot>0 );.  aRoot
24af0 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
24b00 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
24b10 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20  (int)*(nRoot+1) 
24b20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d  );.  if( aRoot==
24b30 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
24b40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24b50 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
24b60 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 6e  =p->nMem );.  pn
24b70 45 72 72 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Err = &p->aMem[p
24b80 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
24b90 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
24ba0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
24bb0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
24bc0 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  rr->flags & (MEM
24bd0 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
24be0 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
24bf0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
24c00 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e  ;.  for(j=0; j<n
24c10 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  Root; j++){.    
24c20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29  aRoot[j] = (int)
24c30 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
24c40 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20  lue(&pIn1[j]);. 
24c50 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20   }.  aRoot[j] = 
24c60 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
24c70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p5<db->nDb );.
24c80 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
24c90 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
24ca0 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20 20  p->p5))!=0 );.  
24cb0 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  z = sqlite3Btree
24cc0 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64  IntegrityCheck(d
24cd0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e  b->aDb[pOp->p5].
24ce0 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f  pBt, aRoot, nRoo
24cf0 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
24d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d10 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e      (int)pnErr->
24d20 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73  u.i, &nErr);.  s
24d30 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
24d40 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72   aRoot);.  pnErr
24d50 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20  ->u.i -= nErr;. 
24d60 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
24d70 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
24d80 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
24d90 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
24da0 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
24db0 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
24dc0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
24dd0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
24de0 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20  MemSetStr(pIn1, 
24df0 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
24e00 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  F8, sqlite3_free
24e10 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
24e20 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
24e30 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
24e40 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
24e50 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
24e60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
24e70 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
24e80 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
24e90 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  K */../* Opcode:
24ea0 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32   RowSetAdd P1 P2
24eb0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73   * * *.**.** Ins
24ec0 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ert the integer 
24ed0 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65  value held by re
24ee0 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61  gister P2 into a
24ef0 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a   boolean index.*
24f00 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74  * held in regist
24f10 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  er P1..**.** An 
24f20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20  assertion fails 
24f30 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20  if P2 is not an 
24f40 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
24f50 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b   OP_RowSetAdd: {
24f60 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
24f70 0a 20 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20 20  .  Mem *pIdx;.  
24f80 4d 65 6d 20 2a 70 56 61 6c 3b 0a 20 20 61 73 73  Mem *pVal;.  ass
24f90 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
24fa0 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  & pOp->p1<=p->nM
24fb0 65 6d 20 29 3b 0a 20 20 70 49 64 78 20 3d 20 26  em );.  pIdx = &
24fc0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
24fd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
24fe0 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
24ff0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
25000 56 61 6c 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Val = &p->aMem[p
25010 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
25020 74 28 20 28 70 56 61 6c 2d 3e 66 6c 61 67 73 20  t( (pVal->flags 
25030 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
25040 0a 20 20 69 66 28 20 28 70 49 64 78 2d 3e 66 6c  .  if( (pIdx->fl
25050 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
25060 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
25070 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
25080 53 65 74 28 70 49 64 78 29 3b 0a 20 20 20 20 69  Set(pIdx);.    i
25090 66 28 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20  f( (pIdx->flags 
250a0 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
250b0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
250c0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77    }.  sqlite3Row
250d0 53 65 74 49 6e 73 65 72 74 28 70 49 64 78 2d 3e  SetInsert(pIdx->
250e0 75 2e 70 52 6f 77 53 65 74 2c 20 70 56 61 6c 2d  u.pRowSet, pVal-
250f0 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  >u.i);.  break;.
25100 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
25110 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50  wSetRead P1 P2 P
25120 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 74 72  3 * *.**.** Extr
25130 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
25140 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
25150 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
25160 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
25170 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
25180 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
25190 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
251a0 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
251b0 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
251c0 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
251d0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
251e0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
251f0 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
25200 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 6f 75 74 33     /* jump, out3
25210 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 64 78 3b   */.  Mem *pIdx;
25220 0a 20 20 69 36 34 20 76 61 6c 3b 0a 20 20 61 73  .  i64 val;.  as
25230 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
25240 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
25250 4d 65 6d 20 29 3b 0a 20 20 43 48 45 43 4b 5f 46  Mem );.  CHECK_F
25260 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
25270 70 49 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIdx = &p->aMem[
25280 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
25290 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
252a0 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 64  >p3];.  if( (pId
252b0 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  x->flags & MEM_R
252c0 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c  owSet)==0 .   ||
252d0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
252e0 78 74 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77 53  xt(pIdx->u.pRowS
252f0 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29  et, &val)==0.  )
25300 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f  {.    /* The boo
25310 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d  lean index is em
25320 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  pty */.    sqlit
25330 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
25340 28 70 49 64 78 29 3b 0a 20 20 20 20 70 63 20 3d  (pIdx);.    pc =
25350 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
25360 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
25370 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
25380 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
25390 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
253a0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
253b0 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
253c0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
253d0 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
253e0 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65   val);.  }.  bre
253f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
25400 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20  : RowSetTest P1 
25410 50 32 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52  P2 P3 P4.**.** R
25420 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73  egister P3 is as
25430 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20  sumed to hold a 
25440 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
25450 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65  alue. If registe
25460 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  r P1.** contains
25470 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74   a RowSet object
25480 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74   and that RowSet
25490 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73   object contains
254a0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65  .** the value he
254b0 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74  ld in P3, jump t
254c0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f  o register P2. O
254d0 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74  therwise, insert
254e0 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
254f0 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52  in P3 into the R
25500 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e  owSet and contin
25510 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20  ue on to the.** 
25520 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  next opcode..**.
25530 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62  ** The RowSet ob
25540 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65  ject is optimize
25550 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77  d for the case w
25560 68 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20  here successive 
25570 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  sets.** of integ
25580 65 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20  ers, where each 
25590 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  set contains no 
255a0 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68  duplicates. Each
255b0 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65   set.** of value
255c0 73 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  s is identified 
255d0 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76  by a unique P4 v
255e0 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20  alue. The first 
255f0 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65  set.** must have
25600 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61   P4==0, the fina
25610 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34  l set P4=-1.  P4
25620 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20   must be either 
25630 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67  -1 or.** non-neg
25640 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d  ative.  For non-
25650 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
25660 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c  of P4 only the l
25670 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61  ower 4.** bits a
25680 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a  re significant..
25690 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77  **.** This allow
256a0 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a  s optimizations:
256b0 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20   (a) when P4==0 
256c0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
256d0 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20   to test.** the 
256e0 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f  rowset object fo
256f0 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67  r P3, as it is g
25700 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f  uaranteed not to
25710 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20   contain it,.** 
25720 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20  (b) when P4==-1 
25730 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
25740 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76   to insert the v
25750 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c  alue, as it will
25760 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73  .** never be tes
25770 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29  ted for, and (c)
25780 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68   when a value th
25790 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65  at is part of se
257a0 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74  t X is.** insert
257b0 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ed, there is no 
257c0 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74  need to search t
257d0 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d  o see if the sam
257e0 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70  e value was.** p
257f0 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74  reviously insert
25800 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65  ed as part of se
25810 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20  t X (only if it 
25820 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a  was previously.*
25830 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  * inserted as pa
25840 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72  rt of some other
25850 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f   set)..*/.case O
25860 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20  P_RowSetTest: { 
25870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25880 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
25890 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69  , in3 */.  int i
258a0 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74  Set;.  int exist
258b0 73 3b 0a 0a 20 20 69 53 65 74 20 3d 20 70 4f 70  s;..  iSet = pOp
258c0 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74  ->p4.i;.  assert
258d0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn3->flags&ME
258e0 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  M_Int );..  /* I
258f0 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68  f there is anyth
25900 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61  ing other than a
25910 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69   rowset object i
25920 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31  n memory cell P1
25930 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74  ,.  ** delete it
25940 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c   now and initial
25950 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65  ize P1 with an e
25960 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f  mpty rowset.  */
25970 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
25980 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
25990 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
259a0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
259b0 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
259c0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
259d0 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
259e0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
259f0 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
25a00 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
25a10 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74  NT32 );.  assert
25a20 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53  ( iSet==-1 || iS
25a30 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69  et>=0 );.  if( i
25a40 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74  Set ){.    exist
25a50 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65  s = sqlite3RowSe
25a60 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tTest(pIn1->u.pR
25a70 6f 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20  owSet, .        
25a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a90 20 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74         (u8)(iSet
25aa0 3e 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66  >=0 ? iSet & 0xf
25ab0 20 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20   : 0xff),.      
25ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ad0 20 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75           pIn3->u
25ae0 2e 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69  .i);.    if( exi
25af0 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  sts ){.      pc 
25b00 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
25b10 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
25b20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74  }.  }.  if( iSet
25b30 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >=0 ){.    sqlit
25b40 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
25b50 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
25b60 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a  pIn3->u.i);.  }.
25b70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
25b80 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25b90 5f 54 52 49 47 47 45 52 0a 2f 2a 20 4f 70 63 6f  _TRIGGER./* Opco
25ba0 64 65 3a 20 43 6f 6e 74 65 78 74 50 75 73 68 20  de: ContextPush 
25bb0 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 53 61 76  * * * .**.** Sav
25bc0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 56 64  e the current Vd
25bd0 62 65 20 63 6f 6e 74 65 78 74 20 73 75 63 68 20  be context such 
25be0 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
25bf0 65 73 74 6f 72 65 64 20 62 79 20 61 20 43 6f 6e  estored by a Con
25c00 74 65 78 74 50 6f 70 0a 2a 2a 20 6f 70 63 6f 64  textPop.** opcod
25c10 65 2e 20 54 68 65 20 63 6f 6e 74 65 78 74 20 73  e. The context s
25c20 74 6f 72 65 73 20 74 68 65 20 6c 61 73 74 20 69  tores the last i
25c30 6e 73 65 72 74 20 72 6f 77 20 69 64 2c 20 74 68  nsert row id, th
25c40 65 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  e last statement
25c50 20 63 68 61 6e 67 65 0a 2a 2a 20 63 6f 75 6e 74   change.** count
25c60 2c 20 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e  , and the curren
25c70 74 20 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e  t statement chan
25c80 67 65 20 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73  ge count..*/.cas
25c90 65 20 4f 50 5f 43 6f 6e 74 65 78 74 50 75 73 68  e OP_ContextPush
25ca0 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 43  : {.  int i;.  C
25cb0 6f 6e 74 65 78 74 20 2a 70 43 6f 6e 74 65 78 74  ontext *pContext
25cc0 3b 0a 0a 20 20 69 20 3d 20 70 2d 3e 63 6f 6e 74  ;..  i = p->cont
25cd0 65 78 74 53 74 61 63 6b 54 6f 70 2b 2b 3b 0a 20  extStackTop++;. 
25ce0 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b   assert( i>=0 );
25cf0 0a 20 20 2f 2a 20 46 49 58 20 4d 45 3a 20 54 68  .  /* FIX ME: Th
25d00 69 73 20 73 68 6f 75 6c 64 20 62 65 20 61 6c 6c  is should be all
25d10 6f 63 61 74 65 64 20 61 73 20 70 61 72 74 20 6f  ocated as part o
25d20 66 20 74 68 65 20 76 64 62 65 20 61 74 20 63 6f  f the vdbe at co
25d30 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 20 20  mpile-time */.  
25d40 69 66 28 20 69 3e 3d 70 2d 3e 63 6f 6e 74 65 78  if( i>=p->contex
25d50 74 53 74 61 63 6b 44 65 70 74 68 20 29 7b 0a 20  tStackDepth ){. 
25d60 20 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61     p->contextSta
25d70 63 6b 44 65 70 74 68 20 3d 20 69 2b 31 3b 0a 20  ckDepth = i+1;. 
25d80 20 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61     p->contextSta
25d90 63 6b 20 3d 20 73 71 6c 69 74 65 33 44 62 52 65  ck = sqlite3DbRe
25da0 61 6c 6c 6f 63 4f 72 46 72 65 65 28 64 62 2c 20  allocOrFree(db, 
25db0 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 2c  p->contextStack,
25dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25de0 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
25df0 66 28 43 6f 6e 74 65 78 74 29 2a 28 69 2b 31 29  f(Context)*(i+1)
25e00 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 63 6f  );.    if( p->co
25e10 6e 74 65 78 74 53 74 61 63 6b 3d 3d 30 20 29 20  ntextStack==0 ) 
25e20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
25e30 0a 20 20 70 43 6f 6e 74 65 78 74 20 3d 20 26 70  .  pContext = &p
25e40 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b 69  ->contextStack[i
25e50 5d 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 6c  ];.  pContext->l
25e60 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
25e70 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 43 6f 6e  astRowid;.  pCon
25e80 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  text->nChange = 
25e90 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 62 72  p->nChange;.  br
25ea0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
25eb0 65 3a 20 43 6f 6e 74 65 78 74 50 6f 70 20 2a 20  e: ContextPop * 
25ec0 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 52 65 73 74 6f  * * .**.** Resto
25ed0 72 65 20 74 68 65 20 56 64 62 65 20 63 6f 6e 74  re the Vdbe cont
25ee0 65 78 74 20 74 6f 20 74 68 65 20 73 74 61 74 65  ext to the state
25ef0 20 69 74 20 77 61 73 20 69 6e 20 77 68 65 6e 20   it was in when 
25f00 63 6f 6e 74 65 78 74 50 75 73 68 20 77 61 73 20  contextPush was 
25f10 6c 61 73 74 0a 2a 2a 20 65 78 65 63 75 74 65 64  last.** executed
25f20 2e 20 54 68 65 20 63 6f 6e 74 65 78 74 20 73 74  . The context st
25f30 6f 72 65 73 20 74 68 65 20 6c 61 73 74 20 69 6e  ores the last in
25f40 73 65 72 74 20 72 6f 77 20 69 64 2c 20 74 68 65  sert row id, the
25f50 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 0a   last statement.
25f60 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 2c  ** change count,
25f70 20 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74   and the current
25f80 20 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67   statement chang
25f90 65 20 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73 65  e count..*/.case
25fa0 20 4f 50 5f 43 6f 6e 74 65 78 74 50 6f 70 3a 20   OP_ContextPop: 
25fb0 7b 0a 20 20 43 6f 6e 74 65 78 74 20 2a 70 43 6f  {.  Context *pCo
25fc0 6e 74 65 78 74 3b 0a 20 20 70 43 6f 6e 74 65 78  ntext;.  pContex
25fd0 74 20 3d 20 26 70 2d 3e 63 6f 6e 74 65 78 74 53  t = &p->contextS
25fe0 74 61 63 6b 5b 2d 2d 70 2d 3e 63 6f 6e 74 65 78  tack[--p->contex
25ff0 74 53 74 61 63 6b 54 6f 70 5d 3b 0a 20 20 61 73  tStackTop];.  as
26000 73 65 72 74 28 20 70 2d 3e 63 6f 6e 74 65 78 74  sert( p->context
26010 53 74 61 63 6b 54 6f 70 3e 3d 30 20 29 3b 0a 20  StackTop>=0 );. 
26020 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
26030 20 70 43 6f 6e 74 65 78 74 2d 3e 6c 61 73 74 52   pContext->lastR
26040 6f 77 69 64 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e  owid;.  p->nChan
26050 67 65 20 3d 20 70 43 6f 6e 74 65 78 74 2d 3e 6e  ge = pContext->n
26060 43 68 61 6e 67 65 3b 0a 20 20 62 72 65 61 6b 3b  Change;.  break;
26070 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  .}.#endif /* #if
26080 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26090 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66  _TRIGGER */..#if
260a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
260b0 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f  _AUTOINCREMENT./
260c0 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78  * Opcode: MemMax
260d0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
260e0 2a 2a 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ** Set the value
260f0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
26100 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
26110 66 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61  f its current va
26120 6c 75 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76  lue.** and the v
26130 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
26140 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
26150 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f  instruction thro
26160 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
26170 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  he memory cell i
26180 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a  s not initially.
26190 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ** an integer..*
261a0 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78  /.case OP_MemMax
261b0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
261c0 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 73 71 6c 69  1, in2 */.  sqli
261d0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
261e0 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 73 71  rify(pIn1);.  sq
261f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
26200 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
26210 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49  if( pIn1->u.i<pI
26220 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49  n2->u.i){.    pI
26230 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e  n1->u.i = pIn2->
26240 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  u.i;.  }.  break
26250 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
26260 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
26270 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f  CREMENT */../* O
26280 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20  pcode: IfPos P1 
26290 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
262a0 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
262b0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20  egister P1 is 1 
262c0 6f 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70  or greater, jump
262d0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74   to P2..**.** It
262e0 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
262f0 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
26300 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
26310 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
26320 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
26330 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
26340 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
26350 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
26360 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
26370 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Pos: {        /*
26380 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
26390 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
263a0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
263b0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30   if( pIn1->u.i>0
263c0 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f   ){.     pc = pO
263d0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
263e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
263f0 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50  code: IfNeg P1 P
26400 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  2 * * *.**.** If
26410 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
26420 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73  gister P1 is les
26430 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d  s than zero, jum
26440 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20  p to P2. .**.** 
26450 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f  It is illegal to
26460 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75   use this instru
26470 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73  ction on a regis
26480 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a  ter that does.**
26490 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
264a0 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73  integer.  An ass
264b0 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c  ertion fault wil
264c0 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20  l result if you 
264d0 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  try..*/.case OP_
264e0 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20  IfNeg: {        
264f0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
26500 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
26510 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
26520 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
26530 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  <0 ){.     pc = 
26540 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
26550 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26560 4f 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50  Opcode: IfZero P
26570 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
26580 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   If the value of
26590 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
265a0 65 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20  exactly 0, jump 
265b0 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74  to P2. .**.** It
265c0 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
265d0 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
265e0 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
265f0 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
26600 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
26610 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
26620 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
26630 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
26640 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
26650 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f  Zero: {        /
26660 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
26670 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
26680 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
26690 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
266a0 3d 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20  =0 ){.     pc = 
266b0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
266c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
266d0 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20  Opcode: AggStep 
266e0 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
266f0 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
26700 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
26710 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
26720 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
26730 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
26740 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
26750 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
26760 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Def.** structure
26770 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
26780 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55  the function.  U
26790 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  se register.** P
267a0 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  3 as the accumul
267b0 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
267c0 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
267d0 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
267e0 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
267f0 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
26800 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65  /.case OP_AggSte
26810 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  p: {.  int n;.  
26820 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d  int i;.  Mem *pM
26830 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b  em;.  Mem *pRec;
26840 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
26850 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
26860 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
26870 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
26880 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20  .  assert( n>=0 
26890 29 3b 0a 20 20 70 52 65 63 20 3d 20 26 70 2d 3e  );.  pRec = &p->
268a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
268b0 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
268c0 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
268d0 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
268e0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
268f0 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20  +, pRec++){.    
26900 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b  apVal[i] = pRec;
26910 0a 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e  .    storeTypeIn
26920 66 6f 28 70 52 65 63 2c 20 65 6e 63 6f 64 69 6e  fo(pRec, encodin
26930 67 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46  g);.  }.  ctx.pF
26940 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
26950 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70  unc;.  assert( p
26960 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
26970 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
26980 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65    ctx.pMem = pMe
26990 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  m = &p->aMem[pOp
269a0 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e  ->p3];.  pMem->n
269b0 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67  ++;.  ctx.s.flag
269c0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
269d0 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63  ctx.s.z = 0;.  c
269e0 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  tx.s.zMalloc = 0
269f0 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d  ;.  ctx.s.xDel =
26a00 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d   0;.  ctx.s.db =
26a10 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72   db;.  ctx.isErr
26a20 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43  or = 0;.  ctx.pC
26a30 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63  oll = 0;.  if( c
26a40 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20  tx.pFunc->flags 
26a50 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  & SQLITE_FUNC_NE
26a60 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73  EDCOLL ){.    as
26a70 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70  sert( pOp>p->aOp
26a80 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
26a90 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d  pOp[-1].p4type==
26aa0 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
26ab0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
26ac0 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
26ad0 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e  lSeq );.    ctx.
26ae0 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e  pColl = pOp[-1].
26af0 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20  p4.pColl;.  }.  
26b00 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65  (ctx.pFunc->xSte
26b10 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61  p)(&ctx, n, apVa
26b20 6c 29 3b 0a 20 20 69 66 28 20 63 74 78 2e 69 73  l);.  if( ctx.is
26b30 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
26b40 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
26b50 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
26b60 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
26b70 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
26b80 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
26b90 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  sError;.  }.  sq
26ba0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
26bb0 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 62  ase(&ctx.s);.  b
26bc0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26bd0 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20  de: AggFinal P1 
26be0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
26bf0 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61  Execute the fina
26c00 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66  lizer function f
26c10 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
26c20 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d    P1 is.** the m
26c30 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
26c40 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d  hat is the accum
26c50 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61  ulator for the a
26c60 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20  ggregate..**.** 
26c70 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
26c80 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68   of arguments th
26c90 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  at the step func
26ca0 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a  tion takes and.*
26cb0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
26cc0 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
26cd0 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69   for this functi
26ce0 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61  on.  The P2.** a
26cf0 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75  rgument is not u
26d00 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
26d10 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  de.  It is only 
26d20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69  there to disambi
26d30 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f  guate.** functio
26d40 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65  ns that can take
26d50 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73   varying numbers
26d60 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
26d70 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65  The.** P4 argume
26d80 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65  nt is only neede
26d90 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65  d for the degene
26da0 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a  rate case where.
26db0 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  ** the step func
26dc0 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65  tion was not pre
26dd0 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a  viously called..
26de0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69  */.case OP_AggFi
26df0 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  nal: {.  Mem *pM
26e00 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
26e10 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
26e20 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p1<=p->nMem );. 
26e30 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d   pMem = &p->aMem
26e40 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
26e50 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
26e60 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  s & ~(MEM_Null|M
26e70 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20  EM_Agg))==0 );. 
26e80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
26e90 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65  eMemFinalize(pMe
26ea0 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63  m, pOp->p4.pFunc
26eb0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
26ec0 49 54 45 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20  ITE_ERROR ){.   
26ed0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
26ee0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
26ef0 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
26f00 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d  _value_text(pMem
26f10 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ));.  }.  sqlite
26f20 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
26f30 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69  ing(pMem, encodi
26f40 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
26f50 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29  X_BLOBSIZE(pMem)
26f60 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
26f70 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65  dbeMemTooBig(pMe
26f80 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  m) ){.    goto t
26f90 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
26fa0 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65  eak;.}...#if !de
26fb0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
26fc0 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65  T_VACUUM) && !de
26fd0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
26fe0 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63  T_ATTACH)./* Opc
26ff0 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20  ode: Vacuum * * 
27000 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75  * * *.**.** Vacu
27010 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  um the entire da
27020 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70  tabase.  This op
27030 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20  code will cause 
27040 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a  other virtual.**
27050 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20   machines to be 
27060 63 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e  created and run.
27070 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20    It may not be 
27080 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
27090 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74  in.** a transact
270a0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
270b0 56 61 63 75 75 6d 3a 20 7b 0a 20 20 69 66 28 20  Vacuum: {.  if( 
270c0 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
270d0 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
270e0 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
270f0 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33   .  rc = sqlite3
27100 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45  RunVacuum(&p->zE
27110 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 69 66  rrMsg, db);.  if
27120 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
27130 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  n(db) ) goto abo
27140 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
27150 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
27160 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
27170 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
27180 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
27190 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
271a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
271b0 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
271c0 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
271d0 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
271e0 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
271f0 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
27200 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
27210 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
27220 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
27230 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
27240 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
27250 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
27260 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
27270 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
27280 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
27290 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
272a0 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
272b0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
272c0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
272d0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
272e0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
272f0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
27300 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
27310 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63  p->p1].pBt;.  rc
27320 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
27330 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a  ncrVacuum(pBt);.
27340 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
27350 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20  _DONE ){.    pc 
27360 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
27370 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
27380 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  K;.  }.  break;.
27390 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
273a0 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a  ode: Expire P1 *
273b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75   * * *.**.** Cau
273c0 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73  se precompiled s
273d0 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 63  tatements to bec
273e0 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 41 6e 20  ome expired. An 
273f0 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e  expired statemen
27400 74 0a 2a 2a 20 66 61 69 6c 73 20 77 69 74 68 20  t.** fails with 
27410 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 6f 66  an error code of
27420 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69   SQLITE_SCHEMA i
27430 66 20 69 74 20 69 73 20 65 76 65 72 20 65 78 65  f it is ever exe
27440 63 75 74 65 64 20 0a 2a 2a 20 28 76 69 61 20 73  cuted .** (via s
27450 71 6c 69 74 65 33 5f 73 74 65 70 28 29 29 2e 0a  qlite3_step())..
27460 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  ** .** If P1 is 
27470 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20  0, then all SQL 
27480 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d  statements becom
27490 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31  e expired. If P1
274a0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a   is non-zero,.**
274b0 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63   then only the c
274c0 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
274d0 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ng statement is 
274e0 61 66 66 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61  affected. .*/.ca
274f0 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
27500 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
27510 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
27520 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
27530 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
27540 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
27550 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
27560 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
27570 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
27580 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
27590 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
275a0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
275b0 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20  * Obtain a lock 
275c0 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  on a particular 
275d0 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74  table. This inst
275e0 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ruction is only 
275f0 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65  used when.** the
27600 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65   shared-cache fe
27610 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
27620 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  . .**.** If P1 i
27630 73 20 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  s  the index of 
27640 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
27650 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
27660 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
27670 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f   on which the lo
27680 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20  ck is acquired. 
27690 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f   A readlock is o
276a0 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30  btained if P3==0
276b0 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c   or.** a write l
276c0 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a  ock if P3==1..**
276d0 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20  .** P2 contains 
276e0 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66  the root-page of
276f0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f   the table to lo
27700 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e  ck..**.** P4 con
27710 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20  tains a pointer 
27720 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  to the name of t
27730 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c  he table being l
27740 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f  ocked. This is o
27750 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67  nly.** used to g
27760 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72  enerate an error
27770 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20   message if the 
27780 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f  lock cannot be o
27790 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65  btained..*/.case
277a0 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b   OP_TableLock: {
277b0 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 75 38 20  .  int p1;.  u8 
277c0 69 73 57 72 69 74 65 4c 6f 63 6b 3b 0a 0a 20 20  isWriteLock;..  
277d0 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20  p1 = pOp->p1; . 
277e0 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28   isWriteLock = (
277f0 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73  u8)pOp->p3;.  as
27800 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70  sert( p1>=0 && p
27810 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
27820 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
27830 4d 61 73 6b 20 26 20 28 31 3c 3c 70 31 29 29 21  Mask & (1<<p1))!
27840 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
27850 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c  isWriteLock==0 |
27860 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31  | isWriteLock==1
27870 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
27880 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65  e3BtreeLockTable
27890 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74  (db->aDb[p1].pBt
278a0 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69  , pOp->p2, isWri
278b0 74 65 4c 6f 63 6b 29 3b 0a 20 20 69 66 28 20 28  teLock);.  if( (
278c0 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45  rc&0xFF)==SQLITE
278d0 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 63  _LOCKED ){.    c
278e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70  onst char *z = p
278f0 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 73 71  Op->p4.z;.    sq
27900 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
27910 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
27920 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20  "database table 
27930 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20  is locked: %s", 
27940 7a 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  z);.  }.  break;
27950 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
27960 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
27970 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
27980 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
27990 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
279a0 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
279b0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
279c0 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
279d0 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
279e0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
279f0 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
27a00 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
27a10 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
27a20 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
27a30 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
27a40 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
27a50 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
27a60 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
27a70 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
27a80 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
27a90 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
27aa0 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
27ab0 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
27ac0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
27ad0 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
27ae0 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
27af0 65 67 69 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65  egin: {.  sqlite
27b00 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
27b10 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
27b20 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73  .pVtab;.  rc = s
27b30 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28  qlite3VtabBegin(
27b40 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  db, pVtab);.  if
27b50 28 20 70 56 74 61 62 20 29 7b 0a 20 20 20 20 73  ( pVtab ){.    s
27b60 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
27b70 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
27b80 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
27b90 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
27ba0 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73     pVtab->zErrMs
27bb0 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  g = 0;.  }.  bre
27bc0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
27bd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
27be0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
27bf0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27c00 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
27c10 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65   Opcode: VCreate
27c20 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
27c30 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
27c40 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
27c50 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
27c60 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43   P1. Call the xC
27c70 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20  reate method.** 
27c80 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
27c90 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61  */.case OP_VCrea
27ca0 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c  te: {.  rc = sql
27cb0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
27cc0 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  te(db, pOp->p1, 
27cd0 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a  pOp->p4.z, &p->z
27ce0 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b  ErrMsg);.  break
27cf0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
27d00 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
27d10 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
27d20 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
27d30 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
27d40 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20  pcode: VDestroy 
27d50 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
27d60 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
27d70 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
27d80 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
27d90 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44  P1.  Call the xD
27da0 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a  estroy method.**
27db0 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a   of that table..
27dc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74  */.case OP_VDest
27dd0 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74  roy: {.  p->inVt
27de0 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20  abMethod = 2;.  
27df0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
27e00 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20  CallDestroy(db, 
27e10 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
27e20 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  .z);.  p->inVtab
27e30 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72  Method = 0;.  br
27e40 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
27e50 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27e60 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
27e70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
27e80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
27e90 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20  * Opcode: VOpen 
27ea0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
27eb0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
27ec0 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
27ed0 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
27ee0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
27ef0 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73  ucture..** P1 is
27f00 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   a cursor number
27f10 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  .  This opcode o
27f20 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f  pens a cursor to
27f30 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
27f40 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73  table and stores
27f50 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20   that cursor in 
27f60 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P1..*/.case OP_V
27f70 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
27f80 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71  rsor *pCur;.  sq
27f90 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
27fa0 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r *pVtabCursor;.
27fb0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
27fc0 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33  pVtab;.  sqlite3
27fd0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
27fe0 3b 0a 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20  ;..  pCur = 0;. 
27ff0 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30   pVtabCursor = 0
28000 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ;.  pVtab = pOp-
28010 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  >p4.pVtab;.  pMo
28020 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f  dule = (sqlite3_
28030 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e  module *)pVtab->
28040 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
28050 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f 64 75  t(pVtab && pModu
28060 6c 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  le);.  if( sqlit
28070 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
28080 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
28090 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63  _to_misuse;.  rc
280a0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65   = pModule->xOpe
280b0 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61 62 43  n(pVtab, &pVtabC
280c0 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65  ursor);.  sqlite
280d0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
280e0 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45  ErrMsg);.  p->zE
280f0 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
28100 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d  ErrMsg;.  pVtab-
28110 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
28120 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
28130 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
28140 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
28150 73 65 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45  se;.  if( SQLITE
28160 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f  _OK==rc ){.    /
28170 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c  * Initialize sql
28180 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
28190 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20   base class */. 
281a0 20 20 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e     pVtabCursor->
281b0 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a  pVtab = pVtab;..
281c0 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73      /* Initialis
281d0 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62  e vdbe cursor ob
281e0 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72  ject */.    pCur
281f0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
28200 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  r(p, pOp->p1, 0,
28210 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28   -1, 0);.    if(
28220 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70   pCur ){.      p
28230 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
28240 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a   = pVtabCursor;.
28250 20 20 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64        pCur->pMod
28260 75 6c 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f  ule = pVtabCurso
28270 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  r->pVtab->pModul
28280 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  e;.    }else{.  
28290 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61      db->mallocFa
282a0 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  iled = 1;.      
282b0 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28  pModule->xClose(
282c0 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
282d0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
282e0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
282f0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
28300 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
28310 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
28320 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
28330 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31  code: VFilter P1
28340 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
28350 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
28360 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f   opened using VO
28370 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61  pen.  P2 is an a
28380 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
28390 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74  o if.** the filt
283a0 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20  ered result set 
283b0 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  is empty..**.** 
283c0 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c  P4 is either NUL
283d0 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68  L or a string th
283e0 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64  at was generated
283f0 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64   by the xBestInd
28400 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20  ex.** method of 
28410 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65  the module.  The
28420 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
28430 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  of the P4 string
28440 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74   is left.** to t
28450 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  he module implem
28460 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
28470 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
28480 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20  kes the xFilter 
28490 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69  method on the vi
284a0 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63  rtual table spec
284b0 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20  ified.** by P1. 
284c0 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65   The integer que
284d0 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65  ry plan paramete
284e0 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20  r to xFilter is 
284f0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
28500 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74  er.** P3. Regist
28510 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74  er P3+1 stores t
28520 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  he argc paramete
28530 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74  r to be passed t
28540 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72  o the.** xFilter
28550 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65   method. Registe
28560 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72  rs P3+2..P3+1+ar
28570 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a  gc are the argc.
28580 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61  ** additional pa
28590 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61  rameters which a
285a0 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20  re passed to.** 
285b0 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e  xFilter as argv.
285c0 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62   Register P3+2 b
285d0 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77  ecomes argv[0] w
285e0 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46  hen passed to xF
285f0 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a  ilter..**.** A j
28600 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
28610 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  2 if the result 
28620 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72  set after filter
28630 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70  ing would be emp
28640 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ty..*/.case OP_V
28650 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a  Filter: {   /* j
28660 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72  ump */.  int nAr
28670 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b  g;.  int iQuery;
28680 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
28690 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
286a0 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b  ;.  Mem *pQuery;
286b0 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20  .  Mem *pArgc;. 
286c0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
286d0 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
286e0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
286f0 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65  b *pVtab;.  Vdbe
28700 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
28710 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69  int res;.  int i
28720 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b  ;.  Mem **apArg;
28730 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26 70 2d  ..  pQuery = &p-
28740 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
28750 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72    pArgc = &pQuer
28760 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70  y[1];.  pCur = p
28770 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
28780 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
28790 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65  CE(pOp->p3, pQue
287a0 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ry);.  assert( p
287b0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
287c0 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f   );.  pVtabCurso
287d0 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  r = pCur->pVtabC
287e0 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d  ursor;.  pVtab =
287f0 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
28800 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
28810 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
28820 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20  ..  /* Grab the 
28830 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64  index number and
28840 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73   argc parameters
28850 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
28860 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d  Query->flags&MEM
28870 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67  _Int)!=0 && pArg
28880 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  c->flags==MEM_In
28890 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69  t );.  nArg = (i
288a0 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20  nt)pArgc->u.i;. 
288b0 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70   iQuery = (int)p
288c0 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f  Query->u.i;..  /
288d0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69  * Invoke the xFi
288e0 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  lter method */. 
288f0 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a   {.    res = 0;.
28900 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61      apArg = p->a
28910 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20  pArg;.    for(i 
28920 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  = 0; i<nArg; i++
28930 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  ){.      apArg[i
28940 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b  ] = &pArgc[i+1];
28950 0a 20 20 20 20 20 20 73 74 6f 72 65 54 79 70 65  .      storeType
28960 49 6e 66 6f 28 61 70 41 72 67 5b 69 5d 2c 20 30  Info(apArg[i], 0
28970 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  );.    }..    if
28980 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
28990 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
289a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
289b0 65 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  e;.    sqlite3Vt
289c0 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20  abLock(pVtab);. 
289d0 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68     p->inVtabMeth
289e0 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  od = 1;.    rc =
289f0 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65   pModule->xFilte
28a00 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69  r(pVtabCursor, i
28a10 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a  Query, pOp->p4.z
28a20 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a  , nArg, apArg);.
28a30 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74      p->inVtabMet
28a40 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  hod = 0;.    sql
28a50 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
28a60 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
28a70 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74  p->zErrMsg = pVt
28a80 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20  ab->zErrMsg;.   
28a90 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20   pVtab->zErrMsg 
28aa0 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 0;.    sqlite3
28ab0 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70  VtabUnlock(db, p
28ac0 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72  Vtab);.    if( r
28ad0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
28ae0 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64        res = pMod
28af0 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43  ule->xEof(pVtabC
28b00 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
28b10 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
28b20 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
28b30 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
28b40 73 75 73 65 3b 0a 0a 20 20 20 20 69 66 28 20 72  suse;..    if( r
28b50 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  es ){.      pc =
28b60 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
28b70 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e    }.  }.  pCur->
28b80 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20  nullRow = 0;..  
28b90 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
28ba0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
28bb0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
28bc0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
28bd0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
28be0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c  ./* Opcode: VCol
28bf0 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a  umn P1 P2 P3 * *
28c00 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
28c10 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32   value of the P2
28c20 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a  -th column of.**
28c30 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20   the row of the 
28c40 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68  virtual-table th
28c50 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75  at the .** P1 cu
28c60 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67  rsor is pointing
28c70 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65   to into registe
28c80 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
28c90 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71  _VColumn: {.  sq
28ca0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
28cb0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
28cc0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
28cd0 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74  le;.  Mem *pDest
28ce0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
28cf0 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20  ext sContext;.. 
28d00 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
28d10 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
28d20 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
28d30 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
28d40 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
28d50 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
28d60 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
28d70 0a 20 20 70 44 65 73 74 20 3d 20 26 70 2d 3e 61  .  pDest = &p->a
28d80 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
28d90 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
28da0 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  w ){.    sqlite3
28db0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
28dc0 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  Dest);.    break
28dd0 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
28de0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
28df0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
28e00 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
28e10 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
28e20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
28e30 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43   );.  memset(&sC
28e40 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f  ontext, 0, sizeo
28e50 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20  f(sContext));.. 
28e60 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63   /* The output c
28e70 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20  ell may already 
28e80 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61 6c  have a buffer al
28e90 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20  located. Move.  
28ea0 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20 63  ** the current c
28eb0 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74  ontents to sCont
28ec0 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61 73 65  ext.s so in case
28ed0 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
28ee0 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65  on .  ** can use
28ef0 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c   the already all
28f00 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e  ocated buffer in
28f10 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74  stead of allocat
28f20 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20  ing a .  ** new 
28f30 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  one..  */.  sqli
28f40 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
28f50 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65 73  sContext.s, pDes
28f60 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  t);.  MemSetType
28f70 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74 2e 73  Flag(&sContext.s
28f80 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20  , MEM_Null);..  
28f90 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
28fa0 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
28fb0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
28fc0 75 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  use;.  rc = pMod
28fd0 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75  ule->xColumn(pCu
28fe0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  r->pVtabCursor, 
28ff0 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e  &sContext, pOp->
29000 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  p2);.  sqlite3Db
29010 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
29020 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d  Msg);.  p->zErrM
29030 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
29040 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45  Msg;.  pVtab->zE
29050 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 2f 2a  rrMsg = 0;..  /*
29060 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
29070 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
29080 20 74 6f 20 74 68 65 20 50 33 20 72 65 67 69 73   to the P3 regis
29090 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20  ter. We.  ** do 
290a0 74 68 69 73 20 72 65 67 61 72 64 6c 65 73 73 20  this regardless 
290b0 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
290c0 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  t an error occur
290d0 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20 61 6e  red to ensure an
290e0 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61  y.  ** dynamic a
290f0 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f  llocation in sCo
29100 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d 20 73  ntext.s (a Mem s
29110 74 72 75 63 74 29 20 69 73 20 20 72 65 6c 65 61  truct) is  relea
29120 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  sed..  */.  sqli
29130 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
29140 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e  oding(&sContext.
29150 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  s, encoding);.  
29160 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
29170 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
29180 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
29190 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f  Move(pDest, &sCo
291a0 6e 74 65 78 74 2e 73 29 3b 0a 20 20 55 50 44 41  ntext.s);.  UPDA
291b0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
291c0 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73  pDest);..  if( s
291d0 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
291e0 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61  b) ){.    goto a
291f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
29200 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  se;.  }.  if( sq
29210 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
29220 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20  ig(pDest) ){.   
29230 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
29240 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
29250 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
29260 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
29270 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
29280 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
29290 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
292a0 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a   VNext P1 P2 * *
292b0 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65   *.**.** Advance
292c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50   virtual table P
292d0 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  1 to the next ro
292e0 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20  w in its result 
292f0 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20  set and.** jump 
29300 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
29310 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76  2.  Or, if the v
29320 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
29330 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20   reached.** the 
29340 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c  end of its resul
29350 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c  t set, then fall
29360 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
29370 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
29380 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65  ..*/.case OP_VNe
29390 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  xt: {   /* jump 
293a0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
293b0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
293c0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
293d0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
293e0 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73   res;.  VdbeCurs
293f0 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73  or *pCur;..  res
29400 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70   = 0;.  pCur = p
29410 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
29420 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
29430 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
29440 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
29450 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61  lRow ){.    brea
29460 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
29470 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
29480 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  or->pVtab;.  pMo
29490 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
294a0 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
294b0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20   pModule->xNext 
294c0 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  );..  /* Invoke 
294d0 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68  the xNext() meth
294e0 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
294f0 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61  . There is no wa
29500 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75  y for the.  ** u
29510 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d  nderlying implem
29520 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75  entation to retu
29530 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f  rn an error if o
29540 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67  ne occurs during
29550 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49  .  ** xNext(). I
29560 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72  nstead, if an er
29570 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65  ror occurs, true
29580 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e   is returned (in
29590 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20  dicating that . 
295a0 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69   ** data is avai
295b0 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65  lable) and the e
295c0 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e  rror code return
295d0 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20  ed when xColumn 
295e0 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68  or.  ** some oth
295f0 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78  er method is nex
29600 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65  t invoked on the
29610 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61   save virtual ta
29620 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f  ble cursor..  */
29630 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
29640 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
29650 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
29660 6d 69 73 75 73 65 3b 0a 20 20 73 71 6c 69 74 65  misuse;.  sqlite
29670 33 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29  3VtabLock(pVtab)
29680 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  ;.  p->inVtabMet
29690 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  hod = 1;.  rc = 
296a0 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70  pModule->xNext(p
296b0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
296c0 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  );.  p->inVtabMe
296d0 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69  thod = 0;.  sqli
296e0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
296f0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e  >zErrMsg);.  p->
29700 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
29710 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61  >zErrMsg;.  pVta
29720 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
29730 20 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c    sqlite3VtabUnl
29740 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a  ock(db, pVtab);.
29750 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
29760 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  _OK ){.    res =
29770 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
29780 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
29790 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  );.  }.  if( sql
297a0 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
297b0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
297c0 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20  e_to_misuse;..  
297d0 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20  if( !res ){.    
297e0 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64  /* If there is d
297f0 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20  ata, jump to P2 
29800 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  */.    pc = pOp-
29810 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
29820 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
29830 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
29840 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
29850 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
29860 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
29870 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61  /* Opcode: VRena
29880 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  me P1 * * P4 *.*
29890 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
298a0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
298b0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
298c0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
298d0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
298e0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
298f0 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
29900 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  ing xRename meth
29910 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  od. The value.**
29920 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
29930 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
29940 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20   zName argument 
29950 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d  to the xRename m
29960 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ethod..*/.case O
29970 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73  P_VRename: {.  s
29980 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
29990 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65  ab;.  Mem *pName
299a0 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
299b0 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 70 4e  ->p4.pVtab;.  pN
299c0 61 6d 65 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ame = &p->aMem[p
299d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
299e0 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  t( pVtab->pModul
299f0 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20  e->xRename );.  
29a00 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
29a10 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a  Op->p1, pName);.
29a20 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 4e 61  .  Stringify(pNa
29a30 6d 65 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 0a  me, encoding);..
29a40 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
29a50 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
29a60 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
29a70 69 73 75 73 65 3b 0a 20 20 73 71 6c 69 74 65 33  isuse;.  sqlite3
29a80 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b  VtabLock(pVtab);
29a90 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70  .  rc = pVtab->p
29aa0 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28  Module->xRename(
29ab0 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29  pVtab, pName->z)
29ac0 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
29ad0 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
29ae0 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  );.  p->zErrMsg 
29af0 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67  = pVtab->zErrMsg
29b00 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  ;.  pVtab->zErrM
29b10 73 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  sg = 0;.  sqlite
29b20 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20  3VtabUnlock(db, 
29b30 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 71  pVtab);.  if( sq
29b40 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62  lite3SafetyOn(db
29b50 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
29b60 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20  ue_to_misuse;.. 
29b70 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
29b80 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
29b90 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
29ba0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
29bb0 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
29bc0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
29bd0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
29be0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
29bf0 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
29c00 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
29c10 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
29c20 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
29c30 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65  sponding xUpdate
29c40 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75   method. P2 valu
29c50 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67  es.** are contig
29c60 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  uous memory cell
29c70 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33  s starting at P3
29c80 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20   to pass to the 
29c90 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f  xUpdate .** invo
29ca0 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  cation. The valu
29cb0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50  e in register (P
29cc0 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f  3+P2-1) correspo
29cd0 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70  nds to the .** p
29ce0 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  2th element of t
29cf0 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61  he argv array pa
29d00 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e  ssed to xUpdate.
29d10 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61  .**.** The xUpda
29d20 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64  te method will d
29d30 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e  o a DELETE or an
29d40 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e   INSERT or both.
29d50 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20  .** The argv[0] 
29d60 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63  element (which c
29d70 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65  orresponds to me
29d80 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a  mory cell P3).**
29d90 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
29da0 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
29db0 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73  .  If argv[0] is
29dc0 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a   NULL then no .*
29dd0 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72  * deletion occur
29de0 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20  s.  The argv[1] 
29df0 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72  element is the r
29e00 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20  owid of the new 
29e10 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63  .** row.  This c
29e20 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61  an be NULL to ha
29e30 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ve the virtual t
29e40 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20  able select the 
29e50 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f  new .** rowid fo
29e60 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73  r itself.  The s
29e70 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e  ubsequent elemen
29e80 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20  ts in the array 
29e90 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  are .** the valu
29ea0 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  es of columns in
29eb0 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a   the new row..**
29ec0 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65  .** If P2==1 the
29ed0 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70  n no insert is p
29ee0 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b  erformed.  argv[
29ef0 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  0] is the rowid 
29f00 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64  of.** a row to d
29f10 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  elete..**.** P1 
29f20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61  is a boolean fla
29f30 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20  g. If it is set 
29f40 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20  to true and the 
29f50 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20  xUpdate call.** 
29f60 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  is successful, t
29f70 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65  hen the value re
29f80 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
29f90 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
29fa0 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74  wid() .** is set
29fb0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
29fc0 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74   the rowid for t
29fd0 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65  he row just inse
29fe0 72 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rted..*/.case OP
29ff0 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71  _VUpdate: {.  sq
2a000 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2a010 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
2a020 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
2a030 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
2a040 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36  i;.  sqlite_int6
2a050 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a  4 rowid;.  Mem *
2a060 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70  *apArg;.  Mem *p
2a070 58 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f  X;..  pVtab = pO
2a080 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 70  p->p4.pVtab;.  p
2a090 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65  Module = (sqlite
2a0a0 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62  3_module *)pVtab
2a0b0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72  ->pModule;.  nAr
2a0c0 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  g = pOp->p2;.  a
2a0d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2a0e0 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20  pe==P4_VTAB );. 
2a0f0 20 69 66 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 55   if( pModule->xU
2a100 70 64 61 74 65 3d 3d 30 20 29 7b 0a 20 20 20 20  pdate==0 ){.    
2a110 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2a120 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2a130 2c 20 22 72 65 61 64 2d 6f 6e 6c 79 20 74 61 62  , "read-only tab
2a140 6c 65 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  le");.    rc = S
2a150 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
2a160 65 6c 73 65 7b 0a 20 20 20 20 61 70 41 72 67 20  else{.    apArg 
2a170 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
2a180 70 58 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  pX = &p->aMem[pO
2a190 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28  p->p3];.    for(
2a1a0 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  i=0; i<nArg; i++
2a1b0 29 7b 0a 20 20 20 20 20 20 73 74 6f 72 65 54 79  ){.      storeTy
2a1c0 70 65 49 6e 66 6f 28 70 58 2c 20 30 29 3b 0a 20  peInfo(pX, 0);. 
2a1d0 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
2a1e0 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a  pX;.      pX++;.
2a1f0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71      }.    if( sq
2a200 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
2a210 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
2a220 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
2a230 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f     sqlite3VtabLo
2a240 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 20 20 72  ck(pVtab);.    r
2a250 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  c = pModule->xUp
2a260 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67  date(pVtab, nArg
2a270 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29  , apArg, &rowid)
2a280 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
2a290 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
2a2a0 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
2a2b0 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
2a2c0 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d  rMsg;.    pVtab-
2a2d0 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
2a2e0 20 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c    sqlite3VtabUnl
2a2f0 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a  ock(db, pVtab);.
2a300 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
2a310 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f  afetyOn(db) ) go
2a320 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2a330 6d 69 73 75 73 65 3b 0a 20 20 20 20 69 66 28 20  misuse;.    if( 
2a340 70 4f 70 2d 3e 70 31 20 26 26 20 72 63 3d 3d 53  pOp->p1 && rc==S
2a350 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2a360 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31    assert( nArg>1
2a370 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20   && apArg[0] && 
2a380 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73  (apArg[0]->flags
2a390 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20  &MEM_Null) );.  
2a3a0 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69      db->lastRowi
2a3b0 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d  d = rowid;.    }
2a3c0 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  .    p->nChange+
2a3d0 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
2a3e0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2a3f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2a400 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2a410 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
2a420 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
2a430 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74  pcode: Pagecount
2a440 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2a450 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
2a460 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70  rent number of p
2a470 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65  ages in database
2a480 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65   P1 to memory ce
2a490 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ll P2..*/.case O
2a4a0 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20  P_Pagecount: {  
2a4b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
2a4c0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
2a4d0 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20    int p1;.  int 
2a4e0 6e 50 61 67 65 3b 0a 20 20 50 61 67 65 72 20 2a  nPage;.  Pager *
2a4f0 70 50 61 67 65 72 3b 0a 0a 20 20 70 31 20 3d 20  pPager;..  p1 = 
2a500 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 70 50 61 67  pOp->p1; .  pPag
2a510 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
2a520 65 50 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 70  ePager(db->aDb[p
2a530 31 5d 2e 70 42 74 29 3b 0a 20 20 72 63 20 3d 20  1].pBt);.  rc = 
2a540 73 71 6c 69 74 65 33 50 61 67 65 72 50 61 67 65  sqlite3PagerPage
2a550 63 6f 75 6e 74 28 70 50 61 67 65 72 2c 20 26 6e  count(pPager, &n
2a560 50 61 67 65 29 3b 0a 20 20 69 66 28 20 72 63 3d  Page);.  if( rc=
2a570 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2a580 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
2a590 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
2a5a0 74 2d 3e 75 2e 69 20 3d 20 6e 50 61 67 65 3b 0a  t->u.i = nPage;.
2a5b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2a5c0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
2a5d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
2a5e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 63  ./* Opcode: Trac
2a5f0 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  e * * * P4 *.**.
2a600 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69 73  ** If tracing is
2a610 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65   enabled (by the
2a620 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
2a630 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65  ) interface, the
2a640 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73  n.** the UTF-8 s
2a650 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20  tring contained 
2a660 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65 64  in P4 is emitted
2a670 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63 61   on the trace ca
2a680 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20  llback..*/.case 
2a690 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20 20 63 68  OP_Trace: {.  ch
2a6a0 61 72 20 2a 7a 54 72 61 63 65 3b 0a 0a 20 20 7a  ar *zTrace;..  z
2a6b0 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
2a6c0 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
2a6d0 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28   p->zSql);.  if(
2a6e0 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69   zTrace ){.    i
2a6f0 66 28 20 64 62 2d 3e 78 54 72 61 63 65 20 29 7b  f( db->xTrace ){
2a700 0a 20 20 20 20 20 20 64 62 2d 3e 78 54 72 61 63  .      db->xTrac
2a710 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c  e(db->pTraceArg,
2a720 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a   zTrace);.    }.
2a730 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2a740 42 55 47 0a 20 20 20 20 69 66 28 20 28 64 62 2d  BUG.    if( (db-
2a750 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
2a760 53 71 6c 54 72 61 63 65 29 21 3d 30 20 29 7b 0a  SqlTrace)!=0 ){.
2a770 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 62        sqlite3Deb
2a780 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72  ugPrintf("SQL-tr
2a790 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61  ace: %s\n", zTra
2a7a0 63 65 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ce);.    }.#endi
2a7b0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
2a7c0 47 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b  G */.  }.  break
2a7d0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ;.}.#endif.../* 
2a7e0 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a  Opcode: Noop * *
2a7f0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20   * * *.**.** Do 
2a800 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69  nothing.  This i
2a810 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66  nstruction is of
2a820 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20  ten useful as a 
2a830 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74  jump.** destinat
2a840 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68  ion..*/./*.** Th
2a850 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20  e magic Explain 
2a860 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20  opcode are only 
2a870 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78  inserted when ex
2a880 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a  plain==2 (which.
2a890 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65  ** is to say whe
2a8a0 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55  n the EXPLAIN QU
2a8b0 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20  ERY PLAN syntax 
2a8c0 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69  is used.).** Thi
2a8d0 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73  s opcode records
2a8e0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
2a8f0 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e  m the optimizer.
2a900 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74    It is the.** t
2a910 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d  he same as a no-
2a920 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  op.  This opcode
2a930 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69  snever appears i
2a940 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67  n a real VM prog
2a950 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a  ram..*/.default:
2a960 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54   {          /* T
2a970 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50  his is really OP
2a980 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70  _Noop and OP_Exp
2a990 6c 61 69 6e 20 2a 2f 0a 20 20 62 72 65 61 6b 3b  lain */.  break;
2a9a0 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .}../***********
2a9b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a9c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a9d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a9e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a9f0 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20  **.** The cases 
2aa00 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74  of the switch st
2aa10 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68  atement above th
2aa20 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61  is line should a
2aa30 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a  ll be indented.*
2aa40 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  * by 6 spaces.  
2aa50 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  But the left-mos
2aa60 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20  t 6 spaces have 
2aa70 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20  been removed to 
2aa80 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72  improve the.** r
2aa90 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f  eadability.  Fro
2aaa0 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20  m this point on 
2aab0 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c  down, the normal
2aac0 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c   indentation rul
2aad0 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72  es are.** restor
2aae0 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ed..************
2aaf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab30 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66  */.    }..#ifdef
2ab40 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
2ab50 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c    {.      u64 el
2ab60 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48  apsed = sqlite3H
2ab70 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b  wtime() - start;
2ab80 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c  .      pOp->cycl
2ab90 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20  es += elapsed;. 
2aba0 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b       pOp->cnt++;
2abb0 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20 66  .#if 0.        f
2abc0 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22  printf(stdout, "
2abd0 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65  %10llu ", elapse
2abe0 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  d);.        sqli
2abf0 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
2ac00 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26  tdout, origPc, &
2ac10 70 2d 3e 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b  p->aOp[origPc]);
2ac20 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65  .#endif.    }.#e
2ac30 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65  ndif..    /* The
2ac40 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20   following code 
2ac50 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20  adds nothing to 
2ac60 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74  the actual funct
2ac70 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20  ionality.    ** 
2ac80 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  of the program. 
2ac90 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65   It is only here
2aca0 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64   for testing and
2acb0 20 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20   debugging..    
2acc0 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20  ** On the other 
2acd0 68 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75  hand, it does bu
2ace0 72 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65 76  rn CPU cycles ev
2acf0 65 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68  ery time through
2ad00 0a 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c  .    ** the eval
2ad10 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20  uator loop.  So 
2ad20 77 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20  we can leave it 
2ad30 6f 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20  out when NDEBUG 
2ad40 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20  is defined..    
2ad50 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  */.#ifndef NDEBU
2ad60 47 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  G.    assert( pc
2ad70 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f  >=-1 && pc<p->nO
2ad80 70 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  p );..#ifdef SQL
2ad90 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
2ada0 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20  ( p->trace ){.  
2adb0 20 20 20 20 69 66 28 20 72 63 21 3d 30 20 29 20      if( rc!=0 ) 
2adc0 66 70 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65  fprintf(p->trace
2add0 2c 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a  ,"rc=%d\n",rc);.
2ade0 20 20 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70        if( opProp
2adf0 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
2ae00 32 5f 50 52 45 52 45 4c 45 41 53 45 20 29 7b 0a  2_PRERELEASE ){.
2ae10 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
2ae20 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20  Trace(p->trace, 
2ae30 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
2ae40 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
2ae50 28 20 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f  ( opProperty & O
2ae60 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20  PFLG_OUT3 ){.   
2ae70 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
2ae80 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70  ce(p->trace, pOp
2ae90 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ->p3, pOut);.   
2aea0 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
2aeb0 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  f  /* SQLITE_DEB
2aec0 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a  UG */.#endif  /*
2aed0 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20   NDEBUG */.  }  
2aee0 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68  /* The end of th
2aef0 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74  e for(;;) loop t
2af00 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68  he loops through
2af10 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f   opcodes */..  /
2af20 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
2af30 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61  is point, it mea
2af40 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f  ns that executio
2af50 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69  n is finished wi
2af60 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  th.  ** an error
2af70 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20   of some kind.. 
2af80 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68   */.vdbe_error_h
2af90 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72  alt:.  assert( r
2afa0 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  c );.  p->rc = r
2afb0 63 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  c;.  sqlite3Vdbe
2afc0 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72  Halt(p);.  if( r
2afd0 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  c==SQLITE_IOERR_
2afe0 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c  NOMEM ) db->mall
2aff0 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
2b000 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2b010 52 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73  R;..  /* This is
2b020 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75   the only way ou
2b030 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64  t of this proced
2b040 75 72 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f  ure.  We have to
2b050 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68  .  ** release th
2b060 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72  e mutexes on btr
2b070 65 65 73 20 74 68 61 74 20 77 65 72 65 20 61 63  ees that were ac
2b080 71 75 69 72 65 64 20 61 74 20 74 68 65 0a 20 20  quired at the.  
2b090 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f  ** top. */.vdbe_
2b0a0 72 65 74 75 72 6e 3a 0a 20 20 73 71 6c 69 74 65  return:.  sqlite
2b0b0 33 42 74 72 65 65 4d 75 74 65 78 41 72 72 61 79  3BtreeMutexArray
2b0c0 4c 65 61 76 65 28 26 70 2d 3e 61 4d 75 74 65 78  Leave(&p->aMutex
2b0d0 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
2b0e0 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
2b0f0 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f  re if a string o
2b100 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68  r blob larger th
2b110 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  an SQLITE_MAX_LE
2b120 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63  NGTH.  ** is enc
2b130 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74  ountered..  */.t
2b140 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65  oo_big:.  sqlite
2b150 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2b160 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72  ErrMsg, db, "str
2b170 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20  ing or blob too 
2b180 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  big");.  rc = SQ
2b190 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67  LITE_TOOBIG;.  g
2b1a0 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
2b1b0 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
2b1c0 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c  to here if a mal
2b1d0 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a  loc() fails..  *
2b1e0 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e  /.no_mem:.  db->
2b1f0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
2b200 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  ;.  sqlite3SetSt
2b210 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2b220 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65  , db, "out of me
2b230 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53  mory");.  rc = S
2b240 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67  QLITE_NOMEM;.  g
2b250 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
2b260 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
2b270 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 20 53  to here for an S
2b280 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72  QLITE_MISUSE err
2b290 6f 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  or..  */.abort_d
2b2a0 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3a 0a 20 20  ue_to_misuse:.  
2b2b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55  rc = SQLITE_MISU
2b2c0 53 45 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  SE;.  /* Fall th
2b2d0 72 75 20 69 6e 74 6f 20 61 62 6f 72 74 5f 64 75  ru into abort_du
2b2e0 65 5f 74 6f 5f 65 72 72 6f 72 20 2a 2f 0a 0a 20  e_to_error */.. 
2b2f0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2b300 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b   for any other k
2b310 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72  ind of fatal err
2b320 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61  or.  The "rc" va
2b330 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75  riable.  ** shou
2b340 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f  ld hold the erro
2b350 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61  r number..  */.a
2b360 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2b370 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  r:.  assert( p->
2b380 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20  zErrMsg==0 );.  
2b390 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
2b3a0 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  iled ) rc = SQLI
2b3b0 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20  TE_NOMEM;.  if( 
2b3c0 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc!=SQLITE_IOERR
2b3d0 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71  _NOMEM ){.    sq
2b3e0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2b3f0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2b400 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
2b410 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20  Str(rc));.  }.  
2b420 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
2b430 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
2b440 20 74 6f 20 68 65 72 65 20 69 66 20 74 68 65 20   to here if the 
2b450 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
2b460 74 28 29 20 41 50 49 20 73 65 74 73 20 74 68 65  t() API sets the
2b470 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20   interrupt.  ** 
2b480 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  flag..  */.abort
2b490 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
2b4a0 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  t:.  assert( db-
2b4b0 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
2b4c0 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  d );.  rc = SQLI
2b4d0 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
2b4e0 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
2b4f0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2b500 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2b510 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
2b520 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f  Str(rc));.  goto
2b530 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
2b540 3b 0a 7d 0a                                      ;.}.