/ Hex Artifact Content
Login

Artifact c719017876405d32c9f342e39dc5b10dceff5811:


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 31 34 20 32 30 30 39  e.c,v 1.814 2009
0850: 2f 30 32 2f 30 34 20 30 33 3a 35 39 3a 32 35 20  /02/04 03:59:25 
0860: 73 68 61 6e 65 20 45 78 70 20 24 0a 2a 2f 0a 23  shane Exp $.*/.#
0870: 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 49  include "sqliteI
0880: 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  nt.h".#include "
0890: 76 64 62 65 49 6e 74 2e 68 22 0a 0a 2f 2a 0a 2a  vdbeInt.h"../*.*
08a0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
08b0: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
08c0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
08d0: 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72 73  very time a curs
08e0: 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69 74  or.** moves, eit
08f0: 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53 65  her by the OP_Se
0900: 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20 6f  ekXX, OP_Next, o
0910: 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64 65  r OP_Prev opcode
0920: 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a 20  s.  The test.** 
0930: 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20 74  procedures use t
0940: 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
0950: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  to make sure tha
0960: 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a 2a  t indices are.**
0970: 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74   working correct
0980: 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61 62  ly.  This variab
0990: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
09a0: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
09b0: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
09c0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
09d0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
09e0: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
09f0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0a00: 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
0a10: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
0a20: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69  ../*.** When thi
0a30: 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  s global variabl
0a40: 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20 69  e is positive, i
0a50: 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e 74  t gets decrement
0a60: 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a 2a  ed once before.*
0a70: 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74 69  * each instructi
0a80: 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20  on in the VDBE. 
0a90: 20 57 68 65 6e 20 72 65 61 63 68 65 73 20 7a 65   When reaches ze
0aa0: 72 6f 2c 20 74 68 65 20 75 31 2e 69 73 49 6e 74  ro, the u1.isInt
0ab0: 65 72 72 75 70 74 65 64 0a 2a 2a 20 66 69 65 6c  errupted.** fiel
0ac0: 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  d of the sqlite3
0ad0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73 65   structure is se
0ae0: 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 69  t in order to si
0af0: 6d 75 6c 61 74 65 20 61 6e 64 20 69 6e 74 65 72  mulate and inter
0b00: 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rupt..**.** This
0b10: 20 66 61 63 69 6c 69 74 79 20 69 73 20 75 73 65   facility is use
0b20: 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20 70 75  d for testing pu
0b30: 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20 49 74  rposes only.  It
0b40: 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63 74 69   does not functi
0b50: 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72 64 69  on.** in an ordi
0b60: 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23  nary build..*/.#
0b70: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
0b80: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 6e  T.int sqlite3_in
0b90: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20 3d 20  terrupt_count = 
0ba0: 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0;.#endif../*.**
0bb0: 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c   The next global
0bc0: 20 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63   variable is inc
0bd0: 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20 74 79  remented each ty
0be0: 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f  pe the OP_Sort o
0bf0: 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63  pcode.** is exec
0c00: 75 74 65 64 2e 20 20 54 68 65 20 74 65 73 74 20  uted.  The test 
0c10: 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20 74  procedures use t
0c20: 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
0c30: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  to make sure tha
0c40: 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69 73 20  t.** sorting is 
0c50: 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e 6f 74  occurring or not
0c60: 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20 61 70   occurring at ap
0c70: 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65 73 2e  propriate times.
0c80: 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c 65     This variable
0c90: 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  .** has no funct
0ca0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
0cb0: 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74 68  o help verify th
0cc0: 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74  e correct operat
0cd0: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  ion of the.** li
0ce0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0cf0: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0d00: 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
0d10: 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  unt = 0;.#endif.
0d20: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  ./*.** The next 
0d30: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0d40: 72 65 63 6f 72 64 73 20 74 68 65 20 73 69 7a 65  records the size
0d50: 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   of the largest 
0d60: 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72 20 4d  MEM_Blob.** or M
0d70: 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61 73 20  EM_Str that has 
0d80: 62 65 65 6e 20 75 73 65 64 20 62 79 20 61 20 56  been used by a V
0d90: 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  DBE opcode.  The
0da0: 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65 73   test procedures
0db0: 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69 6e 66  .** use this inf
0dc0: 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65  ormation to make
0dd0: 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 7a   sure that the z
0de0: 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74 69 6f  ero-blob functio
0df0: 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77 6f 72  nality.** is wor
0e00: 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79 2e 20  king correctly. 
0e10: 20 20 54 68 69 73 20 76 61 72 69 61 62 6c 65 20    This variable 
0e20: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
0e30: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a 2a 2a  other than to.**
0e40: 20 68 65 6c 70 20 76 65 72 69 66 79 20 74 68 65   help verify the
0e50: 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69   correct operati
0e60: 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72  on of the librar
0e70: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
0e80: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
0e90: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
0ea0: 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20 76 6f  e = 0;.static vo
0eb0: 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62  id updateMaxBlob
0ec0: 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a 20 20  size(Mem *p){.  
0ed0: 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20  if( (p->flags & 
0ee0: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
0ef0: 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e 3e 73  b))!=0 && p->n>s
0f00: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f10: 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ize ){.    sqlit
0f20: 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20  e3_max_blobsize 
0f30: 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a 23 65  = p->n;.  }.}.#e
0f40: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74  ndif../*.** Test
0f50: 20 61 20 72 65 67 69 73 74 65 72 20 74 6f 20 73   a register to s
0f60: 65 65 20 69 66 20 69 74 20 65 78 63 65 65 64 73  ee if it exceeds
0f70: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 61 78   the current max
0f80: 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a  imum blob size..
0f90: 2a 2a 20 49 66 20 69 74 20 64 6f 65 73 2c 20 72  ** If it does, r
0fa0: 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 6d 61  ecord the new ma
0fb0: 78 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e  ximum blob size.
0fc0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0fd0: 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20  SQLITE_TEST) && 
0fe0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0ff0: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
1000: 54 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44 41  T).# define UPDA
1010: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
1020: 50 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c 6f  P)  updateMaxBlo
1030: 62 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23  bsize(P).#else.#
1040: 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d   define UPDATE_M
1050: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23  AX_BLOBSIZE(P).#
1060: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  endif../*.** Con
1070: 76 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72  vert the given r
1080: 65 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73  egister into a s
1090: 74 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27  tring if it isn'
10a0: 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79  t one.** already
10b0: 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  . Return non-zer
10c0: 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  o if a malloc() 
10d0: 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  fails..*/.#defin
10e0: 65 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65  e Stringify(P, e
10f0: 6e 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29  nc) \.   if(((P)
1100: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72  ->flags&(MEM_Str
1110: 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26  |MEM_Blob))==0 &
1120: 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  & sqlite3VdbeMem
1130: 53 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 29  Stringify(P,enc)
1140: 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20  ) \.     { goto 
1150: 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a  no_mem; }../*.**
1160: 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   An ephemeral st
1170: 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e  ring value (sign
1180: 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d  ified by the MEM
1190: 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e  _Ephem flag) con
11a0: 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74  tains.** a point
11b0: 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61  er to a dynamica
11c0: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74  lly allocated st
11d0: 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20  ring where some 
11e0: 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20  other entity.** 
11f0: 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  is responsible f
1200: 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  or deallocating 
1210: 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65  that string.  Be
1220: 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74  cause the regist
1230: 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63  er.** does not c
1240: 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e  ontrol the strin
1250: 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64  g, it might be d
1260: 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74  eleted without t
1270: 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b  he register.** k
1280: 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a  nowing it..**.**
1290: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f   This routine co
12a0: 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65  nverts an epheme
12b0: 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20  ral string into 
12c0: 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  a dynamically al
12d0: 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e  located.** strin
12e0: 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73  g that the regis
12f0: 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72  ter itself contr
1300: 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ols.  In other w
1310: 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76  ords, it.** conv
1320: 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65  erts an MEM_Ephe
1330: 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 6e  m string into an
1340: 20 4d 45 4d 5f 44 79 6e 20 73 74 72 69 6e 67 2e   MEM_Dyn string.
1350: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70  .*/.#define Deep
1360: 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a  hemeralize(P) \.
1370: 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61     if( ((P)->fla
1380: 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30  gs&MEM_Ephem)!=0
1390: 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c   \.       && sql
13a0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
13b0: 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67  riteable(P) ){ g
13c0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a  oto no_mem;}../*
13d0: 0a 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33  .** Call sqlite3
13e0: 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
13f0: 62 28 29 20 6f 6e 20 74 68 65 20 73 75 70 70 6c  b() on the suppl
1400: 69 65 64 20 76 61 6c 75 65 20 28 74 79 70 65 20  ied value (type 
1410: 4d 65 6d 2a 29 0a 2a 2a 20 50 20 69 66 20 72 65  Mem*).** P if re
1420: 71 75 69 72 65 64 2e 0a 2a 2f 0a 23 64 65 66 69  quired..*/.#defi
1430: 6e 65 20 45 78 70 61 6e 64 42 6c 6f 62 28 50 29  ne ExpandBlob(P)
1440: 20 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45   (((P)->flags&ME
1450: 4d 5f 5a 65 72 6f 29 3f 73 71 6c 69 74 65 33 56  M_Zero)?sqlite3V
1460: 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
1470: 28 50 29 3a 30 29 0a 0a 2f 2a 0a 2a 2a 20 41 72  (P):0)../*.** Ar
1480: 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69 6e  gument pMem poin
1490: 74 73 20 61 74 20 61 20 72 65 67 69 73 74 65 72  ts at a register
14a0: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 70 61   that will be pa
14b0: 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73 65  ssed to a.** use
14c0: 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  r-defined functi
14d0: 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65 64 20 74  on or returned t
14e0: 6f 20 74 68 65 20 75 73 65 72 20 61 73 20 74 68  o the user as th
14f0: 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 71 75  e result of a qu
1500: 65 72 79 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f  ery..** The seco
1510: 6e 64 20 61 72 67 75 6d 65 6e 74 2c 20 27 64 62  nd argument, 'db
1520: 5f 65 6e 63 27 20 69 73 20 74 68 65 20 74 65 78  _enc' is the tex
1530: 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20  t encoding used 
1540: 62 79 20 74 68 65 20 76 64 62 65 20 66 6f 72 0a  by the vdbe for.
1550: 2a 2a 20 72 65 67 69 73 74 65 72 20 76 61 72 69  ** register vari
1560: 61 62 6c 65 73 2e 20 20 54 68 69 73 20 72 6f 75  ables.  This rou
1570: 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70 4d  tine sets the pM
1580: 65 6d 2d 3e 65 6e 63 20 61 6e 64 20 70 4d 65 6d  em->enc and pMem
1590: 2d 3e 74 79 70 65 0a 2a 2a 20 76 61 72 69 61 62  ->type.** variab
15a0: 6c 65 73 20 75 73 65 64 20 62 79 20 74 68 65 20  les used by the 
15b0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28  sqlite3_value_*(
15c0: 29 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23  ) routines..*/.#
15d0: 64 65 66 69 6e 65 20 73 74 6f 72 65 54 79 70 65  define storeType
15e0: 49 6e 66 6f 28 41 2c 42 29 20 5f 73 74 6f 72 65  Info(A,B) _store
15f0: 54 79 70 65 49 6e 66 6f 28 41 29 0a 73 74 61 74  TypeInfo(A).stat
1600: 69 63 20 76 6f 69 64 20 5f 73 74 6f 72 65 54 79  ic void _storeTy
1610: 70 65 49 6e 66 6f 28 4d 65 6d 20 2a 70 4d 65 6d  peInfo(Mem *pMem
1620: 29 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20 3d  ){.  int flags =
1630: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20   pMem->flags;.  
1640: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
1650: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d  Null ){.    pMem
1660: 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f  ->type = SQLITE_
1670: 4e 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73 65  NULL;.  }.  else
1680: 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d   if( flags & MEM
1690: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65 6d  _Int ){.    pMem
16a0: 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f  ->type = SQLITE_
16b0: 49 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20 65  INTEGER;.  }.  e
16c0: 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20  lse if( flags & 
16d0: 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20  MEM_Real ){.    
16e0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
16f0: 49 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20  ITE_FLOAT;.  }. 
1700: 20 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20   else if( flags 
1710: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
1720: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51   pMem->type = SQ
1730: 4c 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65 6c  LITE_TEXT;.  }el
1740: 73 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79  se{.    pMem->ty
1750: 70 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42  pe = SQLITE_BLOB
1760: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  ;.  }.}../*.** P
1770: 72 6f 70 65 72 74 69 65 73 20 6f 66 20 6f 70 63  roperties of opc
1780: 6f 64 65 73 2e 20 20 54 68 65 20 4f 50 46 4c 47  odes.  The OPFLG
1790: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 6d 61 63  _INITIALIZER mac
17a0: 72 6f 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ro is.** created
17b0: 20 62 79 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77   by mkopcodeh.aw
17c0: 6b 20 64 75 72 69 6e 67 20 63 6f 6d 70 69 6c 61  k during compila
17d0: 74 69 6f 6e 2e 20 20 44 61 74 61 20 69 73 20 6f  tion.  Data is o
17e0: 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20  btained.** from 
17f0: 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 6c  the comments fol
1800: 6c 6f 77 69 6e 67 20 74 68 65 20 22 63 61 73 65  lowing the "case
1810: 20 4f 50 5f 78 78 78 78 3a 22 20 73 74 61 74 65   OP_xxxx:" state
1820: 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 74 68 69 73  ments in.** this
1830: 20 66 69 6c 65 2e 20 20 0a 2a 2f 0a 73 74 61 74   file.  .*/.stat
1840: 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
1850: 64 20 63 68 61 72 20 6f 70 63 6f 64 65 50 72 6f  d char opcodePro
1860: 70 65 72 74 79 5b 5d 20 3d 20 4f 50 46 4c 47 5f  perty[] = OPFLG_
1870: 49 4e 49 54 49 41 4c 49 5a 45 52 3b 0a 0a 2f 2a  INITIALIZER;../*
1880: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
1890: 69 66 20 61 6e 20 6f 70 63 6f 64 65 20 68 61 73  if an opcode has
18a0: 20 61 6e 79 20 6f 66 20 74 68 65 20 4f 50 46 4c   any of the OPFL
18b0: 47 5f 78 78 78 20 70 72 6f 70 65 72 74 69 65 73  G_xxx properties
18c0: 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 62 79  .** specified by
18d0: 20 6d 61 73 6b 2e 0a 2a 2f 0a 69 6e 74 20 73 71   mask..*/.int sq
18e0: 6c 69 74 65 33 56 64 62 65 4f 70 63 6f 64 65 48  lite3VdbeOpcodeH
18f0: 61 73 50 72 6f 70 65 72 74 79 28 69 6e 74 20 6f  asProperty(int o
1900: 70 63 6f 64 65 2c 20 69 6e 74 20 6d 61 73 6b 29  pcode, int mask)
1910: 7b 0a 20 20 61 73 73 65 72 74 28 20 6f 70 63 6f  {.  assert( opco
1920: 64 65 3e 30 20 26 26 20 6f 70 63 6f 64 65 3c 28  de>0 && opcode<(
1930: 69 6e 74 29 73 69 7a 65 6f 66 28 6f 70 63 6f 64  int)sizeof(opcod
1940: 65 50 72 6f 70 65 72 74 79 29 20 29 3b 0a 20 20  eProperty) );.  
1950: 72 65 74 75 72 6e 20 28 6f 70 63 6f 64 65 50 72  return (opcodePr
1960: 6f 70 65 72 74 79 5b 6f 70 63 6f 64 65 5d 26 6d  operty[opcode]&m
1970: 61 73 6b 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  ask)!=0;.}../*.*
1980: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1990: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
19a0: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
19b0: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
19c0: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
19d0: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
19e0: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
19f0: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
1a00: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
1a10: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
1a20: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
1a30: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
1a40: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
1a50: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1a60: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1a70: 73 6f 72 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70  sor */.  Op *pOp
1a80: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1a90: 2a 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20  * */.  int iDb, 
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ab0: 57 68 65 6e 20 64 61 74 61 62 61 73 65 20 74 68  When database th
1ac0: 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73  e cursor belongs
1ad0: 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20   to, or -1 */.  
1ae0: 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73 6f  int isBtreeCurso
1af0: 72 20 20 20 20 20 2f 2a 20 2a 2f 0a 29 7b 0a 20  r     /* */.){. 
1b00: 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65 6d   /* Find the mem
1b10: 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77 69  ory cell that wi
1b20: 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73 74  ll be used to st
1b30: 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66 20  ore the blob of 
1b40: 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75  memory.  ** requ
1b50: 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 56 64  ired for this Vd
1b60: 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75  beCursor structu
1b70: 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76 65 6e  re. It is conven
1b80: 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20 0a 20  ient to use a . 
1b90: 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79 20   ** vdbe memory 
1ba0: 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20 74  cell to manage t
1bb0: 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  he memory alloca
1bc0: 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20 66 6f  tion required fo
1bd0: 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43 75 72  r a.  ** VdbeCur
1be0: 73 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 6f  sor structure fo
1bf0: 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  r the following 
1c00: 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20 20  reasons:.  **.  
1c10: 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65 73  **   * Sometimes
1c20: 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 73 20   cursor numbers 
1c30: 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 20 63  are used for a c
1c40: 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65 72 65  ouple of differe
1c50: 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75 72 70  nt.  **     purp
1c60: 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65 20 70  oses in a vdbe p
1c70: 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69 66 66  rogram. The diff
1c80: 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67 68 74  erent uses might
1c90: 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20 20 20   require.  **   
1ca0: 20 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a 65    different size
1cb0: 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20 4d  d allocations. M
1cc0: 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f 76  emory cells prov
1cd0: 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20 20 2a  ide growable.  *
1ce0: 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f 6e  *     allocation
1cf0: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a  s..  **.  **   *
1d00: 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e 41 42   When using ENAB
1d10: 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45  LE_MEMORY_MANAGE
1d20: 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65 6c  MENT, memory cel
1d30: 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a 20 20  l buffers can.  
1d40: 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65 64 20  **     be freed 
1d50: 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65 20 73  lazily via the s
1d60: 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d  qlite3_release_m
1d70: 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54 68 69  emory() API. Thi
1d80: 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69 6d  s.  **     minim
1d90: 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20  izes the number 
1da0: 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73 20  of malloc calls 
1db0: 6d 61 64 65 20 62 79 20 74 68 65 20 73 79 73 74  made by the syst
1dc0: 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d 65  em..  **.  ** Me
1dd0: 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72 20 63  mory cells for c
1de0: 75 72 73 6f 72 73 20 61 72 65 20 61 6c 6c 6f 63  ursors are alloc
1df0: 61 74 65 64 20 61 74 20 74 68 65 20 74 6f 70 20  ated at the top 
1e00: 6f 66 20 74 68 65 20 61 64 64 72 65 73 73 0a 20  of the address. 
1e10: 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d 6f 72   ** space. Memor
1e20: 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 29  y cell (p->nMem)
1e30: 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1e40: 63 75 72 73 6f 72 20 30 2e 20 53 70 61 63 65 20  cursor 0. Space 
1e50: 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f 72 20  for.  ** cursor 
1e60: 31 20 69 73 20 6d 61 6e 61 67 65 64 20 62 79 20  1 is managed by 
1e70: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e  memory cell (p->
1e80: 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a 20 20  nMem-1), etc..  
1e90: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d  */.  Mem *pMem =
1ea0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65   &p->aMem[p->nMe
1eb0: 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e 74 20  m-iCur];..  int 
1ec0: 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43 75 72  nByte;.  VdbeCur
1ed0: 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a 20 20  sor *pCx = 0;.  
1ee0: 2f 2a 20 49 66 20 74 68 65 20 6f 70 63 6f 64 65  /* If the opcode
1ef0: 20 6f 66 20 70 4f 70 20 69 73 20 4f 50 5f 53 65   of pOp is OP_Se
1f00: 74 4e 75 6d 43 6f 6c 75 6d 6e 73 2c 20 74 68 65  tNumColumns, the
1f10: 6e 20 70 4f 70 2d 3e 70 32 20 63 6f 6e 74 61 69  n pOp->p2 contai
1f20: 6e 73 0a 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62  ns.  ** the numb
1f30: 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
1f40: 74 68 65 20 72 65 63 6f 72 64 73 20 63 6f 6e 74  the records cont
1f50: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 74 61 62  ained in the tab
1f60: 6c 65 20 6f 72 0a 20 20 2a 2a 20 69 6e 64 65 78  le or.  ** index
1f70: 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 55   being opened. U
1f80: 73 65 20 74 68 69 73 20 74 6f 20 72 65 73 65 72  se this to reser
1f90: 76 65 20 73 70 61 63 65 20 66 6f 72 20 74 68 65  ve space for the
1fa0: 20 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f   .  ** VdbeCurso
1fb0: 72 2e 61 54 79 70 65 5b 5d 20 61 72 72 61 79 2e  r.aType[] array.
1fc0: 0a 20 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  .  */.  int nFie
1fd0: 6c 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  ld = 0;.  if( pO
1fe0: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65  p->opcode==OP_Se
1ff0: 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 7c 7c 20 70  tNumColumns || p
2000: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
2010: 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 29 7b 0a  penEphemeral ){.
2020: 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
2030: 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  ->p2;.  }.  nByt
2040: 65 20 3d 20 0a 20 20 20 20 20 20 73 69 7a 65 6f  e = .      sizeo
2050: 66 28 56 64 62 65 43 75 72 73 6f 72 29 20 2b 20  f(VdbeCursor) + 
2060: 0a 20 20 20 20 20 20 28 69 73 42 74 72 65 65 43  .      (isBtreeC
2070: 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74 72  ursor?sqlite3Btr
2080: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
2090: 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46 69  ) + .      2*nFi
20a0: 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29 3b  eld*sizeof(u32);
20b0: 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75 72  ..  assert( iCur
20c0: 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
20d0: 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43   if( p->apCsr[iC
20e0: 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ur] ){.    sqlit
20f0: 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
2100: 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75  (p, p->apCsr[iCu
2110: 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73  r]);.    p->apCs
2120: 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d  r[iCur] = 0;.  }
2130: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
2140: 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ==sqlite3VdbeMem
2150: 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65  Grow(pMem, nByte
2160: 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61  , 0) ){.    p->a
2170: 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78  pCsr[iCur] = pCx
2180: 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29   = (VdbeCursor*)
2190: 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d  pMem->z;.    mem
21a0: 73 65 74 28 70 4d 65 6d 2d 3e 7a 2c 20 30 2c 20  set(pMem->z, 0, 
21b0: 6e 42 79 74 65 29 3b 0a 20 20 20 20 70 43 78 2d  nByte);.    pCx-
21c0: 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20  >iDb = iDb;.    
21d0: 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46  pCx->nField = nF
21e0: 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 6e 46  ield;.    if( nF
21f0: 69 65 6c 64 20 29 7b 0a 20 20 20 20 20 20 70 43  ield ){.      pC
2200: 78 2d 3e 61 54 79 70 65 20 3d 20 28 75 33 32 20  x->aType = (u32 
2210: 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a 65 6f  *)&pMem->z[sizeo
2220: 66 28 56 64 62 65 43 75 72 73 6f 72 29 5d 3b 0a  f(VdbeCursor)];.
2230: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69 73      }.    if( is
2240: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
2250: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
2260: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
2270: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2280: 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62 65 43 75  >z[sizeof(VdbeCu
2290: 72 73 6f 72 29 2b 32 2a 6e 46 69 65 6c 64 2a 73  rsor)+2*nField*s
22a0: 69 7a 65 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20  izeof(u32)];.   
22b0: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
22c0: 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72  pCx;.}../*.** Tr
22d0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76  y to convert a v
22e0: 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65  alue into a nume
22f0: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
2300: 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20  on if we can.** 
2310: 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f  do so without lo
2320: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2330: 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
2340: 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e  ds, if the strin
2350: 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20  g.** looks like 
2360: 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72  a number, conver
2370: 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62  t it into a numb
2380: 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  er.  If it does 
2390: 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65  not.** look like
23a0: 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65   a number, leave
23b0: 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74   it alone..*/.st
23c0: 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e  atic void applyN
23d0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d  umericAffinity(M
23e0: 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20 69 66 28  em *pRec){.  if(
23f0: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
2400: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2410: 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e  t))==0 ){.    in
2420: 74 20 72 65 61 6c 6e 75 6d 3b 0a 20 20 20 20 73  t realnum;.    s
2430: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c  qlite3VdbeMemNul
2440: 54 65 72 6d 69 6e 61 74 65 28 70 52 65 63 29 3b  Terminate(pRec);
2450: 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e  .    if( (pRec->
2460: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 0a 20  flags&MEM_Str). 
2470: 20 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74          && sqlit
2480: 65 33 49 73 4e 75 6d 62 65 72 28 70 52 65 63 2d  e3IsNumber(pRec-
2490: 3e 7a 2c 20 26 72 65 61 6c 6e 75 6d 2c 20 70 52  >z, &realnum, pR
24a0: 65 63 2d 3e 65 6e 63 29 20 29 7b 0a 20 20 20 20  ec->enc) ){.    
24b0: 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20 20    i64 value;.   
24c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
24d0: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 52 65  angeEncoding(pRe
24e0: 63 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b  c, SQLITE_UTF8);
24f0: 0a 20 20 20 20 20 20 69 66 28 20 21 72 65 61 6c  .      if( !real
2500: 6e 75 6d 20 26 26 20 73 71 6c 69 74 65 33 41 74  num && sqlite3At
2510: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 76  oi64(pRec->z, &v
2520: 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 20 20 20  alue) ){.       
2530: 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 76 61 6c   pRec->u.i = val
2540: 75 65 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53  ue;.        MemS
2550: 65 74 54 79 70 65 46 6c 61 67 28 70 52 65 63 2c  etTypeFlag(pRec,
2560: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 20   MEM_Int);.     
2570: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
2580: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
2590: 61 6c 69 66 79 28 70 52 65 63 29 3b 0a 20 20 20  alify(pRec);.   
25a0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d     }.    }.  }.}
25b0: 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69  ../*.** Processi
25c0: 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e 65 20  ng is determine 
25d0: 62 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  by the affinity 
25e0: 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a  parameter:.**.**
25f0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
2600: 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  GER:.** SQLITE_A
2610: 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49  FF_REAL:.** SQLI
2620: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a  TE_AFF_NUMERIC:.
2630: 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63 6f 6e  **    Try to con
2640: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 6e 20  vert pRec to an 
2650: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2660: 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20  tation or a .** 
2670: 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e     floating-poin
2680: 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  t representation
2690: 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72 20 72   if an integer r
26a0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a  epresentation.**
26b0: 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73 73 69      is not possi
26c0: 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  ble.  Note that 
26d0: 74 68 65 20 69 6e 74 65 67 65 72 20 72 65 70 72  the integer repr
26e0: 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a  esentation is.**
26f0: 20 20 20 20 61 6c 77 61 79 73 20 70 72 65 66 65      always prefe
2700: 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20 74 68  rred, even if th
2710: 65 20 61 66 66 69 6e 69 74 79 20 69 73 20 52 45  e affinity is RE
2720: 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20 20  AL, because.**  
2730: 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70    an integer rep
2740: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d  resentation is m
2750: 6f 72 65 20 73 70 61 63 65 20 65 66 66 69 63 69  ore space effici
2760: 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a  ent on disk..**.
2770: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ** SQLITE_AFF_TE
2780: 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72  XT:.**    Conver
2790: 74 20 70 52 65 63 20 74 6f 20 61 20 74 65 78 74  t pRec to a text
27a0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
27b0: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
27c0: 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e 6f  F_NONE:.**    No
27d0: 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20 75 6e  -op.  pRec is un
27e0: 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74  changed..*/.stat
27f0: 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41 66 66  ic void applyAff
2800: 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52  inity(.  Mem *pR
2810: 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ec,          /* 
2820: 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61 70 70  The value to app
2830: 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f 20 2a  ly affinity to *
2840: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
2850: 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61  y,      /* The a
2860: 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70  ffinity to be ap
2870: 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e  plied */.  u8 en
2880: 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c              /
2890: 2a 20 55 73 65 20 74 68 69 73 20 74 65 78 74 20  * Use this text 
28a0: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20  encoding */.){. 
28b0: 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53   if( affinity==S
28c0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29  QLITE_AFF_TEXT )
28d0: 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74  {.    /* Only at
28e0: 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72  tempt the conver
28f0: 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20  sion to TEXT if 
2900: 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65  there is an inte
2910: 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20  ger or real.    
2920: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
2930: 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c  n (blob and NULL
2940: 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76   do not get conv
2950: 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74  erted) but no st
2960: 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72  ring.    ** repr
2970: 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20  esentation..    
2980: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
2990: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
29a0: 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c  tr) && (pRec->fl
29b0: 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  ags&(MEM_Real|ME
29c0: 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20  M_Int)) ){.     
29d0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
29e0: 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65  tringify(pRec, e
29f0: 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  nc);.    }.    p
2a00: 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  Rec->flags &= ~(
2a10: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Real|MEM_Int
2a20: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61  );.  }else if( a
2a30: 66 66 69 6e 69 74 79 21 3d 53 51 4c 49 54 45 5f  ffinity!=SQLITE_
2a40: 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20 20  AFF_NONE ){.    
2a50: 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79  assert( affinity
2a60: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
2a70: 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79  EGER || affinity
2a80: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
2a90: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  L.             |
2aa0: 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  | affinity==SQLI
2ab0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
2ac0: 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72  ;.    applyNumer
2ad0: 69 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 29  icAffinity(pRec)
2ae0: 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
2af0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
2b00: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2b10: 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69  3VdbeIntegerAffi
2b20: 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20  nity(pRec);.    
2b30: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  }.  }.}../*.** T
2b40: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68  ry to convert th
2b50: 65 20 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63  e type of a func
2b60: 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72  tion argument or
2b70: 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e   a result column
2b80: 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72  .** into a numer
2b90: 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ic representatio
2ba0: 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72 20 49  n.  Use either I
2bb0: 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77  NTEGER or REAL w
2bc0: 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61  hichever.** is a
2bd0: 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74  ppropriate.  But
2be0: 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e   only do the con
2bf0: 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73  version if it is
2c00: 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75   possible withou
2c10: 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66  t.** loss of inf
2c20: 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74  ormation and ret
2c30: 75 72 6e 20 74 68 65 20 72 65 76 69 73 65 64 20  urn the revised 
2c40: 74 79 70 65 20 6f 66 20 74 68 65 20 61 72 67 75  type of the argu
2c50: 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ment..**.** This
2c60: 20 69 73 20 61 6e 20 45 58 50 45 52 49 4d 45 4e   is an EXPERIMEN
2c70: 54 41 4c 20 61 70 69 20 61 6e 64 20 69 73 20 73  TAL api and is s
2c80: 75 62 6a 65 63 74 20 74 6f 20 63 68 61 6e 67 65  ubject to change
2c90: 20 6f 72 20 72 65 6d 6f 76 61 6c 2e 0a 2a 2f 0a   or removal..*/.
2ca0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
2cb0: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
2cc0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
2cd0: 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  al){.  Mem *pMem
2ce0: 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20   = (Mem*)pVal;. 
2cf0: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
2d00: 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a 20 20 73  inity(pMem);.  s
2d10: 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 4d 65  toreTypeInfo(pMe
2d20: 6d 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  m, 0);.  return 
2d30: 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a 2f  pMem->type;.}../
2d40: 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76 65  *.** Exported ve
2d50: 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66  rsion of applyAf
2d60: 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20 6f  finity(). This o
2d70: 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69  ne works on sqli
2d80: 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20  te3_value*, .** 
2d90: 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  not the internal
2da0: 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76   Mem* type..*/.v
2db0: 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2dc0: 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  ApplyAffinity(. 
2dd0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2de0: 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66 69  pVal, .  u8 affi
2df0: 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a  nity, .  u8 enc.
2e00: 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  ){.  applyAffini
2e10: 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20  ty((Mem *)pVal, 
2e20: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a  affinity, enc);.
2e30: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
2e40: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69  _DEBUG./*.** Wri
2e50: 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67  te a nice string
2e60: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2e70: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  of the contents 
2e80: 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20  of cell pMem.** 
2e90: 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66  into buffer zBuf
2ea0: 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a  , length nBuf..*
2eb0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
2ec0: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
2ed0: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72  (Mem *pMem, char
2ee0: 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20   *zBuf){.  char 
2ef0: 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20  *zCsr = zBuf;.  
2f00: 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c  int f = pMem->fl
2f10: 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  ags;..  static c
2f20: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
2f30: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22   encnames[] = {"
2f40: 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31  (X)", "(8)", "(1
2f50: 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d  6LE)", "(16BE)"}
2f60: 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42  ;..  if( f&MEM_B
2f70: 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  lob ){.    int i
2f80: 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20  ;.    char c;.  
2f90: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
2fa0: 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  n ){.      c = '
2fb0: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
2fc0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2fd0: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
2fe0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
2ff0: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
3000: 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  c ){.      c = '
3010: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3020: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3030: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3040: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3050: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3060: 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a  .      c = 'e';.
3070: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3080: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3090: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
30a0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
30b0: 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a  c = 's';.    }..
30c0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
30d0: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
30e0: 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43  "%c", c);.    zC
30f0: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
3100: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
3110: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3120: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64  f(100, zCsr, "%d
3130: 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  [", pMem->n);.  
3140: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
3150: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3160: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3170: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3180: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
3190: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
31a0: 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c  0, zCsr, "%02X",
31b0: 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69   ((int)pMem->z[i
31c0: 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20  ] & 0xFF));.    
31d0: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
31e0: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
31f0: 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69  .    }.    for(i
3200: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
3210: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
3220: 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d     char z = pMem
3230: 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[i];.      if
3240: 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20  ( z<32 || z>126 
3250: 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b  ) *zCsr++ = '.';
3260: 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73  .      else *zCs
3270: 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a  r++ = z;.    }..
3280: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3290: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
32a0: 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b  "]%s", encnames[
32b0: 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20  pMem->enc]);.   
32c0: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
32d0: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
32e0: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
32f0: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
3300: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3310: 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c  00, zCsr,"+%dz",
3320: 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a  pMem->u.nZero);.
3330: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
3340: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3350: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a  sr);.    }.    *
3360: 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d  zCsr = '\0';.  }
3370: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3380: 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20  _Str ){.    int 
3390: 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30  j, k;.    zBuf[0
33a0: 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28  ] = ' ';.    if(
33b0: 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a   f & MEM_Dyn ){.
33c0: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
33d0: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
33e0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
33f0: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
3400: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3410: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
3420: 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  ic ){.      zBuf
3430: 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20  [1] = 't';.     
3440: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3450: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
3460: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3470: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45  se if( f & MEM_E
3480: 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42  phem ){.      zB
3490: 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20  uf[1] = 'e';.   
34a0: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
34b0: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
34c0: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
34d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75  }else{.      zBu
34e0: 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20  f[1] = 's';.    
34f0: 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20  }.    k = 2;.   
3500: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3510: 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c  f(100, &zBuf[k],
3520: 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b   "%d", pMem->n);
3530: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
3540: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
3550: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3560: 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f  +] = '[';.    fo
3570: 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a  r(j=0; j<15 && j
3580: 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a  <pMem->n; j++){.
3590: 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65        u8 c = pMe
35a0: 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69  m->z[j];.      i
35b0: 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c  f( c>=0x20 && c<
35c0: 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20  0x7f ){.        
35d0: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20  zBuf[k++] = c;. 
35e0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
35f0: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3600: 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  '.';.      }.   
3610: 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d   }.    zBuf[k++]
3620: 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69   = ']';.    sqli
3630: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3640: 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61  ,&zBuf[k], encna
3650: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3660: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
3670: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
3680: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3690: 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  +] = 0;.  }.}.#e
36a0: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
36b0: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
36c0: 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20  Print the value 
36d0: 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f  of a register fo
36e0: 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73  r tracing purpos
36f0: 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es:.*/.static vo
3700: 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  id memTracePrint
3710: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d 20  (FILE *out, Mem 
3720: 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c  *p){.  if( p->fl
3730: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3740: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  {.    fprintf(ou
3750: 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d  t, " NULL");.  }
3760: 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61  else if( (p->fla
3770: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
3780: 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e  M_Str))==(MEM_In
3790: 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20  t|MEM_Str) ){.  
37a0: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
37b0: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
37c0: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
37d0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
37e0: 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  nt ){.    fprint
37f0: 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64 22  f(out, " i:%lld"
3800: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c  , p->u.i);.  }el
3810: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3820: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20  & MEM_Real ){.  
3830: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3840: 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 20   r:%g", p->r);. 
3850: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72   }else{.    char
3860: 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20   zBuf[200];.    
3870: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3880: 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75  ettyPrint(p, zBu
3890: 66 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28  f);.    fprintf(
38a0: 6f 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66  out, " ");.    f
38b0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22  printf(out, "%s"
38c0: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73  , zBuf);.  }.}.s
38d0: 74 61 74 69 63 20 76 6f 69 64 20 72 65 67 69 73  tatic void regis
38e0: 74 65 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f  terTrace(FILE *o
38f0: 75 74 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65  ut, int iReg, Me
3900: 6d 20 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66  m *p){.  fprintf
3910: 28 6f 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d  (out, "REG[%d] =
3920: 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d   ", iReg);.  mem
3930: 54 72 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20  TracePrint(out, 
3940: 70 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75  p);.  fprintf(ou
3950: 74 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64  t, "\n");.}.#end
3960: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
3970: 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e  E_DEBUG.#  defin
3980: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
3990: 28 52 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63  (R,M) if(p->trac
39a0: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
39b0: 70 2d 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65  p->trace,R,M).#e
39c0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45  lse.#  define RE
39d0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d  GISTER_TRACE(R,M
39e0: 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65  ).#endif...#ifde
39f0: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a  f VDBE_PROFILE..
3a00: 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20  /* .** hwtime.h 
3a10: 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20  contains inline 
3a20: 61 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66  assembler code f
3a30: 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  or implementing 
3a40: 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d  .** high-perform
3a50: 61 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74  ance timing rout
3a60: 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  ines..*/.#includ
3a70: 65 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65  e "hwtime.h"..#e
3a80: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
3a90: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3aa0: 55 50 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65  UPT macro define
3ab0: 64 20 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20  d here looks to 
3ac0: 73 65 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71  see if the.** sq
3ad0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
3ae0: 29 20 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65  ) routine has be
3af0: 65 6e 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69  en called.  If i
3b00: 74 20 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e  t has been, then
3b10: 0a 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f  .** processing o
3b20: 66 20 74 68 65 20 56 44 42 45 20 70 72 6f 67 72  f the VDBE progr
3b30: 61 6d 20 69 73 20 69 6e 74 65 72 72 75 70 74 65  am is interrupte
3b40: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  d..**.** This ma
3b50: 63 72 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65  cro added to eve
3b60: 72 79 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ry instruction t
3b70: 68 61 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20  hat does a jump 
3b80: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69  in order to.** i
3b90: 6d 70 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e  mplement a loop.
3ba0: 20 20 54 68 69 73 20 74 65 73 74 20 75 73 65 64    This test used
3bb0: 20 74 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20   to be on every 
3bc0: 73 69 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69  single instructi
3bd0: 6f 6e 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20  on,.** but that 
3be0: 6d 65 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65  meant we more te
3bf0: 73 74 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65  sting that we ne
3c00: 65 64 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74  eded.  By only t
3c10: 65 73 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c  esting the.** fl
3c20: 61 67 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72  ag on jump instr
3c30: 75 63 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20  uctions, we get 
3c40: 61 20 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20  a (small) speed 
3c50: 69 6d 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a  improvement..*/.
3c60: 23 64 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f  #define CHECK_FO
3c70: 52 5f 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20  R_INTERRUPT \.  
3c80: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
3c90: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
3ca0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
3cb0: 74 65 72 72 75 70 74 3b 0a 0a 23 69 66 64 65 66  terrupt;..#ifdef
3cc0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 73 74   SQLITE_DEBUG.st
3cd0: 61 74 69 63 20 69 6e 74 20 66 69 6c 65 45 78 69  atic int fileExi
3ce0: 73 74 73 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  sts(sqlite3 *db,
3cf0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
3d00: 6c 65 29 7b 0a 20 20 69 6e 74 20 72 65 73 20 3d  le){.  int res =
3d10: 20 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53   0;.  int rc = S
3d20: 51 4c 49 54 45 5f 4f 4b 3b 0a 23 69 66 64 65 66  QLITE_OK;.#ifdef
3d30: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 2f   SQLITE_TEST.  /
3d40: 2a 20 49 66 20 77 65 20 61 72 65 20 63 75 72 72  * If we are curr
3d50: 65 6e 74 6c 79 20 74 65 73 74 69 6e 67 20 49 4f  ently testing IO
3d60: 20 65 72 72 6f 72 73 2c 20 74 68 65 6e 20 64 6f   errors, then do
3d70: 20 6e 6f 74 20 63 61 6c 6c 20 4f 73 41 63 63 65   not call OsAcce
3d80: 73 73 28 29 20 74 6f 0a 20 20 2a 2a 20 74 65 73  ss() to.  ** tes
3d90: 74 20 66 6f 72 20 74 68 65 20 70 72 65 73 65 6e  t for the presen
3da0: 63 65 20 6f 66 20 7a 46 69 6c 65 2e 20 54 68 69  ce of zFile. Thi
3db0: 73 20 69 73 20 62 65 63 61 75 73 65 20 61 6e 79  s is because any
3dc0: 20 49 4f 20 65 72 72 6f 72 20 74 68 61 74 0a 20   IO error that. 
3dd0: 20 2a 2a 20 6f 63 63 75 72 73 20 68 65 72 65 20   ** occurs here 
3de0: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 70 6f  will not be repo
3df0: 72 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68  rted, causing th
3e00: 65 20 74 65 73 74 20 74 6f 20 66 61 69 6c 2e 0a  e test to fail..
3e10: 20 20 2a 2f 0a 20 20 65 78 74 65 72 6e 20 69 6e    */.  extern in
3e20: 74 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72  t sqlite3_io_err
3e30: 6f 72 5f 70 65 6e 64 69 6e 67 3b 0a 20 20 69 66  or_pending;.  if
3e40: 28 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72  ( sqlite3_io_err
3e50: 6f 72 5f 70 65 6e 64 69 6e 67 3c 3d 30 20 29 0a  or_pending<=0 ).
3e60: 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20  #endif.    rc = 
3e70: 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28  sqlite3OsAccess(
3e80: 64 62 2d 3e 70 56 66 73 2c 20 7a 46 69 6c 65 2c  db->pVfs, zFile,
3e90: 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 45   SQLITE_ACCESS_E
3ea0: 58 49 53 54 53 2c 20 26 72 65 73 29 3b 0a 20 20  XISTS, &res);.  
3eb0: 72 65 74 75 72 6e 20 28 72 65 73 20 26 26 20 72  return (res && r
3ec0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d  c==SQLITE_OK);.}
3ed0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
3ee0: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
3ef0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
3f00: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
3f10: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
3f20: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
3f30: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
3f40: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
3f50: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
3f60: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
3f70: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
3f80: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
3f90: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
3fa0: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
3fb0: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
3fc0: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
3fd0: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
3fe0: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
3ff0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
4000: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
4010: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
4020: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
4030: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
4040: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
4050: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
4060: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
4070: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
4080: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
4090: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
40a0: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
40b0: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
40c0: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
40d0: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
40e0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
40f0: 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63  * Execute as muc
4100: 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67  h of a VDBE prog
4110: 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68  ram as we can th
4120: 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a  en return..**.**
4130: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
4140: 52 65 61 64 79 28 29 20 6d 75 73 74 20 62 65 20  Ready() must be 
4150: 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68  called before th
4160: 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  is routine in or
4170: 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20  der to.** close 
4180: 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68  the program with
4190: 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74   a final OP_Halt
41a0: 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74   and to set up t
41b0: 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20  he callbacks.** 
41c0: 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65  and the error me
41d0: 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a  ssage pointer..*
41e0: 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20  *.** Whenever a 
41f0: 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61  row or result da
4200: 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  ta is available,
4210: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
4220: 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76  ll either.** inv
4230: 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20 63  oke the result c
4240: 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72  allback (if ther
4250: 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74  e is one) or ret
4260: 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  urn with.** SQLI
4270: 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66  TE_ROW..**.** If
4280: 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
4290: 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f  ade to open a lo
42a0: 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20 74  cked database, t
42b0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
42c0: 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20  .** will either 
42d0: 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20  invoke the busy 
42e0: 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65  callback (if the
42f0: 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74  re is one) or it
4300: 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20   will.** return 
4310: 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a  SQLITE_BUSY..**.
4320: 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f  ** If an error o
4330: 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20  ccurs, an error 
4340: 6d 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74  message is writt
4350: 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74  en to memory obt
4360: 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71  ained.** from sq
4370: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61  lite3_malloc() a
4380: 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73  nd p->zErrMsg is
4390: 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74   made to point t
43a0: 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a  o that memory..*
43b0: 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65  * The error code
43c0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d   is stored in p-
43d0: 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75  >rc and this rou
43e0: 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c  tine returns SQL
43f0: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
4400: 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b   If the callback
4410: 20 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f   ever returns no
4420: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
4430: 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a   program exits.*
4440: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  * immediately.  
4450: 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f  There will be no
4460: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62   error message b
4470: 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65  ut the p->rc fie
4480: 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  ld is.** set to 
4490: 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64  SQLITE_ABORT and
44a0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69   this routine wi
44b0: 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ll return SQLITE
44c0: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20  _ERROR..**.** A 
44d0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
44e0: 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73 20 70  n error causes p
44f0: 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20 74  ->rc to be set t
4500: 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61  o SQLITE_NOMEM a
4510: 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69  nd this.** routi
4520: 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c  ne to return SQL
4530: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
4540: 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72 72   Other fatal err
4550: 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ors return SQLIT
4560: 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41  E_ERROR..**.** A
4570: 66 74 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e  fter this routin
4580: 65 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  e has finished, 
4590: 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c  sqlite3VdbeFinal
45a0: 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a  ize() should be.
45b0: 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e  ** used to clean
45c0: 20 75 70 20 74 68 65 20 6d 65 73 73 20 74 68 61   up the mess tha
45d0: 74 20 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e  t was left behin
45e0: 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
45f0: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
4600: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
4610: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
4620: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  DBE */.){.  int 
4630: 70 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pc;             
4640: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72         /* The pr
4650: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f  ogram counter */
4660: 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20  .  Op *pOp;     
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4680: 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69   Current operati
4690: 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d  on */.  int rc =
46a0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
46b0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
46c0: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
46d0: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
46e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
46f0: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 65 6e  abase */.  u8 en
4700: 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29  coding = ENC(db)
4710: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  ;     /* The dat
4720: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a  abase encoding *
4730: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
4740: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4750: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
4760: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
4770: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
4780: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4790: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
47a0: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
47b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
47c0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
47d0: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
47e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
47f0: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4800: 2a 2f 0a 20 20 75 38 20 6f 70 50 72 6f 70 65 72  */.  u8 opProper
4810: 74 79 3b 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61  ty;.  int iCompa
4820: 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  re = 0;         
4830: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61   /* Result of la
4840: 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  st OP_Compare op
4850: 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  eration */.  int
4860: 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20   *aPermute = 0; 
4870: 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75          /* Permu
4880: 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73  ation of columns
4890: 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20   for OP_Compare 
48a0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
48b0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
48c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
48d0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
48e0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
48f0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  of opcode */.  i
4900: 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20  nt origPc;      
4910: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f            /* Pro
4920: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20  gram counter at 
4930: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4940: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
4950: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
4960: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
4970: 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f    int nProgressO
4980: 70 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  ps = 0;      /* 
4990: 4f 70 63 6f 64 65 73 20 65 78 65 63 75 74 65 64  Opcodes executed
49a0: 20 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20   since progress 
49b0: 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e  callback. */.#en
49c0: 64 69 66 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  dif.  UnpackedRe
49d0: 63 6f 72 64 20 61 54 65 6d 70 52 65 63 5b 31 36  cord aTempRec[16
49e0: 5d 3b 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68  ]; /* Space to h
49f0: 6f 6c 64 20 61 20 74 72 61 6e 73 69 65 6e 74 20  old a transient 
4a00: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
4a10: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
4a20: 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49  magic==VDBE_MAGI
4a30: 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c  C_RUN );  /* sql
4a40: 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72 69  ite3_step() veri
4a50: 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 61  fies this */.  a
4a60: 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 67 69 63  ssert( db->magic
4a70: 3d 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  ==SQLITE_MAGIC_B
4a80: 55 53 59 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  USY );.  sqlite3
4a90: 42 74 72 65 65 4d 75 74 65 78 41 72 72 61 79 45  BtreeMutexArrayE
4aa0: 6e 74 65 72 28 26 70 2d 3e 61 4d 75 74 65 78 29  nter(&p->aMutex)
4ab0: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53  ;.  if( p->rc==S
4ac0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
4ad0: 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
4ae0: 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ns if a malloc()
4af0: 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74   inside a call t
4b00: 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  o sqlite3_column
4b10: 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a  _text() or.    *
4b20: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
4b30: 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64  _text16() failed
4b40: 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e  .  */.    goto n
4b50: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73  o_mem;.  }.  ass
4b60: 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  ert( p->rc==SQLI
4b70: 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d  TE_OK || p->rc==
4b80: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20  SQLITE_BUSY );. 
4b90: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
4ba0: 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  OK;.  assert( p-
4bb0: 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20  >explain==0 );. 
4bc0: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
4bd0: 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61   0;.  db->busyHa
4be0: 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b  ndler.nBusy = 0;
4bf0: 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  .  CHECK_FOR_INT
4c00: 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69 74 65  ERRUPT;.  sqlite
4c10: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4c20: 70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  p);.#ifdef SQLIT
4c30: 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65  E_DEBUG.  sqlite
4c40: 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
4c50: 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70  oc();.  if( p->p
4c60: 63 3d 3d 30 20 0a 20 20 20 26 26 20 28 28 70 2d  c==0 .   && ((p-
4c70: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
4c80: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 29  ITE_VdbeListing)
4c90: 20 7c 7c 20 66 69 6c 65 45 78 69 73 74 73 28 64   || fileExists(d
4ca0: 62 2c 20 22 76 64 62 65 5f 65 78 70 6c 61 69 6e  b, "vdbe_explain
4cb0: 22 29 29 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74  ")).  ){.    int
4cc0: 20 69 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   i;.    printf("
4cd0: 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73  VDBE Program Lis
4ce0: 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73  ting:\n");.    s
4cf0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4d00: 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72 28 69  ql(p);.    for(i
4d10: 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b  =0; i<p->nOp; i+
4d20: 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  +){.      sqlite
4d30: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
4d40: 6f 75 74 2c 20 69 2c 20 26 70 2d 3e 61 4f 70 5b  out, i, &p->aOp[
4d50: 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  i]);.    }.  }. 
4d60: 20 69 66 28 20 66 69 6c 65 45 78 69 73 74 73 28   if( fileExists(
4d70: 64 62 2c 20 22 76 64 62 65 5f 74 72 61 63 65 22  db, "vdbe_trace"
4d80: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 74 72 61 63  ) ){.    p->trac
4d90: 65 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20 7d 0a  e = stdout;.  }.
4da0: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
4db0: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
4dc0: 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70  if.  for(pc=p->p
4dd0: 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  c; rc==SQLITE_OK
4de0: 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  ; pc++){.    ass
4df0: 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63  ert( pc>=0 && pc
4e00: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69  <p->nOp );.    i
4e10: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
4e20: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
4e30: 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  m;.#ifdef VDBE_P
4e40: 52 4f 46 49 4c 45 0a 20 20 20 20 6f 72 69 67 50  ROFILE.    origP
4e50: 63 20 3d 20 70 63 3b 0a 20 20 20 20 73 74 61 72  c = pc;.    star
4e60: 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d  t = sqlite3Hwtim
4e70: 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  e();.#endif.    
4e80: 70 4f 70 20 3d 20 26 70 2d 3e 61 4f 70 5b 70 63  pOp = &p->aOp[pc
4e90: 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20  ];..    /* Only 
4ea0: 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66  allow tracing if
4eb0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
4ec0: 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
4ed0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4ee0: 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e  EBUG.    if( p->
4ef0: 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69  trace ){.      i
4f00: 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20 20  f( pc==0 ){.    
4f10: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
4f20: 20 45 78 65 63 75 74 69 6f 6e 20 54 72 61 63 65   Execution Trace
4f30: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 73  :\n");.        s
4f40: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4f50: 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ql(p);.      }. 
4f60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4f70: 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72 61 63 65  PrintOp(p->trace
4f80: 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20  , pc, pOp);.    
4f90: 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61  }.    if( p->tra
4fa0: 63 65 3d 3d 30 20 26 26 20 70 63 3d 3d 30 20 29  ce==0 && pc==0 )
4fb0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  {.      sqlite3B
4fc0: 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
4fd0: 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20 66 69  ();.      if( fi
4fe0: 6c 65 45 78 69 73 74 73 28 64 62 2c 20 22 76 64  leExists(db, "vd
4ff0: 62 65 5f 73 71 6c 74 72 61 63 65 22 29 20 29 7b  be_sqltrace") ){
5000: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5010: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
5020: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
5030: 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
5040: 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 7d 0a 23  alloc();.    }.#
5050: 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20  endif.      ..  
5060: 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65    /* Check to se
5070: 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20  e if we need to 
5080: 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65  simulate an inte
5090: 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c  rrupt.  This onl
50a0: 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a  y happens.    **
50b0: 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70   if we have a sp
50c0: 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64  ecial test build
50d0: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
50e0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
50f0: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
5100: 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b  rrupt_count>0 ){
5110: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
5120: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d  nterrupt_count--
5130: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
5140: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5150: 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  unt==0 ){.      
5160: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
5170: 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  upt(db);.      }
5180: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  .    }.#endif..#
5190: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
51a0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
51b0: 42 41 43 4b 0a 20 20 20 20 2f 2a 20 43 61 6c 6c  BACK.    /* Call
51c0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
51d0: 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20  llback if it is 
51e0: 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74  configured and t
51f0: 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62  he required numb
5200: 65 72 0a 20 20 20 20 2a 2a 20 6f 66 20 56 44 42  er.    ** of VDB
5210: 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20  E ops have been 
5220: 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72  executed (either
5230: 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f   since this invo
5240: 63 61 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a  cation of.    **
5250: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
5260: 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74  () or since last
5270: 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65   time the progre
5280: 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20  ss callback was 
5290: 63 61 6c 6c 65 64 29 2e 0a 20 20 20 20 2a 2a 20  called)..    ** 
52a0: 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  If the progress 
52b0: 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73  callback returns
52c0: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20   non-zero, exit 
52d0: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
52e0: 69 6e 65 20 77 69 74 68 0a 20 20 20 20 2a 2a 20  ine with.    ** 
52f0: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a return code SQ
5300: 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 20 20  LITE_ABORT..    
5310: 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  */.    if( db->x
5320: 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20  Progress ){.    
5330: 20 20 69 66 28 20 64 62 2d 3e 6e 50 72 6f 67 72    if( db->nProgr
5340: 65 73 73 4f 70 73 3d 3d 6e 50 72 6f 67 72 65 73  essOps==nProgres
5350: 73 4f 70 73 20 29 7b 0a 20 20 20 20 20 20 20 20  sOps ){.        
5360: 69 6e 74 20 70 72 63 3b 0a 20 20 20 20 20 20 20  int prc;.       
5370: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
5380: 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
5390: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
53a0: 73 75 73 65 3b 0a 20 20 20 20 20 20 20 20 70 72  suse;.        pr
53b0: 63 20 3d 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  c =db->xProgress
53c0: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
53d0: 67 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  g);.        if( 
53e0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
53f0: 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
5400: 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
5410: 20 20 20 20 20 20 20 20 69 66 28 20 70 72 63 21          if( prc!
5420: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
5430: 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
5440: 52 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20 20  RRUPT;.         
5450: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
5460: 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d  _halt;.        }
5470: 0a 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72 65  .        nProgre
5480: 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20  ssOps = 0;.     
5490: 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65   }.      nProgre
54a0: 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23  ssOps++;.    }.#
54b0: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 44 6f  endif..    /* Do
54c0: 20 63 6f 6d 6d 6f 6e 20 73 65 74 75 70 20 70 72   common setup pr
54d0: 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 61 6e 79  ocessing for any
54e0: 20 6f 70 63 6f 64 65 20 74 68 61 74 20 69 73 20   opcode that is 
54f0: 6d 61 72 6b 65 64 0a 20 20 20 20 2a 2a 20 77 69  marked.    ** wi
5500: 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65  th the "out2-pre
5510: 72 65 6c 65 61 73 65 22 20 74 61 67 2e 20 20 53  release" tag.  S
5520: 75 63 68 20 6f 70 63 6f 64 65 73 20 68 61 76 65  uch opcodes have
5530: 20 61 20 73 69 6e 67 6c 65 0a 20 20 20 20 2a 2a   a single.    **
5540: 20 6f 75 74 70 75 74 20 77 68 69 63 68 20 69 73   output which is
5550: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
5560: 65 20 50 32 20 70 61 72 61 6d 65 74 65 72 2e 20  e P2 parameter. 
5570: 20 54 68 65 20 50 32 20 72 65 67 69 73 74 65 72   The P2 register
5580: 0a 20 20 20 20 2a 2a 20 69 73 20 69 6e 69 74 69  .    ** is initi
5590: 61 6c 69 7a 65 64 20 74 6f 20 61 20 4e 55 4c 4c  alized to a NULL
55a0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 70 50  ..    */.    opP
55b0: 72 6f 70 65 72 74 79 20 3d 20 6f 70 63 6f 64 65  roperty = opcode
55c0: 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70  Property[pOp->op
55d0: 63 6f 64 65 5d 3b 0a 20 20 20 20 69 66 28 20 28  code];.    if( (
55e0: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
55f0: 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41  LG_OUT2_PRERELEA
5600: 53 45 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  SE)!=0 ){.      
5610: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
5620: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5630: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e  t( pOp->p2<=p->n
5640: 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75  Mem );.      pOu
5650: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
5660: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 73 71 6c  ->p2];.      sql
5670: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
5680: 73 65 45 78 74 65 72 6e 61 6c 28 70 4f 75 74 29  seExternal(pOut)
5690: 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ;.      pOut->fl
56a0: 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
56b0: 20 20 20 20 7d 65 6c 73 65 0a 20 0a 20 20 20 20      }else. .    
56c0: 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74  /* Do common set
56d0: 75 70 20 66 6f 72 20 6f 70 63 6f 64 65 73 20 6d  up for opcodes m
56e0: 61 72 6b 65 64 20 77 69 74 68 20 6f 6e 65 20 6f  arked with one o
56f0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
5700: 20 20 20 20 2a 2a 20 63 6f 6d 62 69 6e 61 74 69      ** combinati
5710: 6f 6e 73 20 6f 66 20 70 72 6f 70 65 72 74 69 65  ons of propertie
5720: 73 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  s..    **.    **
5730: 20 20 20 20 20 20 20 20 20 20 20 69 6e 31 0a 20             in1. 
5740: 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20     **           
5750: 69 6e 31 20 69 6e 32 0a 20 20 20 20 2a 2a 20 20  in1 in2.    **  
5760: 20 20 20 20 20 20 20 20 20 69 6e 31 20 69 6e 32           in1 in2
5770: 20 6f 75 74 33 0a 20 20 20 20 2a 2a 20 20 20 20   out3.    **    
5780: 20 20 20 20 20 20 20 69 6e 31 20 69 6e 33 0a 20         in1 in3. 
5790: 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 56 61 72     **.    ** Var
57a0: 69 61 62 6c 65 73 20 70 49 6e 31 2c 20 70 49 6e  iables pIn1, pIn
57b0: 32 2c 20 61 6e 64 20 70 49 6e 33 20 61 72 65 20  2, and pIn3 are 
57c0: 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f  made to point to
57d0: 20 61 70 70 72 6f 70 72 69 61 74 65 0a 20 20 20   appropriate.   
57e0: 20 2a 2a 20 72 65 67 69 73 74 65 72 73 20 66 6f   ** registers fo
57f0: 72 20 69 6e 70 75 74 73 2e 20 20 56 61 72 69 61  r inputs.  Varia
5800: 62 6c 65 20 70 4f 75 74 20 70 6f 69 6e 74 73 20  ble pOut points 
5810: 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  to the output re
5820: 67 69 73 74 65 72 2e 0a 20 20 20 20 2a 2f 0a 20  gister..    */. 
5830: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
5840: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21  ty & OPFLG_IN1)!
5850: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5860: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
5870: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5880: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p1<=p->nMem 
5890: 29 3b 0a 20 20 20 20 20 20 70 49 6e 31 20 3d 20  );.      pIn1 = 
58a0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
58b0: 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ];.      REGISTE
58c0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
58d0: 20 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 69 66   pIn1);.      if
58e0: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
58f0: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5900: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5910: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
5920: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5930: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p2<=p->nMem )
5940: 3b 0a 20 20 20 20 20 20 20 20 70 49 6e 32 20 3d  ;.        pIn2 =
5950: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
5960: 32 5d 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  2];.        REGI
5970: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5980: 70 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 20  p2, pIn2);.     
5990: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
59a0: 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29  ty & OPFLG_OUT3)
59b0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
59c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
59d0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  >0 );.          
59e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
59f0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
5a00: 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d        pOut = &p-
5a10: 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
5a20: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5a30: 7d 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f  }else if( (opPro
5a40: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
5a50: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  3)!=0 ){.       
5a60: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5a70: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
5a80: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
5a90: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
5aa0: 20 20 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65    pIn3 = &p->aMe
5ab0: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
5ac0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5ad0: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 49 6e 33  CE(pOp->p3, pIn3
5ae0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5af0: 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70  else if( (opProp
5b00: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32  erty & OPFLG_IN2
5b10: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5b20: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5b30: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5b40: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5b50: 6d 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 32 20  m );.      pIn2 
5b60: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
5b70: 70 32 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53  p2];.      REGIS
5b80: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5b90: 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65  2, pIn2);.    }e
5ba0: 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65  lse if( (opPrope
5bb0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  rty & OPFLG_IN3)
5bc0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5bd0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
5be0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5bf0: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
5c00: 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 33 20 3d   );.      pIn3 =
5c10: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
5c20: 33 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54  3];.      REGIST
5c30: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
5c40: 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 7d 0a 0a  , pIn3);.    }..
5c50: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
5c60: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
5c70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5c90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ca0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5cb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
5cc0: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
5cd0: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
5ce0: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
5cf0: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
5d00: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
5d10: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
5d20: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
5d30: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
5d40: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5d50: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5d60: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
5d70: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
5d80: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
5d90: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
5da0: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
5db0: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
5dc0: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
5dd0: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
5de0: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
5df0: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
5e00: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
5e10: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
5e20: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
5e30: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5e40: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5e50: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5e60: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
5e70: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
5e80: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
5e90: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
5ea0: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
5eb0: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
5ec0: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
5ed0: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5ee0: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
5ef0: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
5f00: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
5f10: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5f20: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5f30: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5f40: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5f50: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5f60: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5f70: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5f80: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5f90: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5fa0: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5fb0: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5fc0: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5fd0: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5fe0: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
5ff0: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
6000: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
6010: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
6020: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
6030: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
6040: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
6050: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
6060: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
6070: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
6080: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
6090: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
60a0: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
60b0: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
60c0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
60d0: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
60e0: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
60f0: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
6100: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
6110: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
6120: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
6130: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
6140: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
6150: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
6160: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
6170: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
6180: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
6190: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
61a0: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72  n2, in3, out2_pr
61b0: 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20  erelease, out2, 
61c0: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
61d0: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
61e0: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
61f0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
6200: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
6210: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
6220: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
6230: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
6240: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
6250: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
6260: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
6270: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
6280: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
6290: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
62a0: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
62b0: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
62c0: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
62d0: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
62e0: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
62f0: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
6300: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
6310: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
6320: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
6330: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
6340: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
6350: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
6360: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
6370: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
6380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
63a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
63b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
63c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
63d0: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
63e0: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
63f0: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
6400: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
6410: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
6420: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
6430: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
6440: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
6450: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
6460: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
6470: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
6480: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
6490: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
64a0: 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46  ump */.  CHECK_F
64b0: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
64c0: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
64d0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
64e0: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20   Opcode:  Gosub 
64f0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
6500: 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
6510: 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f  ent address onto
6520: 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
6530: 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  and then jump to
6540: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a   address P2..*/.
6550: 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b  case OP_Gosub: {
6560: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6570: 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
6580: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
6590: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
65a0: 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49  =p->nMem );.  pI
65b0: 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  n1 = &p->aMem[pO
65c0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
65d0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
65e0: 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a   MEM_Dyn)==0 );.
65f0: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6600: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d  MEM_Int;.  pIn1-
6610: 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47  >u.i = pc;.  REG
6620: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
6630: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63  >p1, pIn1);.  pc
6640: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
6650: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6660: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
6670: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6680: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
6690: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
66a0: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
66b0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
66c0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e  /.case OP_Return
66d0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
66e0: 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
66f0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
6700: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20  MEM_Int );.  pc 
6710: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
6720: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6730: 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20   Opcode:  Yield 
6740: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
6750: 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61   Swap the progra
6760: 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74  m counter with t
6770: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
6780: 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  ster P1..*/.case
6790: 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20   OP_Yield: {    
67a0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
67b0: 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a  /.  int pcDest;.
67c0: 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d    assert( (pIn1-
67d0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
67e0: 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  )==0 );.  pIn1->
67f0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6800: 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74  .  pcDest = (int
6810: 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49  )pIn1->u.i;.  pI
6820: 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20  n1->u.i = pc;.  
6830: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
6840: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
6850: 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20   pc = pcDest;.  
6860: 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
6870: 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50  code:  Halt P1 P
6880: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45  2 * P4 *.**.** E
6890: 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  xit immediately.
68a0: 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f    All open curso
68b0: 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  rs, etc are clos
68c0: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
68d0: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
68e0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
68f0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
6900: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
6910: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
6920: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
6930: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
6940: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
6950: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
6960: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
6970: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
6980: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
6990: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
69a0: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
69b0: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
69c0: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
69d0: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
69e0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
69f0: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
6a00: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
6a10: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
6a20: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
6a30: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
6a40: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
6a50: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
6a60: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
6a70: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
6a80: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
6a90: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
6aa0: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
6ab0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6ac0: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
6ad0: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
6ae0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
6af0: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
6b00: 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e  *.** There is an
6b10: 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30   implied "Halt 0
6b20: 20 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f   0 0" instructio
6b30: 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68  n inserted at th
6b40: 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a  e very end of.**
6b50: 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20   every program. 
6b60: 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20   So a jump past 
6b70: 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63  the last instruc
6b80: 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67  tion of the prog
6b90: 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61  ram.** is the sa
6ba0: 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20  me as executing 
6bb0: 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Halt..*/.case OP
6bc0: 5f 48 61 6c 74 3a 20 7b 0a 20 20 70 2d 3e 72 63  _Halt: {.  p->rc
6bd0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d   = pOp->p1;.  p-
6be0: 3e 70 63 20 3d 20 70 63 3b 0a 20 20 70 2d 3e 65  >pc = pc;.  p->e
6bf0: 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 70 4f 70  rrorAction = pOp
6c00: 2d 3e 70 32 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ->p2;.  if( pOp-
6c10: 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 73 71 6c  >p4.z ){.    sql
6c20: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
6c30: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
6c40: 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  %s", pOp->p4.z);
6c50: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
6c60: 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
6c70: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
6c80: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
6c90: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
6ca0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
6cb0: 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63  USY ){.    p->rc
6cc0: 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
6cd0: 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  USY;.  }else{.  
6ce0: 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53    rc = p->rc ? S
6cf0: 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51  QLITE_ERROR : SQ
6d00: 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20  LITE_DONE;.  }. 
6d10: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
6d20: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
6d30: 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a   Integer P1 P2 *
6d40: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33   * *.**.** The 3
6d50: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  2-bit integer va
6d60: 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65  lue P1 is writte
6d70: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
6d80: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
6d90: 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20  nteger: {       
6da0: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
6db0: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
6dc0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6dd0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
6de0: 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  Op->p1;.  break;
6df0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6e00: 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a  nt64 * P2 * P4 *
6e10: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
6e20: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
6e30: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
6e40: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
6e50: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
6e60: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
6e70: 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20  OP_Int64: {     
6e80: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
6e90: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
6ea0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49  sert( pOp->p4.pI
6eb0: 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  64!=0 );.  pOut-
6ec0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6ed0: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
6ee0: 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20  *pOp->p4.pI64;. 
6ef0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6f00: 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20  code: Real * P2 
6f10: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
6f20: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
6f30: 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e  a 64-bit floatin
6f40: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a  g point value..*
6f50: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
6f60: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
6f70: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
6f80: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
6f90: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
6fa0: 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65  _FLOAT, out2-pre
6fb0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75  release */.  pOu
6fc0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52  t->flags = MEM_R
6fd0: 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21  eal;.  assert( !
6fe0: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f  sqlite3IsNaN(*pO
6ff0: 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a  p->p4.pReal) );.
7000: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70    pOut->r = *pOp
7010: 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72  ->p4.pReal;.  br
7020: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7030: 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20  e: String8 * P2 
7040: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
7050: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20  points to a nul 
7060: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
7070: 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70   string. This op
7080: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
7090: 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20  med .** into an 
70a0: 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65  OP_String before
70b0: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20   it is executed 
70c0: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69  for the first ti
70d0: 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  me..*/.case OP_S
70e0: 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20  tring8: {       
70f0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
7100: 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65  STRING, out2-pre
7110: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
7120: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
7130: 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  0 );.  pOp->opco
7140: 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a  de = OP_String;.
7150: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69    pOp->p1 = sqli
7160: 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d  te3Strlen30(pOp-
7170: 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66  >p4.z);..#ifndef
7180: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
7190: 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e  16.  if( encodin
71a0: 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  g!=SQLITE_UTF8 )
71b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
71c0: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
71d0: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20   pOp->p4.z, -1, 
71e0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
71f0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
7200: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
7210: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
7220: 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20  eEncoding(pOut, 
7230: 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f  encoding) ) goto
7240: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 69 66 28   no_mem;.    if(
7250: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69   SQLITE_OK!=sqli
7260: 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72  te3VdbeMemMakeWr
7270: 69 74 65 61 62 6c 65 28 70 4f 75 74 29 20 29 20  iteable(pOut) ) 
7280: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
7290: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d   pOut->zMalloc =
72a0: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
72b0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
72c0: 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  c;.    pOut->fla
72d0: 67 73 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a  gs &= ~MEM_Dyn;.
72e0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
72f0: 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20  ype==P4_DYNAMIC 
7300: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
7310: 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e  DbFree(db, pOp->
7320: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20  p4.z);.    }.   
7330: 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
7340: 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70  4_DYNAMIC;.    p
7350: 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d  Op->p4.z = pOut-
7360: 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20  >z;.    pOp->p1 
7370: 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 20 20 69  = pOut->n;.    i
7380: 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61  f( pOp->p1>db->a
7390: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
73a0: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
73b0: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
73c0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 55 50 44 41  ;.    }.    UPDA
73d0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
73e0: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
73f0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69  ;.  }.#endif.  i
7400: 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61  f( pOp->p1>db->a
7410: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
7420: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
7430: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
7440: 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68    }.  /* Fall th
7450: 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
7460: 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e  t case, OP_Strin
7470: 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63  g */.}.  ./* Opc
7480: 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50  ode: String P1 P
7490: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 * P4 *.**.** T
74a0: 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  he string value 
74b0: 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20  P4 of length P1 
74c0: 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65  (bytes) is store
74d0: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
74e0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ..*/.case OP_Str
74f0: 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ing: {          
7500: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
7510: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
7520: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
7530: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
7540: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74  MEM_Str|MEM_Stat
7550: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  ic|MEM_Term;.  p
7560: 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34  Out->z = pOp->p4
7570: 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  .z;.  pOut->n = 
7580: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d  pOp->p1;.  pOut-
7590: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
75a0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
75b0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
75c0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
75d0: 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20 50 32 20 2a  ode: Null * P2 *
75e0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
75f0: 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67   a NULL into reg
7600: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7610: 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20  e OP_Null: {    
7620: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7630: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 62  rerelease */.  b
7640: 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
7650: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
7660: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  * P4.**.** P4 po
7670: 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f  ints to a blob o
7680: 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20  f data P1 bytes 
7690: 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69  long.  Store thi
76a0: 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67  s.** blob in reg
76b0: 69 73 74 65 72 20 50 32 2e 20 54 68 69 73 20 69  ister P2. This i
76c0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6e 6f  nstruction is no
76d0: 74 20 63 6f 64 65 64 20 64 69 72 65 63 74 6c 79  t coded directly
76e0: 0a 2a 2a 20 62 79 20 74 68 65 20 63 6f 6d 70 69  .** by the compi
76f0: 6c 65 72 2e 20 49 6e 73 74 65 61 64 2c 20 74 68  ler. Instead, th
7700: 65 20 63 6f 6d 70 69 6c 65 72 20 6c 61 79 65 72  e compiler layer
7710: 20 73 70 65 63 69 66 69 65 73 0a 2a 2a 20 61 6e   specifies.** an
7720: 20 4f 50 5f 48 65 78 42 6c 6f 62 20 6f 70 63 6f   OP_HexBlob opco
7730: 64 65 2c 20 77 69 74 68 20 74 68 65 20 68 65 78  de, with the hex
7740: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
7750: 74 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  tation of.** the
7760: 20 62 6c 6f 62 20 61 73 20 50 34 2e 20 54 68 69   blob as P4. Thi
7770: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
7780: 73 66 6f 72 6d 65 64 20 74 6f 20 61 6e 20 4f 50  sformed to an OP
7790: 5f 42 6c 6f 62 0a 2a 2a 20 74 68 65 20 66 69 72  _Blob.** the fir
77a0: 73 74 20 74 69 6d 65 20 69 74 20 69 73 20 65 78  st time it is ex
77b0: 65 63 75 74 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  ecuted..*/.case 
77c0: 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  OP_Blob: {      
77d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
77e0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
77f0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7800: 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f  1 <= SQLITE_MAX_
7810: 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69  LENGTH );.  sqli
7820: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
7830: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
7840: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
7850: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
7860: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
7870: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
7880: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
7890: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  }../* Opcode: Va
78a0: 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a  riable P1 P2 * *
78b0: 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c   *.**.** The val
78c0: 75 65 20 6f 66 20 76 61 72 69 61 62 6c 65 20 50  ue of variable P
78d0: 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74  1 is written int
78e0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 41  o register P2. A
78f0: 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20   variable is.** 
7900: 61 6e 20 75 6e 6b 6e 6f 77 6e 20 69 6e 20 74 68  an unknown in th
7910: 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 20 73  e original SQL s
7920: 74 72 69 6e 67 20 61 73 20 68 61 6e 64 65 64 20  tring as handed 
7930: 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69  to sqlite3_compi
7940: 6c 65 28 29 2e 0a 2a 2a 20 41 6e 79 20 6f 63 63  le()..** Any occ
7950: 75 72 72 65 6e 63 65 20 6f 66 20 74 68 65 20 27  urrence of the '
7960: 3f 27 20 63 68 61 72 61 63 74 65 72 20 69 6e 20  ?' character in 
7970: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  the original SQL
7980: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a   is considered.*
7990: 2a 20 61 20 76 61 72 69 61 62 6c 65 2e 20 20 56  * a variable.  V
79a0: 61 72 69 61 62 6c 65 73 20 69 6e 20 74 68 65 20  ariables in the 
79b0: 53 51 4c 20 73 74 72 69 6e 67 20 61 72 65 20 6e  SQL string are n
79c0: 75 6d 62 65 72 20 66 72 6f 6d 20 6c 65 66 74 20  umber from left 
79d0: 74 6f 0a 2a 2a 20 72 69 67 68 74 20 62 65 67 69  to.** right begi
79e0: 6e 6e 69 6e 67 20 77 69 74 68 20 31 2e 20 20 54  nning with 1.  T
79f0: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 76 61 72  he values of var
7a00: 69 61 62 6c 65 73 20 61 72 65 20 73 65 74 20 75  iables are set u
7a10: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69  sing the.** sqli
7a20: 74 65 33 5f 62 69 6e 64 28 29 20 41 50 49 2e 0a  te3_bind() API..
7a30: 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61  */.case OP_Varia
7a40: 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
7a50: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
7a60: 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6a 20 3d  ase */.  int j =
7a70: 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20   pOp->p1 - 1;.  
7a80: 4d 65 6d 20 2a 70 56 61 72 3b 0a 20 20 61 73 73  Mem *pVar;.  ass
7a90: 65 72 74 28 20 6a 3e 3d 30 20 26 26 20 6a 3c 70  ert( j>=0 && j<p
7aa0: 2d 3e 6e 56 61 72 20 29 3b 0a 0a 20 20 70 56 61  ->nVar );..  pVa
7ab0: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 6a 5d 3b  r = &p->aVar[j];
7ac0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
7ad0: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72  beMemTooBig(pVar
7ae0: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
7af0: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_big;.  }.  sql
7b00: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
7b10: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 26 70 2d  owCopy(pOut, &p-
7b20: 3e 61 56 61 72 5b 6a 5d 2c 20 4d 45 4d 5f 53 74  >aVar[j], MEM_St
7b30: 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f  atic);.  UPDATE_
7b40: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
7b50: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7b60: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20  /* Opcode: Move 
7b70: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
7b80: 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75  ** Move the valu
7b90: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
7ba0: 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20  1..P1+P3-1 over 
7bb0: 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
7bc0: 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20  s P2..P2+P3-1.  
7bd0: 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  Registers P1..P1
7be0: 2b 50 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66  +P1-1 are.** lef
7bf0: 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c  t holding a NULL
7c00: 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  .  It is an erro
7c10: 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72  r for register r
7c20: 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b  anges.** P1..P1+
7c30: 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b  P3-1 and P2..P2+
7c40: 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e  P3-1 to overlap.
7c50: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65  .*/.case OP_Move
7c60: 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c  : {.  char *zMal
7c70: 6c 6f 63 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 70  loc;.  int n = p
7c80: 4f 70 2d 3e 70 33 3b 0a 20 20 69 6e 74 20 70 31  Op->p3;.  int p1
7c90: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e   = pOp->p1;.  in
7ca0: 74 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  t p2 = pOp->p2;.
7cb0: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b    assert( n>0 );
7cc0: 0a 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20  .  assert( p1>0 
7cd0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b  );.  assert( p1+
7ce0: 6e 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  n<p->nMem );.  p
7cf0: 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
7d00: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32  1];.  assert( p2
7d10: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
7d20: 70 32 2b 6e 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  p2+n<p->nMem );.
7d30: 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
7d40: 6d 5b 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  m[p2];.  assert(
7d50: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
7d60: 6e 3c 3d 70 31 20 29 3b 0a 20 20 77 68 69 6c 65  n<=p1 );.  while
7d70: 28 20 6e 2d 2d 20 29 7b 0a 20 20 20 20 7a 4d 61  ( n-- ){.    zMa
7d80: 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61  lloc = pOut->zMa
7d90: 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  lloc;.    pOut->
7da0: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
7db0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
7dc0: 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b  ove(pOut, pIn1);
7dd0: 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c  .    pIn1->zMall
7de0: 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  oc = zMalloc;.  
7df0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
7e00: 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20  (p2++, pOut);.  
7e10: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f    pIn1++;.    pO
7e20: 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ut++;.  }.  brea
7e30: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7e40: 20 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20   Copy P1 P2 * * 
7e50: 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63  *.**.** Make a c
7e60: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20  opy of register 
7e70: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
7e80: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
7e90: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
7ea0: 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66  s a deep copy of
7eb0: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64   the value.  A d
7ec0: 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d  uplicate.** is m
7ed0: 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e  ade of any strin
7ee0: 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61  g or blob consta
7ef0: 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50  nt.  See also OP
7f00: 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  _SCopy..*/.case 
7f10: 4f 50 5f 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  OP_Copy: {      
7f20: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
7f30: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7f40: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
7f50: 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d  ( pOp->p2<=p->nM
7f60: 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  em );.  pOut = &
7f70: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
7f80: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
7f90: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
7fa0: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
7fb0: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
7fc0: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
7fd0: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
7fe0: 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52  Out);.  REGISTER
7ff0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
8000: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
8010: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43  }../* Opcode: SC
8020: 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  opy P1 P2 * * *.
8030: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61  **.** Make a sha
8040: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67  llow copy of reg
8050: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
8060: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
8070: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
8080: 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f  n makes a shallo
8090: 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  w copy of the va
80a0: 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c  lue.  If the val
80b0: 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e  ue.** is a strin
80c0: 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20  g or blob, then 
80d0: 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79  the copy is only
80e0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
80f0: 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e  e.** original an
8100: 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f  d hence if the o
8110: 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20  riginal changes 
8120: 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79  so will the copy
8130: 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74  ..** Worse, if t
8140: 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64  he original is d
8150: 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20  eallocated, the 
8160: 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76  copy becomes inv
8170: 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68  alid..** Thus th
8180: 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67  e program must g
8190: 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68  uarantee that th
81a0: 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20  e original will 
81b0: 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75  not change.** du
81c0: 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d  ring the lifetim
81d0: 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20  e of the copy.  
81e0: 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d  Use OP_Copy to m
81f0: 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a  ake a complete.*
8200: 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  * copy..*/.case 
8210: 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20  OP_SCopy: {     
8220: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
8230: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
8240: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
8250: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8260: 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p2>0 );.  asser
8270: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e  t( pOp->p2<=p->n
8280: 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  Mem );.  pOut = 
8290: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
82a0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
82b0: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
82c0: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
82d0: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
82e0: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
82f0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
8300: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
8310: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8320: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
8330: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
8340: 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73  ** The registers
8350: 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50   P1 through P1+P
8360: 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  2-1 contain a si
8370: 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72  ngle row of.** r
8380: 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63  esults. This opc
8390: 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73  ode causes the s
83a0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61  qlite3_step() ca
83b0: 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a  ll to terminate.
83c0: 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ** with an SQLIT
83d0: 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64  E_ROW return cod
83e0: 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70  e and it sets up
83f0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d   the sqlite3_stm
8400: 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  t.** structure t
8410: 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73  o provide access
8420: 20 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76   to the top P1 v
8430: 61 6c 75 65 73 20 61 73 20 74 68 65 20 72 65 73  alues as the res
8440: 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63  ult.** row..*/.c
8450: 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  ase OP_ResultRow
8460: 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
8470: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65  .  int i;.  asse
8480: 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d  rt( p->nResColum
8490: 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  n==pOp->p2 );.  
84a0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
84b0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
84c0: 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d  Op->p1+pOp->p2<=
84d0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 0a 20 20 2f 2a  p->nMem );..  /*
84e0: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
84f0: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
8500: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
8510: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
8520: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
8530: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
8540: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
8550: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
8560: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
8570: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
8580: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
8590: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
85a0: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
85b0: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
85c0: 20 61 73 20 73 69 64 65 20 65 66 66 65 63 74 2e   as side effect.
85d0: 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70  .  */.  pMem = p
85e0: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26  ->pResultSet = &
85f0: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
8600: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
8610: 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20  Op->p2; i++){.  
8620: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8630: 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d  NulTerminate(&pM
8640: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 74 6f 72  em[i]);.    stor
8650: 65 54 79 70 65 49 6e 66 6f 28 26 70 4d 65 6d 5b  eTypeInfo(&pMem[
8660: 69 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  i], encoding);. 
8670: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
8680: 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d  E(pOp->p1+i, &pM
8690: 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66  em[i]);.  }.  if
86a0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
86b0: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
86c0: 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53  ;..  /* Return S
86d0: 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20  QLITE_ROW.  */. 
86e0: 20 70 2d 3e 6e 43 61 6c 6c 62 61 63 6b 2b 2b 3b   p->nCallback++;
86f0: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20  .  p->pc = pc + 
8700: 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
8710: 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62  _ROW;.  goto vdb
8720: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
8730: 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50  Opcode: Concat P
8740: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
8750: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
8760: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
8770: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
8780: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
8790: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
87a0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
87b0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
87c0: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
87d0: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
87e0: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
87f0: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
8800: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
8810: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
8820: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
8830: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
8840: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
8850: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
8860: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
8870: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
8880: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
8890: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
88a0: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
88b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
88c0: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
88d0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
88e0: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
88f0: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
8900: 79 74 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  yte;..  assert( 
8910: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
8920: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
8930: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
8940: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
8950: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8960: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
8970: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
8980: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
8990: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
89a0: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
89b0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
89c0: 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  );.  Stringify(p
89d0: 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In2, encoding);.
89e0: 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e    nByte = pIn1->
89f0: 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69  n + pIn2->n;.  i
8a00: 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69  f( nByte>db->aLi
8a10: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
8a20: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
8a30: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
8a40: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
8a50: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72  ag(pOut, MEM_Str
8a60: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
8a70: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
8a80: 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20  , (int)nByte+2, 
8a90: 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20  pOut==pIn2) ){. 
8aa0: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
8ab0: 20 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d    }.  if( pOut!=
8ac0: 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63  pIn2 ){.    memc
8ad0: 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32  py(pOut->z, pIn2
8ae0: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20  ->z, pIn2->n);. 
8af0: 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75   }.  memcpy(&pOu
8b00: 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70  t->z[pIn2->n], p
8b10: 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29  In1->z, pIn1->n)
8b20: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
8b30: 65 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  e] = 0;.  pOut->
8b40: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
8b50: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
8b60: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
8b70: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
8b80: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
8b90: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
8ba0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
8bb0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
8bc0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
8bd0: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
8be0: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61  **.** Add the va
8bf0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
8c00: 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
8c10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
8c20: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
8c30: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
8c40: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
8c50: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
8c60: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
8c70: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
8c80: 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31  ode: Multiply P1
8c90: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
8ca0: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
8cb0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
8cc0: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
8cd0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
8ce0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
8cf0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
8d00: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
8d10: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
8d20: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
8d30: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
8d40: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
8d50: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8d60: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
8d70: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
8d80: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
8d90: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
8da0: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
8db0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
8dc0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
8dd0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
8de0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
8df0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
8e00: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
8e10: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8e20: 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76  .** Divide the v
8e30: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
8e40: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
8e50: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
8e60: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
8e70: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
8e80: 74 65 72 20 50 33 2e 20 20 49 66 20 74 68 65 20  ter P3.  If the 
8e90: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
8ea0: 72 20 50 32 0a 2a 2a 20 69 73 20 7a 65 72 6f 2c  r P2.** is zero,
8eb0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
8ec0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20   is NULL..** If 
8ed0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
8ee0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
8ef0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
8f00: 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65  Opcode: Remainde
8f10: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
8f20: 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65  *.** Compute the
8f30: 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72   remainder after
8f40: 20 69 6e 74 65 67 65 72 20 64 69 76 69 73 69 6f   integer divisio
8f50: 6e 20 6f 66 20 74 68 65 20 76 61 6c 75 65 20 69  n of the value i
8f60: 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  n.** register P1
8f70: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
8f80: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
8f90: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
8fa0: 74 20 69 6e 20 50 33 2e 20 0a 2a 2a 20 49 66 20  t in P3. .** If 
8fb0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
8fc0: 69 73 74 65 72 20 50 32 20 69 73 20 7a 65 72 6f  ister P2 is zero
8fd0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
8fe0: 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65  ULL..** If eithe
8ff0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
9000: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
9010: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
9020: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20  P_Add:          
9030: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9040: 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31   as TK_PLUS, in1
9050: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
9060: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
9070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9080: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55   same as TK_MINU
9090: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
90a0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c  3 */.case OP_Mul
90b0: 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20  tiply:          
90c0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
90d0: 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32  K_STAR, in1, in2
90e0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
90f0: 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20  P_Divide:       
9100: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9110: 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e   as TK_SLASH, in
9120: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
9130: 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65  case OP_Remainde
9140: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  r: {           /
9150: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d  * same as TK_REM
9160: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9170: 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b   */.  int flags;
9180: 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  .  applyNumericA
9190: 66 66 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a 20  ffinity(pIn1);. 
91a0: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
91b0: 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20 66  inity(pIn2);.  f
91c0: 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61  lags = pIn1->fla
91d0: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
91e0: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20 26  ;.  if( (flags &
91f0: 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20   MEM_Null)!=0 ) 
9200: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
9210: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
9220: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
9230: 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs & pIn2->flags
9240: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d   & MEM_Int)==MEM
9250: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 36 34 20  _Int ){.    i64 
9260: 61 2c 20 62 3b 0a 20 20 20 20 61 20 3d 20 70 49  a, b;.    a = pI
9270: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 20 3d  n1->u.i;.    b =
9280: 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn2->u.i;.    
9290: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
92a0: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
92b0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
92c0: 20 20 62 20 2b 3d 20 61 3b 20 20 20 20 20 20 20    b += a;       
92d0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
92e0: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
92f0: 20 20 62 20 2d 3d 20 61 3b 20 20 20 20 20 20 20    b -= a;       
9300: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9310: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
9320: 20 20 62 20 2a 3d 20 61 3b 20 20 20 20 20 20 20    b *= a;       
9330: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9340: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20  e OP_Divide: {. 
9350: 20 20 20 20 20 20 20 69 66 28 20 61 3d 3d 30 20         if( a==0 
9360: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
9370: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
9380: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 69 76  ;.        /* Div
9390: 69 64 69 6e 67 20 74 68 65 20 6c 61 72 67 65 73  iding the larges
93a0: 74 20 70 6f 73 73 69 62 6c 65 20 6e 65 67 61 74  t possible negat
93b0: 69 76 65 20 36 34 2d 62 69 74 20 69 6e 74 65 67  ive 64-bit integ
93c0: 65 72 20 28 31 3c 3c 36 33 29 20 62 79 20 0a 20  er (1<<63) by . 
93d0: 20 20 20 20 20 20 20 2a 2a 20 2d 31 20 72 65 74         ** -1 ret
93e0: 75 72 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20  urns an integer 
93f0: 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 73 74 6f  too large to sto
9400: 72 65 20 69 6e 20 61 20 36 34 2d 62 69 74 20 64  re in a 64-bit d
9410: 61 74 61 2d 74 79 70 65 2e 20 4f 6e 0a 20 20 20  ata-type. On.   
9420: 20 20 20 20 20 2a 2a 20 73 6f 6d 65 20 61 72 63       ** some arc
9430: 68 69 74 65 63 74 75 72 65 73 2c 20 74 68 65 20  hitectures, the 
9440: 76 61 6c 75 65 20 6f 76 65 72 66 6c 6f 77 73 20  value overflows 
9450: 74 6f 20 28 31 3c 3c 36 33 29 2e 20 4f 6e 20 6f  to (1<<63). On o
9460: 74 68 65 72 73 2c 0a 20 20 20 20 20 20 20 20 2a  thers,.        *
9470: 2a 20 61 20 53 49 47 46 50 45 20 69 73 20 69 73  * a SIGFPE is is
9480: 73 75 65 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77  sued. The follow
9490: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 6e 6f  ing statement no
94a0: 72 6d 61 6c 69 7a 65 73 20 74 68 69 73 0a 20 20  rmalizes this.  
94b0: 20 20 20 20 20 20 2a 2a 20 62 65 68 61 76 69 6f        ** behavio
94c0: 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 61 72  r so that all ar
94d0: 63 68 69 74 65 63 74 75 72 65 73 20 62 65 68 61  chitectures beha
94e0: 76 65 20 61 73 20 69 66 20 69 6e 74 65 67 65 72  ve as if integer
94f0: 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 76 65   .        ** ove
9500: 72 66 6c 6f 77 20 6f 63 63 75 72 72 65 64 2e 0a  rflow occurred..
9510: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
9520: 20 20 20 69 66 28 20 61 3d 3d 2d 31 20 26 26 20     if( a==-1 && 
9530: 62 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  b==SMALLEST_INT6
9540: 34 20 29 20 61 20 3d 20 31 3b 0a 20 20 20 20 20  4 ) a = 1;.     
9550: 20 20 20 62 20 2f 3d 20 61 3b 0a 20 20 20 20 20     b /= a;.     
9560: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9570: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
9580: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61   {.        if( a
9590: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
95a0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
95b0: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
95c0: 28 20 61 3d 3d 2d 31 20 29 20 61 20 3d 20 31 3b  ( a==-1 ) a = 1;
95d0: 0a 20 20 20 20 20 20 20 20 62 20 25 3d 20 61 3b  .        b %= a;
95e0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
95f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
9600: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 62 3b    pOut->u.i = b;
9610: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
9620: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
9630: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
9640: 20 64 6f 75 62 6c 65 20 61 2c 20 62 3b 0a 20 20   double a, b;.  
9650: 20 20 61 20 3d 20 73 71 6c 69 74 65 33 56 64 62    a = sqlite3Vdb
9660: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
9670: 3b 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65  ;.    b = sqlite
9680: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
9690: 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68  In2);.    switch
96a0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
96b0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
96c0: 64 64 3a 20 20 20 20 20 20 20 20 20 62 20 2b 3d  dd:         b +=
96d0: 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   a;       break;
96e0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
96f0: 75 62 74 72 61 63 74 3a 20 20 20 20 62 20 2d 3d  ubtract:    b -=
9700: 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   a;       break;
9710: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
9720: 75 6c 74 69 70 6c 79 3a 20 20 20 20 62 20 2a 3d  ultiply:    b *=
9730: 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   a;       break;
9740: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
9750: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
9760: 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e   /* (double)0 In
9770: 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f   case of SQLITE_
9780: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
9790: 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  INT... */.      
97a0: 20 20 69 66 28 20 61 3d 3d 28 64 6f 75 62 6c 65    if( a==(double
97b0: 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  )0 ) goto arithm
97c0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
97d0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 62 20 2f  ull;.        b /
97e0: 3d 20 61 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = a;.        bre
97f0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
9800: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
9810: 20 20 20 20 20 69 36 34 20 69 61 20 3d 20 28 69       i64 ia = (i
9820: 36 34 29 61 3b 0a 20 20 20 20 20 20 20 20 69 36  64)a;.        i6
9830: 34 20 69 62 20 3d 20 28 69 36 34 29 62 3b 0a 20  4 ib = (i64)b;. 
9840: 20 20 20 20 20 20 20 69 66 28 20 69 61 3d 3d 30         if( ia==0
9850: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
9860: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9870: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
9880: 61 3d 3d 2d 31 20 29 20 69 61 20 3d 20 31 3b 0a  a==-1 ) ia = 1;.
9890: 20 20 20 20 20 20 20 20 62 20 3d 20 28 64 6f 75          b = (dou
98a0: 62 6c 65 29 28 69 62 20 25 20 69 61 29 3b 0a 20  ble)(ib % ia);. 
98b0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
98c0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
98d0: 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  if( sqlite3IsNaN
98e0: 28 62 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  (b) ){.      got
98f0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
9900: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
9910: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72 20 3d   }.    pOut->r =
9920: 20 62 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79   b;.    MemSetTy
9930: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
9940: 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20  _Real);.    if( 
9950: 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  (flags & MEM_Rea
9960: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  l)==0 ){.      s
9970: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
9980: 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b  rAffinity(pOut);
9990: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
99a0: 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f  ak;..arithmetic_
99b0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a  result_is_null:.
99c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
99d0: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
99e0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
99f0: 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20  code: CollSeq * 
9a00: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  * P4.**.** P4 is
9a10: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
9a20: 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20  CollSeq struct. 
9a30: 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c  If the next call
9a40: 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74   to a user funct
9a50: 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67  ion.** or aggreg
9a60: 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ate calls sqlite
9a70: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
9a80: 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f  ), this collatio
9a90: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a  n sequence will.
9aa0: 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20  ** be returned. 
9ab0: 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
9ac0: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e  the built-in min
9ad0: 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75  (), max() and nu
9ae0: 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69  llif().** functi
9af0: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69  ons..**.** The i
9b00: 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79  nterface used by
9b10: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
9b20: 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65  ion of the afore
9b30: 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69  mentioned functi
9b40: 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65  ons.** to retrie
9b50: 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  ve the collation
9b60: 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79   sequence set by
9b70: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
9b80: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  not available.**
9b90: 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20   publicly, only 
9ba0: 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  to user function
9bb0: 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e  s defined in fun
9bc0: 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  c.c..*/.case OP_
9bd0: 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73  CollSeq: {.  ass
9be0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
9bf0: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
9c00: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9c10: 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20  pcode: Function 
9c20: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
9c30: 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73  *.** Invoke a us
9c40: 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20  er function (P4 
9c50: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
9c60: 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63  a Function struc
9c70: 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  ture that.** def
9c80: 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  ines the functio
9c90: 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d  n) with P5 argum
9ca0: 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ents taken from 
9cb0: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a  register P2 and.
9cc0: 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20  ** successors.  
9cd0: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  The result of th
9ce0: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74  e function is st
9cf0: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
9d00: 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72   P3..** Register
9d10: 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P3 must not be 
9d20: 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  one of the funct
9d30: 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a  ion inputs..**.*
9d40: 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74  * P1 is a 32-bit
9d50: 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74   bitmask indicat
9d60: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
9d70: 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  ot each argument
9d80: 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63   to the .** func
9d90: 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69  tion was determi
9da0: 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61  ned to be consta
9db0: 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69  nt at compile ti
9dc0: 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74  me. If the first
9dd0: 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73  .** argument was
9de0: 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62   constant then b
9df0: 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65  it 0 of P1 is se
9e00: 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  t. This is used 
9e10: 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  to determine.** 
9e20: 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74  whether meta dat
9e30: 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  a associated wit
9e40: 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  h a user functio
9e50: 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67  n argument using
9e60: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
9e70: 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50  set_auxdata() AP
9e80: 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20  I may be safely 
9e90: 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74  retained until t
9ea0: 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63  he next.** invoc
9eb0: 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70  ation of this op
9ec0: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
9ed0: 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e  also: AggStep an
9ee0: 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61  d AggFinal.*/.ca
9ef0: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20  se OP_Function: 
9f00: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  {.  int i;.  Mem
9f10: 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65   *pArg;.  sqlite
9f20: 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
9f30: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
9f40: 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 20  *apVal;.  int n 
9f50: 3d 20 70 4f 70 2d 3e 70 35 3b 0a 0a 20 20 61 70  = pOp->p5;..  ap
9f60: 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
9f70: 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
9f80: 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 0a 20 20 61 73  || n==0 );..  as
9f90: 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70  sert( n==0 || (p
9fa0: 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
9fb0: 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 29 20  >p2+n<=p->nMem) 
9fc0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
9fd0: 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20  ->p3<pOp->p2 || 
9fe0: 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32  pOp->p3>=pOp->p2
9ff0: 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d 20 26  +n );.  pArg = &
a000: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
a010: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
a020: 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a  ; i++, pArg++){.
a030: 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70      apVal[i] = p
a040: 41 72 67 3b 0a 20 20 20 20 73 74 6f 72 65 54 79  Arg;.    storeTy
a050: 70 65 49 6e 66 6f 28 70 41 72 67 2c 20 65 6e 63  peInfo(pArg, enc
a060: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 52 45 47 49  oding);.    REGI
a070: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
a080: 70 32 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a  p2, pArg);.  }..
a090: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
a0a0: 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45  4type==P4_FUNCDE
a0b0: 46 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  F || pOp->p4type
a0c0: 3d 3d 50 34 5f 56 44 42 45 46 55 4e 43 20 29 3b  ==P4_VDBEFUNC );
a0d0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
a0e0: 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29  pe==P4_FUNCDEF )
a0f0: 7b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20  {.    ctx.pFunc 
a100: 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
a110: 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75  .    ctx.pVdbeFu
a120: 6e 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  nc = 0;.  }else{
a130: 0a 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75  .    ctx.pVdbeFu
a140: 6e 63 20 3d 20 28 56 64 62 65 46 75 6e 63 2a 29  nc = (VdbeFunc*)
a150: 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e  pOp->p4.pVdbeFun
a160: 63 3b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63  c;.    ctx.pFunc
a170: 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63   = ctx.pVdbeFunc
a180: 2d 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20  ->pFunc;.  }..  
a190: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
a1a0: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
a1b0: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20  >nMem );.  pOut 
a1c0: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
a1d0: 70 33 5d 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61  p3];.  ctx.s.fla
a1e0: 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
a1f0: 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a   ctx.s.db = db;.
a200: 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
a210: 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f  ;.  ctx.s.zMallo
a220: 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 65  c = 0;..  /* The
a230: 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
a240: 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
a250: 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
a260: 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
a270: 70 6f 69 6e 74 65 72 20 74 6f 20 63 74 78 2e 73  pointer to ctx.s
a280: 20 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20   so in case the 
a290: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 63 61  user-function ca
a2a0: 6e 20 75 73 65 0a 20 20 2a 2a 20 74 68 65 20 61  n use.  ** the a
a2b0: 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
a2c0: 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20   buffer instead 
a2d0: 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20  of allocating a 
a2e0: 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20  new one..  */.  
a2f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
a300: 76 65 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 29  ve(&ctx.s, pOut)
a310: 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
a320: 61 67 28 26 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e  ag(&ctx.s, MEM_N
a330: 75 6c 6c 29 3b 0a 0a 20 20 63 74 78 2e 69 73 45  ull);..  ctx.isE
a340: 72 72 6f 72 20 3d 20 30 3b 0a 20 20 69 66 28 20  rror = 0;.  if( 
a350: 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73  ctx.pFunc->flags
a360: 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e   & SQLITE_FUNC_N
a370: 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61  EEDCOLL ){.    a
a380: 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f  ssert( pOp>p->aO
a390: 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p );.    assert(
a3a0: 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d   pOp[-1].p4type=
a3b0: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
a3c0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
a3d0: 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
a3e0: 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78  llSeq );.    ctx
a3f0: 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d  .pColl = pOp[-1]
a400: 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20  .p4.pColl;.  }. 
a410: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
a420: 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
a430: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
a440: 73 75 73 65 3b 0a 20 20 28 2a 63 74 78 2e 70 46  suse;.  (*ctx.pF
a450: 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78  unc->xFunc)(&ctx
a460: 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69  , n, apVal);.  i
a470: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
a480: 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 73 71  On(db) ){.    sq
a490: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
a4a0: 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20  ase(&ctx.s);.   
a4b0: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
a4c0: 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 7d 0a 20  to_misuse;.  }. 
a4d0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
a4e0: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 2f 2a 20  ailed ){.    /* 
a4f0: 45 76 65 6e 20 74 68 6f 75 67 68 20 61 20 6d 61  Even though a ma
a500: 6c 6c 6f 63 28 29 20 68 61 73 20 66 61 69 6c 65  lloc() has faile
a510: 64 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  d, the implement
a520: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 20  ation of the.   
a530: 20 2a 2a 20 75 73 65 72 20 66 75 6e 63 74 69 6f   ** user functio
a540: 6e 20 6d 61 79 20 68 61 76 65 20 63 61 6c 6c 65  n may have calle
a550: 64 20 61 6e 20 73 71 6c 69 74 65 33 5f 72 65 73  d an sqlite3_res
a560: 75 6c 74 5f 58 58 58 28 29 20 66 75 6e 63 74 69  ult_XXX() functi
a570: 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f 20 72 65 74  on.    ** to ret
a580: 75 72 6e 20 61 20 76 61 6c 75 65 2e 20 54 68 65  urn a value. The
a590: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20   following call 
a5a0: 72 65 6c 65 61 73 65 73 20 61 6e 79 20 72 65 73  releases any res
a5b0: 6f 75 72 63 65 73 0a 20 20 20 20 2a 2a 20 61 73  ources.    ** as
a5c0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 73 75  sociated with su
a5d0: 63 68 20 61 20 76 61 6c 75 65 2e 0a 20 20 20 20  ch a value..    
a5e0: 2a 2a 0a 20 20 20 20 2a 2a 20 4e 6f 74 65 3a 20  **.    ** Note: 
a5f0: 4d 61 79 62 65 20 4d 65 6d 52 65 6c 65 61 73 65  Maybe MemRelease
a600: 28 29 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c  () should be cal
a610: 6c 65 64 20 69 66 20 73 71 6c 69 74 65 33 53 61  led if sqlite3Sa
a620: 66 65 74 79 4f 6e 28 29 0a 20 20 20 20 2a 2a 20  fetyOn().    ** 
a630: 66 61 69 6c 73 20 61 6c 73 6f 20 28 74 68 65 20  fails also (the 
a640: 69 66 28 2e 2e 2e 29 20 73 74 61 74 65 6d 65 6e  if(...) statemen
a650: 74 20 61 62 6f 76 65 29 2e 20 42 75 74 20 69 66  t above). But if
a660: 20 70 65 6f 70 6c 65 20 61 72 65 0a 20 20 20 20   people are.    
a670: 2a 2a 20 6d 69 73 75 73 69 6e 67 20 73 71 6c 69  ** misusing sqli
a680: 74 65 2c 20 74 68 65 79 20 68 61 76 65 20 62 69  te, they have bi
a690: 67 67 65 72 20 70 72 6f 62 6c 65 6d 73 20 74 68  gger problems th
a6a0: 61 6e 20 61 20 6c 65 61 6b 65 64 20 76 61 6c 75  an a leaked valu
a6b0: 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  e..    */.    sq
a6c0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
a6d0: 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20  ase(&ctx.s);.   
a6e0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
a6f0: 7d 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61  }..  /* If any a
a700: 75 78 69 6c 69 61 72 79 20 64 61 74 61 20 66 75  uxiliary data fu
a710: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65  nctions have bee
a720: 6e 20 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73  n called by this
a730: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a   user function,.
a740: 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79    ** immediately
a750: 20 63 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75   call the destru
a760: 63 74 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e  ctor for any non
a770: 2d 73 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a  -static values..
a780: 20 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70    */.  if( ctx.p
a790: 56 64 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20  VdbeFunc ){.    
a7a0: 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74  sqlite3VdbeDelet
a7b0: 65 41 75 78 44 61 74 61 28 63 74 78 2e 70 56 64  eAuxData(ctx.pVd
a7c0: 62 65 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29  beFunc, pOp->p1)
a7d0: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56  ;.    pOp->p4.pV
a7e0: 64 62 65 46 75 6e 63 20 3d 20 63 74 78 2e 70 56  dbeFunc = ctx.pV
a7f0: 64 62 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70  dbeFunc;.    pOp
a800: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 56 44  ->p4type = P4_VD
a810: 42 45 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 2f  BEFUNC;.  }..  /
a820: 2a 20 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f  * If the functio
a830: 6e 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72  n returned an er
a840: 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78  ror, throw an ex
a850: 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28  ception */.  if(
a860: 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
a870: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
a880: 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
a890: 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
a8a0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
a8b0: 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20  ctx.s));.    rc 
a8c0: 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20  = ctx.isError;. 
a8d0: 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68   }..  /* Copy th
a8e0: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
a8f0: 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65  function into re
a900: 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73  gister P3 */.  s
a910: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
a920: 45 6e 63 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c  Encoding(&ctx.s,
a930: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71   encoding);.  sq
a940: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
a950: 28 70 4f 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a  (pOut, &ctx.s);.
a960: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
a970: 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29  eMemTooBig(pOut)
a980: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
a990: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 52 45 47 49  _big;.  }.  REGI
a9a0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
a9b0: 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44  p3, pOut);.  UPD
a9c0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
a9d0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
a9e0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
a9f0: 69 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  itAnd P1 P2 P3 *
aa00: 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68   *.**.** Take th
aa10: 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f  e bit-wise AND o
aa20: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
aa30: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
aa40: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
aa50: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
aa60: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
aa70: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
aa80: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
aa90: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
aaa0: 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50   Opcode: BitOr P
aab0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
aac0: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
aad0: 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61  ise OR of the va
aae0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
aaf0: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
ab00: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
ab10: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
ab20: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
ab30: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
ab40: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
ab50: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
ab60: 20 53 68 69 66 74 4c 65 66 74 20 50 31 20 50 32   ShiftLeft P1 P2
ab70: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68   P3 * *.**.** Sh
ab80: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
ab90: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
aba0: 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74  r P2 to the left
abb0: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
abc0: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
abd0: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
abe0: 65 72 20 69 6e 20 72 65 67 69 73 65 72 20 50 31  er in regiser P1
abf0: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
ac00: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
ac10: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
ac20: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
ac30: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
ac40: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
ac50: 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20 50  de: ShiftRight P
ac60: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
ac70: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
ac80: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
ac90: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
aca0: 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20  right by the.** 
acb0: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
acc0: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
acd0: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
ace0: 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ter P1..** Store
acf0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
ad00: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
ad10: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
ad20: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
ad30: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
ad40: 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20  ase OP_BitAnd:  
ad50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ad60: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
ad70: 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  AND, in1, in2, o
ad80: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  ut3 */.case OP_B
ad90: 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20  itOr:           
ada0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
adb0: 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c  s TK_BITOR, in1,
adc0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
add0: 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a  se OP_ShiftLeft:
ade0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
adf0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49   same as TK_LSHI
ae00: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
ae10: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
ae20: 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20  iftRight: {     
ae30: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ae40: 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c   TK_RSHIFT, in1,
ae50: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
ae60: 69 36 34 20 61 2c 20 62 3b 0a 0a 20 20 69 66 28  i64 a, b;..  if(
ae70: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
ae80: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
ae90: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
aea0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
aeb0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
aec0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 61 20 3d  break;.  }.  a =
aed0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
aee0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 62 20  alue(pIn2);.  b 
aef0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
af00: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 73  Value(pIn1);.  s
af10: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
af20: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f  de ){.    case O
af30: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 61  P_BitAnd:      a
af40: 20 26 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b   &= b;     break
af50: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69  ;.    case OP_Bi
af60: 74 4f 72 3a 20 20 20 20 20 20 20 61 20 7c 3d 20  tOr:       a |= 
af70: 62 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  b;     break;.  
af80: 20 20 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c    case OP_ShiftL
af90: 65 66 74 3a 20 20 20 61 20 3c 3c 3d 20 62 3b 20  eft:   a <<= b; 
afa0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
afb0: 66 61 75 6c 74 3a 20 20 61 73 73 65 72 74 28 20  fault:  assert( 
afc0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
afd0: 53 68 69 66 74 52 69 67 68 74 20 29 3b 0a 20 20  ShiftRight );.  
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aff0: 20 20 20 20 20 20 20 61 20 3e 3e 3d 20 62 3b 20         a >>= b; 
b000: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
b010: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 61 3b 0a 20  pOut->u.i = a;. 
b020: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
b030: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
b040: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b050: 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50  pcode: AddImm  P
b060: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a  1 P2 * * *.** .*
b070: 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61  * Add the consta
b080: 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c  nt P2 to the val
b090: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b0a0: 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  1..** The result
b0b0: 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e   is always an in
b0c0: 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20  teger..**.** To 
b0d0: 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74  force any regist
b0e0: 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  er to be an inte
b0f0: 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e  ger, just add 0.
b100: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49  .*/.case OP_AddI
b110: 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mm: {           
b120: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 73 71 6c   /* in1 */.  sql
b130: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
b140: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
b150: 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
b160: 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p2;.  break;.}.
b170: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74  ./* Opcode: Must
b180: 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  BeInt P1 P2 * * 
b190: 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74  *.** .** Force t
b1a0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b1b0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e  ster P1 to be an
b1c0: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68   integer.  If th
b1d0: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
b1e0: 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
b1f0: 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  er and cannot be
b200: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
b210: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69  an integer.** wi
b220: 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c  thout data loss,
b230: 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
b240: 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72  iately to P2, or
b250: 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69   if P2==0.** rai
b260: 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  se an SQLITE_MIS
b270: 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e  MATCH exception.
b280: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74  .*/.case OP_Must
b290: 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  BeInt: {        
b2a0: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
b2b0: 20 2a 2f 0a 20 20 61 70 70 6c 79 41 66 66 69 6e   */.  applyAffin
b2c0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
b2d0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
b2e0: 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28  coding);.  if( (
b2f0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
b300: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
b310: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
b320: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
b330: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  LITE_MISMATCH;. 
b340: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
b350: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
b360: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
b370: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
b380: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
b390: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
b3a0: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
b3b0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
b3c0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
b3d0: 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20  alAffinity P1 * 
b3e0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72  * * *.**.** If r
b3f0: 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73  egister P1 holds
b400: 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76   an integer conv
b410: 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c  ert it to a real
b420: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
b430: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
b440: 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e  d when extractin
b450: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  g information fr
b460: 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74  om a column that
b470: 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66  .** has REAL aff
b480: 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c  inity.  Such col
b490: 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73  umn values may s
b4a0: 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61  till be stored a
b4b0: 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66  s.** integers, f
b4c0: 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65  or space efficie
b4d0: 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65  ncy, but after e
b4e0: 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e  xtraction we wan
b4f0: 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76  t them.** to hav
b500: 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61  e only a real va
b510: 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
b520: 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20  RealAffinity: { 
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b540: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28   /* in1 */.  if(
b550: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
b560: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71  EM_Int ){.    sq
b570: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
b580: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
b590: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
b5a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
b5b0: 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  AST./* Opcode: T
b5c0: 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a  oText P1 * * * *
b5d0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
b5e0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b5f0: 65 72 20 50 31 20 74 6f 20 62 65 20 74 65 78 74  er P1 to be text
b600: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
b610: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
b620: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
b630: 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a  ring using the.*
b640: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
b650: 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20  printf().  Blob 
b660: 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61  values are uncha
b670: 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20  nged and.** are 
b680: 61 66 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c  afterwards simpl
b690: 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  y interpreted as
b6a0: 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e   text..**.** A N
b6b0: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
b6c0: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
b6d0: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
b6e0: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
b6f0: 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b  ase OP_ToText: {
b700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b710: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b720: 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a  TO_TEXT, in1 */.
b730: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
b740: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62  s & MEM_Null ) b
b750: 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74 28 20  reak;.  assert( 
b760: 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c  MEM_Str==(MEM_Bl
b770: 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31  ob>>3) );.  pIn1
b780: 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31  ->flags |= (pIn1
b790: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62  ->flags&MEM_Blob
b7a0: 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66 66  )>>3;.  applyAff
b7b0: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
b7c0: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63  TE_AFF_TEXT, enc
b7d0: 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45  oding);.  rc = E
b7e0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
b7f0: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
b800: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
b810: 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   || db->mallocFa
b820: 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  iled );.  pIn1->
b830: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49  flags &= ~(MEM_I
b840: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
b850: 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a  Blob|MEM_Zero);.
b860: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
b870: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62  BSIZE(pIn1);.  b
b880: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
b890: 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a 20  de: ToBlob P1 * 
b8a0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
b8b0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
b8c0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
b8d0: 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74   a BLOB..** If t
b8e0: 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65  he value is nume
b8f0: 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ric, convert it 
b900: 74 6f 20 61 20 73 74 72 69 6e 67 20 66 69 72 73  to a string firs
b910: 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61 72  t..** Strings ar
b920: 65 20 73 69 6d 70 6c 79 20 72 65 69 6e 74 65 72  e simply reinter
b930: 70 72 65 74 65 64 20 61 73 20 62 6c 6f 62 73 20  preted as blobs 
b940: 77 69 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a 2a  with no change.*
b950: 2a 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79  * to the underly
b960: 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20  ing data..**.** 
b970: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
b980: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
b990: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
b9a0: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
b9b0: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f 62  /.case OP_ToBlob
b9c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
b9d0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b9e0: 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20  TK_TO_BLOB, in1 
b9f0: 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  */.  if( pIn1->f
ba00: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
ba10: 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20 28  ) break;.  if( (
ba20: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
ba30: 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20  M_Blob)==0 ){.  
ba40: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
ba50: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
ba60: 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29  _TEXT, encoding)
ba70: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
ba80: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
ba90: 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  Str || db->mallo
baa0: 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d  cFailed );.    M
bab0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
bac0: 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  n1, MEM_Blob);. 
bad0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
bae0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
baf0: 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42  _TypeMask&~MEM_B
bb00: 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  lob);.  }.  UPDA
bb10: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
bb20: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
bb30: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  }../* Opcode: To
bb40: 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a  Numeric P1 * * *
bb50: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
bb60: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bb70: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75  ster P1 to be nu
bb80: 6d 65 72 69 63 20 28 65 69 74 68 65 72 20 61 6e  meric (either an
bb90: 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61  .** integer or a
bba0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
bbb0: 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74  number.).** If t
bbc0: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
bbd0: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
bbe0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
bbf0: 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  n using the.** e
bc00: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
bc10: 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e  i() or atof() an
bc20: 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20  d store 0 if no 
bc30: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
bc40: 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  .** is possible.
bc50: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
bc60: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
bc70: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
bc80: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
bc90: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
bca0: 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20  _ToNumeric: {   
bcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bcc0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
bcd0: 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a  NUMERIC, in1 */.
bce0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
bcf0: 67 73 20 26 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  gs & (MEM_Null|M
bd00: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
bd10: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
bd20: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69  te3VdbeMemNumeri
bd30: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
bd40: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
bd50: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
bd60: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
bd70: 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20  e: ToInt P1 * * 
bd80: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
bd90: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
bda0: 69 73 74 65 72 20 50 31 20 62 65 20 61 6e 20 69  ister P1 be an i
bdb0: 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54  nteger.  If.** T
bdc0: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
bdd0: 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d  ently a real num
bde0: 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72  ber, drop its fr
bdf0: 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a  actional part..*
be00: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
be10: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
be20: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
be30: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
be40: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
be50: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
be60: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
be70: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
be80: 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ion is possible.
be90: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
bea0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
beb0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
bec0: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
bed0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
bee0: 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  _ToInt: {       
bef0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
bf00: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c  me as TK_TO_INT,
bf10: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70   in1 */.  if( (p
bf20: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
bf30: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
bf40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
bf50: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
bf60: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
bf70: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
bf80: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
bf90: 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a  ode: ToReal P1 *
bfa0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
bfb0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
bfc0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
bfd0: 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  e a floating poi
bfe0: 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66  nt number..** If
bff0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
c000: 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67  rrently an integ
c010: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a  er, convert it..
c020: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
c030: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
c040: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
c050: 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
c060: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
c070: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
c080: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30  () and store 0.0
c090: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
c0a0: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
c0b0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
c0c0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c0d0: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c0e0: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c0f0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c100: 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20   OP_ToReal: {   
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c120: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
c130: 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  REAL, in1 */.  i
c140: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c150: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
c160: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
c170: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
c180: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c190: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
c1a0: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a  TE_OMIT_CAST */.
c1b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
c1c0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c1d0: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
c1e0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c1f0: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
c200: 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31  f reg(P3)<reg(P1
c210: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
c220: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a  o address P2.  .
c230: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
c240: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
c250: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  it of P5 is set 
c260: 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50  and either reg(P
c270: 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29  1) or.** reg(P3)
c280: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
c290: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
c2a0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
c2b0: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
c2c0: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
c2d0: 6c 20 74 68 72 75 20 69 66 20 65 69 74 68 65 72  l thru if either
c2e0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
c2f0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
c300: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
c310: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
c320: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
c330: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
c340: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
c350: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
c360: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
c370: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
c380: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
c390: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
c3a0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
c3b0: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
c3c0: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
c3d0: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
c3e0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
c3f0: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
c400: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
c410: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
c420: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
c430: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
c440: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
c450: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
c460: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
c470: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
c480: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
c490: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
c4a0: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
c4b0: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
c4c0: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
c4d0: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
c4e0: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
c4f0: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
c500: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
c510: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
c520: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
c530: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
c540: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
c550: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
c560: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
c570: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
c580: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
c590: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
c5a0: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
c5b0: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
c5c0: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
c5d0: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
c5e0: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
c5f0: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
c600: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
c610: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
c620: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
c630: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
c640: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
c650: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
c660: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
c670: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
c680: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
c690: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
c6a0: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
c6b0: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
c6c0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
c6d0: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
c6e0: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
c6f0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
c700: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
c710: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
c720: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
c730: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
c740: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
c750: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
c760: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
c770: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
c780: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
c790: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f  egister P2..*/./
c7a0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
c7b0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
c7c0: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
c7d0: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
c7e0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
c7f0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
c800: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
c810: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
c820: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
c830: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
c840: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
c850: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
c860: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
c870: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
c880: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c890: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
c8a0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
c8b0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
c8c0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
c8d0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
c8e0: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
c8f0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
c900: 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65  re equal..** See
c910: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
c920: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
c930: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
c940: 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50   Opcode: Le P1 P
c950: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
c960: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
c970: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
c980: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
c990: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
c9a0: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
c9b0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
c9c0: 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P3 is less than 
c9d0: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
c9e0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
c9f0: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
ca00: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
ca10: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
ca20: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
ca30: 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32  Opcode: Gt P1 P2
ca40: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
ca50: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
ca60: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
ca70: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
ca80: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
ca90: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
caa0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
cab0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
cac0: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
cad0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
cae0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
caf0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
cb00: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
cb10: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
cb20: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
cb30: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
cb40: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
cb50: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
cb60: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
cb70: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
cb80: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
cb90: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
cba0: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
cbb0: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
cbc0: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
cbd0: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
cbe0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
cbf0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
cc00: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a  ..*/.case OP_Eq:
cc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cc20: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c  * same as TK_EQ,
cc30: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
cc40: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20  */.case OP_Ne:  
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cc60: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a  same as TK_NE, j
cc70: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
cc80: 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20  .case OP_Lt:    
cc90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cca0: 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d  me as TK_LT, jum
ccb0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ccc0: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20  ase OP_Le:      
ccd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cce0: 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c   as TK_LE, jump,
ccf0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
cd00: 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20  e OP_Gt:        
cd10: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
cd20: 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69  s TK_GT, jump, i
cd30: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
cd40: 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20  OP_Ge: {        
cd50: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cd60: 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GE, jump, in1
cd70: 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 66  , in3 */.  int f
cd80: 6c 61 67 73 3b 0a 20 20 69 6e 74 20 72 65 73 3b  lags;.  int res;
cd90: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
cda0: 3b 0a 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ;..  flags = pIn
cdb0: 31 2d 3e 66 6c 61 67 73 7c 70 49 6e 33 2d 3e 66  1->flags|pIn3->f
cdc0: 6c 61 67 73 3b 0a 0a 20 20 69 66 28 20 66 6c 61  lags;..  if( fla
cdd0: 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  gs&MEM_Null ){. 
cde0: 20 20 20 2f 2a 20 49 66 20 65 69 74 68 65 72 20     /* If either 
cdf0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
ce00: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
ce10: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
ce20: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
ce30: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
ce40: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
ce50: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
ce60: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70    */.    if( pOp
ce70: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
ce80: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 70  OREP2 ){.      p
ce90: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
cea0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 4d  Op->p2];.      M
ceb0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
cec0: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
ced0: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
cee0: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
cef0: 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  t);.    }else if
cf00: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
cf10: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
cf20: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
cf30: 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2-1;.    }.   
cf40: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 61   break;.  }..  a
cf50: 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
cf60: 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
cf70: 41 53 4b 3b 0a 20 20 69 66 28 20 61 66 66 69 6e  ASK;.  if( affin
cf80: 69 74 79 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ity ){.    apply
cf90: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61  Affinity(pIn1, a
cfa0: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
cfb0: 67 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66  g);.    applyAff
cfc0: 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69  inity(pIn3, affi
cfd0: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
cfe0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
cff0: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
d000: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
d010: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
d020: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
d030: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  || pOp->p4.pColl
d040: 3d 3d 30 20 29 3b 0a 20 20 45 78 70 61 6e 64 42  ==0 );.  ExpandB
d050: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 45 78 70  lob(pIn1);.  Exp
d060: 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20  andBlob(pIn3);. 
d070: 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
d080: 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
d090: 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
d0a0: 6c 6c 29 3b 0a 20 20 73 77 69 74 63 68 28 20 70  ll);.  switch( p
d0b0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
d0c0: 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20    case OP_Eq:   
d0d0: 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20   res = res==0;  
d0e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
d0f0: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73  se OP_Ne:    res
d100: 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62   = res!=0;     b
d110: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
d120: 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Lt:    res = r
d130: 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es<0;      break
d140: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65  ;.    case OP_Le
d150: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d  :    res = res<=
d160: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
d170: 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20    case OP_Gt:   
d180: 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20   res = res>0;   
d190: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
d1a0: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
d1b0: 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62   = res>=0;     b
d1c0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
d1d0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
d1e0: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
d1f0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
d200: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 4d  [pOp->p2];.    M
d210: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
d220: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
d230: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65    pOut->u.i = re
d240: 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  s;.    REGISTER_
d250: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
d260: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Out);.  }else if
d270: 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
d280: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
d290: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d2a0: 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
d2b0: 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
d2c0: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
d2d0: 6d 75 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  muation used by 
d2e0: 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f  the OP_Compare o
d2f0: 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68  perator to be th
d300: 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e  e array.** of in
d310: 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a  tegers in P4..**
d320: 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74  .** The permutat
d330: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ion is only vali
d340: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
d350: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 2c   OP_Permutation,
d360: 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20   OP_Compare,.** 
d370: 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50 5f 52  OP_Halt, or OP_R
d380: 65 73 75 6c 74 52 6f 77 2e 20 20 54 79 70 69 63  esultRow.  Typic
d390: 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d  ally the OP_Perm
d3a0: 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6f  utation should o
d3b0: 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  ccur.** immediat
d3c0: 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65  ely prior to the
d3d0: 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a   OP_Compare..*/.
d3e0: 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74  case OP_Permutat
d3f0: 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ion: {.  assert(
d400: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
d410: 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61  _INTARRAY );.  a
d420: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61  ssert( pOp->p4.a
d430: 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20  i );.  aPermute 
d440: 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20  = pOp->p4.ai;.  
d450: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
d460: 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
d470: 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
d480: 20 43 6f 6d 70 61 72 65 20 74 6f 20 76 65 63 74   Compare to vect
d490: 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73  ors of registers
d4a0: 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67   in reg(P1)..reg
d4b0: 28 50 31 2b 50 33 2d 31 29 20 28 61 6c 6c 20 74  (P1+P3-1) (all t
d4c0: 68 69 73 0a 2a 2a 20 6f 6e 65 20 22 41 22 29 20  his.** one "A") 
d4d0: 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e  and in reg(P2)..
d4e0: 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42  reg(P2+P3-1) ("B
d4f0: 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65  ").  Save the re
d500: 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63  sult of.** the c
d510: 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73  omparison for us
d520: 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50  e by the next OP
d530: 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a  _Jump instruct..
d540: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65  **.** P4 is a Ke
d550: 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
d560: 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c  that defines col
d570: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
d580: 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64   and sort.** ord
d590: 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70  ers for the comp
d5a0: 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72  arison.  The per
d5b0: 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73  mutation applies
d5c0: 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a   to registers.**
d5d0: 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49   only.  The KeyI
d5e0: 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  nfo elements are
d5f0: 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c   used sequential
d600: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ly..**.** The co
d610: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f  mparison is a so
d620: 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73  rt comparison, s
d630: 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20  o NULLs compare 
d640: 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20  equal,.** NULLs 
d650: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75  are less than nu
d660: 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61  mbers, numbers a
d670: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72  re less than str
d680: 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72  ings,.** and str
d690: 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68  ings are less th
d6a0: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73  an blobs..*/.cas
d6b0: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a  e OP_Compare: {.
d6c0: 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70    int n = pOp->p
d6d0: 33 3b 0a 20 20 69 6e 74 20 69 2c 20 70 31 2c 20  3;.  int i, p1, 
d6e0: 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49  p2;.  const KeyI
d6f0: 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 20 3d 20  nfo *pKeyInfo = 
d700: 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
d710: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
d720: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65  );.  assert( pKe
d730: 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31  yInfo!=0 );.  p1
d740: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73   = pOp->p1;.  as
d750: 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
d760: 2b 6e 2d 31 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  +n-1<p->nMem );.
d770: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
d780: 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
d790: 26 20 70 32 2b 6e 2d 31 3c 70 2d 3e 6e 4d 65 6d  & p2+n-1<p->nMem
d7a0: 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   );.  for(i=0; i
d7b0: 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 6e  <n; i++){.    in
d7c0: 74 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74 65  t idx = aPermute
d7d0: 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a   ? aPermute[i] :
d7e0: 20 69 3b 0a 20 20 20 20 43 6f 6c 6c 53 65 71 20   i;.    CollSeq 
d7f0: 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
d800: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
d810: 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
d820: 74 65 72 6d 20 2a 2f 0a 20 20 20 20 69 6e 74 20  term */.    int 
d830: 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f  bRev;          /
d840: 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45  * True for DESCE
d850: 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72  NDING sort order
d860: 20 2a 2f 0a 20 20 20 20 52 45 47 49 53 54 45 52   */.    REGISTER
d870: 5f 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26  _TRACE(p1+idx, &
d880: 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  p->aMem[p1+idx])
d890: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
d8a0: 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 70 2d  RACE(p2+idx, &p-
d8b0: 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a  >aMem[p2+idx]);.
d8c0: 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b      assert( i<pK
d8d0: 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29  eyInfo->nField )
d8e0: 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
d8f0: 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
d900: 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
d910: 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
d920: 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
d930: 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
d940: 6f 6d 70 61 72 65 28 26 70 2d 3e 61 4d 65 6d 5b  ompare(&p->aMem[
d950: 70 31 2b 69 64 78 5d 2c 20 26 70 2d 3e 61 4d 65  p1+idx], &p->aMe
d960: 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c  m[p2+idx], pColl
d970: 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70  );.    if( iComp
d980: 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  are ){.      if(
d990: 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65   bRev ) iCompare
d9a0: 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20   = -iCompare;.  
d9b0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
d9c0: 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20  .  }.  aPermute 
d9d0: 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
d9e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70  ./* Opcode: Jump
d9f0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
da00: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
da10: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61  instruction at a
da20: 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f  ddress P1, P2, o
da30: 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f  r P3 depending o
da40: 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20  n whether.** in 
da50: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
da60: 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72  OP_Compare instr
da70: 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65  uction the P1 ve
da80: 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68  ctor was less th
da90: 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20  an.** equal to, 
daa0: 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
dab0: 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72  the P2 vector, r
dac0: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
dad0: 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20  case OP_Jump: { 
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
daf0: 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f  ump */.  if( iCo
db00: 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70  mpare<0 ){.    p
db10: 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b  c = pOp->p1 - 1;
db20: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f  .  }else if( iCo
db30: 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20  mpare==0 ){.    
db40: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
db50: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
db60: 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b  c = pOp->p3 - 1;
db70: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
db80: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20  ./* Opcode: And 
db90: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
dba0: 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
dbb0: 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76  cal AND of the v
dbc0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
dbd0: 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  rs P1 and P2 and
dbe0: 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65  .** write the re
dbf0: 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74  sult into regist
dc00: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
dc10: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
dc20: 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65  is 0 (false) the
dc30: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
dc40: 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65  0 even if.** the
dc50: 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
dc60: 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
dc70: 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55  d true or two NU
dc80: 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55  LLs give.** a NU
dc90: 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a  LL output..*/./*
dca0: 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50   Opcode: Or P1 P
dcb0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
dcc0: 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
dcd0: 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
dce0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
dcf0: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
dd00: 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69  ore the answer i
dd10: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
dd20: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
dd30: 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65  1 or P2 is nonze
dd40: 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74  ro (true) then t
dd50: 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28  he result is 1 (
dd60: 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66  true).** even if
dd70: 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
dd80: 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
dd90: 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74  L and false or t
dda0: 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65  wo NULLs.** give
ddb0: 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
ddc0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
dde0: 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
ddf0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
de00: 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20  /.case OP_Or: { 
de10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
de20: 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e  ame as TK_OR, in
de30: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
de40: 20 20 69 6e 74 20 76 31 2c 20 76 32 3b 20 20 20    int v1, v2;   
de50: 20 2f 2a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d   /* 0==FALSE, 1=
de60: 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
de70: 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20  N or NULL */..  
de80: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
de90: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
dea0: 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v1 = 2;.  }els
deb0: 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69  e{.    v1 = sqli
dec0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
ded0: 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn1)!=0;.  }.  
dee0: 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  if( pIn2->flags 
def0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
df00: 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v2 = 2;.  }els
df10: 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69  e{.    v2 = sqli
df20: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
df30: 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn2)!=0;.  }.  
df40: 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
df50: 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73  =OP_And ){.    s
df60: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
df70: 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f  gned char and_lo
df80: 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20  gic[] = { 0, 0, 
df90: 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32  0, 0, 1, 2, 0, 2
dfa0: 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
dfb0: 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76  and_logic[v1*3+v
dfc0: 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2];.  }else{.   
dfd0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
dfe0: 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c  signed char or_l
dff0: 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c  ogic[] = { 0, 1,
e000: 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20   2, 1, 1, 1, 2, 
e010: 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  1, 2 };.    v1 =
e020: 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76   or_logic[v1*3+v
e030: 32 5d 3b 0a 20 20 7d 0a 20 20 69 66 28 20 76 31  2];.  }.  if( v1
e040: 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65  ==2 ){.    MemSe
e050: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
e060: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c  MEM_Null);.  }el
e070: 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
e080: 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53  i = v1;.    MemS
e090: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
e0a0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20   MEM_Int);.  }. 
e0b0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
e0c0: 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20  code: Not P1 P2 
e0d0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  * * *.**.** Inte
e0e0: 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20  rpret the value 
e0f0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
e100: 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
e110: 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  e.  Store the.**
e120: 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d   boolean complem
e130: 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ent in register 
e140: 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P2.  If the valu
e150: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
e160: 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
e170: 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f  en a NULL is sto
e180: 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  red in P2..*/.ca
e190: 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20  se OP_Not: {    
e1a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
e1b0: 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69  ame as TK_NOT, i
e1c0: 6e 31 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26  n1 */.  pOut = &
e1d0: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
e1e0: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
e1f0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
e200: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
e210: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
e220: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
e230: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
e240: 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71  tInt64(pOut, !sq
e250: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
e260: 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20  e(pIn1));.  }.  
e270: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
e280: 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50  ode: BitNot P1 P
e290: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e  2 * * *.**.** In
e2a0: 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74  terpret the cont
e2b0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
e2c0: 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  P1 as an integer
e2d0: 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
e2e0: 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  ones-complement 
e2f0: 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  of the P1 value 
e300: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
e310: 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a  .  If P1 holds.*
e320: 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74  * a NULL then st
e330: 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32  ore a NULL in P2
e340: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
e350: 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
e360: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
e370: 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 20 2a 2f 0a  _BITNOT, in1 */.
e380: 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
e390: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
e3a0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
e3b0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
e3c0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
e3d0: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
e3e0: 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
e3f0: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
e400: 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56  (pOut, ~sqlite3V
e410: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
e420: 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ));.  }.  break;
e430: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
e440: 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
e450: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
e460: 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
e470: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
e480: 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  rue.  The value 
e490: 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  is.** is conside
e4a0: 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69  red true if it i
e4b0: 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f  s numeric and no
e4c0: 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  n-zero.  If the 
e4d0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
e4e0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
e4f0: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
e500: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f  is true..*/./* O
e510: 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20  pcode: IfNot P1 
e520: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
e530: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
e540: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
e550: 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e  ter P1 is False.
e560: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a    The value is.*
e570: 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
e580: 74 72 75 65 20 69 66 20 69 74 20 68 61 73 20 61  true if it has a
e590: 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
e5a0: 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
e5b0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
e5c0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
e5d0: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
e5e0: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65  is true..*/.case
e5f0: 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
e600: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
e610: 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
e620: 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
e630: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
e640: 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 69   */.  int c;.  i
e650: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
e660: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
e670: 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   c = pOp->p3;.  
e680: 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51  }else{.#ifdef SQ
e690: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
e6a0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d  NG_POINT.    c =
e6b0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
e6c0: 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23  alue(pIn1)!=0;.#
e6d0: 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c  else.    c = sql
e6e0: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
e6f0: 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65  e(pIn1)!=0.0;.#e
e700: 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70  ndif.    if( pOp
e710: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e  ->opcode==OP_IfN
e720: 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d  ot ) c = !c;.  }
e730: 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20  .  if( c ){.    
e740: 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
e750: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
e760: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
e770: 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  l P1 P2 P3 * *.*
e780: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
e790: 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
e7a0: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e  register P1 is N
e7b0: 55 4c 4c 2e 20 20 49 66 20 50 33 20 69 73 20 67  ULL.  If P3 is g
e7c0: 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 7a  reater.** than z
e7d0: 65 72 6f 2c 20 74 68 65 6e 20 63 68 65 63 6b 20  ero, then check 
e7e0: 61 6c 6c 20 76 61 6c 75 65 73 20 72 65 67 28 50  all values reg(P
e7f0: 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 0a  1), reg(P1+1), .
e800: 2a 2a 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e  ** reg(P1+2), ..
e810: 2e 2c 20 72 65 67 28 50 31 2b 50 33 2d 31 29 2e  ., reg(P1+P3-1).
e820: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75  .*/.case OP_IsNu
e830: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
e840: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49   /* same as TK_I
e850: 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  SNULL, jump, in1
e860: 20 2a 2f 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f   */.  int n = pO
e870: 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
e880: 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70   pOp->p3==0 || p
e890: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 64 6f  Op->p1>0 );.  do
e8a0: 7b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  {.    if( (pIn1-
e8b0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
e8c0: 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  l)!=0 ){.      p
e8d0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
e8e0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
e8f0: 20 20 7d 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a    }.    pIn1++;.
e900: 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 3e 20    }while( --n > 
e910: 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  0 );.  break;.}.
e920: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e  ./* Opcode: NotN
e930: 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
e940: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
e950: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
e960: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
e970: 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63  not NULL.  .*/.c
e980: 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20  ase OP_NotNull: 
e990: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
e9a0: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55  same as TK_NOTNU
e9b0: 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
e9c0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
e9d0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
e9e0: 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
e9f0: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
ea00: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
ea10: 70 63 6f 64 65 3a 20 53 65 74 4e 75 6d 43 6f 6c  pcode: SetNumCol
ea20: 75 6d 6e 73 20 2a 20 50 32 20 2a 20 2a 20 2a 0a  umns * P2 * * *.
ea30: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
ea40: 65 20 73 65 74 73 20 74 68 65 20 6e 75 6d 62 65  e sets the numbe
ea50: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
ea60: 20 74 68 65 20 63 75 72 73 6f 72 20 6f 70 65 6e   the cursor open
ea70: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 66 6f 6c  ed by the.** fol
ea80: 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
ea90: 6f 6e 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  on to P2..**.** 
eaa0: 41 6e 20 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75  An OP_SetNumColu
eab0: 6d 6e 73 20 69 73 20 6f 6e 6c 79 20 75 73 65 66  mns is only usef
eac0: 75 6c 20 69 66 20 69 74 20 6f 63 63 75 72 73 20  ul if it occurs 
ead0: 69 6d 6d 65 64 69 61 74 65 6c 79 20 62 65 66 6f  immediately befo
eae0: 72 65 20 0a 2a 2a 20 6f 6e 65 20 6f 66 20 74 68  re .** one of th
eaf0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f  e following opco
eb00: 64 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 4f  des:.**.**     O
eb10: 70 65 6e 52 65 61 64 0a 2a 2a 20 20 20 20 20 4f  penRead.**     O
eb20: 70 65 6e 57 72 69 74 65 0a 2a 2a 20 20 20 20 20  penWrite.**     
eb30: 4f 70 65 6e 50 73 65 75 64 6f 0a 2a 2a 0a 2a 2a  OpenPseudo.**.**
eb40: 20 49 66 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d   If the OP_Colum
eb50: 6e 20 6f 70 63 6f 64 65 20 69 73 20 74 6f 20 62  n opcode is to b
eb60: 65 20 65 78 65 63 75 74 65 64 20 6f 6e 20 61 20  e executed on a 
eb70: 63 75 72 73 6f 72 2c 20 74 68 65 6e 0a 2a 2a 20  cursor, then.** 
eb80: 74 68 69 73 20 6f 70 63 6f 64 65 20 6d 75 73 74  this opcode must
eb90: 20 62 65 20 70 72 65 73 65 6e 74 20 69 6d 6d 65   be present imme
eba0: 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20 74  diately before t
ebb0: 68 65 20 6f 70 63 6f 64 65 20 74 68 61 74 0a 2a  he opcode that.*
ebc0: 2a 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73  * opens the curs
ebd0: 6f 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  or..*/.case OP_S
ebe0: 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 3a 20 7b 0a  etNumColumns: {.
ebf0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
ec00: 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31  pcode: Column P1
ec10: 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
ec20: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
ec30: 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72  data that cursor
ec40: 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73   P1 points to as
ec50: 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69   a structure bui
ec60: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  lt using.** the 
ec70: 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
ec80: 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68  uction.  (See th
ec90: 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  e MakeRecord opc
eca0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
ecb0: 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  al.** informatio
ecc0: 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d  n about the form
ecd0: 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29  at of the data.)
ece0: 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32    Extract the P2
ecf0: 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72  -th column.** fr
ed00: 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20  om this record. 
ed10: 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65   If there are le
ed20: 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a  ss that (P2+1) .
ed30: 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ** values in the
ed40: 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74   record, extract
ed50: 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54   a NULL..**.** T
ed60: 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74  he value extract
ed70: 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ed is stored in 
ed80: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
ed90: 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ** If the column
eda0: 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20   contains fewer 
edb0: 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20  than P2 fields, 
edc0: 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e  then extract a N
edd0: 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20  ULL.  Or,.** if 
ede0: 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
edf0: 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20  is a P4_MEM use 
ee00: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
ee10: 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a   P4 argument as.
ee20: 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a  ** the result..*
ee30: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e  /.case OP_Column
ee40: 3a 20 7b 0a 20 20 69 6e 74 20 70 61 79 6c 6f 61  : {.  int payloa
ee50: 64 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62  dSize;   /* Numb
ee60: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
ee70: 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
ee80: 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  nt p1 = pOp->p1;
ee90: 20 20 2f 2a 20 50 31 20 76 61 6c 75 65 20 6f 66    /* P1 value of
eea0: 20 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f 0a 20   the opcode */. 
eeb0: 20 69 6e 74 20 70 32 20 3d 20 70 4f 70 2d 3e 70   int p2 = pOp->p
eec0: 32 3b 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75  2;  /* column nu
eed0: 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65  mber to retrieve
eee0: 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
eef0: 20 2a 70 43 20 3d 20 30 3b 2f 2a 20 54 68 65 20   *pC = 0;/* The 
ef00: 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20  VDBE cursor */. 
ef10: 20 63 68 61 72 20 2a 7a 52 65 63 3b 20 20 20 20   char *zRec;    
ef20: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
ef30: 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72  o complete recor
ef40: 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74 43 75  d-data */.  BtCu
ef50: 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f  rsor *pCrsr;   /
ef60: 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73  * The BTree curs
ef70: 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 54 79  or */.  u32 *aTy
ef80: 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 61 54  pe;        /* aT
ef90: 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74 68 65  ype[i] holds the
efa0: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66   numeric type of
efb0: 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e   the i-th column
efc0: 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73   */.  u32 *aOffs
efd0: 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66  et;      /* aOff
efe0: 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74  set[i] is offset
eff0: 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74   to start of dat
f000: 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d  a for i-th colum
f010: 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  n */.  int nFiel
f020: 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e 75 6d  d;        /* num
f030: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
f040: 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
f050: 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20   int len;       
f060: 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74      /* The lengt
f070: 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69  h of the seriali
f080: 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65  zed data for the
f090: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
f0a0: 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
f0b0: 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
f0c0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61 74 61  */.  char *zData
f0d0: 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72 74 20  ;       /* Part 
f0e0: 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  of the record be
f0f0: 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
f100: 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20   Mem *pDest;    
f110: 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20      /* Where to 
f120: 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61 63  write the extrac
f130: 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d  ted value */.  M
f140: 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20  em sMem;        
f150: 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67    /* For storing
f160: 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
f170: 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 0a 20 20  g decoded */..  
f180: 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
f190: 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
f1a0: 20 20 61 73 73 65 72 74 28 20 70 31 3c 70 2d 3e    assert( p1<p->
f1b0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
f1c0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
f1d0: 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
f1e0: 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  em );.  pDest = 
f1f0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
f200: 5d 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  ];.  MemSetTypeF
f210: 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e  lag(pDest, MEM_N
f220: 75 6c 6c 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73  ull);..  /* This
f230: 20 62 6c 6f 63 6b 20 73 65 74 73 20 74 68 65 20   block sets the 
f240: 76 61 72 69 61 62 6c 65 20 70 61 79 6c 6f 61 64  variable payload
f250: 53 69 7a 65 20 74 6f 20 62 65 20 74 68 65 20 74  Size to be the t
f260: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20  otal number of. 
f270: 20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74 68 65   ** bytes in the
f280: 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20   record..  **.  
f290: 2a 2a 20 7a 52 65 63 20 69 73 20 73 65 74 20 74  ** zRec is set t
f2a0: 6f 20 62 65 20 74 68 65 20 63 6f 6d 70 6c 65 74  o be the complet
f2b0: 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 72 65  e text of the re
f2c0: 63 6f 72 64 20 69 66 20 69 74 20 69 73 20 61 76  cord if it is av
f2d0: 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68  ailable..  ** Th
f2e0: 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72  e complete recor
f2f0: 64 20 74 65 78 74 20 69 73 20 61 6c 77 61 79 73  d text is always
f300: 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70   available for p
f310: 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a  seudo-tables.  *
f320: 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20  * If the record 
f330: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 63  is stored in a c
f340: 75 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c  ursor, the compl
f350: 65 74 65 20 72 65 63 6f 72 64 20 74 65 78 74 0a  ete record text.
f360: 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20 61 76    ** might be av
f370: 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 20  ailable in the  
f380: 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20  pC->aRow cache. 
f390: 20 4f 72 20 69 74 20 6d 69 67 68 74 20 6e 6f 74   Or it might not
f3a0: 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65   be..  ** If the
f3b0: 20 64 61 74 61 20 69 73 20 75 6e 61 76 61 69 6c   data is unavail
f3c0: 61 62 6c 65 2c 20 20 7a 52 65 63 20 69 73 20 73  able,  zRec is s
f3d0: 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a  et to NULL..  **
f3e0: 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f  .  ** We also co
f3f0: 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
f400: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
f410: 68 65 20 72 65 63 6f 72 64 2e 20 20 46 6f 72 20  he record.  For 
f420: 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68  cursors,.  ** th
f430: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
f440: 6d 6e 73 20 69 73 20 73 74 6f 72 65 64 20 69 6e  mns is stored in
f450: 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
f460: 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a  nField element..
f470: 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d 3e 61    */.  pC = p->a
f480: 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73 73 65  pCsr[p1];.  asse
f490: 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
f4a0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
f4b0: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
f4c0: 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61  assert( pC->pVta
f4d0: 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a 23 65  bCursor==0 );.#e
f4e0: 6e 64 69 66 0a 20 20 69 66 28 20 70 43 2d 3e 70  ndif.  if( pC->p
f4f0: 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20  Cursor!=0 ){.   
f500: 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69   /* The record i
f510: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 42 2d  s stored in a B-
f520: 54 72 65 65 20 2a 2f 0a 20 20 20 20 72 63 20 3d  Tree */.    rc =
f530: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
f540: 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
f550: 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
f560: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
f570: 6f 72 3b 0a 20 20 20 20 7a 52 65 63 20 3d 20 30  or;.    zRec = 0
f580: 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43  ;.    pCrsr = pC
f590: 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 69  ->pCursor;.    i
f5a0: 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
f5b0: 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53  {.      payloadS
f5c0: 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ize = 0;.    }el
f5d0: 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65  se if( pC->cache
f5e0: 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65  Status==p->cache
f5f0: 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70 61 79  Ctr ){.      pay
f600: 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 70  loadSize = pC->p
f610: 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
f620: 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72 2a 29    zRec = (char*)
f630: 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d 65  pC->aRow;.    }e
f640: 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73 49 6e  lse if( pC->isIn
f650: 64 65 78 20 29 7b 0a 20 20 20 20 20 20 69 36 34  dex ){.      i64
f660: 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a   payloadSize64;.
f670: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
f680: 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
f690: 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29   &payloadSize64)
f6a0: 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53  ;.      payloadS
f6b0: 69 7a 65 20 3d 20 28 69 6e 74 29 70 61 79 6c 6f  ize = (int)paylo
f6c0: 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 7d 65  adSize64;.    }e
f6d0: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
f6e0: 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
f6f0: 70 43 72 73 72 2c 20 28 75 33 32 20 2a 29 26 70  pCrsr, (u32 *)&p
f700: 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20  ayloadSize);.   
f710: 20 7d 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20   }.    nField = 
f720: 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 7d 65  pC->nField;.  }e
f730: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
f740: 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
f750: 20 29 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 72   );.    /* The r
f760: 65 63 6f 72 64 20 69 73 20 74 68 65 20 73 6f 6c  ecord is the sol
f770: 65 20 65 6e 74 72 79 20 6f 66 20 61 20 70 73 65  e entry of a pse
f780: 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 20  udo-table */.   
f790: 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70   payloadSize = p
f7a0: 43 2d 3e 6e 44 61 74 61 3b 0a 20 20 20 20 7a 52  C->nData;.    zR
f7b0: 65 63 20 3d 20 70 43 2d 3e 70 44 61 74 61 3b 0a  ec = pC->pData;.
f7c0: 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
f7d0: 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
f7e0: 45 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  E;.    assert( p
f7f0: 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c  ayloadSize==0 ||
f800: 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 20 20   zRec!=0 );.    
f810: 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69  nField = pC->nFi
f820: 65 6c 64 3b 0a 20 20 20 20 70 43 72 73 72 20 3d  eld;.    pCrsr =
f830: 20 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66   0;.  }..  /* If
f840: 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 69 73 20   payloadSize is 
f850: 30 2c 20 74 68 65 6e 20 6a 75 73 74 20 73 74 6f  0, then just sto
f860: 72 65 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69  re a NULL */.  i
f870: 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d  f( payloadSize==
f880: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
f890: 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45   pDest->flags&ME
f8a0: 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f  M_Null );.    go
f8b0: 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
f8c0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 61 79 6c  ;.  }.  if( payl
f8d0: 6f 61 64 53 69 7a 65 3e 64 62 2d 3e 61 4c 69 6d  oadSize>db->aLim
f8e0: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
f8f0: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
f900: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
f910: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e  ..  assert( p2<n
f920: 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52  Field );..  /* R
f930: 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 74 68  ead and parse th
f940: 65 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20  e table header. 
f950: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
f960: 74 73 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a  ts of the parse.
f970: 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65    ** into the re
f980: 63 6f 72 64 20 68 65 61 64 65 72 20 63 61 63 68  cord header cach
f990: 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
f9a0: 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61  cursor..  */.  a
f9b0: 54 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65  Type = pC->aType
f9c0: 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68  ;.  if( pC->cach
f9d0: 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68  eStatus==p->cach
f9e0: 65 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66 66  eCtr ){.    aOff
f9f0: 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65  set = pC->aOffse
fa00: 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
fa10: 75 38 20 2a 7a 49 64 78 3b 20 20 20 20 20 20 20  u8 *zIdx;       
fa20: 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68   /* Index into h
fa30: 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  eader */.    u8 
fa40: 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20 20 2f 2a  *zEndHdr;     /*
fa50: 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73   Pointer to firs
fa60: 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65  t byte after the
fa70: 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 69   header */.    i
fa80: 6e 74 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20  nt offset;      
fa90: 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74  /* Offset into t
faa0: 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69  he data */.    i
fab0: 6e 74 20 73 7a 48 64 72 53 7a 3b 20 20 20 20 20  nt szHdrSz;     
fac0: 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68  /* Size of the h
fad0: 65 61 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64  eader size field
fae0: 20 61 74 20 73 74 61 72 74 20 6f 66 20 72 65 63   at start of rec
faf0: 6f 72 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  ord */.    int a
fb00: 76 61 69 6c 20 3d 20 30 3b 20 20 20 2f 2a 20 4e  vail = 0;   /* N
fb10: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
fb20: 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61  f available data
fb30: 20 2a 2f 0a 0a 20 20 20 20 61 73 73 65 72 74 28   */..    assert(
fb40: 61 54 79 70 65 29 3b 0a 20 20 20 20 70 43 2d 3e  aType);.    pC->
fb50: 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65  aOffset = aOffse
fb60: 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c  t = &aType[nFiel
fb70: 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c  d];.    pC->payl
fb80: 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61  oadSize = payloa
fb90: 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63  dSize;.    pC->c
fba0: 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e  acheStatus = p->
fbb0: 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f  cacheCtr;..    /
fbc0: 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77  * Figure out how
fbd0: 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72 65 20   many bytes are 
fbe0: 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  in the header */
fbf0: 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b  .    if( zRec ){
fc00: 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a  .      zData = z
fc10: 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  Rec;.    }else{.
fc20: 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73        if( pC->is
fc30: 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20  Index ){.       
fc40: 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29   zData = (char*)
fc50: 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46  sqlite3BtreeKeyF
fc60: 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
fc70: 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  il);.      }else
fc80: 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
fc90: 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  = (char*)sqlite3
fca0: 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70  BtreeDataFetch(p
fcb0: 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
fcc0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20       }.      /* 
fcd0: 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61  If KeyFetch()/Da
fce0: 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65  taFetch() manage
fcf0: 64 20 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74  d to get the ent
fd00: 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20  ire payload,.   
fd10: 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70     ** save the p
fd20: 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43  ayload in the pC
fd30: 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54  ->aRow cache.  T
fd40: 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73  hat will save us
fd50: 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68   from.      ** h
fd60: 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64  aving to make ad
fd70: 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74  ditional calls t
fd80: 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74  o fetch the cont
fd90: 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20  ent portion of. 
fda0: 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f       ** the reco
fdb0: 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  rd..      */.   
fdc0: 20 20 20 69 66 28 20 61 76 61 69 6c 3e 3d 70 61     if( avail>=pa
fdd0: 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20  yloadSize ){.   
fde0: 20 20 20 20 20 7a 52 65 63 20 3d 20 7a 44 61 74       zRec = zDat
fdf0: 61 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  a;.        pC->a
fe00: 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44 61 74 61  Row = (u8*)zData
fe10: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
fe20: 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
fe30: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
fe40: 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f   }.    /* The fo
fe50: 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 20 69  llowing assert i
fe60: 73 20 74 72 75 65 20 69 6e 20 61 6c 6c 20 63 61  s true in all ca
fe70: 73 65 73 20 61 63 63 65 70 74 20 77 68 65 6e 0a  ses accept when.
fe80: 20 20 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62      ** the datab
fe90: 61 73 65 20 66 69 6c 65 20 68 61 73 20 62 65 65  ase file has bee
fea0: 6e 20 63 6f 72 72 75 70 74 65 64 20 65 78 74 65  n corrupted exte
feb0: 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20  rnally..    **  
fec0: 20 20 61 73 73 65 72 74 28 20 7a 52 65 63 21 3d    assert( zRec!=
fed0: 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c  0 || avail>=payl
fee0: 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c  oadSize || avail
fef0: 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a  >=9 ); */.    sz
ff00: 48 64 72 53 7a 20 3d 20 67 65 74 56 61 72 69 6e  HdrSz = getVarin
ff10: 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20  t32((u8*)zData, 
ff20: 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a  offset);..    /*
ff30: 20 54 68 65 20 4b 65 79 46 65 74 63 68 28 29 20   The KeyFetch() 
ff40: 6f 72 20 44 61 74 61 46 65 74 63 68 28 29 20 61  or DataFetch() a
ff50: 62 6f 76 65 20 61 72 65 20 66 61 73 74 20 61 6e  bove are fast an
ff60: 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65  d will get the e
ff70: 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63  ntire.    ** rec
ff80: 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f  ord header in mo
ff90: 73 74 20 63 61 73 65 73 2e 20 20 42 75 74 20 74  st cases.  But t
ffa0: 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f  hey will fail to
ffb0: 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74   get the complet
ffc0: 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20  e.    ** record 
ffd0: 68 65 61 64 65 72 20 69 66 20 74 68 65 20 72 65  header if the re
ffe0: 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65 73  cord header does
fff0: 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69   not fit on a si
10000 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a  ngle page.    **
10010 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20   in the B-Tree. 
10020 20 57 68 65 6e 20 74 68 61 74 20 68 61 70 70 65   When that happe
10030 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56  ns, use sqlite3V
10040 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
10050 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75  ) to.    ** acqu
10060 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  ire the complete
10070 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20   header text..  
10080 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52    */.    if( !zR
10090 65 63 20 26 26 20 61 76 61 69 6c 3c 6f 66 66 73  ec && avail<offs
100a0 65 74 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d  et ){.      sMem
100b0 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  .flags = 0;.    
100c0 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20    sMem.db = 0;. 
100d0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
100e0 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
100f0 65 28 70 43 72 73 72 2c 20 30 2c 20 6f 66 66 73  e(pCrsr, 0, offs
10100 65 74 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c  et, pC->isIndex,
10110 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69   &sMem);.      i
10120 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
10130 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
10140 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
10150 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44        }.      zD
10160 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20  ata = sMem.z;.  
10170 20 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20    }.    zEndHdr 
10180 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6f  = (u8 *)&zData[o
10190 66 66 73 65 74 5d 3b 0a 20 20 20 20 7a 49 64 78  ffset];.    zIdx
101a0 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b   = (u8 *)&zData[
101b0 73 7a 48 64 72 53 7a 5d 3b 0a 0a 20 20 20 20 2f  szHdrSz];..    /
101c0 2a 20 53 63 61 6e 20 74 68 65 20 68 65 61 64 65  * Scan the heade
101d0 72 20 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20  r and use it to 
101e0 66 69 6c 6c 20 69 6e 20 74 68 65 20 61 54 79 70  fill in the aTyp
101f0 65 5b 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b  e[] and aOffset[
10200 5d 0a 20 20 20 20 2a 2a 20 61 72 72 61 79 73 2e  ].    ** arrays.
10210 20 20 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20    aType[i] will 
10220 63 6f 6e 74 61 69 6e 20 74 68 65 20 74 79 70 65  contain the type
10230 20 69 6e 74 65 67 65 72 20 66 6f 72 20 74 68 65   integer for the
10240 20 69 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c   i-th.    ** col
10250 75 6d 6e 20 61 6e 64 20 61 4f 66 66 73 65 74 5b  umn and aOffset[
10260 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20  i] will contain 
10270 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  the offset from 
10280 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20  the beginning.  
10290 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
102a0 72 64 20 74 6f 20 74 68 65 20 73 74 61 72 74 20  rd to the start 
102b0 6f 66 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  of the data for 
102c0 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a  the i-th column.
102d0 20 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69      */.    for(i
102e0 3d 30 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b  =0; i<nField; i+
102f0 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49  +){.      if( zI
10300 64 78 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20  dx<zEndHdr ){.  
10310 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
10320 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20   = offset;.     
10330 20 20 20 7a 49 64 78 20 2b 3d 20 67 65 74 56 61     zIdx += getVa
10340 72 69 6e 74 33 32 28 7a 49 64 78 2c 20 61 54 79  rint32(zIdx, aTy
10350 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  pe[i]);.        
10360 6f 66 66 73 65 74 20 2b 3d 20 73 71 6c 69 74 65  offset += sqlite
10370 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
10380 65 6e 28 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20  en(aType[i]);.  
10390 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
103a0 20 20 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65     /* If i is le
103b0 73 73 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20  ss that nField, 
103c0 74 68 65 6e 20 74 68 65 72 65 20 61 72 65 20 6c  then there are l
103d0 65 73 73 20 66 69 65 6c 64 73 20 69 6e 20 74 68  ess fields in th
103e0 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65  is.        ** re
103f0 63 6f 72 64 20 74 68 61 6e 20 53 65 74 4e 75 6d  cord than SetNum
10400 43 6f 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74 65  Columns indicate
10410 64 20 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75  d there are colu
10420 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20  mns in the.     
10430 20 20 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74     ** table. Set
10440 20 74 68 65 20 6f 66 66 73 65 74 20 66 6f 72 20   the offset for 
10450 61 6e 79 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e  any extra column
10460 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e  s not present in
10470 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20  .        ** the 
10480 72 65 63 6f 72 64 20 74 6f 20 30 2e 20 54 68 69  record to 0. Thi
10490 73 20 74 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c  s tells code bel
104a0 6f 77 20 74 6f 20 73 74 6f 72 65 20 61 20 4e 55  ow to store a NU
104b0 4c 4c 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e  LL.        ** in
104c0 73 74 65 61 64 20 6f 66 20 64 65 73 65 72 69 61  stead of deseria
104d0 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66  lizing a value f
104e0 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a  rom the record..
104f0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
10500 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
10510 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
10520 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
10530 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
10540 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67  );.    sMem.flag
10550 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20  s = MEM_Null;.. 
10560 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65     /* If we have
10570 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65   read more heade
10580 72 20 64 61 74 61 20 74 68 61 6e 20 77 61 73 20  r data than was 
10590 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
105a0 20 68 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20   header,.    ** 
105b0 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66  or if the end of
105c0 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20   the last field 
105d0 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70 61  appears to be pa
105e0 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
105f0 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c  e.    ** record,
10600 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f   or if the end o
10610 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  f the last field
10620 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 62   appears to be b
10630 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20  efore the end.  
10640 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
10650 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65  rd (when all fie
10660 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68  lds present), th
10670 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64 65  en we must be de
10680 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69  aling .    ** wi
10690 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  th a corrupt dat
106a0 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  abase..    */.  
106b0 20 20 69 66 28 20 7a 49 64 78 3e 7a 45 6e 64 48    if( zIdx>zEndH
106c0 64 72 20 7c 7c 20 6f 66 66 73 65 74 3e 70 61 79  dr || offset>pay
106d0 6c 6f 61 64 53 69 7a 65 20 0a 20 20 20 20 20 7c  loadSize .     |
106e0 7c 20 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72  | (zIdx==zEndHdr
106f0 20 26 26 20 6f 66 66 73 65 74 21 3d 70 61 79 6c   && offset!=payl
10700 6f 61 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20  oadSize) ){.    
10710 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
10720 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
10730 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
10740 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _out;.    }.  }.
10750 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f  .  /* Get the co
10760 6c 75 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  lumn information
10770 2e 20 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  . If aOffset[p2]
10780 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
10790 65 6e 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61  en .  ** deseria
107a0 6c 69 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66  lize the value f
107b0 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20  rom the record. 
107c0 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69  If aOffset[p2] i
107d0 73 20 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65  s zero,.  ** the
107e0 6e 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20  n there are not 
107f0 65 6e 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e  enough fields in
10800 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73   the record to s
10810 61 74 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20  atisfy the.  ** 
10820 72 65 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69  request.  In thi
10830 73 20 63 61 73 65 2c 20 73 65 74 20 74 68 65 20  s case, set the 
10840 76 61 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f  value NULL or to
10850 20 50 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a   P4 if P4 is.  *
10860 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  * a pointer to a
10870 20 4d 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a   Mem object..  *
10880 2f 0a 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b  /.  if( aOffset[
10890 70 32 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72  p2] ){.    asser
108a0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
108b0 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63   );.    if( zRec
108c0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
108d0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45  3VdbeMemReleaseE
108e0 78 74 65 72 6e 61 6c 28 70 44 65 73 74 29 3b 0a  xternal(pDest);.
108f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10900 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 20 2a  eSerialGet((u8 *
10910 29 26 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b 70  )&zRec[aOffset[p
10920 32 5d 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20  2]], aType[p2], 
10930 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73  pDest);.    }els
10940 65 7b 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73  e{.      len = s
10950 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
10960 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 70 32  TypeLen(aType[p2
10970 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ]);.      sqlite
10980 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d  3VdbeMemMove(&sM
10990 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  em, pDest);.    
109a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
109b0 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
109c0 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  Crsr, aOffset[p2
109d0 5d 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e  ], len, pC->isIn
109e0 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  dex, &sMem);.   
109f0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
10a00 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
10a10 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
10a20 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ut;.      }.    
10a30 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a    zData = sMem.z
10a40 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
10a50 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 75 38  dbeSerialGet((u8
10a60 2a 29 7a 44 61 74 61 2c 20 61 54 79 70 65 5b 70  *)zData, aType[p
10a70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  2], pDest);.    
10a80 7d 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63  }.    pDest->enc
10a90 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d   = encoding;.  }
10aa0 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 4f  else{.    if( pO
10ab0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
10ac0 4d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  M ){.      sqlit
10ad0 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
10ae0 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d  Copy(pDest, pOp-
10af0 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74  >p4.pMem, MEM_St
10b00 61 74 69 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65  atic);.    }else
10b10 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
10b20 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d  pDest->flags&MEM
10b30 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a 20  _Null );.    }. 
10b40 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 64   }..  /* If we d
10b50 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
10b60 61 74 65 64 20 73 70 61 63 65 20 74 6f 20 68 6f  ated space to ho
10b70 6c 64 20 74 68 65 20 64 61 74 61 20 28 69 6e 20  ld the data (in 
10b80 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  the.  ** sqlite3
10b90 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
10ba0 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74  () call above) t
10bb0 68 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e  hen transfer con
10bc0 74 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a  trol of that.  *
10bd0 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
10be0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f 76  located space ov
10bf0 65 72 20 74 6f 20 74 68 65 20 70 44 65 73 74 20  er to the pDest 
10c00 73 74 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20  structure..  ** 
10c10 54 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20  This prevents a 
10c20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a  memory copy..  *
10c30 2f 0a 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61  /.  if( sMem.zMa
10c40 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 61 73 73 65  lloc ){.    asse
10c50 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d  rt( sMem.z==sMem
10c60 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20  .zMalloc );.    
10c70 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d  assert( !(pDest-
10c80 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
10c90 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
10ca0 20 21 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20   !(pDest->flags 
10cb0 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
10cc0 53 74 72 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e  Str)) || pDest->
10cd0 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20  z==sMem.z );.   
10ce0 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d   pDest->flags &=
10cf0 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d   ~(MEM_Ephem|MEM
10d00 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 70 44  _Static);.    pD
10d10 65 73 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  est->flags |= ME
10d20 4d 5f 54 65 72 6d 3b 0a 20 20 20 20 70 44 65 73  M_Term;.    pDes
10d30 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20  t->z = sMem.z;. 
10d40 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f     pDest->zMallo
10d50 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63  c = sMem.zMalloc
10d60 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71  ;.  }..  rc = sq
10d70 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65  lite3VdbeMemMake
10d80 57 72 69 74 65 61 62 6c 65 28 70 44 65 73 74 29  Writeable(pDest)
10d90 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  ;..op_column_out
10da0 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
10db0 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
10dc0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10dd0 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
10de0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
10df0 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74   Opcode: Affinit
10e00 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  y P1 P2 * P4 *.*
10e10 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e  *.** Apply affin
10e20 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65  ities to a range
10e30 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73   of P2 registers
10e40 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50   starting with P
10e50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
10e60 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
10e70 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
10e80 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72  ng. The nth char
10e90 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
10ea0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
10eb0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
10ec0 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
10ed0 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
10ee0 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63   nth.** memory c
10ef0 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65  ell in the range
10f00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66  ..*/.case OP_Aff
10f10 69 6e 69 74 79 3a 20 7b 0a 20 20 63 68 61 72 20  inity: {.  char 
10f20 2a 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70  *zAffinity = pOp
10f30 2d 3e 70 34 2e 7a 3b 0a 20 20 4d 65 6d 20 2a 70  ->p4.z;.  Mem *p
10f40 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d  Data0 = &p->aMem
10f50 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 4d 65 6d  [pOp->p1];.  Mem
10f60 20 2a 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61   *pLast = &pData
10f70 30 5b 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20  0[pOp->p2-1];.  
10f80 4d 65 6d 20 2a 70 52 65 63 3b 0a 0a 20 20 66 6f  Mem *pRec;..  fo
10f90 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
10fa0 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
10fb0 2b 2b 29 7b 0a 20 20 20 20 45 78 70 61 6e 64 42  ++){.    ExpandB
10fc0 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 61  lob(pRec);.    a
10fd0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65  pplyAffinity(pRe
10fe0 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65  c, zAffinity[pRe
10ff0 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64  c-pData0], encod
11000 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ing);.  }.  brea
11010 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11020 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
11030 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
11040 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73  Convert P2 regis
11050 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  ters beginning w
11060 69 74 68 20 50 31 20 69 6e 74 6f 20 61 20 73 69  ith P1 into a si
11070 6e 67 6c 65 20 65 6e 74 72 79 0a 2a 2a 20 73 75  ngle entry.** su
11080 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65 20 61  itable for use a
11090 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20  s a data record 
110a0 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61  in a database ta
110b0 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a  ble or as a key.
110c0 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20  ** in an index. 
110d0 20 54 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20   The details of 
110e0 74 68 65 20 66 6f 72 6d 61 74 20 61 72 65 20 69  the format are i
110f0 72 72 65 6c 65 76 61 6e 74 20 61 73 20 6c 6f 6e  rrelevant as lon
11100 67 20 61 73 0a 2a 2a 20 74 68 65 20 4f 50 5f 43  g as.** the OP_C
11110 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e  olumn opcode can
11120 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f   decode the reco
11130 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65 66  rd later..** Ref
11140 65 72 20 74 6f 20 73 6f 75 72 63 65 20 63 6f 64  er to source cod
11150 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 74  e comments for t
11160 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68  he details of th
11170 65 20 72 65 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d  e record.** form
11180 61 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  at..**.** P4 may
11190 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61   be a string tha
111a0 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
111b0 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74  rs long.  The nt
111c0 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
111d0 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
111e0 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
111f0 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
11200 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
11210 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69  or the nth.** fi
11220 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  eld of the index
11230 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   key..**.** The 
11240 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61  mapping from cha
11250 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69  racter to affini
11260 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74  ty is given by t
11270 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a  he SQLITE_AFF_.*
11280 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
11290 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e   in sqliteInt.h.
112a0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
112b0 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  NULL then all in
112c0 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20  dex fields have 
112d0 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e  the affinity NON
112e0 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  E..*/.case OP_Ma
112f0 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 2f 2a  keRecord: {.  /*
11300 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65   Assuming the re
11310 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20  cord contains N 
11320 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f  fields, the reco
11330 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a  rd format looks.
11340 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a    ** like this:.
11350 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d    **.  ** ------
11360 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11370 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11380 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11390 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
113a0 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69  --.  ** | hdr-si
113b0 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79  ze | type 0 | ty
113c0 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70  pe 1 | ... | typ
113d0 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20  e N-1 | data0 | 
113e0 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c  ... | data N-1 |
113f0 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d   .  ** ---------
11400 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11410 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11420 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11430 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
11440 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30    **.  ** Data(0
11450 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ) is taken from 
11460 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61  register P1.  Da
11470 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d  ta(1) comes from
11480 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20   register P1+1. 
11490 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68   ** and so froth
114a0 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68  ..  **.  ** Each
114b0 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61   type field is a
114c0 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e   varint represen
114d0 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20  ting the serial 
114e0 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a  type of the .  *
114f0 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
11500 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65  data element (se
11510 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  e sqlite3VdbeSer
11520 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a  ialType()). The.
11530 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69    ** hdr-size fi
11540 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61  eld is also a va
11550 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
11560 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
11570 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a  e beginning.  **
11580 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
11590 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20  o data0..  */.  
115a0 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20  u8 *zNewRecord; 
115b0 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66         /* A buff
115c0 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  er to hold the d
115d0 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20  ata for the new 
115e0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
115f0 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20  *pRec;          
11600 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65     /* The new re
11610 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44  cord */.  u64 nD
11620 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ata = 0;        
11630 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
11640 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
11650 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 20  e */.  int nHdr 
11660 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
11670 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
11680 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
11690 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 20   */.  i64 nByte 
116a0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
116b0 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
116c0 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
116d0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ord */.  int nZe
116e0 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ro = 0;         
116f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
11700 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
11710 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
11720 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e   */.  int nVarin
11730 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
11740 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
11750 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20  in a varint */. 
11760 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65   u32 serial_type
11770 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  ;       /* Type 
11780 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  field */.  Mem *
11790 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20  pData0;         
117a0 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64    /* First field
117b0 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20   to be combined 
117c0 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
117d0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b  */.  Mem *pLast;
117e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
117f0 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ast field of the
11800 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
11810 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
11820 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11830 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
11840 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20  ecord */.  char 
11850 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20  *zAffinity;     
11860 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
11870 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  y string for the
11880 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
11890 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
118a0 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d      /* File form
118b0 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e  at to use for en
118c0 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
118d0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
118e0 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
118f0 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
11900 20 2a 2f 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20   */..  nField = 
11910 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69  pOp->p1;.  zAffi
11920 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
11930 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
11940 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e  ld>0 && pOp->p2>
11950 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69  0 && pOp->p2+nFi
11960 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  eld<=p->nMem );.
11970 20 20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61    pData0 = &p->a
11980 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e  Mem[nField];.  n
11990 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b  Field = pOp->p2;
119a0 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
119b0 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20  a0[nField-1];.  
119c0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d  file_format = p-
119d0 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
119e0 6d 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20  mat;..  /* Loop 
119f0 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d  through the elem
11a00 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d  ents that will m
11a10 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72  ake up the recor
11a20 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a  d to figure.  **
11a30 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70   out how much sp
11a40 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20  ace is required 
11a50 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
11a60 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70  rd..  */.  for(p
11a70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
11a80 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
11a90 7b 0a 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0a 20  {.    int len;. 
11aa0 20 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79     if( zAffinity
11ab0 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41   ){.      applyA
11ac0 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41  ffinity(pRec, zA
11ad0 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61  ffinity[pRec-pDa
11ae0 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ta0], encoding);
11af0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
11b00 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a  Rec->flags&MEM_Z
11b10 65 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30  ero && pRec->n>0
11b20 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
11b30 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
11b40 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a  ob(pRec);.    }.
11b50 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
11b60 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
11b70 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69  ialType(pRec, fi
11b80 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20  le_format);.    
11b90 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62  len = sqlite3Vdb
11ba0 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73  eSerialTypeLen(s
11bb0 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20  erial_type);.   
11bc0 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
11bd0 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74     nHdr += sqlit
11be0 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69  e3VarintLen(seri
11bf0 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66  al_type);.    if
11c00 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
11c10 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
11c20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a    /* Only pure z
11c30 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73  ero-filled BLOBs
11c40 20 63 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f   can be input to
11c50 20 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20   this Opcode..  
11c60 20 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74      ** We do not
11c70 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74   allow blobs wit
11c80 68 20 61 20 70 72 65 66 69 78 20 61 6e 64 20 61  h a prefix and a
11c90 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69   zero-filled tai
11ca0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72  l. */.      nZer
11cb0 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
11cc0 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ro;.    }else if
11cd0 28 20 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e  ( len ){.      n
11ce0 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  Zero = 0;.    }.
11cf0 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68    }..  /* Add th
11d00 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72  e initial header
11d10 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f 74 61   varint and tota
11d20 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20  l the size */.  
11d30 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20  nHdr += nVarint 
11d40 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
11d50 65 6e 28 6e 48 64 72 29 3b 0a 20 20 69 66 28 20  en(nHdr);.  if( 
11d60 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56  nVarint<sqlite3V
11d70 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29  arintLen(nHdr) )
11d80 7b 0a 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20  {.    nHdr++;.  
11d90 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72  }.  nByte = nHdr
11da0 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20  +nData-nZero;.  
11db0 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
11dc0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
11dd0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
11de0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
11df0 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
11e00 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  re the output re
11e10 67 69 73 74 65 72 20 68 61 73 20 61 20 62 75 66  gister has a buf
11e20 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  fer large enough
11e30 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20   to store .  ** 
11e40 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20  the new record. 
11e50 54 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  The output regis
11e60 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73  ter (pOp->p3) is
11e70 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a   not allowed to.
11e80 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74    ** be one of t
11e90 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
11ea0 72 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20  rs (because the 
11eb0 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74  following call t
11ec0 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
11ed0 62 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c  beMemGrow() coul
11ee0 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61  d clobber the va
11ef0 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73  lue before it is
11f00 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 61   used)..  */.  a
11f10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
11f20 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p1 || pOp->p
11f30 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  3>=pOp->p1+pOp->
11f40 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  p2 );.  pOut = &
11f50 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
11f60 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
11f70 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
11f80 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30 29 20   (int)nByte, 0) 
11f90 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
11fa0 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65  em;.  }.  zNewRe
11fb0 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75  cord = (u8 *)pOu
11fc0 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74  t->z;..  /* Writ
11fd0 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  e the record */.
11fe0 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33    i = putVarint3
11ff0 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48  2(zNewRecord, nH
12000 64 72 29 3b 0a 20 20 66 6f 72 28 70 52 65 63 3d  dr);.  for(pRec=
12010 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c  pData0; pRec<=pL
12020 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20  ast; pRec++){.  
12030 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
12040 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
12050 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
12060 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 69 20  _format);.    i 
12070 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 26  += putVarint32(&
12080 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73  zNewRecord[i], s
12090 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20  erial_type);    
120a0 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
120b0 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f 72 28 70 52   */.  }.  for(pR
120c0 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
120d0 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
120e0 20 20 2f 2a 20 73 65 72 69 61 6c 20 64 61 74 61    /* serial data
120f0 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 73 71 6c   */.    i += sql
12100 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75  ite3VdbeSerialPu
12110 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d  t(&zNewRecord[i]
12120 2c 20 28 69 6e 74 29 28 6e 42 79 74 65 2d 69 29  , (int)(nByte-i)
12130 2c 20 70 52 65 63 2c 66 69 6c 65 5f 66 6f 72 6d  , pRec,file_form
12140 61 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  at);.  }.  asser
12150 74 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a  t( i==nByte );..
12160 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12170 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
12180 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
12190 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
121a0 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  e;.  pOut->flags
121b0 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45   = MEM_Blob | ME
121c0 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78  M_Dyn;.  pOut->x
121d0 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e  Del = 0;.  if( n
121e0 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
121f0 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
12200 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
12210 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
12220 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
12230 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
12240 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
12250 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76  lob is ever conv
12260 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f  erted to text */
12270 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
12280 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
12290 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
122a0 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
122b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
122c0 63 6f 64 65 3a 20 53 74 61 74 65 6d 65 6e 74 20  code: Statement 
122d0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
122e0 20 42 65 67 69 6e 20 61 6e 20 69 6e 64 69 76 69   Begin an indivi
122f0 64 75 61 6c 20 73 74 61 74 65 6d 65 6e 74 20 74  dual statement t
12300 72 61 6e 73 61 63 74 69 6f 6e 20 77 68 69 63 68  ransaction which
12310 20 69 73 20 70 61 72 74 20 6f 66 20 61 20 6c 61   is part of a la
12320 72 67 65 72 0a 2a 2a 20 74 72 61 6e 73 61 63 74  rger.** transact
12330 69 6f 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ion.  This is ne
12340 65 64 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  eded so that the
12350 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 63 61   statement.** ca
12360 6e 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  n be rolled back
12370 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
12380 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
12390 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a  o roll back the.
123a0 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  ** entire transa
123b0 63 74 69 6f 6e 2e 20 20 54 68 65 20 73 74 61 74  ction.  The stat
123c0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
123d0 6e 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  n will automatic
123e0 61 6c 6c 79 0a 2a 2a 20 63 6f 6d 6d 69 74 20 77  ally.** commit w
123f0 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c  hen the VDBE hal
12400 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ts..**.** If the
12410 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12420 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  tion is currentl
12430 79 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20  y in autocommit 
12440 6d 6f 64 65 20 28 74 68 61 74 20 0a 2a 2a 20 69  mode (that .** i
12450 73 20 74 6f 20 73 61 79 2c 20 69 66 20 69 74 20  s to say, if it 
12460 69 73 20 69 6e 20 62 65 74 77 65 65 6e 20 42 45  is in between BE
12470 47 49 4e 20 61 6e 64 20 43 4f 4d 4d 49 54 29 0a  GIN and COMMIT).
12480 2a 2a 20 61 6e 64 20 69 66 20 74 68 65 72 65 20  ** and if there 
12490 61 72 65 20 6e 6f 20 6f 74 68 65 72 20 61 63 74  are no other act
124a0 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  ive statements o
124b0 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
124c0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
124d0 6e 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 65  n, then this ope
124e0 72 61 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  ration is a no-o
124f0 70 2e 20 20 4e 6f 20 73 74 61 74 65 6d 65 6e 74  p.  No statement
12500 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
12510 69 73 20 6e 65 65 64 65 64 20 73 69 6e 63 65 20  is needed since 
12520 61 6e 79 20 65 72 72 6f 72 20 63 61 6e 20 75 73  any error can us
12530 65 20 74 68 65 20 6e 6f 72 6d 61 6c 20 52 4f 4c  e the normal ROL
12540 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 20 74 6f  LBACK process to
12550 0a 2a 2a 20 75 6e 64 6f 20 63 68 61 6e 67 65 73  .** undo changes
12560 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 73 74 61  ..**.** If a sta
12570 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
12580 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 74  on is started, t
12590 68 65 6e 20 61 20 73 74 61 74 65 6d 65 6e 74 20  hen a statement 
125a0 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 2a 2a 20  journal file.** 
125b0 77 69 6c 6c 20 62 65 20 61 6c 6c 6f 63 61 74 65  will be allocate
125c0 64 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  d and initialize
125d0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 61  d..**.** The sta
125e0 74 65 6d 65 6e 74 20 69 73 20 62 65 67 75 6e 20  tement is begun 
125f0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
12600 66 69 6c 65 20 77 69 74 68 20 69 6e 64 65 78 20  file with index 
12610 50 31 2e 20 20 54 68 65 20 6d 61 69 6e 0a 2a 2a  P1.  The main.**
12620 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
12630 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
12640 20 61 6e 64 20 74 68 65 20 66 69 6c 65 20 75 73   and the file us
12650 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
12660 20 74 61 62 6c 65 73 0a 2a 2a 20 68 61 73 20 61   tables.** has a
12670 6e 20 69 6e 64 65 78 20 6f 66 20 31 2e 0a 2a 2f  n index of 1..*/
12680 0a 63 61 73 65 20 4f 50 5f 53 74 61 74 65 6d 65  .case OP_Stateme
12690 6e 74 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e  nt: {.  if( db->
126a0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
126b0 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43   db->activeVdbeC
126c0 6e 74 3e 31 20 29 7b 0a 20 20 20 20 69 6e 74 20  nt>1 ){.    int 
126d0 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  i = pOp->p1;.   
126e0 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 20   Btree *pBt;.   
126f0 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
12700 20 69 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20   i<db->nDb );.  
12710 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44    assert( db->aD
12720 62 5b 69 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20  b[i].pBt!=0 );. 
12730 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62     pBt = db->aDb
12740 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 61 73 73  [i].pBt;.    ass
12750 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
12760 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20  eIsInTrans(pBt) 
12770 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
12780 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
12790 31 3c 3c 69 29 29 21 3d 30 20 29 3b 0a 20 20 20  1<<i))!=0 );.   
127a0 20 69 66 28 20 21 73 71 6c 69 74 65 33 42 74 72   if( !sqlite3Btr
127b0 65 65 49 73 49 6e 53 74 6d 74 28 70 42 74 29 20  eeIsInStmt(pBt) 
127c0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
127d0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53  lite3BtreeBeginS
127e0 74 6d 74 28 70 42 74 29 3b 0a 20 20 20 20 20 20  tmt(pBt);.      
127f0 70 2d 3e 6f 70 65 6e 65 64 53 74 61 74 65 6d 65  p->openedStateme
12800 6e 74 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  nt = 1;.    }.  
12810 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12820 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69   Opcode: Savepoi
12830 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  nt P1 * * P4 *.*
12840 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61  *.** Open, relea
12850 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74  se or rollback t
12860 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d  he savepoint nam
12870 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20  ed by parameter 
12880 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a  P4, depending.**
12890 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66   on the value of
128a0 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e   P1. To open a n
128b0 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ew savepoint, P1
128c0 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20  ==0. To release 
128d0 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65  (commit) an.** e
128e0 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
128f0 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20  t, P1==1, or to 
12900 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73  rollback an exis
12910 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50  ting savepoint P
12920 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  1==2..*/.case OP
12930 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20  _Savepoint: {.  
12940 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
12950 3b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20  ;.  char *zName 
12960 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 20 20 20 20  = pOp->p4.z;    
12970 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
12980 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 0a 20 20  savepoint */..  
12990 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  /* Assert that t
129a0 68 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20  he p1 parameter 
129b0 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74  is valid. Also t
129c0 68 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20  hat if there is 
129d0 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61  no open.  ** tra
129e0 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  nsaction, then t
129f0 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61  here cannot be a
12a00 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a  ny savepoints. .
12a10 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64    */.  assert( d
12a20 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30  b->pSavepoint==0
12a30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d   || db->autoComm
12a40 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
12a50 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  t( p1==SAVEPOINT
12a60 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45  _BEGIN||p1==SAVE
12a70 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70  POINT_RELEASE||p
12a80 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
12a90 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72  LBACK );.  asser
12aa0 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t( db->pSavepoin
12ab0 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73  t || db->isTrans
12ac0 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d  actionSavepoint=
12ad0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
12ae0 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
12af0 75 6e 74 28 64 62 29 20 29 3b 0a 0a 20 20 69 66  unt(db) );..  if
12b00 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
12b10 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28  BEGIN ){.    if(
12b20 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e   db->writeVdbeCn
12b30 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  t>0 ){.      /* 
12b40 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
12b50 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
12b60 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
12b70 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
12b80 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
12b90 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
12ba0 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
12bb0 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
12bc0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
12bd0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
12be0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
12bf0 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  b, "cannot open 
12c00 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
12c10 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
12c20 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
12c30 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
12c40 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
12c50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
12c60 74 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65  t nName = sqlite
12c70 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29  3Strlen30(zName)
12c80 3b 0a 20 20 20 20 20 20 53 61 76 65 70 6f 69 6e  ;.      Savepoin
12c90 74 20 2a 70 4e 65 77 3b 0a 0a 20 20 20 20 20 20  t *pNew;..      
12ca0 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20  /* Create a new 
12cb0 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74  savepoint struct
12cc0 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e  ure. */.      pN
12cd0 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  ew = sqlite3DbMa
12ce0 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65  llocRaw(db, size
12cf0 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e  of(Savepoint)+nN
12d00 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66  ame+1);.      if
12d10 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20  ( pNew ){.      
12d20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20    pNew->zName = 
12d30 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d  (char *)&pNew[1]
12d40 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79  ;.        memcpy
12d50 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  (pNew->zName, zN
12d60 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20  ame, nName+1);. 
12d70 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49     .        /* I
12d80 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
12d90 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  en transaction, 
12da0 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61  then mark this a
12db0 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20  s a special.    
12dc0 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74      ** "transact
12dd0 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20  ion savepoint". 
12de0 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64  */.        if( d
12df0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
12e00 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  .          db->a
12e10 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20  utoCommit = 0;. 
12e20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54           db->isT
12e30 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
12e40 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  int = 1;.       
12e50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12e60 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
12e70 2b 2b 3b 0a 09 7d 0a 20 20 20 20 0a 20 20 20 20  ++;..}.    .    
12e80 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20      /* Link the 
12e90 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e  new savepoint in
12ea0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
12eb0 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a  handle's list. *
12ec0 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  /.        pNew->
12ed0 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76  pNext = db->pSav
12ee0 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
12ef0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
12f00 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 7d 0a 20   pNew;.      }. 
12f10 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
12f20 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61    Savepoint *pSa
12f30 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 69 6e 74  vepoint;.    int
12f40 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b   iSavepoint = 0;
12f50 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68  ..    /* Find th
12f60 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e  e named savepoin
12f70 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  t. If there is n
12f80 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
12f90 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a  , then an.    **
12fa0 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74   an error is ret
12fb0 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65  urned to the use
12fc0 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a  r.  */.    for(.
12fd0 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
12fe0 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b  =db->pSavepoint;
12ff0 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69   .      pSavepoi
13000 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  nt && sqlite3Str
13010 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d  ICmp(pSavepoint-
13020 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a  >zName, zName);.
13030 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
13040 3d 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65  =pSavepoint->pNe
13050 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  xt.    ){.      
13060 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  iSavepoint++;.  
13070 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61    }.    if( !pSa
13080 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
13090 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
130a0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
130b0 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65  b, "no such save
130c0 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d  point: %s", zNam
130d0 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  e);.      rc = S
130e0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
130f0 20 7d 65 6c 73 65 20 69 66 28 20 0a 20 20 20 20   }else if( .    
13100 20 20 20 20 64 62 2d 3e 77 72 69 74 65 56 64 62      db->writeVdb
13110 65 43 6e 74 3e 30 20 7c 7c 20 28 70 31 3d 3d 53  eCnt>0 || (p1==S
13120 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
13130 4b 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56  K && db->activeV
13140 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20 29  dbeCnt>1) .    )
13150 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73  {.      /* It is
13160 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
13170 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
13180 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66  ) a savepoint if
13190 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20   there are .    
131a0 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74    ** active writ
131b0 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 74  e statements. It
131c0 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
131d0 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 20 73   to rollback a s
131e0 61 76 65 70 6f 69 6e 74 0a 20 20 20 20 20 20 2a  avepoint.      *
131f0 2a 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  * if there are a
13200 6e 79 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  ny active statem
13210 65 6e 74 73 20 61 74 20 61 6c 6c 2e 0a 20 20 20  ents at all..   
13220 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
13230 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
13240 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20  >zErrMsg, db, . 
13250 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 25         "cannot %
13260 73 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51  s savepoint - SQ
13270 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
13280 70 72 6f 67 72 65 73 73 22 2c 0a 20 20 20 20 20  progress",.     
13290 20 20 20 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e     (p1==SAVEPOIN
132a0 54 5f 52 4f 4c 4c 42 41 43 4b 20 3f 20 22 72 6f  T_ROLLBACK ? "ro
132b0 6c 6c 62 61 63 6b 22 3a 20 22 72 65 6c 65 61 73  llback": "releas
132c0 65 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  e").      );.   
132d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
132e0 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
132f0 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d  .      /* Determ
13300 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
13310 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61  ot this is a tra
13320 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
13330 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20  nt. If so,.     
13340 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20   ** and this is 
13350 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  a RELEASE comman
13360 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72  d, then the curr
13370 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
13380 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d  .      ** is com
13390 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a  mitted. .      *
133a0 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72  /.      int isTr
133b0 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76  ansaction = pSav
133c0 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30  epoint->pNext==0
133d0 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   && db->isTransa
133e0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a  ctionSavepoint;.
133f0 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e        if( isTran
13400 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53  saction && p1==S
13410 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
13420 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   ){.        db->
13430 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
13440 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
13450 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
13460 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
13470 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d           p->pc =
13480 20 70 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64   pc;.          d
13490 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
134a0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  0;.          p->
134b0 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
134c0 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20  _BUSY;.         
134d0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
134e0 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
134f0 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
13500 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
13510 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20  = 0;.        rc 
13520 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d  = p->rc;.      }
13530 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e  else{.        in
13540 74 20 69 69 3b 0a 20 20 20 20 20 20 20 20 69 53  t ii;.        iS
13550 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e  avepoint = db->n
13560 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76  Savepoint - iSav
13570 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20  epoint - 1;.    
13580 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
13590 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
135a0 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
135b0 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65  sqlite3BtreeSave
135c0 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69  point(db->aDb[ii
135d0 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65  ].pBt, p1, iSave
135e0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
135f0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
13600 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
13610 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
13620 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 09 20 20 7d  e_to_error;..  }
13630 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
13640 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
13650 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26  OINT_ROLLBACK &&
13660 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49   (db->flags&SQLI
13670 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
13680 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
13690 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
136a0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
136b0 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  s(db);.         
136c0 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
136d0 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
136e0 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  0);.        }.  
136f0 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
13700 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  * Regardless of 
13710 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
13720 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c  a RELEASE or ROL
13730 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61  LBACK, destroy a
13740 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ll .      ** sav
13750 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69  epoints nested i
13760 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76  nside of the sav
13770 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
13780 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20  rated on. */.   
13790 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53     while( db->pS
137a0 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70  avepoint!=pSavep
137b0 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  oint ){.        
137c0 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 20  Savepoint *pTmp 
137d0 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
137e0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
137f0 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d  avepoint = pTmp-
13800 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
13810 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
13820 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20  , pTmp);.       
13830 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
13840 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
13850 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20    /* If it is a 
13860 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65  RELEASE, then de
13870 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f  stroy the savepo
13880 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
13890 65 64 20 6f 6e 20 74 6f 6f 20 2a 2f 0a 20 20 20  ed on too */.   
138a0 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
138b0 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
138c0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
138d0 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e  pSavepoint==db->
138e0 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20  pSavepoint );.  
138f0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
13900 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e  oint = pSavepoin
13910 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  t->pNext;.      
13920 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
13930 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b  db, pSavepoint);
13940 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73  .        if( !is
13950 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20  Transaction ){. 
13960 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
13970 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
13980 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
13990 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b   }.  }..  break;
139a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
139b0 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20  utoCommit P1 P2 
139c0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
139d0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74  the database aut
139e0 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f  o-commit flag to
139f0 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66   P1 (1 or 0). If
13a00 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c   P2 is true, rol
13a10 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75  l.** back any cu
13a20 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62  rrently active b
13a30 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tree transaction
13a40 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  s. If there are 
13a50 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d  any active.** VM
13a60 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68  s (apart from th
13a70 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 74 68  is one), then th
13a80 65 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c  e COMMIT or ROLL
13a90 42 41 43 4b 20 73 74 61 74 65 6d 65 6e 74 20 66  BACK statement f
13aa0 61 69 6c 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ails..**.** This
13ab0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75   instruction cau
13ac0 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61  ses the VM to ha
13ad0 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  lt..*/.case OP_A
13ae0 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69  utoCommit: {.  i
13af0 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  nt desiredAutoCo
13b00 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
13b10 20 20 69 6e 74 20 72 6f 6c 6c 62 61 63 6b 20 3d    int rollback =
13b20 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 6e 74 20   pOp->p2;.  int 
13b30 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72  turnOnAC = desir
13b40 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20  edAutoCommit && 
13b50 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b  !db->autoCommit;
13b60 0a 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ..  assert( desi
13b70 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
13b80 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43   || desiredAutoC
13b90 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
13ba0 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
13bb0 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 72 6f  oCommit==1 || ro
13bc0 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 0a 20 20  llback==0 );..  
13bd0 61 73 73 65 72 74 28 20 64 62 2d 3e 61 63 74 69  assert( db->acti
13be0 76 65 56 64 62 65 43 6e 74 3e 30 20 29 3b 20 20  veVdbeCnt>0 );  
13bf0 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73  /* At least this
13c00 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76   one VM is activ
13c10 65 20 2a 2f 0a 0a 20 20 69 66 28 20 74 75 72 6e  e */..  if( turn
13c20 4f 6e 41 43 20 26 26 20 72 6f 6c 6c 62 61 63 6b  OnAC && rollback
13c30 20 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64   && db->activeVd
13c40 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 2f  beCnt>1 ){.    /
13c50 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
13c60 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
13c70 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20   a ROLLBACK and 
13c80 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20  other VMs are.  
13c90 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69    ** still runni
13ca0 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61  ng, and a transa
13cb0 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c  ction is active,
13cc0 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
13cd0 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20   indicating.    
13ce0 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68 65  ** that the othe
13cf0 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
13d00 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20  ete first. .    
13d10 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  */.    sqlite3Se
13d20 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
13d30 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74  Msg, db, "cannot
13d40 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
13d50 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20  ction - ".      
13d60 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
13d70 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
13d80 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
13d90 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69  _BUSY;.  }else i
13da0 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21  f( turnOnAC && !
13db0 72 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e  rollback && db->
13dc0 77 72 69 74 65 56 64 62 65 43 6e 74 3e 31 20 29  writeVdbeCnt>1 )
13dd0 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
13de0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
13df0 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
13e00 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
13e10 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a  re writing.    *
13e20 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  * return an erro
13e30 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  r indicating tha
13e40 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
13e50 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
13e60 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
13e70 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
13e80 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
13e90 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69  b, "cannot commi
13ea0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  t transaction - 
13eb0 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
13ec0 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
13ed0 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20  gress");.    rc 
13ee0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
13ef0 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72   }else if( desir
13f00 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62  edAutoCommit!=db
13f10 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
13f20 20 20 20 20 69 66 28 20 72 6f 6c 6c 62 61 63 6b      if( rollback
13f30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
13f40 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
13f50 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  mit==1 );.      
13f60 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
13f70 6c 6c 28 64 62 29 3b 0a 20 20 20 20 20 20 64 62  ll(db);.      db
13f80 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
13f90 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
13fa0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
13fb0 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41  t = (u8)desiredA
13fc0 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20  utoCommit;.     
13fd0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
13fe0 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
13ff0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
14000 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
14010 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
14020 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69  it = (u8)(1-desi
14030 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a  redAutoCommit);.
14040 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
14050 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
14060 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76  ;.        goto v
14070 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
14080 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
14090 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
140a0 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
140b0 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
140c0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
140d0 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
140e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
140f0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
14100 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
14110 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
14120 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
14130 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
14140 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20  zErrMsg, db,.   
14150 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
14160 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
14170 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
14180 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
14190 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
141a0 20 20 20 20 20 20 28 72 6f 6c 6c 62 61 63 6b 29        (rollback)
141b0 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
141c0 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
141d0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141f0 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
14200 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
14210 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
14220 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
14230 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
14240 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
14250 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
14260 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20  saction P1 P2 * 
14270 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20  * *.**.** Begin 
14280 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  a transaction.  
14290 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  The transaction 
142a0 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d  ends when a Comm
142b0 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a  it or Rollback.*
142c0 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f  * opcode is enco
142d0 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64  untered.  Depend
142e0 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f  ing on the ON CO
142f0 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20  NFLICT setting, 
14300 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  the.** transacti
14310 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65  on might also be
14320 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20   rolled back if 
14330 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  an error is enco
14340 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  untered..**.** P
14350 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
14360 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
14370 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
14380 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
14390 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
143a0 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
143b0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
143c0 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
143d0 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
143e0 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
143f0 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
14400 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
14410 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
14420 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
14430 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  *.** If P2 is no
14440 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
14450 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
14460 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41 20   is started.  A 
14470 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73  RESERVED lock is
14480 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20  .** obtained on 
14490 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
144a0 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74  e when a write-t
144b0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
144c0 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74  arted.  No.** ot
144d0 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20  her process can 
144e0 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72  start another wr
144f0 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
14500 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73  while this trans
14510 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64  action is.** und
14520 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67  erway.  Starting
14530 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
14540 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65  tion also create
14550 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
14560 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65  rnal. A.** write
14570 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73   transaction mus
14580 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66  t be started bef
14590 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ore any changes 
145a0 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
145b0 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  he.** database. 
145c0 20 49 66 20 50 32 20 69 73 20 32 20 6f 72 20 67   If P2 is 2 or g
145d0 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20 45  reater then an E
145e0 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73  XCLUSIVE lock is
145f0 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a   also obtained.*
14600 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a  * on the file..*
14610 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65  *.** If P2 is ze
14620 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d  ro, then a read-
14630 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
14640 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
14650 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   file..*/.case O
14660 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b  P_Transaction: {
14670 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
14680 70 31 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  p1;.  Btree *pBt
14690 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
146a0 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 20 29  0 && i<db->nDb )
146b0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
146c0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
146d0 69 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20  i))!=0 );.  pBt 
146e0 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  = db->aDb[i].pBt
146f0 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  ;..  if( pBt ){.
14700 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
14710 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
14720 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  pBt, pOp->p2);. 
14730 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
14740 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
14750 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
14760 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
14770 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
14780 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
14790 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  rn;.    }.    if
147a0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
147b0 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 45  && rc!=SQLITE_RE
147c0 41 44 4f 4e 4c 59 20 2f 2a 20 26 26 20 72 63 21  ADONLY /* && rc!
147d0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 2a 2f 20  =SQLITE_BUSY */ 
147e0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
147f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
14800 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
14810 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
14820 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
14830 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
14840 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
14850 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
14860 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
14870 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
14880 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 30 20  er P2..** P3==0 
14890 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
148a0 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 31 20 69 73  rsion.  P3==1 is
148b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
148c0 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 32 20 69  rmat..** P3==2 i
148d0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
148e0 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
148f0 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
14900 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
14910 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
14920 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
14930 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
14940 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
14950 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
14960 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  tables..**.** If
14970 20 50 31 20 69 73 20 6e 65 67 61 74 69 76 65 2c   P1 is negative,
14980 20 74 68 65 6e 20 74 68 69 73 20 69 73 20 61 20   then this is a 
14990 72 65 71 75 65 73 74 20 74 6f 20 72 65 61 64 20  request to read 
149a0 74 68 65 20 73 69 7a 65 20 6f 66 20 61 0a 2a 2a  the size of a.**
149b0 20 64 61 74 61 62 61 73 65 73 20 66 72 65 65 2d   databases free-
149c0 6c 69 73 74 2e 20 50 33 20 6d 75 73 74 20 62 65  list. P3 must be
149d0 20 73 65 74 20 74 6f 20 31 20 69 6e 20 74 68 69   set to 1 in thi
149e0 73 20 63 61 73 65 2e 20 54 68 65 20 61 63 74 75  s case. The actu
149f0 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 61  al.** database a
14a00 63 63 65 73 73 65 64 20 69 73 20 28 28 50 31 2b  ccessed is ((P1+
14a10 31 29 2a 2d 31 29 2e 20 46 6f 72 20 65 78 61 6d  1)*-1). For exam
14a20 70 6c 65 2c 20 61 20 50 31 20 70 61 72 61 6d 65  ple, a P1 parame
14a30 74 65 72 20 6f 66 20 2d 31 0a 2a 2a 20 63 6f 72  ter of -1.** cor
14a40 72 65 73 70 6f 6e 64 73 20 74 6f 20 64 61 74 61  responds to data
14a50 62 61 73 65 20 30 20 28 22 6d 61 69 6e 22 29 2c  base 0 ("main"),
14a60 20 61 20 50 31 20 6f 66 20 2d 32 20 69 73 20 64   a P1 of -2 is d
14a70 61 74 61 62 61 73 65 20 31 20 28 22 74 65 6d 70  atabase 1 ("temp
14a80 22 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ")..**.** There 
14a90 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
14aa0 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
14ab0 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
14ac0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
14ad0 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
14ae0 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
14af0 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
14b00 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
14b10 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
14b20 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
14b30 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
14b40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
14b50 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
14b60 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
14b70 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  int iDb = pOp->p
14b80 31 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  1;.  int iCookie
14b90 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 0a 20 20 61   = pOp->p3;..  a
14ba0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53  ssert( pOp->p3<S
14bb0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
14bc0 54 41 20 29 3b 0a 20 20 69 66 28 20 69 44 62 3c  TA );.  if( iDb<
14bd0 30 20 29 7b 0a 20 20 20 20 69 44 62 20 3d 20 28  0 ){.    iDb = (
14be0 2d 31 2a 28 69 44 62 2b 31 29 29 3b 0a 20 20 20  -1*(iDb+1));.   
14bf0 20 69 43 6f 6f 6b 69 65 20 2a 3d 20 2d 31 3b 0a   iCookie *= -1;.
14c00 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 44    }.  assert( iD
14c10 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
14c20 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
14c30 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42   db->aDb[iDb].pB
14c40 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
14c50 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
14c60 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29  & (1<<iDb))!=0 )
14c70 3b 0a 20 20 2f 2a 20 54 68 65 20 69 6e 64 65 78  ;.  /* The index
14c80 69 6e 67 20 6f 66 20 6d 65 74 61 20 76 61 6c 75  ing of meta valu
14c90 65 73 20 61 74 20 74 68 65 20 73 63 68 65 6d 61  es at the schema
14ca0 20 6c 61 79 65 72 20 69 73 20 6f 66 66 20 62 79   layer is off by
14cb0 20 6f 6e 65 20 66 72 6f 6d 0a 20 20 2a 2a 20 74   one from.  ** t
14cc0 68 65 20 69 6e 64 65 78 69 6e 67 20 69 6e 20 74  he indexing in t
14cd0 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
14ce0 20 54 68 65 20 62 74 72 65 65 20 63 6f 6e 73 69   The btree consi
14cf0 64 65 72 73 20 6d 65 74 61 5b 30 5d 20 74 6f 0a  ders meta[0] to.
14d00 20 20 2a 2a 20 62 65 20 74 68 65 20 6e 75 6d 62    ** be the numb
14d10 65 72 20 6f 66 20 66 72 65 65 20 70 61 67 65 73  er of free pages
14d20 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
14d30 20 28 61 20 72 65 61 64 2d 6f 6e 6c 79 20 76 61   (a read-only va
14d40 6c 75 65 29 0a 20 20 2a 2a 20 61 6e 64 20 6d 65  lue).  ** and me
14d50 74 61 5b 31 5d 20 74 6f 20 62 65 20 74 68 65 20  ta[1] to be the 
14d60 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 20 20  schema cookie.  
14d70 54 68 65 20 73 63 68 65 6d 61 20 6c 61 79 65 72  The schema layer
14d80 20 63 6f 6e 73 69 64 65 72 73 0a 20 20 2a 2a 20   considers.  ** 
14d90 6d 65 74 61 5b 31 5d 20 74 6f 20 62 65 20 74 68  meta[1] to be th
14da0 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e  e schema cookie.
14db0 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
14dc0 73 68 69 66 74 20 74 68 65 20 69 6e 64 65 78 0a  shift the index.
14dd0 20 20 2a 2a 20 62 79 20 6f 6e 65 20 69 6e 20 74    ** by one in t
14de0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
14df0 74 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 72  tement..  */.  r
14e00 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
14e10 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
14e20 69 44 62 5d 2e 70 42 74 2c 20 31 20 2b 20 69 43  iDb].pBt, 1 + iC
14e30 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69  ookie, (u32 *)&i
14e40 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  Meta);.  pOut->u
14e50 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 4d 65  .i = iMeta;.  Me
14e60 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
14e70 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62  t, MEM_Int);.  b
14e80 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
14e90 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31  de: SetCookie P1
14ea0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
14eb0 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65   Write the conte
14ec0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
14ed0 33 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61  3 (interpreted a
14ee0 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a  s an integer).**
14ef0 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d   into cookie num
14f00 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61  ber P2 of databa
14f10 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 30 20  se P1..** P2==0 
14f20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
14f30 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 31 20 69 73  rsion.  P2==1 is
14f40 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
14f50 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 32 20 69  rmat..** P2==2 i
14f60 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
14f70 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
14f80 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
14f90 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
14fa0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
14fb0 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
14fc0 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
14fd0 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
14fe0 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
14ff0 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
15000 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
15010 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
15020 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
15030 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
15040 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
15050 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a  {       /* in3 *
15060 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  /.  Db *pDb;.  a
15070 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
15080 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
15090 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
150a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
150b0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
150c0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
150d0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
150e0 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
150f0 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
15100 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
15110 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
15120 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
15130 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
15140 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f  n3);.  /* See no
15150 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73  te about index s
15160 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65  hifting on OP_Re
15170 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63  adCookie */.  rc
15180 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55   = sqlite3BtreeU
15190 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70  pdateMeta(pDb->p
151a0 42 74 2c 20 31 2b 70 4f 70 2d 3e 70 32 2c 20 28  Bt, 1+pOp->p2, (
151b0 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  int)pIn3->u.i);.
151c0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
151d0 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20   ){.    /* When 
151e0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
151f0 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72  e changes, recor
15200 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65  d the new cookie
15210 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20   internally */. 
15220 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
15230 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d  >schema_cookie =
15240 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b   (int)pIn3->u.i;
15250 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
15260 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  = SQLITE_InternC
15270 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20  hanges;.  }else 
15280 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 29  if( pOp->p2==1 )
15290 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
152a0 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
152b0 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
152c0 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
152d0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75  file_format = (u
152e0 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d  8)pIn3->u.i;.  }
152f0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
15300 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61  1 ){.    /* Inva
15310 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61  lidate all prepa
15320 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
15330 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50  henever the TEMP
15340 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a   database.    **
15350 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67   schema is chang
15360 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34  ed.  Ticket #164
15370 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  4 */.    sqlite3
15380 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
15390 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
153a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
153b0 20 4f 70 63 6f 64 65 3a 20 56 65 72 69 66 79 43   Opcode: VerifyC
153c0 6f 6f 6b 69 65 20 50 31 20 50 32 20 2a 0a 2a 2a  ookie P1 P2 *.**
153d0 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61  .** Check the va
153e0 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61  lue of global da
153f0 74 61 62 61 73 65 20 70 61 72 61 6d 65 74 65 72  tabase parameter
15400 20 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a   number 0 (the.*
15410 2a 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  * schema version
15420 29 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20  ) and make sure 
15430 69 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50  it is equal to P
15440 32 2e 20 20 0a 2a 2a 20 50 31 20 69 73 20 74 68  2.  .** P1 is th
15450 65 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62 65  e database numbe
15460 72 20 77 68 69 63 68 20 69 73 20 30 20 66 6f 72  r which is 0 for
15470 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
15480 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31  se file.** and 1
15490 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68 6f   for the file ho
154a0 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20  lding temporary 
154b0 74 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20  tables and some 
154c0 68 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a  higher number.**
154d0 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20 64   for auxiliary d
154e0 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
154f0 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
15500 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
15510 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
15520 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
15530 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
15540 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
15550 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
15560 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
15570 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
15580 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
15590 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
155a0 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
155b0 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72  ma..**.** Either
155c0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e   a transaction n
155d0 65 65 64 73 20 74 6f 20 68 61 76 65 20 62 65 65  eeds to have bee
155e0 6e 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e 20  n started or an 
155f0 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a  OP_Open needs.**
15600 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20   to be executed 
15610 28 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20  (to establish a 
15620 72 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72  read lock) befor
15630 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  e this opcode is
15640 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a  .** invoked..*/.
15650 63 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43 6f  case OP_VerifyCo
15660 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d  okie: {.  int iM
15670 65 74 61 3b 0a 20 20 42 74 72 65 65 20 2a 70 42  eta;.  Btree *pB
15680 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  t;.  assert( pOp
15690 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
156a0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
156b0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
156c0 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
156d0 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42  >p1))!=0 );.  pB
156e0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
156f0 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20  >p1].pBt;.  if( 
15700 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  pBt ){.    rc = 
15710 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
15720 65 74 61 28 70 42 74 2c 20 31 2c 20 28 75 33 32  eta(pBt, 1, (u32
15730 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 7d 65   *)&iMeta);.  }e
15740 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  lse{.    rc = SQ
15750 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 69 4d 65  LITE_OK;.    iMe
15760 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  ta = 0;.  }.  if
15770 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
15780 26 26 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70  && iMeta!=pOp->p
15790 32 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  2 ){.    sqlite3
157a0 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
157b0 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
157c0 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
157d0 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61  DbStrDup(db, "da
157e0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
157f0 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20  s changed");.   
15800 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d   /* If the schem
15810 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68  a-cookie from th
15820 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
15830 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b  matches the cook
15840 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65  ie .    ** store
15850 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65  d with the in-me
15860 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74  mory representat
15870 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ion of the schem
15880 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74  a, do.    ** not
15890 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65   reload the sche
158a0 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ma from the data
158b0 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a  base file..    *
158c0 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74  *.    ** If virt
158d0 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69  ual-tables are i
158e0 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e  n use, this is n
158f0 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d  ot just an optim
15900 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20  ization..    ** 
15910 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20  Often, v-tables 
15920 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61  store their data
15930 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65   in other SQLite
15940 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20   tables, which. 
15950 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65     ** are querie
15960 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e  d from within xN
15970 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20  ext() and other 
15980 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20  v-table methods 
15990 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65  using.    ** pre
159a0 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49  pared queries. I
159b0 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69  f such a query i
159c0 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77  s out-of-date, w
159d0 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f  e do not want to
159e0 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20  .    ** discard 
159f0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
15a00 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72  ema, as the user
15a10 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69   code implementi
15a20 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d  ng the.    ** v-
15a30 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65  table would have
15a40 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72   to be ready for
15a50 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
15a60 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65  b structure itse
15a70 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20  lf.    ** to be 
15a80 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e  invalidated when
15a90 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65  ever sqlite3_ste
15aa0 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72  p() is called fr
15ab0 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a  om within .    *
15ac0 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  * a v-table meth
15ad0 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  od..    */.    i
15ae0 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  f( db->aDb[pOp->
15af0 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  p1].pSchema->sch
15b00 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74  ema_cookie!=iMet
15b10 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  a ){.      sqlit
15b20 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
15b30 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70  chema(db, pOp->p
15b40 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73  1);.    }..    s
15b50 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
15b60 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
15b70 62 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  b);.    rc = SQL
15b80 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a  ITE_SCHEMA;.  }.
15b90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
15ba0 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20  pcode: OpenRead 
15bb0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
15bc0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
15bd0 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72  -only cursor for
15be0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
15bf0 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  ble whose root p
15c00 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20  age is.** P2 in 
15c10 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  a database file.
15c20 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
15c30 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ile is determine
15c40 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d  d by P3. .** P3=
15c50 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69  =0 means the mai
15c60 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d  n database, P3==
15c70 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  1 means the data
15c80 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a  base used for .*
15c90 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
15ca0 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61  es, and P3>1 mea
15cb0 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72  ns used the corr
15cc0 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68  esponding attach
15cd0 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  ed.** database. 
15ce0 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75   Give the new cu
15cf0 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69  rsor an identifi
15d00 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50  er of P1.  The P
15d10 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64  1.** values need
15d20 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f   not be contiguo
15d30 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61  us but all P1 va
15d40 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  lues should be s
15d50 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a  mall integers..*
15d60 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  * It is an error
15d70 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65   for P1 to be ne
15d80 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  gative..**.** If
15d90 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20   P5!=0 then use 
15da0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
15db0 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68  egister P2 as th
15dc0 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74  e root page, not
15dd0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
15de0 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a   P2 itself..**.*
15df0 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20  * There will be 
15e00 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74  a read lock on t
15e10 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  he database when
15e20 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e  ever there is an
15e30 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e  .** open cursor.
15e40 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73    If the databas
15e50 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70  e was unlocked p
15e60 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73  rior to this ins
15e70 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e  truction.** then
15e80 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20   a read lock is 
15e90 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74  acquired as part
15ea0 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   of this instruc
15eb0 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a  tion.  A read.**
15ec0 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68   lock allows oth
15ed0 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20  er processes to 
15ee0 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
15ef0 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a  e but prohibits.
15f00 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f  ** any other pro
15f10 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79  cess from modify
15f20 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
15f30 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b  .  The read lock
15f40 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20   is.** released 
15f50 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73  when all cursors
15f60 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66   are closed.  If
15f70 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
15f80 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f  n attempts.** to
15f90 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b   get a read lock
15fa0 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20   but fails, the 
15fb0 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65  script terminate
15fc0 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c  s with an.** SQL
15fd0 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63  ITE_BUSY error c
15fe0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ode..**.** The P
15ff0 34 20 76 61 6c 75 65 20 69 73 20 61 20 70 6f 69  4 value is a poi
16000 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
16010 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  o structure that
16020 20 64 65 66 69 6e 65 73 20 74 68 65 0a 2a 2a 20   defines the.** 
16030 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
16040 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6f  ating sequence o
16050 66 20 69 6e 64 69 63 65 73 2e 20 20 50 34 20 69  f indices.  P4 i
16060 73 20 4e 55 4c 4c 20 66 6f 72 20 63 75 72 73 6f  s NULL for curso
16070 72 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 6e  rs.** that are n
16080 6f 74 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69  ot pointing to i
16090 6e 64 69 63 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  ndices..**.** Se
160a0 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65  e also OpenWrite
160b0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
160c0 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20  OpenWrite P1 P2 
160d0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f  P3 P4 P5.**.** O
160e0 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
160f0 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
16100 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
16110 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
16120 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
16130 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
16140 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
16150 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
16160 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
16170 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
16180 20 50 34 20 76 61 6c 75 65 20 69 73 20 61 20 70   P4 value is a p
16190 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
161a0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68  nfo structure th
161b0 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 0a 2a  at defines the.*
161c0 2a 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  * content and co
161d0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
161e0 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 50 34   of indices.  P4
161f0 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 63 75 72   is NULL for cur
16200 73 6f 72 73 0a 2a 2a 20 74 68 61 74 20 61 72 65  sors.** that are
16210 20 6e 6f 74 20 70 6f 69 6e 74 69 6e 67 20 74 6f   not pointing to
16220 20 69 6e 64 69 63 65 73 2e 0a 2a 2a 0a 2a 2a 20   indices..**.** 
16230 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
16240 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
16250 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
16260 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
16270 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
16280 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
16290 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61    For a given ta
162a0 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62  ble, there can b
162b0 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65  e one or more re
162c0 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f  ad-only.** curso
162d0 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  rs or a single r
162e0 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
162f0 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a   but not both..*
16300 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
16310 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20  enRead..*/.case 
16320 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
16330 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20  e OP_OpenWrite: 
16340 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  {.  int i = pOp-
16350 3e 70 31 3b 0a 20 20 69 6e 74 20 70 32 20 3d 20  >p1;.  int p2 = 
16360 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 6e 74 20 69  pOp->p2;.  int i
16370 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
16380 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74  int wrFlag;.  Bt
16390 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43  ree *pX;.  VdbeC
163a0 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44  ursor *pCur;.  D
163b0 62 20 2a 70 44 62 3b 0a 20 20 0a 20 20 61 73 73  b *pDb;.  .  ass
163c0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
163d0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
163e0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
163f0 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29  eMask & (1<<iDb)
16400 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  )!=0 );.  pDb = 
16410 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20  &db->aDb[iDb];. 
16420 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a   pX = pDb->pBt;.
16430 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20    assert( pX!=0 
16440 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
16450 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
16460 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67  te ){.    wrFlag
16470 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 44   = 1;.    if( pD
16480 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
16490 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e  _format < p->min
164a0 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
164b0 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57  ){.      p->minW
164c0 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d  riteFileFormat =
164d0 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
164e0 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20  ile_format;.    
164f0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77  }.  }else{.    w
16500 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rFlag = 0;.  }. 
16510 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
16520 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
16530 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
16540 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
16550 20 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d     pIn2 = &p->aM
16560 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71 6c 69  em[p2];.    sqli
16570 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
16580 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20  rify(pIn2);.    
16590 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e  p2 = (int)pIn2->
165a0 75 2e 69 3b 0a 20 20 20 20 69 66 28 20 70 32 3c  u.i;.    if( p2<
165b0 32 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d  2 ) {.      rc =
165c0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
165d0 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BKPT;.      goto
165e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
165f0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
16600 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b   assert( i>=0 );
16610 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
16620 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c 20 26  teCursor(p, i, &
16630 70 4f 70 5b 2d 31 5d 2c 20 69 44 62 2c 20 31 29  pOp[-1], iDb, 1)
16640 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
16650 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
16660 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
16670 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   1;.  rc = sqlit
16680 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
16690 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4f  , p2, wrFlag, pO
166a0 70 2d 3e 70 34 2e 70 2c 20 70 43 75 72 2d 3e 70  p->p4.p, pCur->p
166b0 43 75 72 73 6f 72 29 3b 0a 20 20 69 66 28 20 70  Cursor);.  if( p
166c0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
166d0 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 43  EYINFO ){.    pC
166e0 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ur->pKeyInfo = p
166f0 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
16700 0a 20 20 20 20 70 43 75 72 2d 3e 70 4b 65 79 49  .    pCur->pKeyI
16710 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70  nfo->enc = ENC(p
16720 2d 3e 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->db);.  }else{.
16730 20 20 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e      pCur->pKeyIn
16740 66 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 77  fo = 0;.  }.  sw
16750 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20  itch( rc ){.    
16760 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59  case SQLITE_BUSY
16770 3a 20 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20  : {.      p->pc 
16780 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72  = pc;.      p->r
16790 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
167a0 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BUSY;.      goto
167b0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
167c0 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c    }.    case SQL
167d0 49 54 45 5f 4f 4b 3a 20 7b 0a 20 20 20 20 20 20  ITE_OK: {.      
167e0 69 6e 74 20 66 6c 61 67 73 20 3d 20 73 71 6c 69  int flags = sqli
167f0 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70 43  te3BtreeFlags(pC
16800 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  ur->pCursor);.  
16810 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68      /* Sanity ch
16820 65 63 6b 69 6e 67 2e 20 20 4f 6e 6c 79 20 74 68  ecking.  Only th
16830 65 20 6c 6f 77 65 72 20 66 6f 75 72 20 62 69 74  e lower four bit
16840 73 20 6f 66 20 74 68 65 20 66 6c 61 67 73 20 62  s of the flags b
16850 79 74 65 20 73 68 6f 75 6c 64 0a 20 20 20 20 20  yte should.     
16860 20 2a 2a 20 62 65 20 75 73 65 64 2e 20 20 42 69   ** be used.  Bi
16870 74 20 33 20 28 6d 61 73 6b 20 30 78 30 38 29 20  t 3 (mask 0x08) 
16880 69 73 20 75 6e 70 72 65 64 69 63 74 61 62 6c 65  is unpredictable
16890 2e 20 20 54 68 65 20 6c 6f 77 65 72 20 33 20 62  .  The lower 3 b
168a0 69 74 73 0a 20 20 20 20 20 20 2a 2a 20 28 6d 61  its.      ** (ma
168b0 73 6b 20 30 78 30 37 29 20 73 68 6f 75 6c 64 20  sk 0x07) should 
168c0 62 65 20 65 69 74 68 65 72 20 35 20 28 69 6e 74  be either 5 (int
168d0 6b 65 79 2b 6c 65 61 66 64 61 74 61 20 66 6f 72  key+leafdata for
168e0 20 74 61 62 6c 65 73 29 20 6f 72 0a 20 20 20 20   tables) or.    
168f0 20 20 2a 2a 20 32 20 28 7a 65 72 6f 64 61 74 61    ** 2 (zerodata
16900 20 66 6f 72 20 69 6e 64 69 63 65 73 29 2e 20 20   for indices).  
16910 49 66 20 74 68 65 73 65 20 63 6f 6e 64 69 74 69  If these conditi
16920 6f 6e 73 20 61 72 65 20 6e 6f 74 20 6d 65 74 20  ons are not met 
16930 69 74 20 63 61 6e 0a 20 20 20 20 20 20 2a 2a 20  it can.      ** 
16940 6f 6e 6c 79 20 6d 65 61 6e 20 74 68 61 74 20 77  only mean that w
16950 65 20 61 72 65 20 64 65 61 6c 69 6e 67 20 77 69  e are dealing wi
16960 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  th a corrupt dat
16970 61 62 61 73 65 20 66 69 6c 65 0a 20 20 20 20 20  abase file.     
16980 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 66   */.      if( (f
16990 6c 61 67 73 20 26 20 30 78 66 30 29 21 3d 30 20  lags & 0xf0)!=0 
169a0 7c 7c 20 28 28 66 6c 61 67 73 20 26 20 30 78 30  || ((flags & 0x0
169b0 37 29 21 3d 35 20 26 26 20 28 66 6c 61 67 73 20  7)!=5 && (flags 
169c0 26 20 30 78 30 37 29 21 3d 32 29 20 29 7b 0a 20  & 0x07)!=2) ){. 
169d0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
169e0 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
169f0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
16a00 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
16a10 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
16a20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20  pCur->isTable = 
16a30 28 66 6c 61 67 73 20 26 20 42 54 52 45 45 5f 49  (flags & BTREE_I
16a40 4e 54 4b 45 59 29 21 3d 30 20 3f 31 3a 30 3b 0a  NTKEY)!=0 ?1:0;.
16a50 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73 49 6e        pCur->isIn
16a60 64 65 78 20 3d 20 28 66 6c 61 67 73 20 26 20 42  dex = (flags & B
16a70 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 21 3d  TREE_ZERODATA)!=
16a80 30 20 3f 31 3a 30 3b 0a 20 20 20 20 20 20 2f 2a  0 ?1:0;.      /*
16a90 20 49 66 20 50 34 3d 3d 30 20 69 74 20 6d 65 61   If P4==0 it mea
16aa0 6e 73 20 77 65 20 61 72 65 20 65 78 70 65 63 74  ns we are expect
16ab0 65 64 20 74 6f 20 6f 70 65 6e 20 61 20 74 61 62  ed to open a tab
16ac0 6c 65 2e 20 20 49 66 20 50 34 21 3d 30 20 74 68  le.  If P4!=0 th
16ad0 65 6e 0a 20 20 20 20 20 20 2a 2a 20 77 65 20 65  en.      ** we e
16ae0 78 70 65 63 74 20 74 6f 20 62 65 20 6f 70 65 6e  xpect to be open
16af0 69 6e 67 20 61 6e 20 69 6e 64 65 78 2e 20 20 49  ing an index.  I
16b00 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 77 68  f this is not wh
16b10 61 74 20 68 61 70 70 65 6e 65 64 2c 0a 20 20 20  at happened,.   
16b20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 64     ** then the d
16b30 61 74 61 62 61 73 65 20 69 73 20 63 6f 72 72 75  atabase is corru
16b40 70 74 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  pt.      */.    
16b50 20 20 69 66 28 20 28 70 43 75 72 2d 3e 69 73 54    if( (pCur->isT
16b60 61 62 6c 65 20 26 26 20 70 4f 70 2d 3e 70 34 74  able && pOp->p4t
16b70 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 29  ype==P4_KEYINFO)
16b80 0a 20 20 20 20 20 20 20 7c 7c 20 28 70 43 75 72  .       || (pCur
16b90 2d 3e 69 73 49 6e 64 65 78 20 26 26 20 70 4f 70  ->isIndex && pOp
16ba0 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59  ->p4type!=P4_KEY
16bb0 49 4e 46 4f 29 20 29 7b 0a 20 20 20 20 20 20 20  INFO) ){.       
16bc0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
16bd0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
16be0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
16bf0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
16c00 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
16c10 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20  .    }.    case 
16c20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20 7b 0a  SQLITE_EMPTY: {.
16c30 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73 54 61        pCur->isTa
16c40 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70  ble = pOp->p4typ
16c50 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20  e!=P4_KEYINFO;. 
16c60 20 20 20 20 20 70 43 75 72 2d 3e 69 73 49 6e 64       pCur->isInd
16c70 65 78 20 3d 20 21 70 43 75 72 2d 3e 69 73 54 61  ex = !pCur->isTa
16c80 62 6c 65 3b 0a 20 20 20 20 20 20 70 43 75 72 2d  ble;.      pCur-
16c90 3e 70 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20  >pCursor = 0;.  
16ca0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
16cb0 4f 4b 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  OK;.      break;
16cc0 0a 20 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75  .    }.    defau
16cd0 6c 74 3a 20 7b 0a 20 20 20 20 20 20 67 6f 74 6f  lt: {.      goto
16ce0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
16cf0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
16d00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
16d10 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65  code: OpenEpheme
16d20 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ral P1 P2 * P4 *
16d30 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
16d40 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  w cursor P1 to a
16d50 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
16d60 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
16d70 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64  is always opened
16d80 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e   read/write even
16d90 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e   if .** the main
16da0 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61   database is rea
16db0 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 74 72 61  d-only.  The tra
16dc0 6e 73 69 65 6e 74 20 6f 72 20 76 69 72 74 75 61  nsient or virtua
16dd0 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
16de0 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
16df0 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
16e00 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
16e10 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
16e20 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16e30 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   in the virtual 
16e40 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
16e50 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61  rsor points to a
16e60 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20   BTree table if 
16e70 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42  P4==0 and to a B
16e80 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66  Tree index.** if
16e90 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49   P4 is not 0.  I
16ea0 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
16eb0 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  , it points to a
16ec0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
16ed0 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e  re.** that defin
16ee0 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  es the format of
16ef0 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64   keys in the ind
16f00 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ex..**.** This o
16f10 70 63 6f 64 65 20 77 61 73 20 6f 6e 63 65 20 63  pcode was once c
16f20 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20  alled OpenTemp. 
16f30 20 42 75 74 20 74 68 61 74 20 63 72 65 61 74 65   But that create
16f40 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62  d.** confusion b
16f50 65 63 61 75 73 65 20 74 68 65 20 74 65 72 6d 20  ecause the term 
16f60 22 74 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69  "temp table", mi
16f70 67 68 74 20 72 65 66 65 72 20 65 69 74 68 65 72  ght refer either
16f80 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20 74 61  .** to a TEMP ta
16f90 62 6c 65 20 61 74 20 74 68 65 20 53 51 4c 20 6c  ble at the SQL l
16fa0 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61  evel, or to a ta
16fb0 62 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a  ble opened by.**
16fc0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 54   this opcode.  T
16fd0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
16fe0 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72  was call OpenVir
16ff0 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68  tual.  But.** th
17000 61 74 20 63 72 65 61 74 65 64 20 63 6f 6e 66 75  at created confu
17010 73 69 6f 6e 20 77 69 74 68 20 74 68 65 20 77 68  sion with the wh
17020 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c  ole virtual-tabl
17030 65 20 69 64 65 61 2e 0a 2a 2f 0a 63 61 73 65 20  e idea..*/.case 
17040 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
17050 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f  : {.  int i = pO
17060 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72  p->p1;.  VdbeCur
17070 73 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74 61 74  sor *pCx;.  stat
17080 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 6f 70 65  ic const int ope
17090 6e 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20  nFlags = .      
170a0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
170b0 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51  WRITE |.      SQ
170c0 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45  LITE_OPEN_CREATE
170d0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
170e0 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c  OPEN_EXCLUSIVE |
170f0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
17100 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45  EN_DELETEONCLOSE
17110 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
17120 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
17130 42 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e  B;..  assert( i>
17140 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
17150 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
17160 69 2c 20 70 4f 70 2c 20 2d 31 2c 20 31 29 3b 0a  i, pOp, -1, 1);.
17170 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
17180 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
17190 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
171a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
171b0 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20 30  reeFactory(db, 0
171c0 2c 20 31 2c 20 53 51 4c 49 54 45 5f 44 45 46 41  , 1, SQLITE_DEFA
171d0 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53  ULT_TEMP_CACHE_S
171e0 49 5a 45 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 0a  IZE, openFlags,.
171f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17200 20 20 20 20 20 20 20 20 20 20 20 26 70 43 78 2d             &pCx-
17210 3e 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d  >pBt);.  if( rc=
17220 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
17230 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
17240 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
17250 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a  x->pBt, 1);.  }.
17260 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
17270 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  _OK ){.    /* If
17280 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
17290 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
172a0 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
172b0 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ling.    ** sqli
172c0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
172d0 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
172e0 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 20 66 6c  TREE_ZERODATA fl
172f0 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a  ag before.    **
17300 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20   opening it. If 
17310 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
17320 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a  e is required, j
17330 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20  ust use the.    
17340 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
17350 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77   created table w
17360 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20  ith root-page 1 
17370 28 61 6e 20 49 4e 54 4b 45 59 20 74 61 62 6c 65  (an INTKEY table
17380 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
17390 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  ( pOp->p4.pKeyIn
173a0 66 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  fo ){.      int 
173b0 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
173c0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
173d0 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
173e0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
173f0 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
17400 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pCx->pBt, &pgn
17410 6f 2c 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54  o, BTREE_ZERODAT
17420 41 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72  A); .      if( r
17430 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
17440 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
17450 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f  pgno==MASTER_ROO
17460 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 72  T+1 );.        r
17470 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
17480 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c  Cursor(pCx->pBt,
17490 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20   pgno, 1, .     
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 20 20 20 20 20 20 20 20 20 20 28 4b 65 79 49             (KeyI
174c0 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20  nfo*)pOp->p4.z, 
174d0 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  pCx->pCursor);. 
174e0 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79         pCx->pKey
174f0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
17500 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20  KeyInfo;.       
17510 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
17520 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29  enc = ENC(p->db)
17530 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
17540 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30  pCx->isTable = 0
17550 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
17560 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17570 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
17580 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54  pBt, MASTER_ROOT
17590 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75  , 1, 0, pCx->pCu
175a0 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78  rsor);.      pCx
175b0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
175c0 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e     }.  }.  pCx->
175d0 69 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e  isIndex = !pCx->
175e0 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b  isTable;.  break
175f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
17600 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32  OpenPseudo P1 P2
17610 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65   * * *.**.** Ope
17620 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74  n a new cursor t
17630 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  hat points to a 
17640 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20  fake table that 
17650 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c  contains a singl
17660 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61  e.** row of data
17670 2e 20 20 41 6e 79 20 61 74 74 65 6d 70 74 20 74  .  Any attempt t
17680 6f 20 77 72 69 74 65 20 61 20 73 65 63 6f 6e 64  o write a second
17690 20 72 6f 77 20 6f 66 20 64 61 74 61 20 63 61 75   row of data cau
176a0 73 65 73 20 74 68 65 0a 2a 2a 20 66 69 72 73 74  ses the.** first
176b0 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74   row to be delet
176c0 65 64 2e 20 20 41 6c 6c 20 64 61 74 61 20 69 73  ed.  All data is
176d0 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68   deleted when th
176e0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
176f0 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 70  losed..**.** A p
17700 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61  seudo-table crea
17710 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  ted by this opco
17720 64 65 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72  de is useful for
17730 20 68 6f 6c 64 69 6e 67 20 74 68 65 0a 2a 2a 20   holding the.** 
17740 4e 45 57 20 6f 72 20 4f 4c 44 20 74 61 62 6c 65  NEW or OLD table
17750 73 20 69 6e 20 61 20 74 72 69 67 67 65 72 2e 20  s in a trigger. 
17760 20 41 6c 73 6f 20 75 73 65 64 20 74 6f 20 68 6f   Also used to ho
17770 6c 64 20 74 68 65 20 61 20 73 69 6e 67 6c 65 0a  ld the a single.
17780 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72  ** row output fr
17790 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f  om the sorter so
177a0 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61   that the row ca
177b0 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20  n be decomposed 
177c0 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75  into.** individu
177d0 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67  al columns using
177e0 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
177f0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  pcode..**.** Whe
17800 6e 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 65  n OP_Insert is e
17810 78 65 63 75 74 65 64 20 74 6f 20 69 6e 73 65 72  xecuted to inser
17820 74 20 61 20 72 6f 77 20 69 6e 20 74 6f 20 74 68  t a row in to th
17830 65 20 70 73 65 75 64 6f 20 74 61 62 6c 65 2c 0a  e pseudo table,.
17840 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  ** the pseudo-ta
17850 62 6c 65 20 63 75 72 73 6f 72 20 6d 61 79 20 6f  ble cursor may o
17860 72 20 6d 61 79 20 6e 6f 74 20 6d 61 6b 65 20 69  r may not make i
17870 74 27 73 20 6f 77 6e 20 63 6f 70 79 20 6f 66 20  t's own copy of 
17880 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
17890 72 6f 77 20 64 61 74 61 2e 20 49 66 20 50 32 20  row data. If P2 
178a0 69 73 20 30 2c 20 74 68 65 6e 20 74 68 65 20 70  is 0, then the p
178b0 73 65 75 64 6f 2d 74 61 62 6c 65 20 77 69 6c 6c  seudo-table will
178c0 20 63 6f 70 79 20 74 68 65 0a 2a 2a 20 6f 72 69   copy the.** ori
178d0 67 69 6e 61 6c 20 72 6f 77 20 64 61 74 61 2e 20  ginal row data. 
178e0 4f 74 68 65 72 77 69 73 65 2c 20 61 20 70 6f 69  Otherwise, a poi
178f0 6e 74 65 72 20 74 6f 20 74 68 65 20 6f 72 69 67  nter to the orig
17900 69 6e 61 6c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  inal memory cell
17910 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 2e 20 49  .** is stored. I
17920 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65  n this case, the
17930 20 76 64 62 65 20 70 72 6f 67 72 61 6d 20 6d 75   vdbe program mu
17940 73 74 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  st ensure that t
17950 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  he .** memory ce
17960 6c 6c 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ll containing th
17970 65 20 72 6f 77 20 64 61 74 61 20 69 73 20 6e 6f  e row data is no
17980 74 20 6f 76 65 72 77 72 69 74 74 65 6e 20 75 6e  t overwritten un
17990 74 69 6c 20 74 68 65 0a 2a 2a 20 70 73 65 75 64  til the.** pseud
179a0 6f 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65  o table is close
179b0 64 20 28 6f 72 20 61 20 6e 65 77 20 72 6f 77 20  d (or a new row 
179c0 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
179d0 20 69 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   it)..*/.case OP
179e0 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20  _OpenPseudo: {. 
179f0 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
17a00 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
17a10 70 43 78 3b 0a 20 20 61 73 73 65 72 74 28 20 69  pCx;.  assert( i
17a20 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
17a30 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
17a40 20 69 2c 20 26 70 4f 70 5b 2d 31 5d 2c 20 2d 31   i, &pOp[-1], -1
17a50 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 0);.  if( pCx=
17a60 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
17a70 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
17a80 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65   = 1;.  pCx->pse
17a90 75 64 6f 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  udoTable = 1;.  
17aa0 70 43 78 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f  pCx->ephemPseudo
17ab0 54 61 62 6c 65 20 3d 20 28 75 38 29 70 4f 70 2d  Table = (u8)pOp-
17ac0 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61  >p2;.  pCx->isTa
17ad0 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  ble = 1;.  pCx->
17ae0 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62  isIndex = 0;.  b
17af0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
17b00 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a  de: Close P1 * *
17b10 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65   * *.**.** Close
17b20 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f   a cursor previo
17b30 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50  usly opened as P
17b40 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74  1.  If P1 is not
17b50 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  .** currently op
17b60 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  en, this instruc
17b70 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tion is a no-op.
17b80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73  .*/.case OP_Clos
17b90 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70  e: {.  int i = p
17ba0 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
17bb0 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
17bc0 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69  Cursor );.  sqli
17bd0 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
17be0 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 5d  r(p, p->apCsr[i]
17bf0 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 69 5d  );.  p->apCsr[i]
17c00 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
17c10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
17c20 6b 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20  kGe P1 P2 P3 P4 
17c30 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  *.**.** If curso
17c40 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
17c50 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
17c60 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
17c70 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
17c80 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
17c90 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
17ca0 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75   the key.  If cu
17cb0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
17cc0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
17cd0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
17ce0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
17cf0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
17d00 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
17d10 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
17d20 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
17d30 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
17d40 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
17d50 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
17d60 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
17d70 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
17d80 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
17d90 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
17da0 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
17db0 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
17dc0 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68  s .** greater th
17dd0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
17de0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
17df0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
17e00 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
17e10 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
17e20 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73  d, NotFound, Dis
17e30 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53  tinct, SeekLt, S
17e40 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGt, SeekLe.*/
17e50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
17e60 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  Gt P1 P2 P3 P4 *
17e70 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
17e80 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
17e90 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
17ea0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
17eb0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
17ec0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
17ed0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
17ee0 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
17ef0 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
17f00 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
17f10 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
17f20 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
17f30 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
17f40 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
17f50 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
17f60 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
17f70 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
17f80 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
17f90 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
17fa0 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
17fb0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
17fc0 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
17fd0 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
17fe0 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
17ff0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a  s greater than .
18000 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
18010 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
18020 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
18030 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
18040 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
18050 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c   Distinct, SeekL
18060 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
18070 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
18080 53 65 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20  SeekLt P1 P2 P3 
18090 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63  P4 * .**.** If c
180a0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
180b0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
180c0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
180d0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
180e0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
180f0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
18100 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
18110 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
18120 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
18130 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
18140 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
18150 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
18160 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
18170 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
18180 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
18190 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
181a0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
181b0 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
181c0 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
181d0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
181e0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
181f0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
18200 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
18210 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a  ds less than .**
18220 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
18230 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
18240 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
18250 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
18260 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
18270 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c  istinct, SeekGt,
18280 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
18290 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
182a0 65 6b 4c 65 20 50 31 20 50 32 20 50 33 20 50 34  ekLe P1 P2 P3 P4
182b0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73   *.**.** If curs
182c0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
182d0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
182e0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
182f0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
18300 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
18310 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
18320 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
18330 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
18340 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
18350 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
18360 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
18370 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
18380 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
18390 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
183a0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
183b0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
183c0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
183d0 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
183e0 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
183f0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
18400 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
18410 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
18420 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
18430 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c  no records .** l
18440 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
18450 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
18460 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
18470 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
18480 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
18490 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
184a0 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65  d, Distinct, See
184b0 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
184c0 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  kLt.*/.case OP_S
184d0 65 65 6b 4c 74 3a 20 20 20 20 20 20 20 20 20 2f  eekLt:         /
184e0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
184f0 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20  ase OP_SeekLe:  
18500 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
18510 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
18520 65 65 6b 47 65 3a 20 20 20 20 20 20 20 20 20 2f  eekGe:         /
18530 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
18540 61 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b  ase OP_SeekGt: {
18550 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
18560 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  in3 */.  int i =
18570 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65   pOp->p1;.  Vdbe
18580 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
18590 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
185a0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
185b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
185c0 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  !=0 );.  pC = p-
185d0 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73  >apCsr[i];.  ass
185e0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
185f0 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  if( pC->pCursor!
18600 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65  =0 ){.    int re
18610 73 2c 20 6f 63 3b 0a 20 20 20 20 6f 63 20 3d 20  s, oc;.    oc = 
18620 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 20  pOp->opcode;.   
18630 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
18640 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73  ;.    if( pC->is
18650 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 69  Table ){.      i
18660 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a  64 iKey;      /*
18670 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72   The rowid we ar
18680 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a  e to seek to */.
18690 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e  .      /* The in
186a0 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20  put value in P3 
186b0 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20  might be of any 
186c0 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72  type: integer, r
186d0 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20  eal, string,.   
186e0 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e     ** blob, or N
186f0 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65  ULL.  But it nee
18700 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  ds to be an inte
18710 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61  ger before we ca
18720 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68  n do.      ** th
18730 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72  e seek, so cover
18740 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 20 20 61  t it. */.      a
18750 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
18760 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20  ity(pIn3);.     
18770 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
18780 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
18790 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  );.      pC->row
187a0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a  idIsValid = 0;..
187b0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
187c0 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
187d0 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
187e0 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
187f0 77 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a  without.      **
18800 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
18810 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69  tion, then speci
18820 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  al processing is
18830 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a   required... */.
18840 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
18850 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
18860 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
18870 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
18880 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
18890 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
188a0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
188b0 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
188c0 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e  ted into any kin
188d0 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20  d of a number,. 
188e0 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e           ** then
188f0 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
18900 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
18910 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
18920 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
18930 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
18940 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
18950 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66   }.        /* If
18960 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70   we reach this p
18970 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50  oint, then the P
18980 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20  3 value must be 
18990 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20  a floating.     
189a0 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62     ** point numb
189b0 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  er. */.        a
189c0 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
189d0 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21  ags & MEM_Real)!
189e0 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69  =0 );..        i
189f0 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53  f( iKey==SMALLES
18a00 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33  T_INT64 && (pIn3
18a10 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79  ->r<(double)iKey
18a20 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29   || pIn3->r>0) )
18a30 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  {.          /* T
18a40 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 74  he P3 value is t
18a50 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e 69  o large in magni
18a60 74 75 64 65 20 74 6f 20 62 65 20 65 78 70 72 65  tude to be expre
18a70 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20 20 20  ssed as an.     
18a80 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65 72 2e       ** integer.
18a90 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72 65   */.          re
18aa0 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  s = 1;.         
18ab0 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20 29   if( pIn3->r<0 )
18ac0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  {.            if
18ad0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20  ( oc==OP_SeekGt 
18ae0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65  || oc==OP_SeekGe
18af0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
18b00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
18b10 72 65 65 46 69 72 73 74 28 70 43 2d 3e 70 43 75  reeFirst(pC->pCu
18b20 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
18b30 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72             if( r
18b40 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
18b50 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
18b60 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
18b70 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
18b80 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
18b90 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65     if( oc==OP_Se
18ba0 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLt || oc==OP_S
18bb0 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 20  eekLe ){.       
18bc0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
18bd0 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d  te3BtreeLast(pC-
18be0 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
18bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
18c00 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
18c10 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
18c20 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
18c30 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
18c40 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
18c50 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
18c60 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
18c70 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  >p2 - 1;.       
18c80 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62     }.          b
18c90 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65  reak;.        }e
18ca0 6c 73 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53  lse if( oc==OP_S
18cb0 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLt || oc==OP_
18cc0 53 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20  SeekGe ){.      
18cd0 20 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 63      /* Use the c
18ce0 65 69 6c 69 6e 67 28 29 20 66 75 6e 63 74 69 6f  eiling() functio
18cf0 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61  n to convert rea
18d00 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20  l->int */.      
18d10 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20      if( pIn3->r 
18d20 3e 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  > (double)iKey )
18d30 20 69 4b 65 79 2b 2b 3b 0a 20 20 20 20 20 20 20   iKey++;.       
18d40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
18d50 20 20 2f 2a 20 55 73 65 20 74 68 65 20 66 6c 6f    /* Use the flo
18d60 6f 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f  or() function to
18d70 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69   convert real->i
18d80 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  nt */.          
18d90 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
18da0 65 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLe || oc==OP_
18db0 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20  SeekGt );.      
18dc0 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20      if( pIn3->r 
18dd0 3c 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  < (double)iKey )
18de0 20 69 4b 65 79 2d 2d 3b 0a 20 20 20 20 20 20 20   iKey--;.       
18df0 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20   }.      } .    
18e00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
18e10 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
18e20 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
18e30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20  , (u64)iKey, 0, 
18e40 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
18e50 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
18e60 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
18e70 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
18e80 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
18e90 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
18ea0 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
18eb0 49 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20  IsValid = 1;.   
18ec0 20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77       pC->lastRow
18ed0 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20  id = iKey;.     
18ee0 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
18ef0 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f      UnpackedReco
18f00 72 64 20 72 3b 0a 20 20 20 20 20 20 69 6e 74 20  rd r;.      int 
18f10 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
18f20 2e 69 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  .i;.      assert
18f30 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
18f40 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 20  4_INT32 );.     
18f50 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
18f60 30 20 29 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65  0 );.      r.pKe
18f70 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
18f80 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46  Info;.      r.nF
18f90 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65  ield = (u16)nFie
18fa0 6c 64 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 63  ld;.      if( oc
18fb0 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f  ==OP_SeekGt || o
18fc0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a  c==OP_SeekLe ){.
18fd0 20 20 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20          r.flags 
18fe0 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  = UNPACKED_INCRK
18ff0 45 59 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  EY;.      }else{
19000 0a 20 20 20 20 20 20 20 20 72 2e 66 6c 61 67 73  .        r.flags
19010 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
19020 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d      r.aMem = &p-
19030 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
19040 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19050 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
19060 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
19070 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
19080 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
19090 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
190a0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
190b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
190c0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43        }.      pC
190d0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
190e0 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43   0;.    }.    pC
190f0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
19100 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
19110 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
19120 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
19130 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
19140 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
19150 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
19160 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65     if( oc==OP_Se
19170 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGe || oc==OP_S
19180 65 65 6b 47 74 20 29 7b 0a 20 20 20 20 20 20 69  eekGt ){.      i
19190 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65 73  f( res<0 || (res
191a0 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
191b0 65 6b 47 74 29 20 29 7b 0a 20 20 20 20 20 20 20  ekGt) ){.       
191c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
191d0 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73  eeNext(pC->pCurs
191e0 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
191f0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
19200 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
19210 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
19220 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69          pC->rowi
19230 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
19240 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
19250 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
19260 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
19270 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d       assert( oc=
19280 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63  =OP_SeekLt || oc
19290 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20  ==OP_SeekLe );. 
192a0 20 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c       if( res>0 |
192b0 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
192c0 3d 4f 50 5f 53 65 65 6b 4c 74 29 20 29 7b 0a 20  =OP_SeekLt) ){. 
192d0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
192e0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
192f0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
19300 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
19310 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
19320 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19330 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
19340 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
19350 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65  id = 0;.      }e
19360 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  lse{.        /* 
19370 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67  res might be neg
19380 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68  ative because th
19390 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79  e table is empty
193a0 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20  .  Check to.    
193b0 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68      ** see if th
193c0 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a  is is the case..
193d0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
193e0 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
193f0 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75  BtreeEof(pC->pCu
19400 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20  rsor);.      }. 
19410 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
19420 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
19430 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
19440 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
19450 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  - 1;.    }.  }el
19460 73 65 20 69 66 28 20 21 70 43 2d 3e 70 73 65 75  se if( !pC->pseu
19470 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  doTable ){.    /
19480 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
19490 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74  hen attempting t
194a0 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74  o open the sqlit
194b0 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a  e3_master table.
194c0 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20      ** for read 
194d0 61 63 63 65 73 73 20 72 65 74 75 72 6e 73 20 53  access returns S
194e0 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20  QLITE_EMPTY. In 
194f0 74 68 69 73 20 63 61 73 65 20 61 6c 77 61 79 73  this case always
19500 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65  .    ** take the
19510 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65   jump (since the
19520 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
19530 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e  s in the table).
19540 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d  .    */.    pc =
19550 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
19560 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
19570 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31   Opcode: Seek P1
19580 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
19590 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61  P1 is an open ta
195a0 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50  ble cursor and P
195b0 32 20 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74  2 is a rowid int
195c0 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a  eger.  Arrange.*
195d0 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65  * for P1 to move
195e0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
195f0 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ts to the rowid 
19600 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a  given by P2..**.
19610 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74 75 61  ** This is actua
19620 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64 20 73  lly a deferred s
19630 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63  eek.  Nothing ac
19640 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75  tually happens u
19650 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73  ntil.** the curs
19660 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72 65  or is used to re
19670 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68  ad a record.  Th
19680 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65  at way, if no re
19690 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f  ads.** occur, no
196a0 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f   unnecessary I/O
196b0 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73   happens..*/.cas
196c0 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20  e OP_Seek: {    
196d0 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 69 6e 74 20  /* in2 */.  int 
196e0 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56  i = pOp->p1;.  V
196f0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
19700 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
19710 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
19720 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
19730 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  r[i];.  assert( 
19740 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pC!=0 );.  if( p
19750 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b  C->pCursor!=0 ){
19760 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
19770 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
19780 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
19790 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  .    pC->movetoT
197a0 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56  arget = sqlite3V
197b0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
197c0 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  );.    pC->rowid
197d0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
197e0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
197f0 65 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  eto = 1;.  }.  b
19800 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f  reak;.}.  ../* O
19810 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
19820 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
19830 52 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  Register P3 hold
19840 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
19850 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
19860 72 64 2e 20 20 50 31 20 69 73 20 61 6e 20 69 6e  rd.  P1 is an in
19870 64 65 78 2e 0a 2a 2a 20 49 66 20 61 6e 20 65 6e  dex..** If an en
19880 74 72 79 20 74 68 61 74 20 6d 61 74 63 68 65 73  try that matches
19890 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
198a0 67 69 73 74 65 72 20 70 33 20 65 78 69 73 74 73  gister p3 exists
198b0 20 69 6e 20 50 31 20 74 68 65 6e 0a 2a 2a 20 6a   in P1 then.** j
198c0 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66 20 74  ump to P2.  If t
198d0 68 65 20 50 33 20 76 61 6c 75 65 20 64 6f 65 73  he P3 value does
198e0 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 65   not match any e
198f0 6e 74 72 79 20 69 6e 20 50 31 0a 2a 2a 20 74 68  ntry in P1.** th
19900 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e 20 20 54  en fall thru.  T
19910 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
19920 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
19930 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e   the matching en
19940 74 72 79 0a 2a 2a 20 69 66 20 69 74 20 65 78 69  try.** if it exi
19950 73 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  sts..**.** This 
19960 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 75  instruction is u
19970 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
19980 20 74 68 65 20 49 4e 20 6f 70 65 72 61 74 6f 72   the IN operator
19990 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20 6c 65   where the.** le
199a0 66 74 2d 68 61 6e 64 20 73 69 64 65 20 69 73 20  ft-hand side is 
199b0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
199c0 6e 74 2e 20 20 50 31 20 6d 61 79 20 62 65 20 61  nt.  P1 may be a
199d0 20 74 72 75 65 20 69 6e 64 65 78 2c 20 6f 72 20   true index, or 
199e0 69 74 0a 2a 2a 20 6d 61 79 20 62 65 20 61 20 74  it.** may be a t
199f0 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 74  emporary index t
19a00 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 72 65  hat holds the re
19a10 73 75 6c 74 73 20 6f 66 20 74 68 65 20 53 45 4c  sults of the SEL
19a20 45 43 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ECT.** statement
19a30 2e 20 20 20 54 68 69 73 20 69 6e 73 74 72 75 63  .   This instruc
19a40 74 69 6f 6e 20 69 73 20 61 6c 73 6f 20 75 73 65  tion is also use
19a50 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
19a60 68 65 0a 2a 2a 20 44 49 53 54 49 4e 43 54 20 6b  he.** DISTINCT k
19a70 65 79 77 6f 72 64 20 69 6e 20 53 45 4c 45 43 54  eyword in SELECT
19a80 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
19a90 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
19aa0 69 6f 6e 20 63 68 65 63 6b 73 20 69 66 20 69 6e  ion checks if in
19ab0 64 65 78 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  dex P1 contains 
19ac0 61 20 72 65 63 6f 72 64 20 66 6f 72 20 77 68 69  a record for whi
19ad0 63 68 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74  ch .** the first
19ae0 20 4e 20 73 65 72 69 61 6c 69 7a 65 64 20 76 61   N serialized va
19af0 6c 75 65 73 20 65 78 61 63 74 6c 79 20 6d 61 74  lues exactly mat
19b00 63 68 20 74 68 65 20 4e 20 73 65 72 69 61 6c 69  ch the N seriali
19b10 7a 65 64 20 76 61 6c 75 65 73 0a 2a 2a 20 69 6e  zed values.** in
19b20 20 74 68 65 20 72 65 63 6f 72 64 20 69 6e 20 72   the record in r
19b30 65 67 69 73 74 65 72 20 50 33 2c 20 77 68 65 72  egister P3, wher
19b40 65 20 4e 20 69 73 20 74 68 65 20 74 6f 74 61 6c  e N is the total
19b50 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65   number of value
19b60 73 20 69 6e 0a 2a 2a 20 74 68 65 20 50 33 20 72  s in.** the P3 r
19b70 65 63 6f 72 64 20 28 74 68 65 20 50 33 20 72 65  ecord (the P3 re
19b80 63 6f 72 64 20 69 73 20 61 20 70 72 65 66 69 78  cord is a prefix
19b90 20 6f 66 20 74 68 65 20 50 31 20 72 65 63 6f 72   of the P1 recor
19ba0 64 29 2e 20 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  d). .**.** See a
19bb0 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 49  lso: NotFound, I
19bc0 73 55 6e 69 71 75 65 2c 20 4e 6f 74 45 78 69 73  sUnique, NotExis
19bd0 74 73 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ts.*/./* Opcode:
19be0 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
19bf0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67  P3 * *.**.** Reg
19c00 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
19c10 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
19c20 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
19c30 20 20 50 31 20 69 73 0a 2a 2a 20 61 6e 20 69 6e    P1 is.** an in
19c40 64 65 78 2e 20 20 49 66 20 6e 6f 20 65 6e 74 72  dex.  If no entr
19c50 79 20 65 78 69 73 74 73 20 69 6e 20 50 31 20 74  y exists in P1 t
19c60 68 61 74 20 6d 61 74 63 68 65 73 20 74 68 65 20  hat matches the 
19c70 62 6c 6f 62 20 74 68 65 6e 20 6a 75 6d 70 0a 2a  blob then jump.*
19c80 2a 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6e 20  * to P2.  If an 
19c90 65 6e 74 72 79 20 64 6f 65 73 20 65 78 69 73 74  entry does exist
19ca0 69 6e 67 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ing, fall throug
19cb0 68 2e 20 20 54 68 65 20 63 75 72 73 6f 72 20 69  h.  The cursor i
19cc0 73 20 6c 65 66 74 0a 2a 2a 20 70 6f 69 6e 74 69  s left.** pointi
19cd0 6e 67 20 74 6f 20 74 68 65 20 65 6e 74 72 79 20  ng to the entry 
19ce0 74 68 61 74 20 6d 61 74 63 68 65 73 2e 0a 2a 2a  that matches..**
19cf0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
19d00 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
19d10 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65  IsUnique.*/.case
19d20 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20   OP_NotFound:   
19d30 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
19d40 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e   */.case OP_Foun
19d50 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
19d60 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
19d70 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
19d80 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73   int alreadyExis
19d90 74 73 20 3d 20 30 3b 0a 20 20 56 64 62 65 43 75  ts = 0;.  VdbeCu
19da0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65  rsor *pC;.  asse
19db0 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d  rt( i>=0 && i<p-
19dc0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
19dd0 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69  sert( p->apCsr[i
19de0 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  ]!=0 );.  if( (p
19df0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29  C = p->apCsr[i])
19e00 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a  ->pCursor!=0 ){.
19e10 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
19e20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
19e30 2a 70 49 64 78 4b 65 79 3b 0a 0a 20 20 20 20 61  *pIdxKey;..    a
19e40 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
19e50 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  le==0 );.    ass
19e60 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
19e70 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
19e80 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c     pIdxKey = sql
19e90 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e  ite3VdbeRecordUn
19ea0 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66  pack(pC->pKeyInf
19eb0 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33  o, pIn3->n, pIn3
19ec0 2d 3e 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ->z,.           
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 20 20 20 20 20 20 20 20 20 20 61 54 65 6d 70             aTemp
19ef0 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d  Rec, sizeof(aTem
19f00 70 52 65 63 29 29 3b 0a 20 20 20 20 69 66 28 20  pRec));.    if( 
19f10 70 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20  pIdxKey==0 ){.  
19f20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
19f30 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
19f40 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46  Op->opcode==OP_F
19f50 6f 75 6e 64 20 29 7b 0a 20 20 20 20 20 20 70 49  ound ){.      pI
19f60 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c 3d 20  dxKey->flags |= 
19f70 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f  UNPACKED_PREFIX_
19f80 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20 20 20  MATCH;.    }.   
19f90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19fa0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
19fb0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49  (pC->pCursor, pI
19fc0 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65  dxKey, 0, 0, &re
19fd0 73 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  s);.    sqlite3V
19fe0 64 62 65 44 65 6c 65 74 65 55 6e 70 61 63 6b 65  dbeDeleteUnpacke
19ff0 64 52 65 63 6f 72 64 28 70 49 64 78 4b 65 79 29  dRecord(pIdxKey)
1a000 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
1a010 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1a020 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
1a030 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
1a040 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 20 20  = (res==0);.    
1a050 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1a060 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
1a070 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1a080 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
1a090 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1a0a0 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20  ==OP_Found ){.  
1a0b0 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69    if( alreadyExi
1a0c0 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  sts ) pc = pOp->
1a0d0 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  p2 - 1;.  }else{
1a0e0 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65 61 64  .    if( !alread
1a0f0 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70  yExists ) pc = p
1a100 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1a110 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1a120 70 63 6f 64 65 3a 20 49 73 55 6e 69 71 75 65 20  pcode: IsUnique 
1a130 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1a140 0a 2a 2a 20 54 68 65 20 50 33 20 72 65 67 69 73  .** The P3 regis
1a150 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  ter contains an 
1a160 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
1a170 75 6d 62 65 72 2e 20 20 43 61 6c 6c 20 74 68 69  umber.  Call thi
1a180 73 0a 2a 2a 20 72 65 63 6f 72 64 20 6e 75 6d 62  s.** record numb
1a190 65 72 20 52 2e 20 20 54 68 65 20 50 34 20 72 65  er R.  The P4 re
1a1a0 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  gister contains 
1a1b0 61 6e 20 69 6e 64 65 78 20 6b 65 79 20 63 72 65  an index key cre
1a1c0 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4d 61  ated.** using Ma
1a1d0 6b 65 52 65 63 6f 72 64 2e 20 20 43 61 6c 6c 20  keRecord.  Call 
1a1e0 69 74 20 4b 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  it K..**.** P1 i
1a1f0 73 20 61 6e 20 69 6e 64 65 78 2e 20 20 53 6f 20  s an index.  So 
1a200 69 74 20 68 61 73 20 6e 6f 20 64 61 74 61 20 61  it has no data a
1a210 6e 64 20 69 74 73 20 6b 65 79 20 63 6f 6e 73 69  nd its key consi
1a220 73 74 73 20 6f 66 20 61 0a 2a 2a 20 72 65 63 6f  sts of a.** reco
1a230 72 64 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  rd generated by 
1a240 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77 68  OP_MakeRecord wh
1a250 65 72 65 20 74 68 65 20 6c 61 73 74 20 66 69 65  ere the last fie
1a260 6c 64 20 69 73 20 74 68 65 20 0a 2a 2a 20 72 6f  ld is the .** ro
1a270 77 69 64 20 6f 66 20 74 68 65 20 65 6e 74 72 79  wid of the entry
1a280 20 74 68 61 74 20 74 68 65 20 69 6e 64 65 78 20   that the index 
1a290 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a 20 0a 2a  refers to..** .*
1a2a0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
1a2b0 6f 6e 20 61 73 6b 73 20 69 66 20 74 68 65 72 65  on asks if there
1a2c0 20 69 73 20 61 6e 20 65 6e 74 72 79 20 69 6e 20   is an entry in 
1a2d0 50 31 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20  P1 where the.** 
1a2e0 66 69 65 6c 64 73 20 6d 61 74 63 68 65 73 20 4b  fields matches K
1a2f0 20 62 75 74 20 74 68 65 20 72 6f 77 69 64 20 69   but the rowid i
1a300 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
1a310 20 52 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20   R..** If there 
1a320 69 73 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79  is no such entry
1a330 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  , then there is 
1a340 61 6e 20 69 6d 6d 65 64 69 61 74 65 0a 2a 2a 20  an immediate.** 
1a350 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66 20  jump to P2.  If 
1a360 61 6e 79 20 65 6e 74 72 79 20 64 6f 65 73 20 65  any entry does e
1a370 78 69 73 74 20 77 68 65 72 65 20 74 68 65 20 69  xist where the i
1a380 6e 64 65 78 20 73 74 72 69 6e 67 0a 2a 2a 20 6d  ndex string.** m
1a390 61 74 63 68 65 73 20 4b 20 62 75 74 20 74 68 65  atches K but the
1a3a0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
1a3b0 73 20 6e 6f 74 20 52 2c 20 74 68 65 6e 20 74 68  s not R, then th
1a3c0 65 20 72 65 63 6f 72 64 0a 2a 2a 20 6e 75 6d 62  e record.** numb
1a3d0 65 72 20 66 6f 72 20 74 68 61 74 20 65 6e 74 72  er for that entr
1a3e0 79 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74  y is written int
1a3f0 6f 20 50 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c  o P3 and control
1a400 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67  .** falls throug
1a410 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
1a420 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
1a430 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
1a440 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
1a450 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50  Found.*/.case OP
1a460 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20 20 20 20  _IsUnique: {    
1a470 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1a480 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f   */.  int i = pO
1a490 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72  p->p1;.  VdbeCur
1a4a0 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42 74 43 75  sor *pCx;.  BtCu
1a4b0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 4d  rsor *pCrsr;.  M
1a4c0 65 6d 20 2a 70 4b 3b 0a 20 20 69 36 34 20 52 3b  em *pK;.  i64 R;
1a4d0 0a 0a 20 20 2f 2a 20 50 6f 70 20 74 68 65 20 76  ..  /* Pop the v
1a4e0 61 6c 75 65 20 52 20 6f 66 66 20 74 68 65 20 74  alue R off the t
1a4f0 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b 0a  op of the stack.
1a500 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
1a510 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1a520 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74  NT32 );.  assert
1a530 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26  ( pOp->p4.i>0 &&
1a540 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e   pOp->p4.i<=p->n
1a550 4d 65 6d 20 29 3b 0a 20 20 70 4b 20 3d 20 26 70  Mem );.  pK = &p
1a560 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 34 2e 69  ->aMem[pOp->p4.i
1a570 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
1a580 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
1a590 6e 33 29 3b 0a 20 20 52 20 3d 20 70 49 6e 33 2d  n3);.  R = pIn3-
1a5a0 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  >u.i;.  assert( 
1a5b0 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
1a5c0 72 73 6f 72 20 29 3b 0a 20 20 70 43 78 20 3d 20  rsor );.  pCx = 
1a5d0 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1a5e0 73 73 65 72 74 28 20 70 43 78 21 3d 30 20 29 3b  ssert( pCx!=0 );
1a5f0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 78 2d 3e  .  pCrsr = pCx->
1a600 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
1a610 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 69  Crsr!=0 ){.    i
1a620 6e 74 20 72 65 73 3b 0a 20 20 20 20 69 36 34 20  nt res;.    i64 
1a630 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v;              
1a640 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65         /* The re
1a650 63 6f 72 64 20 6e 75 6d 62 65 72 20 74 68 61 74  cord number that
1a660 20 6d 61 74 63 68 65 73 20 4b 20 2a 2f 0a 20 20   matches K */.  
1a670 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1a680 20 2a 70 49 64 78 4b 65 79 3b 20 20 20 2f 2a 20   *pIdxKey;   /* 
1a690 55 6e 70 61 63 6b 65 64 20 76 65 72 73 69 6f 6e  Unpacked version
1a6a0 20 6f 66 20 50 34 20 2a 2f 0a 0a 20 20 20 20 2f   of P4 */..    /
1a6b0 2a 20 4d 61 6b 65 20 73 75 72 65 20 4b 20 69 73  * Make sure K is
1a6c0 20 61 20 73 74 72 69 6e 67 20 61 6e 64 20 6d 61   a string and ma
1a6d0 6b 65 20 7a 4b 65 79 20 70 6f 69 6e 74 20 74 6f  ke zKey point to
1a6e0 20 4b 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73   K.    */.    as
1a6f0 73 65 72 74 28 20 70 4b 2d 3e 66 6c 61 67 73 20  sert( pK->flags 
1a700 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
1a710 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69    pIdxKey = sqli
1a720 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70  te3VdbeRecordUnp
1a730 61 63 6b 28 70 43 78 2d 3e 70 4b 65 79 49 6e 66  ack(pCx->pKeyInf
1a740 6f 2c 20 70 4b 2d 3e 6e 2c 20 70 4b 2d 3e 7a 2c  o, pK->n, pK->z,
1a750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a770 20 20 20 20 20 20 20 61 54 65 6d 70 52 65 63 2c         aTempRec,
1a780 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63   sizeof(aTempRec
1a790 29 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  ));.    if( pIdx
1a7a0 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Key==0 ){.      
1a7b0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
1a7c0 20 7d 0a 20 20 20 20 70 49 64 78 4b 65 79 2d 3e   }.    pIdxKey->
1a7d0 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45  flags |= UNPACKE
1a7e0 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a  D_IGNORE_ROWID;.
1a7f0 0a 20 20 20 20 2f 2a 20 53 65 61 72 63 68 20 66  .    /* Search f
1a800 6f 72 20 61 6e 20 65 6e 74 72 79 20 69 6e 20 50  or an entry in P
1a810 31 20 77 68 65 72 65 20 61 6c 6c 20 62 75 74 20  1 where all but 
1a820 74 68 65 20 6c 61 73 74 20 72 6f 77 69 64 20 6d  the last rowid m
1a830 61 74 63 68 20 4b 0a 20 20 20 20 2a 2a 20 49 66  atch K.    ** If
1a840 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
1a850 68 20 65 6e 74 72 79 2c 20 6a 75 6d 70 20 69 6d  h entry, jump im
1a860 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1a870 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
1a880 72 74 28 20 70 43 78 2d 3e 64 65 66 65 72 72 65  rt( pCx->deferre
1a890 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
1a8a0 20 20 70 43 78 2d 3e 63 61 63 68 65 53 74 61 74    pCx->cacheStat
1a8b0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1a8c0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1a8d0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1a8e0 61 63 6b 65 64 28 70 43 72 73 72 2c 20 70 49 64  acked(pCrsr, pId
1a8f0 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73  xKey, 0, 0, &res
1a900 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
1a910 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1a920 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
1a930 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  eteUnpackedRecor
1a940 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20  d(pIdxKey);.    
1a950 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1a960 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1a970 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 29  .    if( res<0 )
1a980 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1a990 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
1a9a0 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
1a9b0 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
1a9c0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1a9d0 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 73  2 - 1;.        s
1a9e0 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
1a9f0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70  UnpackedRecord(p
1aa00 49 64 78 4b 65 79 29 3b 0a 20 20 20 20 20 20 20  IdxKey);.       
1aa10 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
1aa20 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73      }.    rc = s
1aa30 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
1aa40 43 6f 6d 70 61 72 65 28 70 43 78 2c 20 70 49 64  Compare(pCx, pId
1aa50 78 4b 65 79 2c 20 26 72 65 73 29 3b 20 0a 20 20  xKey, &res); .  
1aa60 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
1aa70 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  eteUnpackedRecor
1aa80 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20  d(pIdxKey);.    
1aa90 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1aaa0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1aab0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1aac0 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20   if( res>0 ){.  
1aad0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1aae0 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61   - 1;.      brea
1aaf0 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  k;.    }..    /*
1ab00 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20   At this point, 
1ab10 70 43 72 73 72 20 69 73 20 70 6f 69 6e 74 69 6e  pCrsr is pointin
1ab20 67 20 74 6f 20 61 6e 20 65 6e 74 72 79 20 69 6e  g to an entry in
1ab30 20 50 31 20 77 68 65 72 65 20 61 6c 6c 20 62 75   P1 where all bu
1ab40 74 0a 20 20 20 20 2a 2a 20 74 68 65 20 66 69 6e  t.    ** the fin
1ab50 61 6c 20 65 6e 74 72 79 20 28 74 68 65 20 72 6f  al entry (the ro
1ab60 77 69 64 29 20 6d 61 74 63 68 65 73 20 4b 2e 20  wid) matches K. 
1ab70 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
1ab80 20 74 68 65 0a 20 20 20 20 2a 2a 20 66 69 6e 61   the.    ** fina
1ab90 6c 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 69  l rowid column i
1aba0 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  s different from
1abb0 20 52 2e 20 20 49 66 20 69 74 20 65 71 75 61 6c   R.  If it equal
1abc0 73 20 52 20 74 68 65 6e 20 6a 75 6d 70 0a 20 20  s R then jump.  
1abd0 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79    ** immediately
1abe0 20 74 6f 20 50 32 2e 0a 20 20 20 20 2a 2f 0a 20   to P2..    */. 
1abf0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
1ac00 64 62 65 49 64 78 52 6f 77 69 64 28 70 43 72 73  dbeIdxRowid(pCrs
1ac10 72 2c 20 26 76 29 3b 0a 20 20 20 20 69 66 28 20  r, &v);.    if( 
1ac20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1ac30 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1ac40 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1ac50 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 76 3d      }.    if( v=
1ac60 3d 52 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  =R ){.      pc =
1ac70 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1ac80 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
1ac90 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 69 6e  ..    /* The fin
1aca0 61 6c 20 76 61 72 69 6e 74 20 6f 66 20 74 68 65  al varint of the
1acb0 20 6b 65 79 20 69 73 20 64 69 66 66 65 72 65 6e   key is differen
1acc0 74 20 66 72 6f 6d 20 52 2e 20 20 53 74 6f 72 65  t from R.  Store
1acd0 20 69 74 20 62 61 63 6b 0a 20 20 20 20 2a 2a 20   it back.    ** 
1ace0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 52 33  into register R3
1acf0 2e 20 20 28 54 68 65 20 72 65 63 6f 72 64 20 6e  .  (The record n
1ad00 75 6d 62 65 72 20 6f 66 20 61 6e 20 65 6e 74 72  umber of an entr
1ad10 79 20 74 68 61 74 20 76 69 6f 6c 61 74 65 73 0a  y that violates.
1ad20 20 20 20 20 2a 2a 20 61 20 55 4e 49 51 55 45 20      ** a UNIQUE 
1ad30 63 6f 6e 73 74 72 61 69 6e 74 2e 29 0a 20 20 20  constraint.).   
1ad40 20 2a 2f 0a 20 20 20 20 70 49 6e 33 2d 3e 75 2e   */.    pIn3->u.
1ad50 69 20 3d 20 76 3b 0a 20 20 20 20 61 73 73 65 72  i = v;.    asser
1ad60 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  t( pIn3->flags&M
1ad70 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 7d 0a 20 20  EM_Int );.  }.  
1ad80 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1ad90 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50  ode: NotExists P
1ada0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1adb0 2a 20 55 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  * Use the conten
1adc0 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
1add0 20 61 73 20 61 20 69 6e 74 65 67 65 72 20 6b 65   as a integer ke
1ade0 79 2e 20 20 49 66 20 61 20 72 65 63 6f 72 64 20  y.  If a record 
1adf0 0a 2a 2a 20 77 69 74 68 20 74 68 61 74 20 6b 65  .** with that ke
1ae00 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  y does not exist
1ae10 20 69 6e 20 74 61 62 6c 65 20 6f 66 20 50 31 2c   in table of P1,
1ae20 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1ae30 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63  . .** If the rec
1ae40 6f 72 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  ord does exist, 
1ae50 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e 20  then fall thru. 
1ae60 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
1ae70 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67  eft .** pointing
1ae80 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 69   to the record i
1ae90 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a  f it exists..**.
1aea0 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
1aeb0 65 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 6f  e between this o
1aec0 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f 74  peration and Not
1aed0 46 6f 75 6e 64 20 69 73 20 74 68 61 74 20 74 68  Found is that th
1aee0 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20  is.** operation 
1aef0 61 73 73 75 6d 65 73 20 74 68 65 20 6b 65 79 20  assumes the key 
1af00 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e  is an integer an
1af10 64 20 74 68 61 74 20 50 31 20 69 73 20 61 20 74  d that P1 is a t
1af20 61 62 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a 20  able whereas.** 
1af30 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75 6d 65 73  NotFound assumes
1af40 20 6b 65 79 20 69 73 20 61 20 62 6c 6f 62 20 63   key is a blob c
1af50 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20  onstructed from 
1af60 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a 2a  MakeRecord and.*
1af70 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78  * P1 is an index
1af80 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1af90 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1afa0 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63  d, IsUnique.*/.c
1afb0 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ase OP_NotExists
1afc0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
1afd0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
1afe0 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
1aff0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1b000 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1b010 72 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  r;.  assert( i>=
1b020 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
1b030 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1b040 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b  ->apCsr[i]!=0 );
1b050 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20  .  if( (pCrsr = 
1b060 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  (pC = p->apCsr[i
1b070 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20  ])->pCursor)!=0 
1b080 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 20 3d  ){.    int res =
1b090 20 30 3b 0a 20 20 20 20 75 36 34 20 69 4b 65 79   0;.    u64 iKey
1b0a0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
1b0b0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1b0c0 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Int );.    asser
1b0d0 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e  t( p->apCsr[i]->
1b0e0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 69  isTable );.    i
1b0f0 4b 65 79 20 3d 20 69 6e 74 54 6f 4b 65 79 28 70  Key = intToKey(p
1b100 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 72  In3->u.i);.    r
1b110 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1b120 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1b130 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30  Crsr, 0, iKey, 0
1b140 2c 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e  ,&res);.    pC->
1b150 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33  lastRowid = pIn3
1b160 2d 3e 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72  ->u.i;.    pC->r
1b170 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65  owidIsValid = re
1b180 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70  s==0 ?1:0;.    p
1b190 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1b1a0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
1b1b0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1b1c0 45 3b 0a 20 20 20 20 69 66 28 20 72 65 73 21 3d  E;.    if( res!=
1b1d0 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  0 ){.      pc = 
1b1e0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1b1f0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72     assert( pC->r
1b200 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29  owidIsValid==0 )
1b210 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  ;.    }.  }else 
1b220 69 66 28 20 21 70 43 2d 3e 70 73 65 75 64 6f 54  if( !pC->pseudoT
1b230 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54  able ){.    /* T
1b240 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e  his happens when
1b250 20 61 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 6f   an attempt to o
1b260 70 65 6e 20 61 20 72 65 61 64 20 63 75 72 73 6f  pen a read curso
1b270 72 20 6f 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a  r on the .    **
1b280 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
1b290 61 62 6c 65 20 72 65 74 75 72 6e 73 20 53 51 4c  able returns SQL
1b2a0 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a  ITE_EMPTY..    *
1b2b0 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  /.    assert( pC
1b2c0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
1b2d0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1b2e0 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  1;.    assert( p
1b2f0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d  C->rowidIsValid=
1b300 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  =0 );.  }.  brea
1b310 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b320 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20   Sequence P1 P2 
1b330 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64  * * *.**.** Find
1b340 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61   the next availa
1b350 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  ble sequence num
1b360 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ber for cursor P
1b370 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  1..** Write the 
1b380 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1b390 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
1b3a0 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63  ..** The sequenc
1b3b0 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20  e number on the 
1b3c0 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d  cursor is increm
1b3d0 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73  ented after this
1b3e0 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
1b3f0 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65    .*/.case OP_Se
1b400 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  quence: {       
1b410 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1b420 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
1b430 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  i = pOp->p1;.  a
1b440 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
1b450 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1b460 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
1b470 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75  r[i]!=0 );.  pOu
1b480 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73  t->u.i = p->apCs
1b490 72 5b 69 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b  r[i]->seqCount++
1b4a0 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
1b4b0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
1b4c0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
1b4d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f  /* Opcode: NewRo
1b4e0 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  wid P1 P2 P3 * *
1b4f0 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77  .**.** Get a new
1b500 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
1b510 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72  number (a.k.a "r
1b520 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74  owid") used as t
1b530 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c  he key to a tabl
1b540 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64  e..** The record
1b550 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70   number is not p
1b560 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61  reviously used a
1b570 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64  s a key in the d
1b580 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65  atabase.** table
1b590 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
1b5a0 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20  points to.  The 
1b5b0 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
1b5c0 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  r is written.** 
1b5d0 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73  written to regis
1b5e0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
1b5f0 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73   P3>0 then P3 is
1b600 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
1b610 20 68 6f 6c 64 73 20 74 68 65 20 6c 61 72 67 65   holds the large
1b620 73 74 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a  st previously.**
1b630 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
1b640 64 20 6e 75 6d 62 65 72 2e 20 20 4e 6f 20 6e 65  d number.  No ne
1b650 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73  w record numbers
1b660 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 74 6f 20   are allowed to 
1b670 62 65 20 6c 65 73 73 0a 2a 2a 20 74 68 61 6e 20  be less.** than 
1b680 74 68 69 73 20 76 61 6c 75 65 2e 20 20 57 68 65  this value.  Whe
1b690 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61  n this value rea
1b6a0 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d  ches its maximum
1b6b0 2c 20 61 20 53 51 4c 49 54 45 5f 46 55 4c 4c 0a  , a SQLITE_FULL.
1b6c0 2a 2a 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65  ** error is gene
1b6d0 72 61 74 65 64 2e 20 20 54 68 65 20 50 33 20 72  rated.  The P3 r
1b6e0 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74  egister is updat
1b6f0 65 64 20 77 69 74 68 20 74 68 65 20 67 65 6e 65  ed with the gene
1b700 72 61 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64 20  rated.** record 
1b710 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 50 33  number.  This P3
1b720 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73   mechanism is us
1b730 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65  ed to help imple
1b740 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f  ment the.** AUTO
1b750 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72  INCREMENT featur
1b760 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  e..*/.case OP_Ne
1b770 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  wRowid: {       
1b780 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1b790 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
1b7a0 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  i = pOp->p1;.  i
1b7b0 36 34 20 76 20 3d 20 30 3b 0a 20 20 56 64 62 65  64 v = 0;.  Vdbe
1b7c0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73  Cursor *pC;.  as
1b7d0 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1b7e0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1b7f0 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1b800 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  [i]!=0 );.  if( 
1b810 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  (pC = p->apCsr[i
1b820 5d 29 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 20 29  ])->pCursor==0 )
1b830 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72  {.    /* The zer
1b840 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  o initialization
1b850 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68   above is all th
1b860 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a  at is needed */.
1b870 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
1b880 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f  The next rowid o
1b890 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
1b8a0 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73  (different terms
1b8b0 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20   for the same.  
1b8c0 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f    ** thing) is o
1b8d0 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f  btained in a two
1b8e0 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e  -step algorithm.
1b8f0 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46  .    **.    ** F
1b900 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20  irst we attempt 
1b910 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67  to find the larg
1b920 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
1b930 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20  id and add one. 
1b940 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20     ** to that.  
1b950 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65  But if the large
1b960 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
1b970 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65  d is already the
1b980 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20   maximum.    ** 
1b990 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
1b9a0 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c  , we have to fal
1b9b0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
1b9c0 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70   second.    ** p
1b9d0 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67  robabilistic alg
1b9e0 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20  orithm.    **.  
1b9f0 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
1ba00 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20  algorithm is to 
1ba10 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61  select a rowid a
1ba20 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65  t random and see
1ba30 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c   if.    ** it al
1ba40 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20  ready exists in 
1ba50 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69  the table.  If i
1ba60 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
1ba70 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a  , we have.    **
1ba80 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20   succeeded.  If 
1ba90 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  the random rowid
1baa0 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20   does exist, we 
1bab0 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65  select a new one
1bac0 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20  .    ** and try 
1bad0 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30  again, up to 100
1bae0 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2a 0a  0 times..    **.
1baf0 20 20 20 20 2a 2a 20 46 6f 72 20 61 20 74 61 62      ** For a tab
1bb00 6c 65 20 77 69 74 68 20 6c 65 73 73 20 74 68 61  le with less tha
1bb10 6e 20 32 20 62 69 6c 6c 69 6f 6e 20 65 6e 74 72  n 2 billion entr
1bb20 69 65 73 2c 20 74 68 65 20 70 72 6f 62 61 62 69  ies, the probabi
1bb30 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 6e  lity.    ** of n
1bb40 6f 74 20 66 69 6e 64 69 6e 67 20 61 20 75 6e 75  ot finding a unu
1bb50 73 65 64 20 72 6f 77 69 64 20 69 73 20 61 62 6f  sed rowid is abo
1bb60 75 74 20 31 2e 30 65 2d 33 30 30 2e 20 20 54 68  ut 1.0e-300.  Th
1bb70 69 73 20 69 73 20 61 20 0a 20 20 20 20 2a 2a 20  is is a .    ** 
1bb80 6e 6f 6e 2d 7a 65 72 6f 20 70 72 6f 62 61 62 69  non-zero probabi
1bb90 6c 69 74 79 2c 20 62 75 74 20 69 74 20 69 73 20  lity, but it is 
1bba0 73 74 69 6c 6c 20 76 61 6e 69 73 68 69 6e 67 6c  still vanishingl
1bbb0 79 20 73 6d 61 6c 6c 20 61 6e 64 20 73 68 6f 75  y small and shou
1bbc0 6c 64 0a 20 20 20 20 2a 2a 20 6e 65 76 65 72 20  ld.    ** never 
1bbd0 63 61 75 73 65 20 61 20 70 72 6f 62 6c 65 6d 2e  cause a problem.
1bbe0 20 20 59 6f 75 20 61 72 65 20 6d 75 63 68 2c 20    You are much, 
1bbf0 6d 75 63 68 20 6d 6f 72 65 20 6c 69 6b 65 6c 79  much more likely
1bc00 20 74 6f 20 68 61 76 65 20 61 0a 20 20 20 20 2a   to have a.    *
1bc10 2a 20 68 61 72 64 77 61 72 65 20 66 61 69 6c 75  * hardware failu
1bc20 72 65 20 74 68 61 6e 20 66 6f 72 20 74 68 69 73  re than for this
1bc30 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 66 61   algorithm to fa
1bc40 69 6c 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  il..    **.    *
1bc50 2a 20 54 68 65 20 61 6e 61 6c 79 73 69 73 20 69  * The analysis i
1bc60 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 70  n the previous p
1bc70 61 72 61 67 72 61 70 68 20 61 73 73 75 6d 65 73  aragraph assumes
1bc80 20 74 68 61 74 20 79 6f 75 20 68 61 76 65 20 61   that you have a
1bc90 20 67 6f 6f 64 0a 20 20 20 20 2a 2a 20 73 6f 75   good.    ** sou
1bca0 72 63 65 20 6f 66 20 72 61 6e 64 6f 6d 20 6e 75  rce of random nu
1bcb0 6d 62 65 72 73 2e 20 20 49 73 20 61 20 6c 69 62  mbers.  Is a lib
1bcc0 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 20 6c 69  rary function li
1bcd0 6b 65 20 6c 72 61 6e 64 34 38 28 29 0a 20 20 20  ke lrand48().   
1bce0 20 2a 2a 20 67 6f 6f 64 20 65 6e 6f 75 67 68 3f   ** good enough?
1bcf0 20 20 4d 61 79 62 65 2e 20 4d 61 79 62 65 20 6e    Maybe. Maybe n
1bd00 6f 74 2e 20 49 74 27 73 20 68 61 72 64 20 74 6f  ot. It's hard to
1bd10 20 6b 6e 6f 77 20 77 68 65 74 68 65 72 20 74 68   know whether th
1bd20 65 72 65 0a 20 20 20 20 2a 2a 20 6d 69 67 68 74  ere.    ** might
1bd30 20 62 65 20 73 75 62 74 6c 65 20 62 75 67 73 20   be subtle bugs 
1bd40 69 73 20 73 6f 6d 65 20 69 6d 70 6c 65 6d 65 6e  is some implemen
1bd50 74 61 74 69 6f 6e 73 20 6f 66 20 6c 72 61 6e 64  tations of lrand
1bd60 34 38 28 29 20 74 68 61 74 0a 20 20 20 20 2a 2a  48() that.    **
1bd70 20 63 6f 75 6c 64 20 63 61 75 73 65 20 70 72 6f   could cause pro
1bd80 62 6c 65 6d 73 2e 20 54 6f 20 61 76 6f 69 64 20  blems. To avoid 
1bd90 75 6e 63 65 72 74 61 69 6e 74 79 2c 20 53 51 4c  uncertainty, SQL
1bda0 69 74 65 20 75 73 65 73 20 69 74 73 20 6f 77 6e  ite uses its own
1bdb0 20 0a 20 20 20 20 2a 2a 20 72 61 6e 64 6f 6d 20   .    ** random 
1bdc0 6e 75 6d 62 65 72 20 67 65 6e 65 72 61 74 6f 72  number generator
1bdd0 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 52 43   based on the RC
1bde0 34 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20  4 algorithm..   
1bdf0 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 6f 20 70 72   **.    ** To pr
1be00 6f 6d 6f 74 65 20 6c 6f 63 61 6c 69 74 79 20 6f  omote locality o
1be10 66 20 72 65 66 65 72 65 6e 63 65 20 66 6f 72 20  f reference for 
1be20 72 65 70 65 74 69 74 69 76 65 20 69 6e 73 65 72  repetitive inser
1be30 74 73 2c 20 74 68 65 0a 20 20 20 20 2a 2a 20 66  ts, the.    ** f
1be40 69 72 73 74 20 66 65 77 20 61 74 74 65 6d 70 74  irst few attempt
1be50 73 20 61 74 20 63 68 6f 6f 73 69 6e 67 20 61 20  s at choosing a 
1be60 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 70 69 63  random rowid pic
1be70 6b 20 76 61 6c 75 65 73 20 6a 75 73 74 20 61 20  k values just a 
1be80 6c 69 74 74 6c 65 0a 20 20 20 20 2a 2a 20 6c 61  little.    ** la
1be90 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 70 72  rger than the pr
1bea0 65 76 69 6f 75 73 20 72 6f 77 69 64 2e 20 20 54  evious rowid.  T
1beb0 68 69 73 20 68 61 73 20 62 65 65 6e 20 73 68 6f  his has been sho
1bec0 77 6e 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 6c  wn experimentall
1bed0 79 0a 20 20 20 20 2a 2a 20 74 6f 20 64 6f 75 62  y.    ** to doub
1bee0 6c 65 20 74 68 65 20 73 70 65 65 64 20 6f 66 20  le the speed of 
1bef0 74 68 65 20 43 4f 50 59 20 6f 70 65 72 61 74 69  the COPY operati
1bf00 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  on..    */.    i
1bf10 6e 74 20 72 65 73 2c 20 72 78 3d 53 51 4c 49 54  nt res, rx=SQLIT
1bf20 45 5f 4f 4b 2c 20 63 6e 74 3b 0a 20 20 20 20 69  E_OK, cnt;.    i
1bf30 36 34 20 78 3b 0a 20 20 20 20 63 6e 74 20 3d 20  64 x;.    cnt = 
1bf40 30 3b 0a 20 20 20 20 69 66 28 20 28 73 71 6c 69  0;.    if( (sqli
1bf50 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70 43  te3BtreeFlags(pC
1bf60 2d 3e 70 43 75 72 73 6f 72 29 26 28 42 54 52 45  ->pCursor)&(BTRE
1bf70 45 5f 49 4e 54 4b 45 59 7c 42 54 52 45 45 5f 5a  E_INTKEY|BTREE_Z
1bf80 45 52 4f 44 41 54 41 29 29 20 21 3d 0a 20 20 20  ERODATA)) !=.   
1bf90 20 20 20 20 20 20 20 42 54 52 45 45 5f 49 4e 54         BTREE_INT
1bfa0 4b 45 59 20 29 7b 0a 20 20 20 20 20 20 72 63 20  KEY ){.      rc 
1bfb0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
1bfc0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
1bfd0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1bfe0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
1bff0 61 73 73 65 72 74 28 20 28 73 71 6c 69 74 65 33  assert( (sqlite3
1c000 42 74 72 65 65 46 6c 61 67 73 28 70 43 2d 3e 70  BtreeFlags(pC->p
1c010 43 75 72 73 6f 72 29 20 26 20 42 54 52 45 45 5f  Cursor) & BTREE_
1c020 49 4e 54 4b 45 59 29 21 3d 30 20 29 3b 0a 20 20  INTKEY)!=0 );.  
1c030 20 20 61 73 73 65 72 74 28 20 28 73 71 6c 69 74    assert( (sqlit
1c040 65 33 42 74 72 65 65 46 6c 61 67 73 28 70 43 2d  e3BtreeFlags(pC-
1c050 3e 70 43 75 72 73 6f 72 29 20 26 20 42 54 52 45  >pCursor) & BTRE
1c060 45 5f 5a 45 52 4f 44 41 54 41 29 3d 3d 30 20 29  E_ZERODATA)==0 )
1c070 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
1c080 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
1c090 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
1c0a0 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
1c0b0 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
1c0c0 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
1c0d0 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
1c0e0 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
1c0f0 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
1c100 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
1c110 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
1c120 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
1c130 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
1c140 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
1c150 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
1c160 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
1c170 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
1c180 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
1c190 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
1c1a0 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
1c1b0 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
1c1c0 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
1c1d0 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
1c1e0 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
1c1f0 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
1c200 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 69  Rowid ){.      i
1c210 66 28 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64  f( pC->nextRowid
1c220 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Valid ){.       
1c230 20 76 20 3d 20 70 43 2d 3e 6e 65 78 74 52 6f 77   v = pC->nextRow
1c240 69 64 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  id;.      }else{
1c250 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1c260 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
1c270 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1c280 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1c290 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1c2a0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
1c2b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1c2c0 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
1c2d0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
1c2e0 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b            v = 1;
1c2f0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1c300 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1c310 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
1c320 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
1c330 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 6b 65            v = ke
1c340 79 54 6f 49 6e 74 28 76 29 3b 0a 20 20 20 20 20  yToInt(v);.     
1c350 20 20 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f       if( v==MAX_
1c360 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20  ROWID ){.       
1c370 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
1c380 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
1c390 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1c3a0 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20            v++;. 
1c3b0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1c3c0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69     }.      }..#i
1c3d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1c3e0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
1c3f0 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
1c400 33 20 29 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d  3 ){.        Mem
1c410 20 2a 70 4d 65 6d 3b 0a 20 20 20 20 20 20 20 20   *pMem;.        
1c420 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1c430 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
1c440 3e 6e 4d 65 6d 20 29 3b 20 2f 2a 20 50 33 20 69  >nMem ); /* P3 i
1c450 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
1c460 20 63 65 6c 6c 20 2a 2f 0a 20 20 20 20 20 20 20   cell */.       
1c470 20 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d   pMem = &p->aMem
1c480 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 09 52 45 47 49  [pOp->p3];..REGI
1c490 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
1c4a0 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
1c4b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1c4c0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
1c4d0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1c4e0 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
1c4f0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
1c500 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
1c510 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
1c520 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65  .        if( pMe
1c530 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
1c540 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
1c550 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1c560 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1c570 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 20  _FULL;.         
1c580 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1c590 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1c5a0 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
1c5b0 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b  v<pMem->u.i+1 ){
1c5c0 0a 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 70  .          v = p
1c5d0 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20  Mem->u.i + 1;.  
1c5e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1c5f0 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pMem->u.i = v;. 
1c600 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20       }.#endif.. 
1c610 20 20 20 20 20 69 66 28 20 76 3c 4d 41 58 5f 52       if( v<MAX_R
1c620 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20  OWID ){.        
1c630 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c  pC->nextRowidVal
1c640 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
1c650 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 20 3d 20  pC->nextRowid = 
1c660 76 2b 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  v+1;.      }else
1c670 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6e 65  {.        pC->ne
1c680 78 74 52 6f 77 69 64 56 61 6c 69 64 20 3d 20 30  xtRowidValid = 0
1c690 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1c6a0 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52      if( pC->useR
1c6b0 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
1c6c0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1c6d0 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 53 51  >p3==0 );  /* SQ
1c6e0 4c 49 54 45 5f 46 55 4c 4c 20 6d 75 73 74 20 68  LITE_FULL must h
1c6f0 61 76 65 20 6f 63 63 75 72 72 65 64 20 70 72 69  ave occurred pri
1c700 6f 72 20 74 6f 20 74 68 69 73 20 2a 2f 0a 20 20  or to this */.  
1c710 20 20 20 20 76 20 3d 20 64 62 2d 3e 70 72 69 6f      v = db->prio
1c720 72 4e 65 77 52 6f 77 69 64 3b 0a 20 20 20 20 20  rNewRowid;.     
1c730 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20   cnt = 0;.      
1c740 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  do{.        if( 
1c750 63 6e 74 3d 3d 30 20 26 26 20 28 76 26 30 78 66  cnt==0 && (v&0xf
1c760 66 66 66 66 66 29 3d 3d 76 20 29 7b 0a 20 20 20  fffff)==v ){.   
1c770 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20         v++;.    
1c780 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1c790 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e       sqlite3_ran
1c7a0 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76  domness(sizeof(v
1c7b0 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  ), &v);.        
1c7c0 20 20 69 66 28 20 63 6e 74 3c 35 20 29 20 76 20    if( cnt<5 ) v 
1c7d0 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20  &= 0xffffff;.   
1c7e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
1c7f0 66 28 20 76 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  f( v==0 ) contin
1c800 75 65 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20  ue;.        x = 
1c810 69 6e 74 54 6f 4b 65 79 28 76 29 3b 0a 20 20 20  intToKey(v);.   
1c820 20 20 20 20 20 72 78 20 3d 20 73 71 6c 69 74 65       rx = sqlite
1c830 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1c840 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1c850 2c 20 30 2c 20 28 75 36 34 29 78 2c 20 30 2c 20  , 0, (u64)x, 0, 
1c860 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 63  &res);.        c
1c870 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68 69  nt++;.      }whi
1c880 6c 65 28 20 63 6e 74 3c 31 30 30 20 26 26 20 72  le( cnt<100 && r
1c890 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  x==SQLITE_OK && 
1c8a0 72 65 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  res==0 );.      
1c8b0 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69  db->priorNewRowi
1c8c0 64 20 3d 20 76 3b 0a 20 20 20 20 20 20 69 66 28  d = v;.      if(
1c8d0 20 72 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rx==SQLITE_OK &
1c8e0 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
1c8f0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1c900 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 67 6f  FULL;.        go
1c910 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1c920 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
1c930 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77     }.    pC->row
1c940 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1c950 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
1c960 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
1c970 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1c980 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1c990 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
1c9a0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
1c9b0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
1c9c0 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
1c9d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
1c9e0 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
1c9f0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20  .**.** Write an 
1ca00 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74  entry into the t
1ca10 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50  able of cursor P
1ca20 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20  1.  A new entry 
1ca30 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66  is.** created if
1ca40 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65   it doesn't alre
1ca50 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65  ady exist or the
1ca60 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69   data for an exi
1ca70 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69  sting.** entry i
1ca80 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20  s overwritten.  
1ca90 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20  The data is the 
1caa0 76 61 6c 75 65 20 73 74 6f 72 65 64 20 72 65 67  value stored reg
1cab0 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  ister.** number 
1cac0 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73  P2. The key is s
1cad0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1cae0 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75  r P3. The key mu
1caf0 73 74 0a 2a 2a 20 62 65 20 61 6e 20 69 6e 74 65  st.** be an inte
1cb00 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ger..**.** If th
1cb10 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
1cb20 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
1cb30 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
1cb40 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
1cb50 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
1cb60 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
1cb70 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
1cb80 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
1cb90 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
1cba0 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
1cbb0 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
1cbc0 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
1cbd0 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
1cbe0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1cbf0 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
1cc00 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
1cc10 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 61  ified)..**.** Pa
1cc20 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70  rameter P4 may p
1cc30 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67  oint to a string
1cc40 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1cc50 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a  table-name, or.*
1cc60 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49  * may be NULL. I
1cc70 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f it is not NULL
1cc80 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74  , then the updat
1cc90 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69  e-hook .** (sqli
1cca0 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62  te3.xUpdateCallb
1ccb0 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ack) is invoked 
1ccc0 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63  following a succ
1ccd0 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a  essful insert..*
1cce0 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f  *.** (WARNING/TO
1ccf0 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70  DO: If P1 is a p
1cd00 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64  seudo-cursor and
1cd10 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c   P2 is dynamical
1cd20 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
1cd30 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20   then ownership 
1cd40 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65  of P2 is transfe
1cd50 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75  rred to the pseu
1cd60 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64  do-cursor.** and
1cd70 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63   register P2 bec
1cd80 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20  omes ephemeral. 
1cd90 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
1cda0 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a  s changed, the.*
1cdb0 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  * value of regis
1cdc0 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e  ter P2 will then
1cdd0 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73   change.  Make s
1cde0 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f  ure this does no
1cdf0 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70  t.** cause any p
1ce00 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20  roblems.).**.** 
1ce10 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1ce20 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74   only works on t
1ce30 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69  ables.  The equi
1ce40 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
1ce50 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65  on.** for indice
1ce60 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72  s is OP_IdxInser
1ce70 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  t..*/.case OP_In
1ce80 73 65 72 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  sert: {.  Mem *p
1ce90 44 61 74 61 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  Data = &p->aMem[
1cea0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 4d 65 6d 20  pOp->p2];.  Mem 
1ceb0 2a 70 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pKey = &p->aMem
1cec0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 69 36  [pOp->p3];..  i6
1ced0 34 20 69 4b 65 79 3b 20 20 20 2f 2a 20 54 68 65  4 iKey;   /* The
1cee0 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f   integer ROWID o
1cef0 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65  r key for the re
1cf00 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
1cf10 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  ted */.  int i =
1cf20 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65   pOp->p1;.  Vdbe
1cf30 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73  Cursor *pC;.  as
1cf40 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1cf50 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1cf60 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
1cf70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1cf80 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1cf90 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 7c 7c  C->pCursor!=0 ||
1cfa0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1cfb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
1cfc0 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
1cfd0 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
1cfe0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1cff0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
1d000 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
1d010 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
1d020 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79  CE(pOp->p3, pKey
1d030 29 3b 0a 0a 20 20 69 4b 65 79 20 3d 20 69 6e 74  );..  iKey = int
1d040 54 6f 4b 65 79 28 70 4b 65 79 2d 3e 75 2e 69 29  ToKey(pKey->u.i)
1d050 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
1d060 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
1d070 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
1d080 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
1d090 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
1d0a0 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  D ) db->lastRowi
1d0b0 64 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  d = pKey->u.i;. 
1d0c0 20 69 66 28 20 70 43 2d 3e 6e 65 78 74 52 6f 77   if( pC->nextRow
1d0d0 69 64 56 61 6c 69 64 20 26 26 20 70 4b 65 79 2d  idValid && pKey-
1d0e0 3e 75 2e 69 3e 3d 70 43 2d 3e 6e 65 78 74 52 6f  >u.i>=pC->nextRo
1d0f0 77 69 64 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e  wid ){.    pC->n
1d100 65 78 74 52 6f 77 69 64 56 61 6c 69 64 20 3d 20  extRowidValid = 
1d110 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 44 61  0;.  }.  if( pDa
1d120 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
1d130 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74  Null ){.    pDat
1d140 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44  a->z = 0;.    pD
1d150 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65  ata->n = 0;.  }e
1d160 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
1d170 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
1d180 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
1d190 72 29 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  r) );.  }.  if( 
1d1a0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20  pC->pseudoTable 
1d1b0 29 7b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  ){.    if( !pC->
1d1c0 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65  ephemPseudoTable
1d1d0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1d1e0 33 44 62 46 72 65 65 28 64 62 2c 20 70 43 2d 3e  3DbFree(db, pC->
1d1f0 70 44 61 74 61 29 3b 0a 20 20 20 20 7d 0a 20 20  pData);.    }.  
1d200 20 20 70 43 2d 3e 69 4b 65 79 20 3d 20 69 4b 65    pC->iKey = iKe
1d210 79 3b 0a 20 20 20 20 70 43 2d 3e 6e 44 61 74 61  y;.    pC->nData
1d220 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 20   = pData->n;.   
1d230 20 69 66 28 20 70 44 61 74 61 2d 3e 7a 3d 3d 70   if( pData->z==p
1d240 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 7c 7c  Data->zMalloc ||
1d250 20 70 43 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f   pC->ephemPseudo
1d260 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 70  Table ){.      p
1d270 43 2d 3e 70 44 61 74 61 20 3d 20 70 44 61 74 61  C->pData = pData
1d280 2d 3e 7a 3b 0a 20 20 20 20 20 20 69 66 28 20 21  ->z;.      if( !
1d290 70 43 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f 54  pC->ephemPseudoT
1d2a0 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 20 20  able ){.        
1d2b0 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 3d 20  pData->flags &= 
1d2c0 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 20 20  ~MEM_Dyn;.      
1d2d0 20 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 7c    pData->flags |
1d2e0 3d 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20  = MEM_Ephem;.   
1d2f0 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 4d 61 6c       pData->zMal
1d300 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  loc = 0;.      }
1d310 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1d320 20 20 70 43 2d 3e 70 44 61 74 61 20 3d 20 73 71    pC->pData = sq
1d330 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 70 43 2d  lite3Malloc( pC-
1d340 3e 6e 44 61 74 61 2b 32 20 29 3b 0a 20 20 20 20  >nData+2 );.    
1d350 20 20 69 66 28 20 21 70 43 2d 3e 70 44 61 74 61    if( !pC->pData
1d360 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1d370 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 43 2d        memcpy(pC-
1d380 3e 70 44 61 74 61 2c 20 70 44 61 74 61 2d 3e 7a  >pData, pData->z
1d390 2c 20 70 43 2d 3e 6e 44 61 74 61 29 3b 0a 20 20  , pC->nData);.  
1d3a0 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70 43      pC->pData[pC
1d3b0 2d 3e 6e 44 61 74 61 5d 20 3d 20 30 3b 0a 20 20  ->nData] = 0;.  
1d3c0 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70 43      pC->pData[pC
1d3d0 2d 3e 6e 44 61 74 61 2b 31 5d 20 3d 20 30 3b 0a  ->nData+1] = 0;.
1d3e0 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 6e 75      }.    pC->nu
1d3f0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 7d 65 6c  llRow = 0;.  }el
1d400 73 65 7b 0a 20 20 20 20 69 6e 74 20 6e 5a 65 72  se{.    int nZer
1d410 6f 3b 0a 20 20 20 20 69 66 28 20 70 44 61 74 61  o;.    if( pData
1d420 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
1d430 72 6f 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72  ro ){.      nZer
1d440 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65  o = pData->u.nZe
1d450 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ro;.    }else{. 
1d460 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a       nZero = 0;.
1d470 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73      }.    rc = s
1d480 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
1d490 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  t(pC->pCursor, 0
1d4a0 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20  , iKey,.        
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4c0 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44      pData->z, pD
1d4d0 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20  ata->n, nZero,. 
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4f0 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d 3e             pOp->
1d500 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45  p5 & OPFLAG_APPE
1d510 4e 44 29 3b 0a 20 20 7d 0a 20 20 0a 20 20 70 43  ND);.  }.  .  pC
1d520 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1d530 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   0;.  pC->deferr
1d540 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1d550 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1d560 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
1d570 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
1d580 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
1d590 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
1d5a0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1d5b0 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
1d5c0 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
1d5d0 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  4.z ){.    const
1d5e0 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d   char *zDb = db-
1d5f0 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
1d600 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  ame;.    const c
1d610 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d  har *zTbl = pOp-
1d620 3e 70 34 2e 7a 3b 0a 20 20 20 20 69 6e 74 20 6f  >p4.z;.    int o
1d630 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  p = ((pOp->p5 & 
1d640 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
1d650 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
1d660 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54   : SQLITE_INSERT
1d670 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1d680 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1d690 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
1d6a0 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
1d6b0 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a  eArg, op, zDb, z
1d6c0 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20  Tbl, iKey);.    
1d6d0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
1d6e0 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  =0 );.  }.  brea
1d6f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1d700 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20   Delete P1 P2 * 
1d710 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  P4 *.**.** Delet
1d720 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
1d730 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
1d740 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
1d750 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
1d760 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   The cursor will
1d770 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
1d780 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20  g at either the 
1d790 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
1d7a0 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
1d7b0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
1d7c0 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
1d7d0 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
1d7e0 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
1d7f0 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
1d800 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
1d810 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63  e a no-op.  Henc
1d820 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65  e it is OK to de
1d830 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64  lete.** a record
1d840 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
1d850 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a  Next loop..**.**
1d860 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
1d870 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
1d880 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  2 is set, then t
1d890 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
1d8a0 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
1d8b0 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
1d8c0 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20   not)..**.** P1 
1d8d0 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75  must not be pseu
1d8e0 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61  do-table.  It ha
1d8f0 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74  s to be a real t
1d900 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c  able with.** mul
1d910 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a  tiple rows..**.*
1d920 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
1d930 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ULL, then it is 
1d940 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
1d950 74 61 62 6c 65 20 74 68 61 74 20 50 31 20 69 73  table that P1 is
1d960 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e  .** pointing to.
1d970 20 20 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f    The update hoo
1d980 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65  k will be invoke
1d990 64 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e  d, if it exists.
1d9a0 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
1d9b0 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50   NULL then the P
1d9c0 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61  1 cursor must ha
1d9d0 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e  ve been position
1d9e0 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e  ed.** using OP_N
1d9f0 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f  otFound prior to
1da00 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f   invoking this o
1da10 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
1da20 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 6e  P_Delete: {.  in
1da30 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
1da40 20 69 36 34 20 69 4b 65 79 3b 0a 20 20 56 64 62   i64 iKey;.  Vdb
1da50 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
1da60 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
1da70 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
1da80 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1da90 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
1daa0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1dab0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
1dac0 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69  );  /* Only vali
1dad0 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65  d for real table
1dae0 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c  s, no pseudotabl
1daf0 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74  es */..  /* If t
1db00 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77  he update-hook w
1db10 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20  ill be invoked, 
1db20 73 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65 20  set iKey to the 
1db30 72 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20 2a  rowid of the.  *
1db40 2a 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65  * row being dele
1db50 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ted..  */.  if( 
1db60 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
1db70 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ack && pOp->p4.z
1db80 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1db90 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1dba0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72     assert( pC->r
1dbb0 6f 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20 20  owidIsValid );  
1dbc0 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65 74  /* lastRowid set
1dbd0 20 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50 5f   by previous OP_
1dbe0 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20  NotFound */.    
1dbf0 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52  iKey = pC->lastR
1dc00 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 72 63 20  owid;.  }..  rc 
1dc10 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
1dc20 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
1dc30 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1dc40 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1dc50 72 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  r;.  rc = sqlite
1dc60 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d  3BtreeDelete(pC-
1dc70 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d  >pCursor);.  pC-
1dc80 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69 64 20  >nextRowidValid 
1dc90 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
1dca0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1dcb0 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  TALE;..  /* Invo
1dcc0 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
1dcd0 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
1dce0 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  */.  if( rc==SQL
1dcf0 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55  ITE_OK && db->xU
1dd00 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
1dd10 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
1dd20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
1dd30 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
1dd40 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20  iDb].zName;.    
1dd50 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c  const char *zTbl
1dd60 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
1dd70 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
1dd80 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
1dd90 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c  eArg, SQLITE_DEL
1dda0 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20  ETE, zDb, zTbl, 
1ddb0 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72  iKey);.    asser
1ddc0 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
1ddd0 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1dde0 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p2 & OPFLAG_NCHA
1ddf0 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
1de00 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ++;.  break;.}..
1de10 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
1de20 43 6f 75 6e 74 20 50 31 20 2a 20 2a 0a 2a 2a 0a  Count P1 * *.**.
1de30 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  ** This opcode r
1de40 65 73 65 74 73 20 74 68 65 20 56 4d 73 20 69 6e  esets the VMs in
1de50 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
1de60 75 6e 74 65 72 20 74 6f 20 30 2e 20 49 66 20 50  unter to 0. If P
1de70 31 20 69 73 20 74 72 75 65 2c 0a 2a 2a 20 74 68  1 is true,.** th
1de80 65 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  en the value of 
1de90 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
1dea0 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20  er is copied to 
1deb0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
1dec0 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  dle.** change co
1ded0 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20  unter (returned 
1dee0 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61  by subsequent ca
1def0 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  lls to sqlite3_c
1df00 68 61 6e 67 65 73 28 29 29 0a 2a 2a 20 62 65 66  hanges()).** bef
1df10 6f 72 65 20 69 74 20 69 73 20 72 65 73 65 74 2e  ore it is reset.
1df20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
1df30 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1df40 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  s..*/.case OP_Re
1df50 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 69 66  setCount: {.  if
1df60 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
1df70 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
1df80 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
1df90 68 61 6e 67 65 29 3b 0a 20 20 7d 0a 20 20 70 2d  hange);.  }.  p-
1dfa0 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
1dfb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1dfc0 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20  ode: RowData P1 
1dfd0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
1dfe0 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
1dff0 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
1e000 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20  te row data for 
1e010 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
1e020 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
1e030 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
1e040 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73  data.  .** It is
1e050 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74   just copied ont
1e060 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
1e070 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
1e080 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
1e090 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1e0a0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
1e0b0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
1e0c0 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
1e0d0 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
1e0e0 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
1e0f0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
1e100 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
1e110 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
1e120 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20   RowKey P1 P2 * 
1e130 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
1e140 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
1e150 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
1e160 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72  w key for cursor
1e170 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
1e180 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
1e190 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
1e1a0 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20   .** The key is 
1e1b0 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
1e1c0 50 33 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P3 register exac
1e1d0 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
1e1e0 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
1e1f0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
1e200 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
1e210 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
1e220 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
1e230 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
1e240 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
1e250 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
1e260 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
1e270 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a  case OP_RowKey:.
1e280 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a  case OP_RowData:
1e290 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70   {.  int i = pOp
1e2a0 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75 72 73  ->p1;.  VdbeCurs
1e2b0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1e2c0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32  or *pCrsr;.  u32
1e2d0 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 70   n;..  pOut = &p
1e2e0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b  ->aMem[pOp->p2];
1e2f0 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74  ..  /* Note that
1e300 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44   RowKey and RowD
1e310 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65  ata are really e
1e320 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
1e330 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20  instruction */. 
1e340 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
1e350 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
1e360 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1e370 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  [i];.  assert( p
1e380 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f  C->isTable || pO
1e390 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f  p->opcode==OP_Ro
1e3a0 77 4b 65 79 20 29 3b 0a 20 20 61 73 73 65 72 74  wKey );.  assert
1e3b0 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c  ( pC->isIndex ||
1e3c0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1e3d0 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73  _RowData );.  as
1e3e0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1e3f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c   assert( pC->nul
1e400 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73  lRow==0 );.  ass
1e410 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1e420 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73  able==0 );.  ass
1e430 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1e440 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
1e450 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
1e460 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
1e470 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
1e480 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
1e490 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1e4a0 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e  rror;.  if( pC->
1e4b0 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 69  isIndex ){.    i
1e4c0 36 34 20 6e 36 34 3b 0a 20 20 20 20 61 73 73 65  64 n64;.    asse
1e4d0 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65  rt( !pC->isTable
1e4e0 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   );.    sqlite3B
1e4f0 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73  treeKeySize(pCrs
1e500 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 69 66  r, &n64);.    if
1e510 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74  ( n64>db->aLimit
1e520 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
1e530 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
1e540 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
1e550 20 7d 0a 20 20 20 20 6e 20 3d 20 28 69 6e 74 29   }.    n = (int)
1e560 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  n64;.  }else{.  
1e570 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61    sqlite3BtreeDa
1e580 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e  taSize(pCrsr, &n
1e590 29 3b 0a 20 20 20 20 69 66 28 20 28 69 6e 74 29  );.    if( (int)
1e5a0 6e 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  n>db->aLimit[SQL
1e5b0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
1e5c0 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ] ){.      goto 
1e5d0 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20  too_big;.    }. 
1e5e0 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
1e5f0 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
1e600 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20 67  , n, 0) ){.    g
1e610 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
1e620 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20    pOut->n = n;. 
1e630 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
1e640 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b  pOut, MEM_Blob);
1e650 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64  .  if( pC->isInd
1e660 65 78 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  ex ){.    rc = s
1e670 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 70  qlite3BtreeKey(p
1e680 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
1e690 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->z);.  }else{. 
1e6a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1e6b0 74 72 65 65 44 61 74 61 28 70 43 72 73 72 2c 20  treeData(pCrsr, 
1e6c0 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a  0, n, pOut->z);.
1e6d0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
1e6e0 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
1e6f0 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
1e700 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61 73 74  lob is ever cast
1e710 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50   to text */.  UP
1e720 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1e730 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
1e740 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1e750 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
1e760 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e  *.**.** Store in
1e770 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
1e780 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
1e790 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20   the key of the 
1e7a0 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74  table entry that
1e7b0 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e  .** P1 is curren
1e7c0 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2f  tly point to..*/
1e7d0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20  .case OP_Rowid: 
1e7e0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1e7f0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1e800 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 20  ease */.  int i 
1e810 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62  = pOp->p1;.  Vdb
1e820 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
1e830 36 34 20 76 3b 0a 0a 20 20 61 73 73 65 72 74 28  64 v;..  assert(
1e840 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1e850 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1e860 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1e870 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1e880 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1e890 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
1e8a0 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  C);.  if( rc ) g
1e8b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1e8c0 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 43  _error;.  if( pC
1e8d0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29  ->rowidIsValid )
1e8e0 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61  {.    v = pC->la
1e8f0 73 74 52 6f 77 69 64 3b 0a 20 20 7d 65 6c 73 65  stRowid;.  }else
1e900 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f 54   if( pC->pseudoT
1e910 61 62 6c 65 20 29 7b 0a 20 20 20 20 76 20 3d 20  able ){.    v = 
1e920 6b 65 79 54 6f 49 6e 74 28 70 43 2d 3e 69 4b 65  keyToInt(pC->iKe
1e930 79 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  y);.  }else if( 
1e940 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
1e950 20 20 20 2f 2a 20 4c 65 61 76 65 20 74 68 65 20     /* Leave the 
1e960 72 6f 77 69 64 20 73 65 74 20 74 6f 20 61 20 4e  rowid set to a N
1e970 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72 65 61 6b  ULL */.    break
1e980 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
1e990 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1e9a0 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  or!=0 );.    sql
1e9b0 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
1e9c0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76  (pC->pCursor, &v
1e9d0 29 3b 0a 20 20 20 20 76 20 3d 20 6b 65 79 54 6f  );.    v = keyTo
1e9e0 49 6e 74 28 76 29 3b 0a 20 20 7d 0a 20 20 70 4f  Int(v);.  }.  pO
1e9f0 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 4d  ut->u.i = v;.  M
1ea00 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
1ea10 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
1ea20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1ea30 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20  ode: NullRow P1 
1ea40 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f  * * * *.**.** Mo
1ea50 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  ve the cursor P1
1ea60 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20   to a null row. 
1ea70 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   Any OP_Column o
1ea80 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61  perations.** tha
1ea90 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68  t occur while th
1eaa0 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74  e cursor is on t
1eab0 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c  he null row will
1eac0 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65   always.** write
1ead0 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65   a NULL..*/.case
1eae0 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20   OP_NullRow: {. 
1eaf0 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
1eb00 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1eb10 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69  pC;..  assert( i
1eb20 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
1eb30 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1eb40 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73  >apCsr[i];.  ass
1eb50 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1eb60 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
1eb70 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
1eb80 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  lid = 0;.  if( p
1eb90 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20  C->pCursor ){.  
1eba0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
1ebb0 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  earCursor(pC->pC
1ebc0 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
1ebd0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1ebe0 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20  e: Last P1 P2 * 
1ebf0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
1ec00 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
1ec10 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
1ec20 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
1ec30 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
1ec40 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c  l refer to the l
1ec50 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
1ec60 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
1ec70 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
1ec80 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1ec90 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
1eca0 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
1ecb0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1ecc0 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
1ecd0 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
1ece0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
1ecf0 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
1ed00 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
1ed10 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
1ed20 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
1ed30 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
1ed40 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
1ed50 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
1ed60 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1ed70 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1ed80 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
1ed90 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
1eda0 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
1edb0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1edc0 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  [i];.  assert( p
1edd0 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
1ede0 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
1edf0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
1ee00 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
1ee10 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
1ee20 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d  sr, &res);.  pC-
1ee30 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
1ee40 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  es;.  pC->deferr
1ee50 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1ee60 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1ee70 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
1ee80 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1ee90 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73  STALE;.  if( res
1eea0 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b   && pOp->p2>0 ){
1eeb0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
1eec0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
1eed0 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
1eee0 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
1eef0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
1ef00 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
1ef10 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
1ef20 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
1ef30 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
1ef40 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
1ef50 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
1ef60 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
1ef70 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
1ef80 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
1ef90 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
1efa0 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
1efb0 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
1efc0 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
1efd0 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
1efe0 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
1eff0 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
1f000 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
1f010 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
1f020 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
1f030 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
1f040 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
1f050 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
1f060 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
1f070 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
1f080 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
1f090 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
1f0a0 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
1f0b0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
1f0c0 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
1f0d0 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
1f0e0 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
1f0f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a  */.case OP_Sort:
1f100 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1f110 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  p */.#ifdef SQLI
1f120 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65  TE_TEST.  sqlite
1f130 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a  3_sort_count++;.
1f140 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
1f150 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66  _count--;.#endif
1f160 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
1f170 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
1f180 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a  _SORT-1]++;.  /*
1f190 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
1f1a0 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
1f1b0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
1f1c0 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ind P1 P2 * * *.
1f1d0 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
1f1e0 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
1f1f0 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
1f200 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
1f210 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
1f220 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
1f230 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
1f240 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
1f250 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
1f260 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1f270 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
1f280 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
1f290 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
1f2a0 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
1f2b0 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
1f2c0 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
1f2d0 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
1f2e0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
1f2f0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
1f300 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
1f310 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  wind: {        /
1f320 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
1f330 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56  i = pOp->p1;.  V
1f340 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1f350 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
1f360 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
1f370 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
1f380 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
1f390 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1f3a0 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
1f3b0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43  !=0 );.  if( (pC
1f3c0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
1f3d0 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  r)!=0 ){.    rc 
1f3e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
1f3f0 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
1f400 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46 69 72 73  ;.    pC->atFirs
1f410 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b  t = res==0 ?1:0;
1f420 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1f430 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1f440 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1f450 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1f460 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1f470 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  alid = 0;.  }els
1f480 65 7b 0a 20 20 20 20 72 65 73 20 3d 20 31 3b 0a  e{.    res = 1;.
1f490 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f    }.  pC->nullRo
1f4a0 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61  w = (u8)res;.  a
1f4b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
1f4c0 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e   && pOp->p2<p->n
1f4d0 4f 70 20 29 3b 0a 20 20 69 66 28 20 72 65 73 20  Op );.  if( res 
1f4e0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
1f4f0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
1f500 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1f510 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 2a  de: Next P1 P2 *
1f520 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
1f530 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  ce cursor P1 so 
1f540 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1f550 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64  o the next key/d
1f560 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
1f570 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
1f580 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
1f590 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c   no more key/val
1f5a0 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
1f5b0 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
1f5c0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
1f5d0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
1f5e0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61   if the cursor a
1f5f0 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65  dvance was succe
1f600 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
1f610 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1f620 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
1f630 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
1f640 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
1f650 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
1f660 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  le..**.** See al
1f670 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f  so: Prev.*/./* O
1f680 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50  pcode: Prev P1 P
1f690 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 61  2 * * *.**.** Ba
1f6a0 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20  ck up cursor P1 
1f6b0 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
1f6c0 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
1f6d0 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  s key/data pair 
1f6e0 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
1f6f0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
1f700 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f  ere is no previo
1f710 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  us key/value pai
1f720 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
1f730 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
1f740 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
1f750 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
1f760 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20  e cursor backup 
1f770 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
1f780 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
1f790 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
1f7a0 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
1f7b0 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
1f7c0 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
1f7d0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
1f7e0 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
1f7f0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
1f800 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20  /.case OP_Next: 
1f810 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1f820 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1f830 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
1f840 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
1f850 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46 4f 52  es;..  CHECK_FOR
1f860 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 61 73  _INTERRUPT;.  as
1f870 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1f880 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1f890 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1f8a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1f8b0 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30 20  1];.  if( pC==0 
1f8c0 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20 20 2f  ){.    break;  /
1f8d0 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 32  * See ticket #22
1f8e0 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70 43 72 73  73 */.  }.  pCrs
1f8f0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
1f900 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
1f910 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 20   );.  res = 1;. 
1f920 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
1f930 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
1f940 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  rc = pOp->op
1f950 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74 20 3f 20  code==OP_Next ? 
1f960 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
1f970 28 70 43 72 73 72 2c 20 26 72 65 73 29 20 3a 0a  (pCrsr, &res) :.
1f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
1f9a0 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
1f9b0 75 73 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  us(pCrsr, &res);
1f9c0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1f9d0 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
1f9e0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1f9f0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
1fa00 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70   res==0 ){.    p
1fa10 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1fa20 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
1fa30 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70   ) p->aCounter[p
1fa40 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66  Op->p5-1]++;.#if
1fa50 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1fa60 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
1fa70 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
1fa80 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77  if.  }.  pC->row
1fa90 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1faa0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1fab0 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
1fac0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1fad0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68  ** Register P2 h
1fae0 6f 6c 64 73 20 61 20 53 51 4c 20 69 6e 64 65 78  olds a SQL index
1faf0 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20   key made using 
1fb00 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72  the.** MakeRecor
1fb10 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20  d instructions. 
1fb20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69   This opcode wri
1fb30 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20  tes that key.** 
1fb40 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50  into the index P
1fb50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65  1.  Data for the
1fb60 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a   entry is nil..*
1fb70 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61  *.** P3 is a fla
1fb80 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20  g that provides 
1fb90 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d  a hint to the b-
1fba0 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74 20  tree layer that 
1fbb0 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69  this.** insert i
1fbc0 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
1fbd0 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20  n append..**.** 
1fbe0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1fbf0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
1fc00 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71  indices.  The eq
1fc10 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
1fc20 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c  tion.** for tabl
1fc30 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e  es is OP_Insert.
1fc40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49  .*/.case OP_IdxI
1fc50 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
1fc60 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 69 6e 74 20  /* in2 */.  int 
1fc70 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 56  i = pOp->p1;.  V
1fc80 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1fc90 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
1fca0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ;.  assert( i>=0
1fcb0 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1fcc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1fcd0 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a  >apCsr[i]!=0 );.
1fce0 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e    assert( pIn2->
1fcf0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
1fd00 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72   );.  if( (pCrsr
1fd10 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73   = (pC = p->apCs
1fd20 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21  r[i])->pCursor)!
1fd30 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
1fd40 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
1fd50 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70   );.    rc = Exp
1fd60 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20  andBlob(pIn2);. 
1fd70 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1fd80 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 6e  E_OK ){.      in
1fd90 74 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e  t nKey = pIn2->n
1fda0 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  ;.      const ch
1fdb0 61 72 20 2a 7a 4b 65 79 20 3d 20 70 49 6e 32 2d  ar *zKey = pIn2-
1fdc0 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  >z;.      rc = s
1fdd0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
1fde0 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e  t(pCrsr, zKey, n
1fdf0 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70  Key, "", 0, 0, p
1fe00 4f 70 2d 3e 70 33 29 3b 0a 20 20 20 20 20 20 61  Op->p3);.      a
1fe10 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
1fe20 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
1fe30 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53        pC->cacheS
1fe40 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1fe50 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ALE;.    }.  }. 
1fe60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1fe70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20  code: IdxDelete 
1fe80 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1fe90 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
1fea0 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
1feb0 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
1fec0 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
1fed0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1fee0 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
1fef0 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
1ff00 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
1ff10 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
1ff20 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
1ff30 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
1ff40 65 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70  e: {.  int i = p
1ff50 4f 70 2d 3e 70 31 3b 0a 20 20 56 64 62 65 43 75  Op->p1;.  VdbeCu
1ff60 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
1ff70 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 61  rsor *pCrsr;.  a
1ff80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
1ff90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1ffa0 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
1ffb0 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  p2+pOp->p3<=p->n
1ffc0 4d 65 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Mem );.  assert(
1ffd0 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1ffe0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1fff0 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d  t( p->apCsr[i]!=
20000 30 20 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73  0 );.  if( (pCrs
20010 72 20 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43  r = (pC = p->apC
20020 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29  sr[i])->pCursor)
20030 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72  !=0 ){.    int r
20040 65 73 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65 64  es;.    Unpacked
20050 52 65 63 6f 72 64 20 72 3b 0a 20 20 20 20 72 2e  Record r;.    r.
20060 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
20070 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
20080 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
20090 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61 67  ->p3;.    r.flag
200a0 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d 65  s = 0;.    r.aMe
200b0 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  m = &p->aMem[pOp
200c0 2d 3e 70 32 5d 3b 0a 20 20 20 20 72 63 20 3d 20  ->p2];.    rc = 
200d0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
200e0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
200f0 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
20100 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
20110 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
20120 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
20130 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
20140 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 20 20  ete(pCrsr);.    
20150 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  }.    assert( pC
20160 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
20170 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63  ==0 );.    pC->c
20180 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
20190 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
201a0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
201b0 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31  ode: IdxRowid P1
201c0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
201d0 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
201e0 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
201f0 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c  r which is the l
20200 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
20210 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68   record at.** th
20220 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64  e end of the ind
20230 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74  ex key pointed t
20240 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20  o by cursor P1. 
20250 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68   This integer sh
20260 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72  ould be.** the r
20270 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
20280 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68  e entry to which
20290 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72   this index entr
202a0 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  y points..**.** 
202b0 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c  See also: Rowid,
202c0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a   MakeRecord..*/.
202d0 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64  case OP_IdxRowid
202e0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
202f0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
20300 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  ase */.  int i =
20310 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 42 74 43 75   pOp->p1;.  BtCu
20320 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56  rsor *pCrsr;.  V
20330 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
20340 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
20350 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
20360 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
20370 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20  pCsr[i]!=0 );.  
20380 69 66 28 20 28 70 43 72 73 72 20 3d 20 28 70 43  if( (pCrsr = (pC
20390 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d   = p->apCsr[i])-
203a0 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a  >pCursor)!=0 ){.
203b0 20 20 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a      i64 rowid;..
203c0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
203d0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
203e0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
203f0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
20400 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  );.    if( !pC->
20410 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
20420 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
20430 65 49 64 78 52 6f 77 69 64 28 70 43 72 73 72 2c  eIdxRowid(pCrsr,
20440 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 20 20   &rowid);.      
20450 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
20460 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
20470 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
20480 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
20490 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
204a0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
204b0 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75  );.      pOut->u
204c0 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  .i = rowid;.    
204d0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
204e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
204f0 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GE P1 P2 P3 P4 P
20500 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  5.**.** The P4 r
20510 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
20520 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
20530 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
20540 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
20550 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52  that omits the R
20560 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
20570 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
20580 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
20590 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
205a0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
205b0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
205c0 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  he ROWID on the 
205d0 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
205e0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
205f0 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
20600 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
20610 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a  o the key value.
20620 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ** then jump to 
20630 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
20640 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
20650 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
20660 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ion..**.** If P5
20670 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65   is non-zero the
20680 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  n the key value 
20690 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79 20  is increased by 
206a0 61 6e 20 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70  an epsilon .** p
206b0 72 69 6f 72 20 74 6f 20 74 68 65 20 63 6f 6d 70  rior to the comp
206c0 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61  arison.  This ma
206d0 6b 65 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f  ke the opcode wo
206e0 72 6b 20 6c 69 6b 65 20 49 64 78 47 54 20 65 78  rk like IdxGT ex
206f0 63 65 70 74 0a 2a 2a 20 74 68 61 74 20 69 66 20  cept.** that if 
20700 74 68 65 20 6b 65 79 20 66 72 6f 6d 20 72 65 67  the key from reg
20710 69 73 74 65 72 20 50 33 20 69 73 20 61 20 70 72  ister P3 is a pr
20720 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 20  efix of the key 
20730 69 6e 20 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a  in the cursor,.*
20740 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  * the result is 
20750 66 61 6c 73 65 20 77 68 65 72 65 61 73 20 69 74  false whereas it
20760 20 77 6f 75 6c 64 20 62 65 20 74 72 75 65 20 77   would be true w
20770 69 74 68 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a  ith IdxGT..*/./*
20780 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50   Opcode: IdxLT P
20790 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a  1 P2 P3 * P5.**.
207a0 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
207b0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
207c0 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
207d0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
207e0 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
207f0 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44 2e  omits the ROWID.
20800 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
20810 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
20820 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
20830 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
20840 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
20850 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f   ignoring the RO
20860 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e  WID on the P1 in
20870 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  dex..**.** If th
20880 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
20890 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
208a0 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e  e key value then
208b0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20   jump to P2..** 
208c0 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
208d0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
208e0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
208f0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
20900 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68 65  on-zero then the
20910 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69 6e   key value is in
20920 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65 70  creased by an ep
20930 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20  silon prior .** 
20940 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  to the compariso
20950 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 73 20 74  n.  This makes t
20960 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
20970 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61  ike IdxLE..*/.ca
20980 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20  se OP_IdxLT:    
20990 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
209a0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  n3 */.case OP_Id
209b0 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  xGE: {        /*
209c0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
209d0 69 6e 74 20 69 3d 20 70 4f 70 2d 3e 70 31 3b 0a  int i= pOp->p1;.
209e0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
209f0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
20a00 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
20a10 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
20a20 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b  ->apCsr[i]!=0 );
20a30 0a 20 20 69 66 28 20 28 70 43 20 3d 20 70 2d 3e  .  if( (pC = p->
20a40 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73  apCsr[i])->pCurs
20a50 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  or!=0 ){.    int
20a60 20 72 65 73 3b 0a 20 20 20 20 55 6e 70 61 63 6b   res;.    Unpack
20a70 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 20 20  edRecord r;.    
20a80 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
20a90 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
20aa0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
20ab0 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
20ac0 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73  p5==1 );.    ass
20ad0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
20ae0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
20af0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
20b00 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
20b10 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
20b20 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20  )pOp->p4.i;.    
20b30 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
20b40 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55       r.flags = U
20b50 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
20b60 7c 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52  | UNPACKED_IGNOR
20b70 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 65 6c  E_ROWID;.    }el
20b80 73 65 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67  se{.      r.flag
20b90 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e  s = UNPACKED_IGN
20ba0 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d  ORE_ROWID;.    }
20bb0 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70  .    r.aMem = &p
20bc0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
20bd0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
20be0 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
20bf0 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29  re(pC, &r, &res)
20c00 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
20c10 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
20c20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d  ){.      res = -
20c30 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  res;.    }else{.
20c40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
20c50 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
20c60 78 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73  xGE );.      res
20c70 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
20c80 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20  ( res>0 ){.     
20c90 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
20ca0 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1 ;.    }.  }.  
20cb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20cc0 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
20cd0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
20ce0 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
20cf0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
20d00 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
20d10 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
20d20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
20d30 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
20d40 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
20d50 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
20d60 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
20d70 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
20d80 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
20d90 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
20da0 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
20db0 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
20dc0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
20dd0 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
20de0 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
20df0 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
20e00 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
20e10 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
20e20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
20e30 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
20e40 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
20e50 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
20e60 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
20e70 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
20e80 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
20e90 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
20ea0 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
20eb0 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
20ec0 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
20ed0 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
20ee0 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
20ef0 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
20f00 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
20f10 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
20f20 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
20f30 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
20f40 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
20f50 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
20f60 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
20f70 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
20f80 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
20f90 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
20fa0 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
20fb0 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
20fc0 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
20fd0 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
20fe0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
20ff0 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
21000 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
21010 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
21020 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
21030 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
21040 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
21050 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
21060 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70   {     /* out2-p
21070 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
21080 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
21090 20 69 43 6e 74 3b 0a 23 69 66 6e 64 65 66 20 53   iCnt;.#ifndef S
210a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
210b0 41 4c 54 41 42 4c 45 0a 20 20 56 64 62 65 20 2a  ALTABLE.  Vdbe *
210c0 70 56 64 62 65 3b 0a 20 20 69 43 6e 74 20 3d 20  pVdbe;.  iCnt = 
210d0 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64  0;.  for(pVdbe=d
210e0 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b  b->pVdbe; pVdbe;
210f0 20 70 56 64 62 65 3d 70 56 64 62 65 2d 3e 70 4e   pVdbe=pVdbe->pN
21100 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56  ext){.    if( pV
21110 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  dbe->magic==VDBE
21120 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56  _MAGIC_RUN && pV
21130 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f  dbe->inVtabMetho
21140 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63  d<2 && pVdbe->pc
21150 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 43 6e  >=0 ){.      iCn
21160 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  t++;.    }.  }.#
21170 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64 62  else.  iCnt = db
21180 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74 3b  ->activeVdbeCnt;
21190 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69 43  .#endif.  if( iC
211a0 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d  nt>1 ){.    rc =
211b0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
211c0 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
211d0 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20  on = OE_Abort;. 
211e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 6e 74 20   }else{.    int 
211f0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
21200 20 20 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d     assert( iCnt=
21210 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =1 );.    assert
21220 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
21230 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29  & (1<<iDb))!=0 )
21240 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
21250 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65  e3BtreeDropTable
21260 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
21270 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f  t, pOp->p1, &iMo
21280 76 65 64 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  ved);.    MemSet
21290 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
212a0 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
212b0 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b  t->u.i = iMoved;
212c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
212d0 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
212e0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
212f0 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21  TE_OK && iMoved!
21300 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
21310 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
21320 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2c 20  (&db->aDb[iDb], 
21330 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29  iMoved, pOp->p1)
21340 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
21350 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
21360 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20  * Opcode: Clear 
21370 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44  P1 P2 P3.**.** D
21380 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
21390 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ts of the databa
213a0 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
213b0 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
213c0 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61  e.** in the data
213d0 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76  base file is giv
213e0 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20  en by P1.  But, 
213f0 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20  unlike Destroy, 
21400 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65  do not.** remove
21410 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
21420 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74  dex from the dat
21430 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
21440 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
21450 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  g clear is in th
21460 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
21470 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20  file if P2==0.  
21480 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e  If.** P2==1 then
21490 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
214a0 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
214b0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
214c0 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
214d0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
214e0 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
214f0 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
21500 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
21510 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61  .** If the P3 va
21520 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  lue is non-zero,
21530 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
21540 72 65 66 65 72 65 64 20 74 6f 20 6d 75 73 74 20  refered to must 
21550 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20  be an.** intkey 
21560 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61  table (an SQL ta
21570 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65  ble, not an inde
21580 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  x). In this case
21590 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
215a0 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63  .** count is inc
215b0 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
215c0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
215d0 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
215e0 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49  g cleared. .** I
215f0 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  f P3 is greater 
21600 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20  than zero, then 
21610 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
21620 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
21630 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65  is.** also incre
21640 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
21650 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
21660 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
21670 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  cleared..**.** S
21680 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79  ee also: Destroy
21690 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61  .*/.case OP_Clea
216a0 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e  r: {.  int nChan
216b0 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  ge = 0;.  assert
216c0 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
216d0 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 32 29 29 21  & (1<<pOp->p2))!
216e0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
216f0 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
21700 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61  ble(.      db->a
21710 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c  Db[pOp->p2].pBt,
21720 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e   pOp->p1, (pOp->
21730 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20  p3 ? &nChange : 
21740 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f  0).  );.  if( pO
21750 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e  p->p3 ){.    p->
21760 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e  nChange += nChan
21770 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ge;.    if( pOp-
21780 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 70  >p3>0 ){.      p
21790 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e  ->aMem[pOp->p3].
217a0 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  u.i += nChange;.
217b0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
217c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
217d0 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31 20   CreateTable P1 
217e0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
217f0 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61  llocate a new ta
21800 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ble in the main 
21810 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
21820 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
21830 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
21840 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
21850 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
21860 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
21870 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
21880 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
21890 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
218a0 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
218b0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
218c0 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
218d0 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c  e between a tabl
218e0 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69  e and an index i
218f0 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65  s this:  A table
21900 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20   must.** have a 
21910 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b  4-byte integer k
21920 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20  ey and can have 
21930 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
21940 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73   An index.** has
21950 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65   an arbitrary ke
21960 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a  y but no data..*
21970 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
21980 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a  reateIndex.*/./*
21990 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49   Opcode: CreateI
219a0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  ndex P1 P2 * * *
219b0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
219c0 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74  a new index in t
219d0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
219e0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
219f0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
21a00 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
21a10 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
21a20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
21a30 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
21a40 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
21a50 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
21a60 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
21a70 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
21a80 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
21a90 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e  documentation on
21aa0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
21ab0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
21ac0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
21ad0 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64  ase OP_CreateInd
21ae0 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ex:            /
21af0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
21b00 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  e */.case OP_Cre
21b10 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20  ateTable: {     
21b20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
21b30 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
21b40 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 69 6e 74   pgno = 0;.  int
21b50 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44   flags;.  Db *pD
21b60 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
21b70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21b80 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
21b90 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
21ba0 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
21bb0 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44  >p1))!=0 );.  pD
21bc0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
21bd0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
21be0 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
21bf0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
21c00 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
21c10 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
21c20 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
21c30 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
21c40 20 42 54 52 45 45 5f 4c 45 41 46 44 41 54 41 7c   BTREE_LEAFDATA|
21c50 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20  BTREE_INTKEY;.  
21c60 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73  }else{.    flags
21c70 20 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54   = BTREE_ZERODAT
21c80 41 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  A;.  }.  rc = sq
21c90 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
21ca0 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
21cb0 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
21cc0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e   pOut->u.i = pgn
21cd0 6f 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  o;.  MemSetTypeF
21ce0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
21cf0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
21d00 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65  /* Opcode: Parse
21d10 53 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20 50  Schema P1 P2 * P
21d20 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61  4 *.**.** Read a
21d30 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74  nd parse all ent
21d40 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51  ries from the SQ
21d50 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c  LITE_MASTER tabl
21d60 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
21d70 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74  .** that match t
21d80 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
21d90 50 34 2e 20 20 50 32 20 69 73 20 74 68 65 20 22  P4.  P2 is the "
21da0 66 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20 41  force" flag.   A
21db0 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20  lways do.** the 
21dc0 70 61 72 73 69 6e 67 20 69 66 20 50 32 20 69 73  parsing if P2 is
21dd0 20 74 72 75 65 2e 20 20 49 66 20 50 32 20 69 73   true.  If P2 is
21de0 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68 69   false, then thi
21df0 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a  s routine is a.*
21e00 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 73  * no-op if the s
21e10 63 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75 72  chema is not cur
21e20 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20  rently loaded.  
21e30 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
21e40 69 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73  if P2.** is fals
21e50 65 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41  e, the SQLITE_MA
21e60 53 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f 6e  STER table is on
21e70 6c 79 20 70 61 72 73 65 64 20 69 66 20 74 68 65  ly parsed if the
21e80 20 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20   rest of the.** 
21e90 73 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64  schema is alread
21ea0 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74 68  y loaded into th
21eb0 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a  e symbol table..
21ec0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
21ed0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
21ee0 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
21ef0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
21f00 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
21f10 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
21f20 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
21f30 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
21f40 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
21f50 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
21f60 65 6d 61 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ema: {.  char *z
21f70 53 71 6c 3b 0a 20 20 69 6e 74 20 69 44 62 20 3d  Sql;.  int iDb =
21f80 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 63 6f 6e 73   pOp->p1;.  cons
21f90 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
21fa0 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
21fb0 44 61 74 61 3b 0a 0a 20 20 61 73 73 65 72 74 28  Data;..  assert(
21fc0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
21fd0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 69 66 28 20  b->nDb );.  if( 
21fe0 21 70 4f 70 2d 3e 70 32 20 26 26 20 21 44 62 48  !pOp->p2 && !DbH
21ff0 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  asProperty(db, i
22000 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  Db, DB_SchemaLoa
22010 64 65 64 29 20 29 7b 0a 20 20 20 20 62 72 65 61  ded) ){.    brea
22020 6b 3b 0a 20 20 7d 0a 20 20 7a 4d 61 73 74 65 72  k;.  }.  zMaster
22030 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28   = SCHEMA_TABLE(
22040 69 44 62 29 3b 0a 20 20 69 6e 69 74 44 61 74 61  iDb);.  initData
22050 2e 64 62 20 3d 20 64 62 3b 0a 20 20 69 6e 69 74  .db = db;.  init
22060 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e  Data.iDb = pOp->
22070 70 31 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 70  p1;.  initData.p
22080 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45  zErrMsg = &p->zE
22090 72 72 4d 73 67 3b 0a 20 20 7a 53 71 6c 20 3d 20  rrMsg;.  zSql = 
220a0 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
220b0 62 2c 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20  b,.     "SELECT 
220c0 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
220d0 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73  sql FROM '%q'.%s
220e0 20 57 48 45 52 45 20 25 73 22 2c 0a 20 20 20 20   WHERE %s",.    
220f0 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
22100 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
22110 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 69 66 28 20  p->p4.z);.  if( 
22120 7a 53 71 6c 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  zSql==0 ) goto n
22130 6f 5f 6d 65 6d 3b 0a 20 20 28 76 6f 69 64 29 73  o_mem;.  (void)s
22140 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
22150 64 62 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  db);.  assert( d
22160 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
22170 29 3b 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75  );.  db->init.bu
22180 73 79 20 3d 20 31 3b 0a 20 20 69 6e 69 74 44 61  sy = 1;.  initDa
22190 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
221a0 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 21 64 62  K;.  assert( !db
221b0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
221c0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
221d0 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
221e0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
221f0 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
22200 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  0);.  if( rc==SQ
22210 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69  LITE_OK ) rc = i
22220 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 73 71  nitData.rc;.  sq
22230 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
22240 7a 53 71 6c 29 3b 0a 20 20 64 62 2d 3e 69 6e 69  zSql);.  db->ini
22250 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 28 76  t.busy = 0;.  (v
22260 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74  oid)sqlite3Safet
22270 79 4f 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72  yOn(db);.  if( r
22280 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
22290 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
222a0 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  em;.  }.  break;
222b0 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e    .}..#if !defin
222c0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
222d0 4e 41 4c 59 5a 45 29 20 26 26 20 21 64 65 66 69  NALYZE) && !defi
222e0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
222f0 50 41 52 53 45 52 29 0a 2f 2a 20 4f 70 63 6f 64  PARSER)./* Opcod
22300 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20  e: LoadAnalysis 
22310 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
22320 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65   Read the sqlite
22330 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72  _stat1 table for
22340 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
22350 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   load the conten
22360 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  t.** of that tab
22370 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65  le into the inte
22380 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20  rnal index hash 
22390 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c  table.  This wil
223a0 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61  l cause.** the a
223b0 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73  nalysis to be us
223c0 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  ed when preparin
223d0 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  g all subsequent
223e0 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73   queries..*/.cas
223f0 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69  e OP_LoadAnalysi
22400 73 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 20 3d  s: {.  int iDb =
22410 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65   pOp->p1;.  asse
22420 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
22430 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72  b<db->nDb );.  r
22440 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  c = sqlite3Analy
22450 73 69 73 4c 6f 61 64 28 64 62 2c 20 69 44 62 29  sisLoad(db, iDb)
22460 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23  ;.  break;  .}.#
22470 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
22480 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
22490 41 4c 59 5a 45 29 20 26 26 20 21 64 65 66 69 6e  ALYZE) && !defin
224a0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
224b0 41 52 53 45 52 29 20 20 2a 2f 0a 0a 2f 2a 20 4f  ARSER)  */../* O
224c0 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65  pcode: DropTable
224d0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
224e0 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
224f0 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
22500 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
22510 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
22520 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61  .** the table na
22530 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
22540 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
22550 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
22560 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70  able.** is dropp
22570 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
22580 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
22590 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
225a0 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
225b0 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
225c0 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
225d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
225e0 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69  pTable: {.  sqli
225f0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
22600 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d  teTable(db, pOp-
22610 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
22620 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
22630 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65  Opcode: DropInde
22640 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  x P1 * * P4 *.**
22650 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
22660 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
22670 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
22680 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
22690 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e  e.** the index n
226a0 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
226b0 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
226c0 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e   called after an
226d0 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f   index.** is dro
226e0 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  pped in order to
226f0 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
22700 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
22710 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
22720 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
22730 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
22740 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
22750 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71  ropIndex: {.  sq
22760 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
22770 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
22780 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
22790 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
227a0 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
227b0 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
227c0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
227d0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
227e0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
227f0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
22800 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
22810 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
22820 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
22830 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
22840 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
22850 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f   is dropped in o
22860 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65  rder to keep the
22870 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
22880 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
22890 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
228a0 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
228b0 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
228c0 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65  se OP_DropTrigge
228d0 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  r: {.  sqlite3Un
228e0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
228f0 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31  gger(db, pOp->p1
22900 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
22910 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
22920 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
22930 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f  NTEGRITY_CHECK./
22940 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72  * Opcode: Integr
22950 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a  ityCk P1 P2 P3 *
22960 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20   P5.**.** Do an 
22970 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20  analysis of the 
22980 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64  currently open d
22990 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20  atabase.  Store 
229a0 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
229b0 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  1 the text of an
229c0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64   error message d
229d0 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72  escribing any pr
229e0 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f  oblems..** If no
229f0 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f   problems are fo
22a00 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c  und, store a NUL
22a10 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  L in register P1
22a20 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ..**.** The regi
22a30 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
22a40 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
22a50 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65  ber of allowed e
22a60 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73  rrors..** At mos
22a70 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73  t reg(P3) errors
22a80 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65   will be reporte
22a90 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  d..** In other w
22aa0 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73  ords, the analys
22ab0 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e  is stops as soon
22ac0 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f   as reg(P1) erro
22ad0 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e  rs are .** seen.
22ae0 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64    Reg(P1) is upd
22af0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75  ated with the nu
22b00 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
22b10 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  emaining..**.** 
22b20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
22b30 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62  mbers of all tab
22b40 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
22b50 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a  ase are integer.
22b60 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ** stored in reg
22b70 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c  (P1), reg(P1+1),
22b80 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e   reg(P1+2), ....
22b90 20 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74    There are P2 t
22ba0 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a  ables.** total..
22bb0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
22bc0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65  ot zero, the che
22bd0 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68  ck is done on th
22be0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
22bf0 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f  base.** file, no
22c00 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
22c10 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
22c20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
22c30 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
22c40 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
22c50 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  heck pragma..*/.
22c60 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74  case OP_Integrit
22c70 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f  yCk: {.  int nRo
22c80 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ot;      /* Numb
22c90 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20  er of tables to 
22ca0 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20  check.  (Number 
22cb0 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20  of root pages.) 
22cc0 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b  */.  int *aRoot;
22cd0 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
22ce0 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72   rootpage number
22cf0 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20  s for tables to 
22d00 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20  be checked */.  
22d10 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
22d20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
22d30 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
22d40 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
22d50 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65  f errors reporte
22d60 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20  d */.  char *z; 
22d70 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
22d80 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f  f the error repo
22d90 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45  rt */.  Mem *pnE
22da0 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73  rr;     /* Regis
22db0 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63  ter keeping trac
22dc0 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  k of errors rema
22dd0 69 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52  ining */.  .  nR
22de0 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  oot = pOp->p2;. 
22df0 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30   assert( nRoot>0
22e00 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71   );.  aRoot = sq
22e10 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
22e20 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29  (db, sizeof(int)
22e30 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20  *(nRoot+1) );.  
22e40 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67  if( aRoot==0 ) g
22e50 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73  oto no_mem;.  as
22e60 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
22e70 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e  && pOp->p3<=p->n
22e80 4d 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d  Mem );.  pnErr =
22e90 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
22ea0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
22eb0 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
22ec0 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
22ed0 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
22ee0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
22ef0 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
22f00 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d  .  pIn1 = &p->aM
22f10 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
22f20 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b  or(j=0; j<nRoot;
22f30 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74   j++){.    aRoot
22f40 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74  [j] = (int)sqlit
22f50 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26  e3VdbeIntValue(&
22f60 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20  pIn1[j]);.  }.  
22f70 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20  aRoot[j] = 0;.  
22f80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
22f90 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
22fa0 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
22fb0 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 35  sk & (1<<pOp->p5
22fc0 29 29 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73  ))!=0 );.  z = s
22fd0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
22fe0 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44  rityCheck(db->aD
22ff0 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20  b[pOp->p5].pBt, 
23000 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20  aRoot, nRoot,.  
23010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
23030 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20  int)pnErr->u.i, 
23040 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65  &nErr);.  sqlite
23050 33 44 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f  3DbFree(db, aRoo
23060 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69  t);.  pnErr->u.i
23070 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69   -= nErr;.  sqli
23080 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
23090 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e  l(pIn1);.  if( n
230a0 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73  Err==0 ){.    as
230b0 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20  sert( z==0 );.  
230c0 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29  }else if( z==0 )
230d0 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
230e0 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  m;.  }else{.    
230f0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
23100 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31  tStr(pIn1, z, -1
23110 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73  , SQLITE_UTF8, s
23120 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20  qlite3_free);.  
23130 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  }.  UPDATE_MAX_B
23140 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
23150 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
23160 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c  geEncoding(pIn1,
23170 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72   encoding);.  br
23180 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
23190 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
231a0 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
231b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
231c0 65 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20  etAdd P1 P2 * * 
231d0 2a 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74  *.**.** Insert t
231e0 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
231f0 20 68 65 6c 64 20 62 79 20 72 65 67 69 73 74 65   held by registe
23200 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c  r P2 into a bool
23210 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c  ean index.** hel
23220 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  d in register P1
23230 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72  ..**.** An asser
23240 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32  tion fails if P2
23250 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
23260 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  er..*/.case OP_R
23270 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20  owSetAdd: {     
23280 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65    /* in2 */.  Me
23290 6d 20 2a 70 49 64 78 3b 0a 20 20 4d 65 6d 20 2a  m *pIdx;.  Mem *
232a0 70 56 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20  pVal;.  assert( 
232b0 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
232c0 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
232d0 0a 20 20 70 49 64 78 20 3d 20 26 70 2d 3e 61 4d  .  pIdx = &p->aM
232e0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
232f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
23300 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e   && pOp->p2<=p->
23310 6e 4d 65 6d 20 29 3b 0a 20 20 70 56 61 6c 20 3d  nMem );.  pVal =
23320 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
23330 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  2];.  assert( (p
23340 56 61 6c 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Val->flags & MEM
23350 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66  _Int)!=0 );.  if
23360 28 20 28 70 49 64 78 2d 3e 66 6c 61 67 73 20 26  ( (pIdx->flags &
23370 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
23380 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
23390 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
233a0 49 64 78 29 3b 0a 20 20 20 20 69 66 28 20 28 70  Idx);.    if( (p
233b0 49 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Idx->flags & MEM
233c0 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
233d0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
233e0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
233f0 73 65 72 74 28 70 49 64 78 2d 3e 75 2e 70 52 6f  sert(pIdx->u.pRo
23400 77 53 65 74 2c 20 70 56 61 6c 2d 3e 75 2e 69 29  wSet, pVal->u.i)
23410 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
23420 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52   Opcode: RowSetR
23430 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ead P1 P2 P3 * *
23440 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74  .**.** Extract t
23450 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
23460 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69  e from boolean i
23470 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75 74 20  ndex P1 and put 
23480 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a  that value into.
23490 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  ** register P3. 
234a0 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20   Or, if boolean 
234b0 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69 74  index P1 is init
234c0 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61  ially empty, lea
234d0 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67  ve P3.** unchang
234e0 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69  ed and jump to i
234f0 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a  nstruction P2..*
23500 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
23510 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  Read: {       /*
23520 20 6a 75 6d 70 2c 20 6f 75 74 33 20 2a 2f 0a 20   jump, out3 */. 
23530 20 4d 65 6d 20 2a 70 49 64 78 3b 0a 20 20 69 36   Mem *pIdx;.  i6
23540 34 20 76 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  4 val;.  assert(
23550 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
23560 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
23570 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  ;.  CHECK_FOR_IN
23580 54 45 52 52 55 50 54 3b 0a 20 20 70 49 64 78 20  TERRUPT;.  pIdx 
23590 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
235a0 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70  p1];.  pOut = &p
235b0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
235c0 0a 20 20 69 66 28 20 28 70 49 64 78 2d 3e 66 6c  .  if( (pIdx->fl
235d0 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
235e0 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69  )==0 .   || sqli
235f0 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49  te3RowSetNext(pI
23600 64 78 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26  dx->u.pRowSet, &
23610 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20  val)==0.  ){.   
23620 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20   /* The boolean 
23630 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a  index is empty *
23640 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
23650 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 64 78  eMemSetNull(pIdx
23660 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  );.    pc = pOp-
23670 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p2 - 1;.  }else
23680 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65  {.    /* A value
23690 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d   was pulled from
236a0 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
236b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
236c0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
236d0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 73  p->nMem );.    s
236e0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
236f0 49 6e 74 36 34 28 70 4f 75 74 2c 20 76 61 6c 29  Int64(pOut, val)
23700 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
23710 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
23720 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 2f  E_OMIT_TRIGGER./
23730 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 74 65 78  * Opcode: Contex
23740 74 50 75 73 68 20 2a 20 2a 20 2a 20 0a 2a 2a 0a  tPush * * * .**.
23750 2a 2a 20 53 61 76 65 20 74 68 65 20 63 75 72 72  ** Save the curr
23760 65 6e 74 20 56 64 62 65 20 63 6f 6e 74 65 78 74  ent Vdbe context
23770 20 73 75 63 68 20 74 68 61 74 20 69 74 20 63 61   such that it ca
23780 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 62 79  n be restored by
23790 20 61 20 43 6f 6e 74 65 78 74 50 6f 70 0a 2a 2a   a ContextPop.**
237a0 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 63 6f 6e   opcode. The con
237b0 74 65 78 74 20 73 74 6f 72 65 73 20 74 68 65 20  text stores the 
237c0 6c 61 73 74 20 69 6e 73 65 72 74 20 72 6f 77 20  last insert row 
237d0 69 64 2c 20 74 68 65 20 6c 61 73 74 20 73 74 61  id, the last sta
237e0 74 65 6d 65 6e 74 20 63 68 61 6e 67 65 0a 2a 2a  tement change.**
237f0 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74 68 65 20   count, and the 
23800 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e  current statemen
23810 74 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 2e 0a  t change count..
23820 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 74 65  */.case OP_Conte
23830 78 74 50 75 73 68 3a 20 7b 0a 20 20 69 6e 74 20  xtPush: {.  int 
23840 69 20 3d 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74  i = p->contextSt
23850 61 63 6b 54 6f 70 2b 2b 3b 0a 20 20 43 6f 6e 74  ackTop++;.  Cont
23860 65 78 74 20 2a 70 43 6f 6e 74 65 78 74 3b 0a 0a  ext *pContext;..
23870 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29    assert( i>=0 )
23880 3b 0a 20 20 2f 2a 20 46 49 58 20 4d 45 3a 20 54  ;.  /* FIX ME: T
23890 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 61 6c  his should be al
238a0 6c 6f 63 61 74 65 64 20 61 73 20 70 61 72 74 20  located as part 
238b0 6f 66 20 74 68 65 20 76 64 62 65 20 61 74 20 63  of the vdbe at c
238c0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 20  ompile-time */. 
238d0 20 69 66 28 20 69 3e 3d 70 2d 3e 63 6f 6e 74 65   if( i>=p->conte
238e0 78 74 53 74 61 63 6b 44 65 70 74 68 20 29 7b 0a  xtStackDepth ){.
238f0 20 20 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74      p->contextSt
23900 61 63 6b 44 65 70 74 68 20 3d 20 69 2b 31 3b 0a  ackDepth = i+1;.
23910 20 20 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74      p->contextSt
23920 61 63 6b 20 3d 20 73 71 6c 69 74 65 33 44 62 52  ack = sqlite3DbR
23930 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 64 62 2c  eallocOrFree(db,
23940 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b   p->contextStack
23950 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
23960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23970 20 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65              size
23980 6f 66 28 43 6f 6e 74 65 78 74 29 2a 28 69 2b 31  of(Context)*(i+1
23990 29 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 63  ));.    if( p->c
239a0 6f 6e 74 65 78 74 53 74 61 63 6b 3d 3d 30 20 29  ontextStack==0 )
239b0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
239c0 7d 0a 20 20 70 43 6f 6e 74 65 78 74 20 3d 20 26  }.  pContext = &
239d0 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b  p->contextStack[
239e0 69 5d 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e  i];.  pContext->
239f0 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e  lastRowid = db->
23a00 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 43 6f  lastRowid;.  pCo
23a10 6e 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65 20 3d  ntext->nChange =
23a20 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 62   p->nChange;.  b
23a30 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23a40 64 65 3a 20 43 6f 6e 74 65 78 74 50 6f 70 20 2a  de: ContextPop *
23a50 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 52 65 73 74   * * .**.** Rest
23a60 6f 72 65 20 74 68 65 20 56 64 62 65 20 63 6f 6e  ore the Vdbe con
23a70 74 65 78 74 20 74 6f 20 74 68 65 20 73 74 61 74  text to the stat
23a80 65 20 69 74 20 77 61 73 20 69 6e 20 77 68 65 6e  e it was in when
23a90 20 63 6f 6e 74 65 78 74 50 75 73 68 20 77 61 73   contextPush was
23aa0 20 6c 61 73 74 0a 2a 2a 20 65 78 65 63 75 74 65   last.** execute
23ab0 64 2e 20 54 68 65 20 63 6f 6e 74 65 78 74 20 73  d. The context s
23ac0 74 6f 72 65 73 20 74 68 65 20 6c 61 73 74 20 69  tores the last i
23ad0 6e 73 65 72 74 20 72 6f 77 20 69 64 2c 20 74 68  nsert row id, th
23ae0 65 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  e last statement
23af0 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
23b00 2c 20 61 6e 64 20 74 68 65 20 63 75 72 72 65 6e  , and the curren
23b10 74 20 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e  t statement chan
23b20 67 65 20 63 6f 75 6e 74 2e 0a 2a 2f 0a 63 61 73  ge count..*/.cas
23b30 65 20 4f 50 5f 43 6f 6e 74 65 78 74 50 6f 70 3a  e OP_ContextPop:
23b40 20 7b 0a 20 20 43 6f 6e 74 65 78 74 20 2a 70 43   {.  Context *pC
23b50 6f 6e 74 65 78 74 20 3d 20 26 70 2d 3e 63 6f 6e  ontext = &p->con
23b60 74 65 78 74 53 74 61 63 6b 5b 2d 2d 70 2d 3e 63  textStack[--p->c
23b70 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f 70 5d 3b  ontextStackTop];
23b80 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 63 6f  .  assert( p->co
23b90 6e 74 65 78 74 53 74 61 63 6b 54 6f 70 3e 3d 30  ntextStackTop>=0
23ba0 20 29 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f   );.  db->lastRo
23bb0 77 69 64 20 3d 20 70 43 6f 6e 74 65 78 74 2d 3e  wid = pContext->
23bc0 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 2d 3e  lastRowid;.  p->
23bd0 6e 43 68 61 6e 67 65 20 3d 20 70 43 6f 6e 74 65  nChange = pConte
23be0 78 74 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 62  xt->nChange;.  b
23bf0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
23c00 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
23c10 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f  _OMIT_TRIGGER */
23c20 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
23c30 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
23c40 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  ENT./* Opcode: M
23c50 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20  emMax P1 P2 * * 
23c60 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
23c70 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
23c80 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
23c90 6d 75 6d 20 6f 66 20 69 74 73 20 63 75 72 72 65  mum of its curre
23ca0 6e 74 20 76 61 6c 75 65 0a 2a 2a 20 61 6e 64 20  nt value.** and 
23cb0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
23cc0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
23cd0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
23ce0 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72   throws an error
23cf0 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   if the memory c
23d00 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  ell is not initi
23d10 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67  ally.** an integ
23d20 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  er..*/.case OP_M
23d30 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20  emMax: {        
23d40 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20  /* in1, in2 */. 
23d50 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
23d60 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
23d70 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
23d80 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
23d90 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
23da0 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20  .i<pIn2->u.i){. 
23db0 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70     pIn1->u.i = p
23dc0 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In2->u.i;.  }.  
23dd0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
23de0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  /* SQLITE_OMIT_A
23df0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
23e00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f  ./* Opcode: IfPo
23e10 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  s P1 P2 * * *.**
23e20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
23e30 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
23e40 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
23e50 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
23e60 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
23e70 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
23e80 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
23e90 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
23ea0 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
23eb0 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
23ec0 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
23ed0 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
23ee0 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
23ef0 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
23f00 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
23f10 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  */.  assert( pIn
23f20 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
23f30 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   );.  if( pIn1->
23f40 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63  u.i>0 ){.     pc
23f50 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
23f60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
23f70 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67  /* Opcode: IfNeg
23f80 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
23f90 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
23fa0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
23fb0 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f  s less than zero
23fc0 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  , jump to P2. .*
23fd0 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
23fe0 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
23ff0 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
24000 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
24010 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
24020 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
24030 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
24040 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
24050 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
24060 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20  e OP_IfNeg: {   
24070 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
24080 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
24090 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
240a0 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
240b0 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20 20 20  ->u.i<0 ){.     
240c0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
240d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
240e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 5a  ../* Opcode: IfZ
240f0 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
24100 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  **.** If the val
24110 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
24120 31 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20  1 is exactly 0, 
24130 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  jump to P2. .**.
24140 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
24150 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
24160 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
24170 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
24180 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
24190 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
241a0 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
241b0 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
241c0 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
241d0 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  OP_IfZero: {    
241e0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
241f0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 49   */.  assert( pI
24200 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
24210 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  t );.  if( pIn1-
24220 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20  >u.i==0 ){.     
24230 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
24240 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
24250 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
24260 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20  Step * P2 P3 P4 
24270 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P5.**.** Execute
24280 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
24290 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
242a0 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e  ate.  The.** fun
242b0 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67  ction has P5 arg
242c0 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20  uments.   P4 is 
242d0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
242e0 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75   FuncDef.** stru
242f0 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69  cture that speci
24300 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  fies the functio
24310 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74 65 72  n.  Use register
24320 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61 63  .** P3 as the ac
24330 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
24340 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
24350 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
24360 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
24370 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
24380 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  rs..*/.case OP_A
24390 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20  ggStep: {.  int 
243a0 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 69  n = pOp->p5;.  i
243b0 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65  nt i;.  Mem *pMe
243c0 6d 2c 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69  m, *pRec;.  sqli
243d0 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
243e0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
243f0 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 61 73 73   **apVal;..  ass
24400 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70  ert( n>=0 );.  p
24410 52 65 63 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Rec = &p->aMem[p
24420 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c  Op->p2];.  apVal
24430 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61   = p->apArg;.  a
24440 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20  ssert( apVal || 
24450 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d  n==0 );.  for(i=
24460 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65  0; i<n; i++, pRe
24470 63 2b 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b  c++){.    apVal[
24480 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 73  i] = pRec;.    s
24490 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 52 65  toreTypeInfo(pRe
244a0 63 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  c, encoding);.  
244b0 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20  }.  ctx.pFunc = 
244c0 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
244d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
244e0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
244f0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78 2e  ->nMem );.  ctx.
24500 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 70  pMem = pMem = &p
24510 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
24520 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20  .  pMem->n++;.  
24530 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45  ctx.s.flags = ME
24540 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e  M_Null;.  ctx.s.
24550 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a  z = 0;.  ctx.s.z
24560 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74  Malloc = 0;.  ct
24570 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  x.s.xDel = 0;.  
24580 63 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20  ctx.s.db = db;. 
24590 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30   ctx.isError = 0
245a0 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20  ;.  ctx.pColl = 
245b0 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
245c0 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  nc->flags & SQLI
245d0 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
245e0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
245f0 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20  pOp>p->aOp );.  
24600 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
24610 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ].p4type==P4_COL
24620 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65  LSEQ );.    asse
24630 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
24640 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
24650 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20  ;.    ctx.pColl 
24660 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f  = pOp[-1].p4.pCo
24670 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70  ll;.  }.  (ctx.p
24680 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74  Func->xStep)(&ct
24690 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20  x, n, apVal);.  
246a0 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
246b0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
246c0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
246d0 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
246e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
246f0 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20  t(&ctx.s));.    
24700 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
24710 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
24720 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
24730 74 78 2e 73 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  tx.s);.  break;.
24740 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
24750 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50  gFinal P1 P2 * P
24760 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  4 *.**.** Execut
24770 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20  e the finalizer 
24780 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
24790 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69  aggregate.  P1 i
247a0 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20  s.** the memory 
247b0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73  location that is
247c0 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
247d0 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61   for the aggrega
247e0 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  te..**.** P2 is 
247f0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
24800 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
24810 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
24820 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
24830 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
24840 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
24850 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
24860 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
24870 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
24880 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
24890 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
248a0 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
248b0 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
248c0 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
248d0 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
248e0 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
248f0 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
24900 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
24910 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63  the degenerate c
24920 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
24930 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
24940 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
24950 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73  y called..*/.cas
24960 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b  e OP_AggFinal: {
24970 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
24980 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24990 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
249a0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20  >nMem );.  pMem 
249b0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
249c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
249d0 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28  pMem->flags & ~(
249e0 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67  MEM_Null|MEM_Agg
249f0 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ))==0 );.  rc = 
24a00 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69  sqlite3VdbeMemFi
24a10 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70  nalize(pMem, pOp
24a20 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69  ->p4.pFunc);.  i
24a30 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  f( rc==SQLITE_ER
24a40 52 4f 52 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ROR ){.    sqlit
24a50 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
24a60 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
24a70 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
24a80 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20  _text(pMem));.  
24a90 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
24aa0 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d  hangeEncoding(pM
24ab0 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  em, encoding);. 
24ac0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
24ad0 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66  SIZE(pMem);.  if
24ae0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
24af0 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a  TooBig(pMem) ){.
24b00 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
24b10 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
24b20 0a 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ...#if !defined(
24b30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
24b40 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  UM) && !defined(
24b50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
24b60 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  CH)./* Opcode: V
24b70 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a  acuum * * * * *.
24b80 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65  **.** Vacuum the
24b90 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
24ba0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
24bb0 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20  ill cause other 
24bc0 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69  virtual.** machi
24bd0 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65  nes to be create
24be0 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d  d and run.  It m
24bf0 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64  ay not be called
24c00 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20   from within.** 
24c10 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  a transaction..*
24c20 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d  /.case OP_Vacuum
24c30 3a 20 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  : {.  if( sqlite
24c40 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29  3SafetyOff(db) )
24c50 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
24c60 74 6f 5f 6d 69 73 75 73 65 3b 20 0a 20 20 72 63  to_misuse; .  rc
24c70 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63   = sqlite3RunVac
24c80 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  uum(&p->zErrMsg,
24c90 20 64 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69   db);.  if( sqli
24ca0 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
24cb0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
24cc0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 62 72  _to_misuse;.  br
24cd0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
24ce0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
24cf0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
24d00 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  UM)./* Opcode: I
24d10 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20  ncrVacuum P1 P2 
24d20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66  * * *.**.** Perf
24d30 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65  orm a single ste
24d40 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65  p of the increme
24d50 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63  ntal vacuum proc
24d60 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20  edure on.** the 
24d70 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  P1 database. If 
24d80 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66  the vacuum has f
24d90 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f  inished, jump to
24da0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
24db0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
24dc0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
24dd0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
24de0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
24df0 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20  IncrVacuum: {   
24e00 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
24e10 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
24e20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24e30 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
24e40 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
24e50 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
24e60 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29  k & (1<<pOp->p1)
24e70 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  )!=0 );.  pBt = 
24e80 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
24e90 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .pBt;.  rc = sql
24ea0 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63  ite3BtreeIncrVac
24eb0 75 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20  uum(pBt);.  if( 
24ec0 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
24ed0 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
24ee0 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20  >p2 - 1;.    rc 
24ef0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  = SQLITE_OK;.  }
24f00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
24f10 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  if../* Opcode: E
24f20 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a  xpire P1 * * * *
24f30 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65  .**.** Cause pre
24f40 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65  compiled stateme
24f50 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78  nts to become ex
24f60 70 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65  pired. An expire
24f70 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66  d statement.** f
24f80 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72  ails with an err
24f90 6f 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54  or code of SQLIT
24fa0 45 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20 69  E_SCHEMA if it i
24fb0 73 20 65 76 65 72 20 65 78 65 63 75 74 65 64 20  s ever executed 
24fc0 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33  .** (via sqlite3
24fd0 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a  _step())..** .**
24fe0 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
24ff0 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
25000 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
25010 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
25020 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
25030 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
25040 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
25050 74 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74  tement is affect
25060 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ed. .*/.case OP_
25070 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20  Expire: {.  if( 
25080 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  !pOp->p1 ){.    
25090 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
250a0 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
250b0 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
250c0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
250d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
250e0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
250f0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
25100 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61  HE./* Opcode: Ta
25110 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33  bleLock P1 P2 P3
25120 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61   P4 *.**.** Obta
25130 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70  in a lock on a p
25140 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e  articular table.
25150 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
25160 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  n is only used w
25170 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65  hen.** the share
25180 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20  d-cache feature 
25190 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a  is enabled. .**.
251a0 2a 2a 20 49 66 20 50 31 20 69 73 20 20 74 68 65  ** If P1 is  the
251b0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
251c0 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65  tabase in sqlite
251d0 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64  3.aDb[] of the d
251e0 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68  atabase.** on wh
251f0 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20  ich the lock is 
25200 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61  acquired.  A rea
25210 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65  dlock is obtaine
25220 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a  d if P3==0 or.**
25230 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66   a write lock if
25240 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32   P3==1..**.** P2
25250 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f   contains the ro
25260 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74  ot-page of the t
25270 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a  able to lock..**
25280 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20  .** P4 contains 
25290 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
252a0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
252b0 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e  le being locked.
252c0 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a   This is only.**
252d0 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
252e0 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  e an error messa
252f0 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63  ge if the lock c
25300 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65  annot be obtaine
25310 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61  d..*/.case OP_Ta
25320 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 69 6e 74  bleLock: {.  int
25330 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a   p1 = pOp->p1; .
25340 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b    u8 isWriteLock
25350 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a   = (u8)pOp->p3;.
25360 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20    assert( p1>=0 
25370 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  && p1<db->nDb );
25380 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
25390 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
253a0 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  1))!=0 );.  asse
253b0 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d  rt( isWriteLock=
253c0 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63  =0 || isWriteLoc
253d0 6b 3d 3d 31 20 29 3b 0a 20 20 72 63 20 3d 20 73  k==1 );.  rc = s
253e0 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54  qlite3BtreeLockT
253f0 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d  able(db->aDb[p1]
25400 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69  .pBt, pOp->p2, i
25410 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 69  sWriteLock);.  i
25420 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4c 4f  f( rc==SQLITE_LO
25430 43 4b 45 44 20 29 7b 0a 20 20 20 20 63 6f 6e 73  CKED ){.    cons
25440 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d  t char *z = pOp-
25450 3e 70 34 2e 7a 3b 0a 20 20 20 20 73 71 6c 69 74  >p4.z;.    sqlit
25460 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
25470 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61  zErrMsg, db, "da
25480 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
25490 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b  locked: %s", z);
254a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
254b0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
254c0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
254d0 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  HE */..#ifndef S
254e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
254f0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
25500 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20  e: VBegin * * * 
25510 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  P4 *.**.** P4 ma
25520 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74  y be a pointer t
25530 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  o an sqlite3_vta
25540 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20  b structure. If 
25550 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a  so, call the .**
25560 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66   xBegin method f
25570 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
25580 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68  *.** Also, wheth
25590 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20  er or not P4 is 
255a0 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20  set, check that 
255b0 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e  this is not bein
255c0 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a  g called from.**
255d0 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61   within a callba
255e0 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  ck to a virtual 
255f0 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65  table xSync() me
25600 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20  thod. If it is, 
25610 73 65 74 20 74 68 65 0a 2a 2a 20 65 72 72 6f 72  set the.** error
25620 20 63 6f 64 65 20 74 6f 20 53 51 4c 49 54 45 5f   code to SQLITE_
25630 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20  LOCKED..*/.case 
25640 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 73  OP_VBegin: {.  s
25650 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
25660 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
25670 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ab;.  rc = sqlit
25680 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20  e3VtabBegin(db, 
25690 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 70 56  pVtab);.  if( pV
256a0 74 61 62 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  tab ){.    sqlit
256b0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
256c0 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d  zErrMsg);.    p-
256d0 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
256e0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70  ->zErrMsg;.    p
256f0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
25700 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
25710 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
25720 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
25730 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
25740 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
25750 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
25760 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20  ode: VCreate P1 
25770 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
25780 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
25790 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
257a0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
257b0 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74   Call the xCreat
257c0 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20  e method.** for 
257d0 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
257e0 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20  ase OP_VCreate: 
257f0 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  {.  rc = sqlite3
25800 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64  VtabCallCreate(d
25810 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
25820 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d  >p4.z, &p->zErrM
25830 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  sg);.  break;.}.
25840 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
25850 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
25860 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
25870 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
25880 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
25890 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a  e: VDestroy P1 *
258a0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
258b0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
258c0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
258d0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
258e0 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72   Call the xDestr
258f0 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20  oy method.** of 
25900 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
25910 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a  ase OP_VDestroy:
25920 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65   {.  p->inVtabMe
25930 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d  thod = 2;.  rc =
25940 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
25950 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d  Destroy(db, pOp-
25960 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
25970 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
25980 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  od = 0;.  break;
25990 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
259a0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
259b0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
259c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
259d0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
259e0 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a  code: VOpen P1 *
259f0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
25a00 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
25a10 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
25a20 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
25a30 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
25a40 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  re..** P1 is a c
25a50 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54  ursor number.  T
25a60 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73  his opcode opens
25a70 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65   a cursor to the
25a80 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
25a90 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  e and stores tha
25aa0 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a  t cursor in P1..
25ab0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e  */.case OP_VOpen
25ac0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
25ad0 20 2a 70 43 75 72 20 3d 20 30 3b 0a 20 20 73 71   *pCur = 0;.  sq
25ae0 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
25af0 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 20 3d  r *pVtabCursor =
25b00 20 30 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f 76   0;..  sqlite3_v
25b10 74 61 62 20 2a 70 56 74 61 62 20 3d 20 70 4f 70  tab *pVtab = pOp
25b20 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 73 71  ->p4.pVtab;.  sq
25b30 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
25b40 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33  odule = (sqlite3
25b50 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d  _module *)pVtab-
25b60 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73  >pModule;..  ass
25b70 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f  ert(pVtab && pMo
25b80 64 75 6c 65 29 3b 0a 20 20 69 66 28 20 73 71 6c  dule);.  if( sql
25b90 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
25ba0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
25bb0 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
25bc0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f  rc = pModule->xO
25bd0 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74 61  pen(pVtab, &pVta
25be0 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69  bCursor);.  sqli
25bf0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
25c00 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e  >zErrMsg);.  p->
25c10 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
25c20 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61  >zErrMsg;.  pVta
25c30 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
25c40 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
25c50 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
25c60 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
25c70 73 75 73 65 3b 0a 20 20 69 66 28 20 53 51 4c 49  suse;.  if( SQLI
25c80 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20  TE_OK==rc ){.   
25c90 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73   /* Initialize s
25ca0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
25cb0 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f  or base class */
25cc0 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f 72  .    pVtabCursor
25cd0 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b  ->pVtab = pVtab;
25ce0 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  ..    /* Initial
25cf0 69 73 65 20 76 64 62 65 20 63 75 72 73 6f 72 20  ise vdbe cursor 
25d00 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43  object */.    pC
25d10 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
25d20 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
25d30 26 70 4f 70 5b 2d 31 5d 2c 20 2d 31 2c 20 30 29  &pOp[-1], -1, 0)
25d40 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29  ;.    if( pCur )
25d50 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56  {.      pCur->pV
25d60 74 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61  tabCursor = pVta
25d70 62 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70  bCursor;.      p
25d80 43 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70  Cur->pModule = p
25d90 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
25da0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
25db0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
25dc0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
25dd0 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65  1;.      pModule
25de0 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75  ->xClose(pVtabCu
25df0 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
25e00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
25e10 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
25e20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
25e30 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
25e40 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
25e50 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
25e60 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20  Filter P1 P2 P3 
25e70 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  P4 *.**.** P1 is
25e80 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64   a cursor opened
25e90 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50   using VOpen.  P
25ea0 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20  2 is an address 
25eb0 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a  to jump to if.**
25ec0 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65   the filtered re
25ed0 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
25ee0 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65  y..**.** P4 is e
25ef0 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
25f00 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20  string that was 
25f10 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
25f20 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d   xBestIndex.** m
25f30 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
25f40 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70  ule.  The interp
25f50 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
25f60 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66  P4 string is lef
25f70 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75  t.** to the modu
25f80 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
25f90 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
25fa0 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
25fb0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
25fc0 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
25fd0 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a  able specified.*
25fe0 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e  * by P1.  The in
25ff0 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e  teger query plan
26000 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46   parameter to xF
26010 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20  ilter is stored 
26020 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  in register.** P
26030 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31  3. Register P3+1
26040 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63   stores the argc
26050 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65   parameter to be
26060 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a   passed to the.*
26070 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  * xFilter method
26080 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32  . Registers P3+2
26090 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20  ..P3+1+argc are 
260a0 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69  the argc.** addi
260b0 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72  tional parameter
260c0 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73  s which are pass
260d0 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72  ed to.** xFilter
260e0 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74   as argv. Regist
260f0 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20  er P3+2 becomes 
26100 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73  argv[0] when pas
26110 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a  sed to xFilter..
26120 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20  **.** A jump is 
26130 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68  made to P2 if th
26140 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74  e result set aft
26150 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75  er filtering wou
26160 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a  ld be empty..*/.
26170 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a  case OP_VFilter:
26180 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
26190 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
261a0 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73  t iQuery;.  cons
261b0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
261c0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
261d0 20 2a 70 51 75 65 72 79 20 3d 20 26 70 2d 3e 61   *pQuery = &p->a
261e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
261f0 4d 65 6d 20 2a 70 41 72 67 63 20 3d 20 26 70 51  Mem *pArgc = &pQ
26200 75 65 72 79 5b 31 5d 3b 0a 20 20 73 71 6c 69 74  uery[1];.  sqlit
26210 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
26220 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73  pVtabCursor;.  s
26230 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
26240 61 62 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f  ab;..  VdbeCurso
26250 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  r *pCur = p->apC
26260 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 0a 20 20  sr[pOp->p1];..  
26270 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
26280 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b  Op->p3, pQuery);
26290 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
262a0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
262b0 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20    pVtabCursor = 
262c0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
262d0 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74  r;.  pVtab = pVt
262e0 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
262f0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
26300 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  ab->pModule;..  
26310 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65  /* Grab the inde
26320 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67  x number and arg
26330 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a  c parameters */.
26340 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72    assert( (pQuer
26350 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  y->flags&MEM_Int
26360 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66  )!=0 && pArgc->f
26370 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
26380 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70  .  nArg = (int)p
26390 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75  Argc->u.i;.  iQu
263a0 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72  ery = (int)pQuer
263b0 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e  y->u.i;..  /* In
263c0 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72  voke the xFilter
263d0 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20   method */.  {. 
263e0 20 20 20 69 6e 74 20 72 65 73 20 3d 20 30 3b 0a     int res = 0;.
263f0 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 4d      int i;.    M
26400 65 6d 20 2a 2a 61 70 41 72 67 20 3d 20 70 2d 3e  em **apArg = p->
26410 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28 69  apArg;.    for(i
26420 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b   = 0; i<nArg; i+
26430 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67 5b  +){.      apArg[
26440 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d  i] = &pArgc[i+1]
26450 3b 0a 20 20 20 20 20 20 73 74 6f 72 65 54 79 70  ;.      storeTyp
26460 65 49 6e 66 6f 28 61 70 41 72 67 5b 69 5d 2c 20  eInfo(apArg[i], 
26470 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  0);.    }..    i
26480 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
26490 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61  Off(db) ) goto a
264a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
264b0 73 65 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se;.    sqlite3V
264c0 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a  tabLock(pVtab);.
264d0 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74      p->inVtabMet
264e0 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20  hod = 1;.    rc 
264f0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74  = pModule->xFilt
26500 65 72 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20  er(pVtabCursor, 
26510 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e  iQuery, pOp->p4.
26520 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b  z, nArg, apArg);
26530 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  .    p->inVtabMe
26540 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20 20 73 71  thod = 0;.    sq
26550 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
26560 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  p->zErrMsg);.   
26570 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
26580 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
26590 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67    pVtab->zErrMsg
265a0 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
265b0 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20  3VtabUnlock(db, 
265c0 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
265d0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
265e0 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  .      res = pMo
265f0 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62  dule->xEof(pVtab
26600 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
26610 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
26620 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
26630 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
26640 69 73 75 73 65 3b 0a 0a 20 20 20 20 69 66 28 20  isuse;..    if( 
26650 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  res ){.      pc 
26660 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
26670 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d     }.  }.  pCur-
26680 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20  >nullRow = 0;.. 
26690 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
266a0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
266b0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
266c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
266d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
266e0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 6f  E./* Opcode: VRo
266f0 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
26700 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 74 6f  **.** Store into
26710 20 72 65 67 69 73 74 65 72 20 50 32 20 20 74 68   register P2  th
26720 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 74 68  e rowid of.** th
26730 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
26740 74 68 61 74 20 74 68 65 20 50 31 20 63 75 72 73  that the P1 curs
26750 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
26760 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52  o..*/.case OP_VR
26770 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
26780 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
26790 65 6c 65 61 73 65 20 2a 2f 0a 20 20 73 71 6c 69  elease */.  sqli
267a0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
267b0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
267c0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
267d0 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ;.  sqlite_int64
267e0 20 69 52 6f 77 3b 0a 20 20 56 64 62 65 43 75 72   iRow;.  VdbeCur
267f0 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61  sor *pCur = p->a
26800 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 0a  pCsr[pOp->p1];..
26810 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
26820 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
26830 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
26840 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  ow ){.    break;
26850 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
26860 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
26870 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
26880 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
26890 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ule;.  assert( p
268a0 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29  Module->xRowid )
268b0 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ;.  if( sqlite3S
268c0 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
268d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
268e0 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20  _misuse;.  rc = 
268f0 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28  pModule->xRowid(
26900 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
26910 72 2c 20 26 69 52 6f 77 29 3b 0a 20 20 73 71 6c  r, &iRow);.  sql
26920 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
26930 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d  ->zErrMsg);.  p-
26940 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
26950 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74  ->zErrMsg;.  pVt
26960 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
26970 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
26980 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
26990 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
269a0 69 73 75 73 65 3b 0a 20 20 4d 65 6d 53 65 74 54  isuse;.  MemSetT
269b0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
269c0 4d 5f 49 6e 74 29 3b 0a 20 20 70 4f 75 74 2d 3e  M_Int);.  pOut->
269d0 75 2e 69 20 3d 20 69 52 6f 77 3b 0a 20 20 62 72  u.i = iRow;.  br
269e0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
269f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
26a00 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
26a10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26a20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
26a30 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
26a40 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
26a50 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76  *.** Store the v
26a60 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
26a70 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
26a80 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69  he row of the vi
26a90 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74  rtual-table that
26aa0 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73   the .** P1 curs
26ab0 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
26ac0 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  o into register 
26ad0 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P3..*/.case OP_V
26ae0 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69  Column: {.  sqli
26af0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
26b00 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
26b10 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
26b20 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a  ;.  Mem *pDest;.
26b30 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
26b40 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56  t sContext;..  V
26b50 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
26b60 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
26b70 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
26b80 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
26b90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
26ba0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
26bb0 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
26bc0 20 70 44 65 73 74 20 3d 20 26 70 2d 3e 61 4d 65   pDest = &p->aMe
26bd0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
26be0 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
26bf0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
26c00 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
26c10 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  st);.    break;.
26c20 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
26c30 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
26c40 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
26c50 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
26c60 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
26c70 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29  odule->xColumn )
26c80 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e  ;.  memset(&sCon
26c90 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28  text, 0, sizeof(
26ca0 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f  sContext));..  /
26cb0 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c  * The output cel
26cc0 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61  l may already ha
26cd0 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f  ve a buffer allo
26ce0 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a  cated. Move.  **
26cf0 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e   the current con
26d00 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78  tents to sContex
26d10 74 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74  t.s so in case t
26d20 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  he user-function
26d30 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74   .  ** can use t
26d40 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  he already alloc
26d50 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74  ated buffer inst
26d60 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e  ead of allocatin
26d70 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e  g a .  ** new on
26d80 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
26d90 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43  3VdbeMemMove(&sC
26da0 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29  ontext.s, pDest)
26db0 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
26dc0 61 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ag(&sContext.s, 
26dd0 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 69 66  MEM_Null);..  if
26de0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
26df0 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
26e00 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
26e10 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  e;.  rc = pModul
26e20 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d  e->xColumn(pCur-
26e30 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73  >pVtabCursor, &s
26e40 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32  Context, pOp->p2
26e50 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
26e60 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
26e70 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67  g);.  p->zErrMsg
26e80 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73   = pVtab->zErrMs
26e90 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  g;.  pVtab->zErr
26ea0 4d 73 67 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 43  Msg = 0;..  /* C
26eb0 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f  opy the result o
26ec0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  f the function t
26ed0 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  o the P3 registe
26ee0 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68  r. We.  ** do th
26ef0 69 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  is regardless of
26f00 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
26f10 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 65 64  an error occured
26f20 20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20   to ensure any. 
26f30 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f   ** dynamic allo
26f40 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65  cation in sConte
26f50 78 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75  xt.s (a Mem stru
26f60 63 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64  ct) is  released
26f70 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
26f80 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
26f90 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ng(&sContext.s, 
26fa0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47  encoding);.  REG
26fb0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
26fc0 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 73  >p3, pDest);.  s
26fd0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
26fe0 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65  e(pDest, &sConte
26ff0 78 74 2e 73 29 3b 0a 20 20 55 50 44 41 54 45 5f  xt.s);.  UPDATE_
27000 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
27010 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69  st);..  if( sqli
27020 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
27030 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  ){.    goto abor
27040 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
27050 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
27060 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
27070 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f  pDest) ){.    go
27080 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
27090 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
270a0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
270b0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
270c0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
270d0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
270e0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e  LE./* Opcode: VN
270f0 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ext P1 P2 * * *.
27100 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69  **.** Advance vi
27110 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74  rtual table P1 t
27120 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69  o the next row i
27130 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  n its result set
27140 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20   and.** jump to 
27150 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
27160 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74   Or, if the virt
27170 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65  ual table has re
27180 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64  ached.** the end
27190 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73   of its result s
271a0 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  et, then fall th
271b0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
271c0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
271d0 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a  /.case OP_VNext:
271e0 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
271f0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
27200 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
27210 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
27220 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65  Module;.  int re
27230 73 20 3d 20 30 3b 0a 0a 20 20 56 64 62 65 43 75  s = 0;..  VdbeCu
27240 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
27250 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
27260 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
27270 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
27280 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
27290 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  ow ){.    break;
272a0 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
272b0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
272c0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
272d0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
272e0 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ule;.  assert( p
272f0 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b  Module->xNext );
27300 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
27310 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64  e xNext() method
27320 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
27330 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20  There is no way 
27340 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64  for the.  ** und
27350 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e  erlying implemen
27360 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e  tation to return
27370 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65   an error if one
27380 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20   occurs during. 
27390 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73   ** xNext(). Ins
273a0 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f  tead, if an erro
273b0 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69  r occurs, true i
273c0 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69  s returned (indi
273d0 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a  cating that .  *
273e0 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61  * data is availa
273f0 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72  ble) and the err
27400 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  or code returned
27410 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72   when xColumn or
27420 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72  .  ** some other
27430 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20   method is next 
27440 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73  invoked on the s
27450 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ave virtual tabl
27460 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20  e cursor..  */. 
27470 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
27480 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
27490 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
274a0 73 75 73 65 3b 0a 20 20 73 71 6c 69 74 65 33 56  suse;.  sqlite3V
274b0 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a  tabLock(pVtab);.
274c0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
274d0 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d  d = 1;.  rc = pM
274e0 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75  odule->xNext(pCu
274f0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
27500 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
27510 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  od = 0;.  sqlite
27520 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
27530 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45  ErrMsg);.  p->zE
27540 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
27550 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d  ErrMsg;.  pVtab-
27560 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
27570 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
27580 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20 20  k(db, pVtab);.  
27590 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
275a0 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70  K ){.    res = p
275b0 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75  Module->xEof(pCu
275c0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
275d0 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
275e0 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
275f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
27600 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 69 66  to_misuse;..  if
27610 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a  ( !res ){.    /*
27620 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74   If there is dat
27630 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  a, jump to P2 */
27640 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
27650 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
27660 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
27670 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
27680 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
27690 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
276a0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
276b0 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
276c0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
276d0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
276e0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
276f0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
27700 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
27710 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
27720 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
27730 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
27740 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
27750 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
27760 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
27770 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
27780 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
27790 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
277a0 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
277b0 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
277c0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
277d0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
277e0 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 20 3d  ;.  Mem *pName =
277f0 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
27800 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56  1];.  assert( pV
27810 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
27820 65 6e 61 6d 65 20 29 3b 0a 20 20 52 45 47 49 53  ename );.  REGIS
27830 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
27840 31 2c 20 70 4e 61 6d 65 29 3b 0a 0a 20 20 53 74  1, pName);..  St
27850 72 69 6e 67 69 66 79 28 70 4e 61 6d 65 2c 20 65  ringify(pName, e
27860 6e 63 6f 64 69 6e 67 29 3b 0a 0a 20 20 69 66 28  ncoding);..  if(
27870 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
27880 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
27890 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
278a0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ;.  sqlite3VtabL
278b0 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 72 63  ock(pVtab);.  rc
278c0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
278d0 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62  e->xRename(pVtab
278e0 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73  , pName->z);.  s
278f0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
27900 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
27910 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74  p->zErrMsg = pVt
27920 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70  ab->zErrMsg;.  p
27930 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
27940 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  0;.  sqlite3Vtab
27950 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62  Unlock(db, pVtab
27960 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
27970 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
27980 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
27990 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 62 72 65 61  _misuse;..  brea
279a0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
279b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
279c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
279d0 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65   Opcode: VUpdate
279e0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
279f0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
27a00 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
27a10 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
27a20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
27a30 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
27a40 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
27a50 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
27a60 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68  ing xUpdate meth
27a70 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a  od. P2 values.**
27a80 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20   are contiguous 
27a90 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61  memory cells sta
27aa0 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70  rting at P3 to p
27ab0 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61  ass to the xUpda
27ac0 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  te .** invocatio
27ad0 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20  n. The value in 
27ae0 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d  register (P3+P2-
27af0 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  1) corresponds t
27b00 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65  o the .** p2th e
27b10 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72  lement of the ar
27b20 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20  gv array passed 
27b30 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a  to xUpdate..**.*
27b40 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65  * The xUpdate me
27b50 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44  thod will do a D
27b60 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45  ELETE or an INSE
27b70 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54  RT or both..** T
27b80 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65  he argv[0] eleme
27b90 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73  nt (which corres
27ba0 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20  ponds to memory 
27bb0 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74  cell P3).** is t
27bc0 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f  he rowid of a ro
27bd0 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66  w to delete.  If
27be0 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c   argv[0] is NULL
27bf0 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c   then no .** del
27c00 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54  etion occurs.  T
27c10 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65  he argv[1] eleme
27c20 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  nt is the rowid 
27c30 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  of the new .** r
27c40 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  ow.  This can be
27c50 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68   NULL to have th
27c60 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
27c70 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a  select the new .
27c80 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73  ** rowid for its
27c90 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71  elf.  The subseq
27ca0 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e  uent elements in
27cb0 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a   the array are .
27cc0 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  ** the values of
27cd0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
27ce0 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49  new row..**.** I
27cf0 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20  f P2==1 then no 
27d00 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72  insert is perfor
27d10 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73  med.  argv[0] is
27d20 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a   the rowid of.**
27d30 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
27d40 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
27d50 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66  boolean flag. If
27d60 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72   it is set to tr
27d70 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61  ue and the xUpda
27d80 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75  te call.** is su
27d90 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74  ccessful, then t
27da0 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
27db0 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73  d by sqlite3_las
27dc0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
27dd0 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74   .** is set to t
27de0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
27df0 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f  rowid for the ro
27e00 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e  w just inserted.
27e10 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64  .*/.case OP_VUpd
27e20 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ate: {.  sqlite3
27e30 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20 70  _vtab *pVtab = p
27e40 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20  Op->p4.pVtab;.  
27e50 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
27e60 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
27e70 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
27e80 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  b->pModule;.  in
27e90 74 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32  t nArg = pOp->p2
27ea0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
27eb0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42  >p4type==P4_VTAB
27ec0 20 29 3b 0a 20 20 69 66 28 20 70 4d 6f 64 75 6c   );.  if( pModul
27ed0 65 2d 3e 78 55 70 64 61 74 65 3d 3d 30 20 29 7b  e->xUpdate==0 ){
27ee0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
27ef0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
27f00 67 2c 20 64 62 2c 20 22 72 65 61 64 2d 6f 6e 6c  g, db, "read-onl
27f10 79 20 74 61 62 6c 65 22 29 3b 0a 20 20 20 20 72  y table");.    r
27f20 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
27f30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
27f40 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65  nt i;.    sqlite
27f50 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20  _int64 rowid;.  
27f60 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 20 3d 20    Mem **apArg = 
27f70 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 4d 65  p->apArg;.    Me
27f80 6d 20 2a 70 58 20 3d 20 26 70 2d 3e 61 4d 65 6d  m *pX = &p->aMem
27f90 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66  [pOp->p3];.    f
27fa0 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20  or(i=0; i<nArg; 
27fb0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 74 6f 72  i++){.      stor
27fc0 65 54 79 70 65 49 6e 66 6f 28 70 58 2c 20 30 29  eTypeInfo(pX, 0)
27fd0 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d  ;.      apArg[i]
27fe0 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b   = pX;.      pX+
27ff0 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
28000 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
28010 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
28020 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
28030 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
28040 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20  bLock(pVtab);.  
28050 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
28060 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e  xUpdate(pVtab, n
28070 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77  Arg, apArg, &row
28080 69 64 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  id);.    sqlite3
28090 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
280a0 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
280b0 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
280c0 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74  zErrMsg;.    pVt
280d0 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
280e0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
280f0 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62  Unlock(db, pVtab
28100 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  );.    if( sqlit
28110 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
28120 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
28130 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20 69  to_misuse;.    i
28140 66 28 20 70 4f 70 2d 3e 70 31 20 26 26 20 72 63  f( pOp->p1 && rc
28150 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
28160 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72       assert( nAr
28170 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20  g>1 && apArg[0] 
28180 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c  && (apArg[0]->fl
28190 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b  ags&MEM_Null) );
281a0 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52  .      db->lastR
281b0 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20  owid = rowid;.  
281c0 20 20 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e    }.    p->nChan
281d0 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ge++;.  }.  brea
281e0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
281f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
28200 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
28210 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
28220 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
28230 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f  * Opcode: Pageco
28240 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
28250 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
28260 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f  current number o
28270 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62  f pages in datab
28280 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79  ase P1 to memory
28290 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73   cell P2..*/.cas
282a0 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20  e OP_Pagecount: 
282b0 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
282c0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
282d0 2a 2f 0a 20 20 69 6e 74 20 70 31 20 3d 20 70 4f  */.  int p1 = pO
282e0 70 2d 3e 70 31 3b 20 0a 20 20 69 6e 74 20 6e 50  p->p1; .  int nP
282f0 61 67 65 3b 0a 20 20 50 61 67 65 72 20 2a 70 50  age;.  Pager *pP
28300 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
28310 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44 62  reePager(db->aDb
28320 5b 70 31 5d 2e 70 42 74 29 3b 0a 0a 20 20 72 63  [p1].pBt);..  rc
28330 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 50   = sqlite3PagerP
28340 61 67 65 63 6f 75 6e 74 28 70 50 61 67 65 72 2c  agecount(pPager,
28350 20 26 6e 50 61 67 65 29 3b 0a 20 20 69 66 28 20   &nPage);.  if( 
28360 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
28370 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
28380 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
28390 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 50 61 67  pOut->u.i = nPag
283a0 65 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  e;.  }.  break;.
283b0 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
283c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
283d0 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  ACE./* Opcode: T
283e0 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  race * * * P4 *.
283f0 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67  **.** If tracing
28400 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20   is enabled (by 
28410 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63  the sqlite3_trac
28420 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20  e()) interface, 
28430 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d  then.** the UTF-
28440 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  8 string contain
28450 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74  ed in P4 is emit
28460 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65  ted on the trace
28470 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61   callback..*/.ca
28480 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20  se OP_Trace: {. 
28490 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29   if( pOp->p4.z )
284a0 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 54  {.    if( db->xT
284b0 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 64 62  race ){.      db
284c0 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72  ->xTrace(db->pTr
284d0 61 63 65 41 72 67 2c 20 70 4f 70 2d 3e 70 34 2e  aceArg, pOp->p4.
284e0 7a 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66  z);.    }.#ifdef
284f0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
28500 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73    if( (db->flags
28510 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61   & SQLITE_SqlTra
28520 63 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ce)!=0 ){.      
28530 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
28540 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25  tf("SQL-trace: %
28550 73 5c 6e 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  s\n", pOp->p4.z)
28560 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f  ;.    }.#endif /
28570 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
28580 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  /.  }.  break;.}
28590 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63  .#endif.../* Opc
285a0 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20  ode: Noop * * * 
285b0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74  * *.**.** Do not
285c0 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74  hing.  This inst
285d0 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e  ruction is often
285e0 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d   useful as a jum
285f0 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e  p.** destination
28600 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d  ..*/./*.** The m
28610 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63  agic Explain opc
28620 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73  ode are only ins
28630 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61  erted when expla
28640 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20  in==2 (which.** 
28650 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74  is to say when t
28660 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  he EXPLAIN QUERY
28670 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20   PLAN syntax is 
28680 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f  used.).** This o
28690 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e  pcode records in
286a0 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74  formation from t
286b0 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49  he optimizer.  I
286c0 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20  t is the.** the 
286d0 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e  same as a no-op.
286e0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65    This opcodesne
286f0 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20 61  ver appears in a
28700 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d   real VM program
28710 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20  ..*/.default: { 
28720 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73           /* This
28730 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f   is really OP_No
28740 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69  op and OP_Explai
28750 6e 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n */.  break;.}.
28760 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
28770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
28780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
28790 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
287a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
287b0 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20  ** The cases of 
287c0 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
287d0 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20  ment above this 
287e0 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20  line should all 
287f0 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62  be indented.** b
28800 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
28810 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36   the left-most 6
28820 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65   spaces have bee
28830 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70  n removed to imp
28840 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64  rove the.** read
28850 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74  ability.  From t
28860 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77  his point on dow
28870 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e  n, the normal in
28880 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20  dentation rules 
28890 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e  are.** restored.
288a0 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
288b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
288c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
288d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
288e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
288f0 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44      }..#ifdef VD
28900 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b  BE_PROFILE.    {
28910 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70 73  .      u64 elaps
28920 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  ed = sqlite3Hwti
28930 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20  me() - start;.  
28940 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20      pOp->cycles 
28950 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20  += elapsed;.    
28960 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69    pOp->cnt++;.#i
28970 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72 69  f 0.        fpri
28980 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30  ntf(stdout, "%10
28990 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b  llu ", elapsed);
289a0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
289b0 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
289c0 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 70 2d 3e  ut, origPc, &p->
289d0 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65  aOp[origPc]);.#e
289e0 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ndif.    }.#endi
289f0 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  f..    /* The fo
28a00 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64  llowing code add
28a10 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
28a20 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e   actual function
28a30 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  ality.    ** of 
28a40 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74  the program.  It
28a50 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f   is only here fo
28a60 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65  r testing and de
28a70 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20  bugging..    ** 
28a80 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e  On the other han
28a90 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20  d, it does burn 
28aa0 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79  CPU cycles every
28ab0 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20   time through.  
28ac0 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74    ** the evaluat
28ad0 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20  or loop.  So we 
28ae0 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74  can leave it out
28af0 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20   when NDEBUG is 
28b00 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
28b10 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
28b20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d     assert( pc>=-
28b30 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  1 && pc<p->nOp )
28b40 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
28b50 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
28b60 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20  ->trace ){.     
28b70 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70 72   if( rc!=0 ) fpr
28b80 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22 72  intf(p->trace,"r
28b90 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20  c=%d\n",rc);.   
28ba0 20 20 20 69 66 28 20 6f 70 50 72 6f 70 65 72 74     if( opPropert
28bb0 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50  y & OPFLG_OUT2_P
28bc0 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  RERELEASE ){.   
28bd0 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
28be0 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70  ce(p->trace, pOp
28bf0 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ->p2, pOut);.   
28c00 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 6f     }.      if( o
28c10 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
28c20 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20 20  G_OUT3 ){.      
28c30 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28    registerTrace(
28c40 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70  p->trace, pOp->p
28c50 33 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  3, pOut);.      
28c60 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 20  }.    }.#endif  
28c70 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
28c80 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44  */.#endif  /* ND
28c90 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20  EBUG */.  }  /* 
28ca0 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66  The end of the f
28cb0 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20  or(;;) loop the 
28cc0 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f 70  loops through op
28cd0 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  codes */..  /* I
28ce0 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20  f we reach this 
28cf0 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20  point, it means 
28d00 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20 69  that execution i
28d10 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68 0a  s finished with.
28d20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66    ** an error of
28d30 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f   some kind..  */
28d40 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74  .vdbe_error_halt
28d50 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20 29  :.  assert( rc )
28d60 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a  ;.  p->rc = rc;.
28d70 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c    sqlite3VdbeHal
28d80 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  t(p);.  if( rc==
28d90 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
28da0 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  EM ) db->mallocF
28db0 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  ailed = 1;.  rc 
28dc0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
28dd0 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68  .  /* This is th
28de0 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f  e only way out o
28df0 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  f this procedure
28e00 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20  .  We have to.  
28e10 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d  ** release the m
28e20 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73  utexes on btrees
28e30 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75 69   that were acqui
28e40 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20  red at the.  ** 
28e50 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74  top. */.vdbe_ret
28e60 75 72 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42 74  urn:.  sqlite3Bt
28e70 72 65 65 4d 75 74 65 78 41 72 72 61 79 4c 65 61  reeMutexArrayLea
28e80 76 65 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b 0a  ve(&p->aMutex);.
28e90 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20    return rc;..  
28ea0 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
28eb0 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  if a string or b
28ec0 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20  lob larger than 
28ed0 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
28ee0 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e  H.  ** is encoun
28ef0 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f  tered..  */.too_
28f00 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65  big:.  sqlite3Se
28f10 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
28f20 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67  Msg, db, "string
28f30 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67   or blob too big
28f40 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54  ");.  rc = SQLIT
28f50 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f  E_TOOBIG;.  goto
28f60 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
28f70 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
28f80 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63  here if a malloc
28f90 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e  () fails..  */.n
28fa0 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c  o_mem:.  db->mal
28fb0 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
28fc0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
28fd0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
28fe0 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  b, "out of memor
28ff0 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  y");.  rc = SQLI
29000 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f  TE_NOMEM;.  goto
29010 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
29020 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
29030 68 65 72 65 20 66 6f 72 20 61 6e 20 53 51 4c 49  here for an SQLI
29040 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 2e  TE_MISUSE error.
29050 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
29060 74 6f 5f 6d 69 73 75 73 65 3a 0a 20 20 72 63 20  to_misuse:.  rc 
29070 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  = SQLITE_MISUSE;
29080 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75 20  .  /* Fall thru 
29090 69 6e 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  into abort_due_t
290a0 6f 5f 65 72 72 6f 72 20 2a 2f 0a 0a 20 20 2f 2a  o_error */..  /*
290b0 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f   Jump to here fo
290c0 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64  r any other kind
290d0 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e   of fatal error.
290e0 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69 61    The "rc" varia
290f0 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20  ble.  ** should 
29100 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e  hold the error n
29110 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72  umber..  */.abor
29120 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a  t_due_to_error:.
29130 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72    assert( p->zEr
29140 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28  rMsg==0 );.  if(
29150 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
29160 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  d ) rc = SQLITE_
29170 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21  NOMEM;.  if( rc!
29180 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
29190 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  MEM ){.    sqlit
291a0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
291b0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
291c0 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  ", sqlite3ErrStr
291d0 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74  (rc));.  }.  got
291e0 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
291f0 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
29200 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71 6c   here if the sql
29210 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
29220 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69 6e   API sets the in
29230 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61  terrupt.  ** fla
29240 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75  g..  */.abort_du
29250 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a  e_to_interrupt:.
29260 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31    assert( db->u1
29270 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
29280 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
29290 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e  INTERRUPT;.  p->
292a0 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74  rc = rc;.  sqlit
292b0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
292c0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
292d0 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  ", sqlite3ErrStr
292e0 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64  (rc));.  goto vd
292f0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d  be_error_halt;.}
29300 0a                                               .