/ Hex Artifact Content
Login

Artifact 60ca5ae05f5ab4ec10336465817931fc1002768e:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 65 78 65 63 75  implements execu
01a0: 74 69 6f 6e 20 6d 65 74 68 6f 64 20 6f 66 20 74  tion method of t
01b0: 68 65 20 0a 2a 2a 20 56 69 72 74 75 61 6c 20 44  he .** Virtual D
01c0: 61 74 61 62 61 73 65 20 45 6e 67 69 6e 65 20 28  atabase Engine (
01d0: 56 44 42 45 29 2e 20 20 41 20 73 65 70 61 72 61  VDBE).  A separa
01e0: 74 65 20 66 69 6c 65 20 28 22 76 64 62 65 61 75  te file ("vdbeau
01f0: 78 2e 63 22 29 0a 2a 2a 20 68 61 6e 64 6c 65 73  x.c").** handles
0200: 20 68 6f 75 73 65 6b 65 65 70 69 6e 67 20 64 65   housekeeping de
0210: 74 61 69 6c 73 20 73 75 63 68 20 61 73 20 63 72  tails such as cr
0220: 65 61 74 69 6e 67 20 61 6e 64 20 64 65 6c 65 74  eating and delet
0230: 69 6e 67 0a 2a 2a 20 56 44 42 45 20 69 6e 73 74  ing.** VDBE inst
0240: 61 6e 63 65 73 2e 20 20 54 68 69 73 20 66 69 6c  ances.  This fil
0250: 65 20 69 73 20 73 6f 6c 65 6c 79 20 69 6e 74 65  e is solely inte
0260: 72 65 73 74 65 64 20 69 6e 20 65 78 65 63 75 74  rested in execut
0270: 69 6e 67 0a 2a 2a 20 74 68 65 20 56 44 42 45 20  ing.** the VDBE 
0280: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
0290: 6e 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 69  n the external i
02a0: 6e 74 65 72 66 61 63 65 2c 20 61 6e 20 22 73 71  nterface, an "sq
02b0: 6c 69 74 65 33 5f 73 74 6d 74 2a 22 20 69 73 20  lite3_stmt*" is 
02c0: 61 6e 20 6f 70 61 71 75 65 20 70 6f 69 6e 74 65  an opaque pointe
02d0: 72 0a 2a 2a 20 74 6f 20 61 20 56 44 42 45 2e 0a  r.** to a VDBE..
02e0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 20 70 61  **.** The SQL pa
02f0: 72 73 65 72 20 67 65 6e 65 72 61 74 65 73 20 61  rser generates a
0300: 20 70 72 6f 67 72 61 6d 20 77 68 69 63 68 20 69   program which i
0310: 73 20 74 68 65 6e 20 65 78 65 63 75 74 65 64 20  s then executed 
0320: 62 79 0a 2a 2a 20 74 68 65 20 56 44 42 45 20 74  by.** the VDBE t
0330: 6f 20 64 6f 20 74 68 65 20 77 6f 72 6b 20 6f 66  o do the work of
0340: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
0350: 6e 74 2e 20 20 56 44 42 45 20 70 72 6f 67 72 61  nt.  VDBE progra
0360: 6d 73 20 61 72 65 20 0a 2a 2a 20 73 69 6d 69 6c  ms are .** simil
0370: 61 72 20 69 6e 20 66 6f 72 6d 20 74 6f 20 61 73  ar in form to as
0380: 73 65 6d 62 6c 79 20 6c 61 6e 67 75 61 67 65 2e  sembly language.
0390: 20 20 54 68 65 20 70 72 6f 67 72 61 6d 20 63 6f    The program co
03a0: 6e 73 69 73 74 73 20 6f 66 0a 2a 2a 20 61 20 6c  nsists of.** a l
03b0: 69 6e 65 61 72 20 73 65 71 75 65 6e 63 65 20 6f  inear sequence o
03c0: 66 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 45  f operations.  E
03d0: 61 63 68 20 6f 70 65 72 61 74 69 6f 6e 20 68 61  ach operation ha
03e0: 73 20 61 6e 20 6f 70 63 6f 64 65 20 0a 2a 2a 20  s an opcode .** 
03f0: 61 6e 64 20 35 20 6f 70 65 72 61 6e 64 73 2e 20  and 5 operands. 
0400: 20 4f 70 65 72 61 6e 64 73 20 50 31 2c 20 50 32   Operands P1, P2
0410: 2c 20 61 6e 64 20 50 33 20 61 72 65 20 69 6e 74  , and P3 are int
0420: 65 67 65 72 73 2e 20 20 4f 70 65 72 61 6e 64 20  egers.  Operand 
0430: 50 34 20 0a 2a 2a 20 69 73 20 61 20 6e 75 6c 6c  P4 .** is a null
0440: 2d 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72 69  -terminated stri
0450: 6e 67 2e 20 20 4f 70 65 72 61 6e 64 20 50 35 20  ng.  Operand P5 
0460: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 63  is an unsigned c
0470: 68 61 72 61 63 74 65 72 2e 0a 2a 2a 20 46 65 77  haracter..** Few
0480: 20 6f 70 63 6f 64 65 73 20 75 73 65 20 61 6c 6c   opcodes use all
0490: 20 35 20 6f 70 65 72 61 6e 64 73 2e 0a 2a 2a 0a   5 operands..**.
04a0: 2a 2a 20 43 6f 6d 70 75 74 61 74 69 6f 6e 20 72  ** Computation r
04b0: 65 73 75 6c 74 73 20 61 72 65 20 73 74 6f 72 65  esults are store
04c0: 64 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 72 65  d on a set of re
04d0: 67 69 73 74 65 72 73 20 6e 75 6d 62 65 72 65 64  gisters numbered
04e0: 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 77 69   beginning.** wi
04f0: 74 68 20 31 20 61 6e 64 20 67 6f 69 6e 67 20 75  th 1 and going u
0500: 70 20 74 6f 20 56 64 62 65 2e 6e 4d 65 6d 2e 20  p to Vdbe.nMem. 
0510: 20 45 61 63 68 20 72 65 67 69 73 74 65 72 20 63   Each register c
0520: 61 6e 20 73 74 6f 72 65 0a 2a 2a 20 65 69 74 68  an store.** eith
0530: 65 72 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  er an integer, a
0540: 20 6e 75 6c 6c 2d 74 65 72 6d 69 6e 61 74 65 64   null-terminated
0550: 20 73 74 72 69 6e 67 2c 20 61 20 66 6c 6f 61 74   string, a float
0560: 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 6e 75 6d  ing point.** num
0570: 62 65 72 2c 20 6f 72 20 74 68 65 20 53 51 4c 20  ber, or the SQL 
0580: 22 4e 55 4c 4c 22 20 76 61 6c 75 65 2e 20 20 41  "NULL" value.  A
0590: 6e 20 69 6d 70 6c 69 63 69 74 20 63 6f 6e 76 65  n implicit conve
05a0: 72 73 69 6f 6e 20 66 72 6f 6d 20 6f 6e 65 0a 2a  rsion from one.*
05b0: 2a 20 74 79 70 65 20 74 6f 20 74 68 65 20 6f 74  * type to the ot
05c0: 68 65 72 20 6f 63 63 75 72 73 20 61 73 20 6e 65  her occurs as ne
05d0: 63 65 73 73 61 72 79 2e 0a 2a 2a 20 0a 2a 2a 20  cessary..** .** 
05e0: 4d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 64 65  Most of the code
05f0: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 69 73   in this file is
0600: 20 74 61 6b 65 6e 20 75 70 20 62 79 20 74 68 65   taken up by the
0610: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
0620: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  ().** function w
0630: 68 69 63 68 20 64 6f 65 73 20 74 68 65 20 77 6f  hich does the wo
0640: 72 6b 20 6f 66 20 69 6e 74 65 72 70 72 65 74 69  rk of interpreti
0650: 6e 67 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  ng a VDBE progra
0660: 6d 2e 0a 2a 2a 20 42 75 74 20 6f 74 68 65 72 20  m..** But other 
0670: 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 6c 73  routines are als
0680: 6f 20 70 72 6f 76 69 64 65 64 20 74 6f 20 68 65  o provided to he
0690: 6c 70 20 69 6e 20 62 75 69 6c 64 69 6e 67 20 75  lp in building u
06a0: 70 0a 2a 2a 20 61 20 70 72 6f 67 72 61 6d 20 69  p.** a program i
06b0: 6e 73 74 72 75 63 74 69 6f 6e 20 62 79 20 69 6e  nstruction by in
06c0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
06d0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
06e0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
06f0: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0700: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0710: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0720: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0730: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0740: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0750: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0760: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0770: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0780: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
0790: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
07a0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
07b0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
07c0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
07d0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
07e0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
07f0: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0800: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0810: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0820: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0830: 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 76 64 62  ..**.** $Id: vdb
0840: 65 2e 63 2c 76 20 31 2e 38 34 39 20 32 30 30 39  e.c,v 1.849 2009
0850: 2f 30 36 2f 30 39 20 31 38 3a 31 34 3a 31 38 20  /06/09 18:14:18 
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 69 6e 74 20 6e 46 69  sor */.  int nFi
1a80: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1a90: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1aa0: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1ab0: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1ac0: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1ad0: 20 20 20 20 2f 2a 20 57 68 65 6e 20 64 61 74 61      /* When data
1ae0: 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20  base the cursor 
1af0: 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d  belongs to, or -
1b00: 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72  1 */.  int isBtr
1b10: 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20  eeCursor     /* 
1b20: 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20  */.){.  /* Find 
1b30: 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
1b40: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
1b50: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
1b60: 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20  lob of memory.  
1b70: 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ** required for 
1b80: 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72 20  this VdbeCursor 
1b90: 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69 73  structure. It is
1ba0: 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75   convenient to u
1bb0: 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20  se a .  ** vdbe 
1bc0: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d  memory cell to m
1bd0: 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79  anage the memory
1be0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
1bf0: 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20  ired for a.  ** 
1c00: 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63  VdbeCursor struc
1c10: 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c  ture for the fol
1c20: 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a  lowing reasons:.
1c30: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f    **.  **   * So
1c40: 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e  metimes cursor n
1c50: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
1c60: 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20  for a couple of 
1c70: 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20  different.  **  
1c80: 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61     purposes in a
1c90: 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54   vdbe program. T
1ca0: 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65  he different use
1cb0: 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a  s might require.
1cc0: 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65    **     differe
1cd0: 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74  nt sized allocat
1ce0: 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  ions. Memory cel
1cf0: 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61  ls provide growa
1d00: 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c  ble.  **     all
1d10: 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  ocations..  **. 
1d20: 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69   **   * When usi
1d30: 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  ng ENABLE_MEMORY
1d40: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d  _MANAGEMENT, mem
1d50: 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73  ory cell buffers
1d60: 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65   can.  **     be
1d70: 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69   freed lazily vi
1d80: 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65  a the sqlite3_re
1d90: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41  lease_memory() A
1da0: 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20  PI. This.  **   
1db0: 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20    minimizes the 
1dc0: 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63  number of malloc
1dd0: 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74   calls made by t
1de0: 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a  he system..  **.
1df0: 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    ** Memory cell
1e00: 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72  s for cursors ar
1e10: 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74  e allocated at t
1e20: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64  he top of the ad
1e30: 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65  dress.  ** space
1e40: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  . Memory cell (p
1e50: 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f  ->nMem) correspo
1e60: 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e  nds to cursor 0.
1e70: 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20   Space for.  ** 
1e80: 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61  cursor 1 is mana
1e90: 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65  ged by memory ce
1ea0: 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20  ll (p->nMem-1), 
1eb0: 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20  etc..  */.  Mem 
1ec0: 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pMem = &p->aMem
1ed0: 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a  [p->nMem-iCur];.
1ee0: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
1ef0: 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 20  VdbeCursor *pCx 
1f00: 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a  = 0;.  nByte = .
1f10: 20 20 20 20 20 20 73 69 7a 65 6f 66 28 56 64 62        sizeof(Vdb
1f20: 65 43 75 72 73 6f 72 29 20 2b 20 0a 20 20 20 20  eCursor) + .    
1f30: 20 20 28 69 73 42 74 72 65 65 43 75 72 73 6f 72    (isBtreeCursor
1f40: 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72  ?sqlite3BtreeCur
1f50: 73 6f 72 53 69 7a 65 28 29 3a 30 29 20 2b 20 0a  sorSize():0) + .
1f60: 20 20 20 20 20 20 32 2a 6e 46 69 65 6c 64 2a 73        2*nField*s
1f70: 69 7a 65 6f 66 28 75 33 32 29 3b 0a 0a 20 20 61  izeof(u32);..  a
1f80: 73 73 65 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e  ssert( iCur<p->n
1f90: 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
1fa0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 29  p->apCsr[iCur] )
1fb0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
1fc0: 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70  eFreeCursor(p, p
1fd0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a  ->apCsr[iCur]);.
1fe0: 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75      p->apCsr[iCu
1ff0: 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  r] = 0;.  }.  if
2000: 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c  ( SQLITE_OK==sql
2010: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
2020: 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20  pMem, nByte, 0) 
2030: 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b  ){.    p->apCsr[
2040: 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20 28 56  iCur] = pCx = (V
2050: 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65 6d 2d  dbeCursor*)pMem-
2060: 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 70  >z;.    memset(p
2070: 4d 65 6d 2d 3e 7a 2c 20 30 2c 20 6e 42 79 74 65  Mem->z, 0, nByte
2080: 29 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20  );.    pCx->iDb 
2090: 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e  = iDb;.    pCx->
20a0: 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b  nField = nField;
20b0: 0a 20 20 20 20 69 66 28 20 6e 46 69 65 6c 64 20  .    if( nField 
20c0: 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 61 54  ){.      pCx->aT
20d0: 79 70 65 20 3d 20 28 75 33 32 20 2a 29 26 70 4d  ype = (u32 *)&pM
20e0: 65 6d 2d 3e 7a 5b 73 69 7a 65 6f 66 28 56 64 62  em->z[sizeof(Vdb
20f0: 65 43 75 72 73 6f 72 29 5d 3b 0a 20 20 20 20 7d  eCursor)];.    }
2100: 0a 20 20 20 20 69 66 28 20 69 73 42 74 72 65 65  .    if( isBtree
2110: 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 20 20  Cursor ){.      
2120: 70 43 78 2d 3e 70 43 75 72 73 6f 72 20 3d 20 28  pCx->pCursor = (
2130: 42 74 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20  BtCursor*).     
2140: 20 20 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 73 69       &pMem->z[si
2150: 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29  zeof(VdbeCursor)
2160: 2b 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66  +2*nField*sizeof
2170: 28 75 33 32 29 5d 3b 0a 20 20 20 20 7d 0a 20 20  (u32)];.    }.  
2180: 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a  }.  return pCx;.
2190: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20  }../*.** Try to 
21a0: 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20  convert a value 
21b0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
21c0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
21d0: 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f   we can.** do so
21e0: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
21f0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49   information.  I
2200: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
2210: 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20  f the string.** 
2220: 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d  looks like a num
2230: 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ber, convert it 
2240: 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20  into a number.  
2250: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a  If it does not.*
2260: 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75  * look like a nu
2270: 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61  mber, leave it a
2280: 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  lone..*/.static 
2290: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
22a0: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
22b0: 52 65 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65  Rec){.  if( (pRe
22c0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
22d0: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d  Real|MEM_Int))==
22e0: 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 61  0 ){.    int rea
22f0: 6c 6e 75 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65  lnum;.    sqlite
2300: 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69  3VdbeMemNulTermi
2310: 6e 61 74 65 28 70 52 65 63 29 3b 0a 20 20 20 20  nate(pRec);.    
2320: 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73  if( (pRec->flags
2330: 26 4d 45 4d 5f 53 74 72 29 0a 20 20 20 20 20 20  &MEM_Str).      
2340: 20 20 20 26 26 20 73 71 6c 69 74 65 33 49 73 4e     && sqlite3IsN
2350: 75 6d 62 65 72 28 70 52 65 63 2d 3e 7a 2c 20 26  umber(pRec->z, &
2360: 72 65 61 6c 6e 75 6d 2c 20 70 52 65 63 2d 3e 65  realnum, pRec->e
2370: 6e 63 29 20 29 7b 0a 20 20 20 20 20 20 69 36 34  nc) ){.      i64
2380: 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 73 71   value;.      sq
2390: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
23a0: 6e 63 6f 64 69 6e 67 28 70 52 65 63 2c 20 53 51  ncoding(pRec, SQ
23b0: 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20  LITE_UTF8);.    
23c0: 20 20 69 66 28 20 21 72 65 61 6c 6e 75 6d 20 26    if( !realnum &
23d0: 26 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28  & sqlite3Atoi64(
23e0: 70 52 65 63 2d 3e 7a 2c 20 26 76 61 6c 75 65 29  pRec->z, &value)
23f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 52 65 63   ){.        pRec
2400: 2d 3e 75 2e 69 20 3d 20 76 61 6c 75 65 3b 0a 20  ->u.i = value;. 
2410: 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70         MemSetTyp
2420: 65 46 6c 61 67 28 70 52 65 63 2c 20 4d 45 4d 5f  eFlag(pRec, MEM_
2430: 49 6e 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Int);.      }els
2440: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2450: 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79  e3VdbeMemRealify
2460: 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a  (pRec);.      }.
2470: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a      }.  }.}../*.
2480: 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73  ** Processing is
2490: 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68   determine by th
24a0: 65 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d  e affinity param
24b0: 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  eter:.**.** SQLI
24c0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a  TE_AFF_INTEGER:.
24d0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ** SQLITE_AFF_RE
24e0: 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  AL:.** SQLITE_AF
24f0: 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20  F_NUMERIC:.**   
2500: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2510: 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67  pRec to an integ
2520: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2530: 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c  n or a .**    fl
2540: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70  oating-point rep
2550: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61  resentation if a
2560: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2570: 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69  entation.**    i
2580: 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20  s not possible. 
2590: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69   Note that the i
25a0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
25b0: 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61  ation is.**    a
25c0: 6c 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c  lways preferred,
25d0: 20 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66   even if the aff
25e0: 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62  inity is REAL, b
25f0: 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20  ecause.**    an 
2600: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2610: 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73  tation is more s
2620: 70 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f  pace efficient o
2630: 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51  n disk..**.** SQ
2640: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a  LITE_AFF_TEXT:.*
2650: 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65  *    Convert pRe
2660: 63 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72  c to a text repr
2670: 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  esentation..**.*
2680: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  * SQLITE_AFF_NON
2690: 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20  E:.**    No-op. 
26a0: 20 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67   pRec is unchang
26b0: 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ed..*/.static vo
26c0: 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  id applyAffinity
26d0: 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20  (.  Mem *pRec,  
26e0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
26f0: 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66  alue to apply af
2700: 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63  finity to */.  c
2710: 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20  har affinity,   
2720: 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
2730: 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
2740: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20   */.  u8 enc    
2750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2760: 20 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64   this text encod
2770: 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20  ing */.){.  if( 
2780: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
2790: 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20  _AFF_TEXT ){.   
27a0: 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74   /* Only attempt
27b0: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
27c0: 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72 65  to TEXT if there
27d0: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f   is an integer o
27e0: 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65  r real.    ** re
27f0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c  presentation (bl
2800: 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e  ob and NULL do n
2810: 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64  ot get converted
2820: 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a  ) but no string.
2830: 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74      ** represent
2840: 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20  ation..    */.  
2850: 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e    if( 0==(pRec->
2860: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26  flags&MEM_Str) &
2870: 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28  & (pRec->flags&(
2880: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Real|MEM_Int
2890: 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  )) ){.      sqli
28a0: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
28b0: 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a  ify(pRec, enc);.
28c0: 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e      }.    pRec->
28d0: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52  flags &= ~(MEM_R
28e0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  eal|MEM_Int);.  
28f0: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
2900: 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ty!=SQLITE_AFF_N
2910: 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ONE ){.    asser
2920: 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  t( affinity==SQL
2930: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
2940: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2950: 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20  ITE_AFF_REAL.   
2960: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66            || aff
2970: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2980: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20  F_NUMERIC );.   
2990: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
29a0: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
29b0: 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
29c0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
29d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
29e0: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
29f0: 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  pRec);.    }.  }
2a00: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
2a10: 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79 70   convert the typ
2a20: 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  e of a function 
2a30: 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72 65  argument or a re
2a40: 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69  sult column.** i
2a50: 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65  nto a numeric re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55  presentation.  U
2a70: 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47 45  se either INTEGE
2a80: 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68 65  R or REAL whiche
2a90: 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70  ver.** is approp
2aa0: 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79  riate.  But only
2ab0: 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69   do the conversi
2ac0: 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73 73  on if it is poss
2ad0: 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20  ible without.** 
2ae0: 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
2af0: 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20 74  ion and return t
2b00: 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65 20  he revised type 
2b10: 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e  of the argument.
2b20: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
2b30: 6e 20 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 61  n EXPERIMENTAL a
2b40: 70 69 20 61 6e 64 20 69 73 20 73 75 62 6a 65 63  pi and is subjec
2b50: 74 20 74 6f 20 63 68 61 6e 67 65 20 6f 72 20 72  t to change or r
2b60: 65 6d 6f 76 61 6c 2e 0a 2a 2f 0a 69 6e 74 20 73  emoval..*/.int s
2b70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2b80: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2b90: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ba0: 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d    Mem *pMem = (M
2bb0: 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 61 70 70 6c  em*)pVal;.  appl
2bc0: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2bd0: 28 70 4d 65 6d 29 3b 0a 20 20 73 74 6f 72 65 54  (pMem);.  storeT
2be0: 79 70 65 49 6e 66 6f 28 70 4d 65 6d 2c 20 30 29  ypeInfo(pMem, 0)
2bf0: 3b 0a 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d  ;.  return pMem-
2c00: 3e 74 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  >type;.}../*.** 
2c10: 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e  Exported version
2c20: 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74   of applyAffinit
2c30: 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f  y(). This one wo
2c40: 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76  rks on sqlite3_v
2c50: 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74  alue*, .** not t
2c60: 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a  he internal Mem*
2c70: 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73   type..*/.void s
2c80: 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
2c90: 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69  Affinity(.  sqli
2ca0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c  te3_value *pVal,
2cb0: 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c   .  u8 affinity,
2cc0: 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20   .  u8 enc.){.  
2cd0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d  applyAffinity((M
2ce0: 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e  em *)pVal, affin
2cf0: 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 23 69  ity, enc);.}..#i
2d00: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2d10: 47 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  G./*.** Write a 
2d20: 6e 69 63 65 20 73 74 72 69 6e 67 20 72 65 70 72  nice string repr
2d30: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2d40: 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65  e contents of ce
2d50: 6c 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20  ll pMem.** into 
2d60: 62 75 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e  buffer zBuf, len
2d70: 67 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69  gth nBuf..*/.voi
2d80: 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  d sqlite3VdbeMem
2d90: 50 72 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20  PrettyPrint(Mem 
2da0: 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75  *pMem, char *zBu
2db0: 66 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72  f){.  char *zCsr
2dc0: 20 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66   = zBuf;.  int f
2dd0: 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a   = pMem->flags;.
2de0: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
2df0: 63 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e  char *const encn
2e00: 61 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c  ames[] = {"(X)",
2e10: 20 22 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22   "(8)", "(16LE)"
2e20: 2c 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20  , "(16BE)"};..  
2e30: 69 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29  if( f&MEM_Blob )
2e40: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
2e50: 20 63 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28   char c;.    if(
2e60: 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a   f & MEM_Dyn ){.
2e70: 20 20 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20        c = 'z';. 
2e80: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
2e90: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
2ea0: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
2eb0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
2ec0: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
2ed0: 20 20 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20        c = 't';. 
2ee0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
2ef0: 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45  & (MEM_Dyn|MEM_E
2f00: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
2f10: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
2f20: 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20  EM_Ephem ){.    
2f30: 20 20 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20    c = 'e';.     
2f40: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
2f50: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79  EM_Static|MEM_Dy
2f60: 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  n))==0 );.    }e
2f70: 6c 73 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  lse{.      c = '
2f80: 73 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73  s';.    }..    s
2f90: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
2fa0: 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c  100, zCsr, "%c",
2fb0: 20 63 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d   c);.    zCsr +=
2fc0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
2fd0: 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69  (zCsr);.    sqli
2fe0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
2ff0: 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70  , zCsr, "%d[", p
3000: 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73  Mem->n);.    zCs
3010: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3020: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3030: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3040: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3050: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
3060: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3070: 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e  sr, "%02X", ((in
3080: 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30  t)pMem->z[i] & 0
3090: 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73  xFF));.      zCs
30a0: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
30b0: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
30c0: 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  }.    for(i=0; i
30d0: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
30e0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68  ; i++){.      ch
30f0: 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69  ar z = pMem->z[i
3100: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33  ];.      if( z<3
3110: 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43  2 || z>126 ) *zC
3120: 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20  sr++ = '.';.    
3130: 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d    else *zCsr++ =
3140: 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73   z;.    }..    s
3150: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3160: 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22  100, zCsr, "]%s"
3170: 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d  , encnames[pMem-
3180: 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72  >enc]);.    zCsr
3190: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
31a0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69  n30(zCsr);.    i
31b0: 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  f( f & MEM_Zero 
31c0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
31d0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
31e0: 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d  Csr,"+%dz",pMem-
31f0: 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20  >u.nZero);.     
3200: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
3210: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
3220: 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20      }.    *zCsr 
3230: 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20  = '\0';.  }else 
3240: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20  if( f & MEM_Str 
3250: 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b  ){.    int j, k;
3260: 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27  .    zBuf[0] = '
3270: 20 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   ';.    if( f & 
3280: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
3290: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a   zBuf[1] = 'z';.
32a0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
32b0: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
32c0: 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b  EM_Ephem))==0 );
32d0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66  .    }else if( f
32e0: 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b   & MEM_Static ){
32f0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3300: 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65   't';.      asse
3310: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79  rt( (f & (MEM_Dy
3320: 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30  n|MEM_Ephem))==0
3330: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   );.    }else if
3340: 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20  ( f & MEM_Ephem 
3350: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3360: 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73   = 'e';.      as
3370: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3380: 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29  Static|MEM_Dyn))
3390: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
33a0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
33b0: 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20  = 's';.    }.   
33c0: 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69   k = 2;.    sqli
33d0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
33e0: 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22  , &zBuf[k], "%d"
33f0: 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20  , pMem->n);.    
3400: 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  k += sqlite3Strl
3410: 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a  en30(&zBuf[k]);.
3420: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3430: 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30  '[';.    for(j=0
3440: 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d  ; j<15 && j<pMem
3450: 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  ->n; j++){.     
3460: 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b   u8 c = pMem->z[
3470: 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e  j];.      if( c>
3480: 3d 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20  =0x20 && c<0x7f 
3490: 29 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b  ){.        zBuf[
34a0: 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20  k++] = c;.      
34b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a  }else{.        z
34c0: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a  Buf[k++] = '.';.
34d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
34e0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d    zBuf[k++] = ']
34f0: 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ';.    sqlite3_s
3500: 6e 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75  nprintf(100,&zBu
3510: 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70  f[k], encnames[p
3520: 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20  Mem->enc]);.    
3530: 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  k += sqlite3Strl
3540: 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a  en30(&zBuf[k]);.
3550: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3560: 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a  0;.  }.}.#endif.
3570: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
3580: 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74  EBUG./*.** Print
3590: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20   the value of a 
35a0: 72 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61  register for tra
35b0: 63 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a  cing purposes:.*
35c0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65  /.static void me
35d0: 6d 54 72 61 63 65 50 72 69 6e 74 28 46 49 4c 45  mTracePrint(FILE
35e0: 20 2a 6f 75 74 2c 20 4d 65 6d 20 2a 70 29 7b 0a   *out, Mem *p){.
35f0: 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26    if( p->flags &
3600: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
3610: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20   fprintf(out, " 
3620: 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20  NULL");.  }else 
3630: 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20  if( (p->flags & 
3640: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
3650: 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  ))==(MEM_Int|MEM
3660: 5f 53 74 72 29 20 29 7b 0a 20 20 20 20 66 70 72  _Str) ){.    fpr
3670: 69 6e 74 66 28 6f 75 74 2c 20 22 20 73 69 3a 25  intf(out, " si:%
3680: 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20  lld", p->u.i);. 
3690: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
36a0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
36b0: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74  .    fprintf(out
36c0: 2c 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e  , " i:%lld", p->
36d0: 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  u.i);.  }else if
36e0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
36f0: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66 70 72  _Real ){.    fpr
3700: 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a 25 67  intf(out, " r:%g
3710: 22 2c 20 70 2d 3e 72 29 3b 0a 20 20 7d 65 6c 73  ", p->r);.  }els
3720: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
3730: 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20   MEM_RowSet ){. 
3740: 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20     fprintf(out, 
3750: 22 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20  " (rowset)");.  
3760: 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20  }else{.    char 
3770: 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73  zBuf[200];.    s
3780: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65  qlite3VdbeMemPre
3790: 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66  ttyPrint(p, zBuf
37a0: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  );.    fprintf(o
37b0: 75 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66 70  ut, " ");.    fp
37c0: 72 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c  rintf(out, "%s",
37d0: 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74   zBuf);.  }.}.st
37e0: 61 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74  atic void regist
37f0: 65 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f 75  erTrace(FILE *ou
3800: 74 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d  t, int iReg, Mem
3810: 20 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66 28   *p){.  fprintf(
3820: 6f 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d 20  out, "REG[%d] = 
3830: 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54  ", iReg);.  memT
3840: 72 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20 70  racePrint(out, p
3850: 29 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74  );.  fprintf(out
3860: 2c 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69  , "\n");.}.#endi
3870: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
3880: 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65  _DEBUG.#  define
3890: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
38a0: 52 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63 65  R,M) if(p->trace
38b0: 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70  )registerTrace(p
38c0: 2d 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65 6c  ->trace,R,M).#el
38d0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
38e0: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
38f0: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3900: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3910: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3920: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3930: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3940: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3950: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3960: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3970: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3980: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3990: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43  dif../*.** The C
39a0: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
39b0: 50 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65 64  PT macro defined
39c0: 20 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73   here looks to s
39d0: 65 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c  ee if the.** sql
39e0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
39f0: 20 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65 65   routine has bee
3a00: 6e 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69 74  n called.  If it
3a10: 20 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a   has been, then.
3a20: 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66  ** processing of
3a30: 20 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61   the VDBE progra
3a40: 6d 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64  m is interrupted
3a50: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ..**.** This mac
3a60: 72 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65 72  ro added to ever
3a70: 79 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  y instruction th
3a80: 61 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20 69  at does a jump i
3a90: 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d  n order to.** im
3aa0: 70 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20  plement a loop. 
3ab0: 20 54 68 69 73 20 74 65 73 74 20 75 73 65 64 20   This test used 
3ac0: 74 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20 73  to be on every s
3ad0: 69 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69 6f  ingle instructio
3ae0: 6e 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20 6d  n,.** but that m
3af0: 65 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65 73  eant we more tes
3b00: 74 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65 65  ting that we nee
3b10: 64 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65  ded.  By only te
3b20: 73 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61  sting the.** fla
3b30: 67 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75  g on jump instru
3b40: 63 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20 61  ctions, we get a
3b50: 20 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20 69   (small) speed i
3b60: 6d 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23  mprovement..*/.#
3b70: 64 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52  define CHECK_FOR
3b80: 5f 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20 20  _INTERRUPT \.   
3b90: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
3ba0: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
3bb0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
3bc0: 65 72 72 75 70 74 3b 0a 0a 23 69 66 64 65 66 20  errupt;..#ifdef 
3bd0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 73 74 61  SQLITE_DEBUG.sta
3be0: 74 69 63 20 69 6e 74 20 66 69 6c 65 45 78 69 73  tic int fileExis
3bf0: 74 73 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ts(sqlite3 *db, 
3c00: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
3c10: 65 29 7b 0a 20 20 69 6e 74 20 72 65 73 20 3d 20  e){.  int res = 
3c20: 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  0;.  int rc = SQ
3c30: 4c 49 54 45 5f 4f 4b 3b 0a 23 69 66 64 65 66 20  LITE_OK;.#ifdef 
3c40: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 2f 2a  SQLITE_TEST.  /*
3c50: 20 49 66 20 77 65 20 61 72 65 20 63 75 72 72 65   If we are curre
3c60: 6e 74 6c 79 20 74 65 73 74 69 6e 67 20 49 4f 20  ntly testing IO 
3c70: 65 72 72 6f 72 73 2c 20 74 68 65 6e 20 64 6f 20  errors, then do 
3c80: 6e 6f 74 20 63 61 6c 6c 20 4f 73 41 63 63 65 73  not call OsAcces
3c90: 73 28 29 20 74 6f 0a 20 20 2a 2a 20 74 65 73 74  s() to.  ** test
3ca0: 20 66 6f 72 20 74 68 65 20 70 72 65 73 65 6e 63   for the presenc
3cb0: 65 20 6f 66 20 7a 46 69 6c 65 2e 20 54 68 69 73  e of zFile. This
3cc0: 20 69 73 20 62 65 63 61 75 73 65 20 61 6e 79 20   is because any 
3cd0: 49 4f 20 65 72 72 6f 72 20 74 68 61 74 0a 20 20  IO error that.  
3ce0: 2a 2a 20 6f 63 63 75 72 73 20 68 65 72 65 20 77  ** occurs here w
3cf0: 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 70 6f 72  ill not be repor
3d00: 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68 65  ted, causing the
3d10: 20 74 65 73 74 20 74 6f 20 66 61 69 6c 2e 0a 20   test to fail.. 
3d20: 20 2a 2f 0a 20 20 65 78 74 65 72 6e 20 69 6e 74   */.  extern int
3d30: 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72 6f   sqlite3_io_erro
3d40: 72 5f 70 65 6e 64 69 6e 67 3b 0a 20 20 69 66 28  r_pending;.  if(
3d50: 20 73 71 6c 69 74 65 33 5f 69 6f 5f 65 72 72 6f   sqlite3_io_erro
3d60: 72 5f 70 65 6e 64 69 6e 67 3c 3d 30 20 29 0a 23  r_pending<=0 ).#
3d70: 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73  endif.    rc = s
3d80: 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64  qlite3OsAccess(d
3d90: 62 2d 3e 70 56 66 73 2c 20 7a 46 69 6c 65 2c 20  b->pVfs, zFile, 
3da0: 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 45 58  SQLITE_ACCESS_EX
3db0: 49 53 54 53 2c 20 26 72 65 73 29 3b 0a 20 20 72  ISTS, &res);.  r
3dc0: 65 74 75 72 6e 20 28 72 65 73 20 26 26 20 72 63  eturn (res && rc
3dd0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 7d 0a  ==SQLITE_OK);.}.
3de0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
3df0: 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69  NDEBUG./*.** Thi
3e00: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e  s function is on
3e10: 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  ly called from w
3e20: 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74 28  ithin an assert(
3e30: 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49 74  ) expression. It
3e40: 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74 20  .** checks that 
3e50: 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72 61  the sqlite3.nTra
3e60: 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62 6c  nsaction variabl
3e70: 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20 73  e is correctly s
3e80: 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d  et to.** the num
3e90: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
3ea0: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
3eb0: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74  s currently in t
3ec0: 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69  he .** linked li
3ed0: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20 73  st starting at s
3ee0: 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
3ef0: 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a  t..** .** Usage:
3f00: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
3f10: 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  t( checkSavepoin
3f20: 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f  tCount(db) );.*/
3f30: 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65 63  .static int chec
3f40: 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
3f50: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
3f60: 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76  int n = 0;.  Sav
3f70: 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72  epoint *p;.  for
3f80: 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  (p=db->pSavepoin
3f90: 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74  t; p; p=p->pNext
3fa0: 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28  ) n++;.  assert(
3fb0: 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f   n==(db->nSavepo
3fc0: 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e  int + db->isTran
3fd0: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
3fe0: 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b  ) );.  return 1;
3ff0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
4000: 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68   Execute as much
4010: 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72   of a VDBE progr
4020: 61 6d 20 61 73 20 77 65 20 63 61 6e 20 74 68 65  am as we can the
4030: 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20  n return..**.** 
4040: 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52  sqlite3VdbeMakeR
4050: 65 61 64 79 28 29 20 6d 75 73 74 20 62 65 20 63  eady() must be c
4060: 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 74 68 69  alled before thi
4070: 73 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64  s routine in ord
4080: 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74  er to.** close t
4090: 68 65 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20  he program with 
40a0: 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61 6c 74 20  a final OP_Halt 
40b0: 61 6e 64 20 74 6f 20 73 65 74 20 75 70 20 74 68  and to set up th
40c0: 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61  e callbacks.** a
40d0: 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  nd the error mes
40e0: 73 61 67 65 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a  sage pointer..**
40f0: 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20 61 20 72  .** Whenever a r
4100: 6f 77 20 6f 72 20 72 65 73 75 6c 74 20 64 61 74  ow or result dat
4110: 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  a is available, 
4120: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c  this routine wil
4130: 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69 6e 76 6f  l either.** invo
4140: 6b 65 20 74 68 65 20 72 65 73 75 6c 74 20 63 61  ke the result ca
4150: 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72 65  llback (if there
4160: 20 69 73 20 6f 6e 65 29 20 6f 72 20 72 65 74 75   is one) or retu
4170: 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54  rn with.** SQLIT
4180: 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  E_ROW..**.** If 
4190: 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
41a0: 64 65 20 74 6f 20 6f 70 65 6e 20 61 20 6c 6f 63  de to open a loc
41b0: 6b 65 64 20 64 61 74 61 62 61 73 65 2c 20 74 68  ked database, th
41c0: 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a  en this routine.
41d0: 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65 72 20 69  ** will either i
41e0: 6e 76 6f 6b 65 20 74 68 65 20 62 75 73 79 20 63  nvoke the busy c
41f0: 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68 65 72  allback (if ther
4200: 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 69 74 20  e is one) or it 
4210: 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72 6e 20 53  will.** return S
4220: 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a  QLITE_BUSY..**.*
4230: 2a 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  * If an error oc
4240: 63 75 72 73 2c 20 61 6e 20 65 72 72 6f 72 20 6d  curs, an error m
4250: 65 73 73 61 67 65 20 69 73 20 77 72 69 74 74 65  essage is writte
4260: 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61  n to memory obta
4270: 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  ined.** from sql
4280: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e  ite3_malloc() an
4290: 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20 69 73 20  d p->zErrMsg is 
42a0: 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f  made to point to
42b0: 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a   that memory..**
42c0: 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   The error code 
42d0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 2d 3e  is stored in p->
42e0: 72 63 20 61 6e 64 20 74 68 69 73 20 72 6f 75 74  rc and this rout
42f0: 69 6e 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ine returns SQLI
4300: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
4310: 49 66 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  If the callback 
4320: 65 76 65 72 20 72 65 74 75 72 6e 73 20 6e 6f 6e  ever returns non
4330: 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
4340: 70 72 6f 67 72 61 6d 20 65 78 69 74 73 0a 2a 2a  program exits.**
4350: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54   immediately.  T
4360: 68 65 72 65 20 77 69 6c 6c 20 62 65 20 6e 6f 20  here will be no 
4370: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 62 75  error message bu
4380: 74 20 74 68 65 20 70 2d 3e 72 63 20 66 69 65 6c  t the p->rc fiel
4390: 64 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 53  d is.** set to S
43a0: 51 4c 49 54 45 5f 41 42 4f 52 54 20 61 6e 64 20  QLITE_ABORT and 
43b0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c  this routine wil
43c0: 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  l return SQLITE_
43d0: 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d  ERROR..**.** A m
43e0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
43f0: 20 65 72 72 6f 72 20 63 61 75 73 65 73 20 70 2d   error causes p-
4400: 3e 72 63 20 74 6f 20 62 65 20 73 65 74 20 74 6f  >rc to be set to
4410: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e   SQLITE_NOMEM an
4420: 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75 74 69 6e  d this.** routin
4430: 65 20 74 6f 20 72 65 74 75 72 6e 20 53 51 4c 49  e to return SQLI
4440: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
4450: 4f 74 68 65 72 20 66 61 74 61 6c 20 65 72 72 6f  Other fatal erro
4460: 72 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  rs return SQLITE
4470: 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66  _ERROR..**.** Af
4480: 74 65 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65  ter this routine
4490: 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 73   has finished, s
44a0: 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69  qlite3VdbeFinali
44b0: 7a 65 28 29 20 73 68 6f 75 6c 64 20 62 65 0a 2a  ze() should be.*
44c0: 2a 20 75 73 65 64 20 74 6f 20 63 6c 65 61 6e 20  * used to clean 
44d0: 75 70 20 74 68 65 20 6d 65 73 73 20 74 68 61 74  up the mess that
44e0: 20 77 61 73 20 6c 65 66 74 20 62 65 68 69 6e 64   was left behind
44f0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
4500: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
4510: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
4520: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
4530: 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70  BE */.){.  int p
4540: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
4550: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f        /* The pro
4560: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  gram counter */.
4570: 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20 20    Op *pOp;      
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4590: 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f  Current operatio
45a0: 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20  n */.  int rc = 
45b0: 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20  SQLITE_OK;      
45c0: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
45d0: 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  turn */.  sqlite
45e0: 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20  3 *db = p->db;  
45f0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
4600: 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  base */.  u8 enc
4610: 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b  oding = ENC(db);
4620: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
4630: 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  base encoding */
4640: 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30  .  Mem *pIn1 = 0
4650: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4660: 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72 61   1st input opera
4670: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
4680: 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  2 = 0;          
4690: 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20     /* 2nd input 
46a0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
46b0: 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20 20   *pIn3 = 0;     
46c0: 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20 69          /* 3rd i
46d0: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
46e0: 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b    Mem *pOut = 0;
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4700: 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20 2a  Output operand *
4710: 2f 0a 20 20 75 38 20 6f 70 50 72 6f 70 65 72 74  /.  u8 opPropert
4720: 79 3b 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72  y;.  int iCompar
4730: 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  e = 0;          
4740: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73  /* Result of las
4750: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65  t OP_Compare ope
4760: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
4770: 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20  *aPermute = 0;  
4780: 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74         /* Permut
4790: 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73  ation of columns
47a0: 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20   for OP_Compare 
47b0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
47c0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
47d0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
47e0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
47f0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
4800: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69  of opcode */.  i
4810: 6e 74 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20  nt origPc;      
4820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f            /* Pro
4830: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20  gram counter at 
4840: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4850: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
4860: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
4870: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
4880: 20 20 69 6e 74 20 6e 50 72 6f 67 72 65 73 73 4f    int nProgressO
4890: 70 73 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  ps = 0;      /* 
48a0: 4f 70 63 6f 64 65 73 20 65 78 65 63 75 74 65 64  Opcodes executed
48b0: 20 73 69 6e 63 65 20 70 72 6f 67 72 65 73 73 20   since progress 
48c0: 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 65 6e  callback. */.#en
48d0: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
48e0: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
48f0: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4900: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4910: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4920: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4930: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4940: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
4950: 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d  >magic==SQLITE_M
4960: 41 47 49 43 5f 42 55 53 59 20 29 3b 0a 20 20 73  AGIC_BUSY );.  s
4970: 71 6c 69 74 65 33 56 64 62 65 4d 75 74 65 78 41  qlite3VdbeMutexA
4980: 72 72 61 79 45 6e 74 65 72 28 70 29 3b 0a 20 20  rrayEnter(p);.  
4990: 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  if( p->rc==SQLIT
49a0: 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f  E_NOMEM ){.    /
49b0: 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69  * This happens i
49c0: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73  f a malloc() ins
49d0: 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71  ide a call to sq
49e0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
49f0: 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71  t() or.    ** sq
4a00: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
4a10: 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a  t16() failed.  *
4a20: 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  /.    goto no_me
4a30: 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  m;.  }.  assert(
4a40: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
4a50: 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  K || p->rc==SQLI
4a60: 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 70 2d 3e  TE_BUSY );.  p->
4a70: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
4a80: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70    assert( p->exp
4a90: 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e  lain==0 );.  p->
4aa0: 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a  pResultSet = 0;.
4ab0: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
4ac0: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 43  r.nBusy = 0;.  C
4ad0: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
4ae0: 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  PT;.  sqlite3Vdb
4af0: 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a  eIOTraceSql(p);.
4b00: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4b10: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
4b20: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
4b30: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
4b40: 20 0a 20 20 20 26 26 20 28 28 70 2d 3e 64 62 2d   .   && ((p->db-
4b50: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
4b60: 56 64 62 65 4c 69 73 74 69 6e 67 29 20 7c 7c 20  VdbeListing) || 
4b70: 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c 20 22  fileExists(db, "
4b80: 76 64 62 65 5f 65 78 70 6c 61 69 6e 22 29 29 0a  vdbe_explain")).
4b90: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    ){.    int i;.
4ba0: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
4bb0: 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67   Program Listing
4bc0: 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69 74  :\n");.    sqlit
4bd0: 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70  e3VdbePrintSql(p
4be0: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  );.    for(i=0; 
4bf0: 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a  i<p->nOp; i++){.
4c00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4c10: 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
4c20: 20 69 2c 20 26 70 2d 3e 61 4f 70 5b 69 5d 29 3b   i, &p->aOp[i]);
4c30: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
4c40: 20 66 69 6c 65 45 78 69 73 74 73 28 64 62 2c 20   fileExists(db, 
4c50: 22 76 64 62 65 5f 74 72 61 63 65 22 29 20 29 7b  "vdbe_trace") ){
4c60: 0a 20 20 20 20 70 2d 3e 74 72 61 63 65 20 3d 20  .    p->trace = 
4c70: 73 74 64 6f 75 74 3b 0a 20 20 7d 0a 20 20 73 71  stdout;.  }.  sq
4c80: 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
4c90: 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20  lloc();.#endif. 
4ca0: 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72   for(pc=p->pc; r
4cb0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63  c==SQLITE_OK; pc
4cc0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
4cd0: 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e   pc>=0 && pc<p->
4ce0: 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28 20 64  nOp );.    if( d
4cf0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
4d00: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23  ) goto no_mem;.#
4d10: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4d20: 4c 45 0a 20 20 20 20 6f 72 69 67 50 63 20 3d 20  LE.    origPc = 
4d30: 70 63 3b 0a 20 20 20 20 73 74 61 72 74 20 3d 20  pc;.    start = 
4d40: 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b  sqlite3Hwtime();
4d50: 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 4f 70 20  .#endif.    pOp 
4d60: 3d 20 26 70 2d 3e 61 4f 70 5b 70 63 5d 3b 0a 0a  = &p->aOp[pc];..
4d70: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
4d80: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
4d90: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
4da0: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
4db0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4dc0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63  .    if( p->trac
4dd0: 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  e ){.      if( p
4de0: 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  c==0 ){.        
4df0: 70 72 69 6e 74 66 28 22 56 44 42 45 20 45 78 65  printf("VDBE Exe
4e00: 63 75 74 69 6f 6e 20 54 72 61 63 65 3a 5c 6e 22  cution Trace:\n"
4e10: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
4e20: 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70  e3VdbePrintSql(p
4e30: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
4e40: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4e50: 74 4f 70 28 70 2d 3e 74 72 61 63 65 2c 20 70 63  tOp(p->trace, pc
4e60: 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 20 20  , pOp);.    }.  
4e70: 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 3d 3d    if( p->trace==
4e80: 30 20 26 26 20 70 63 3d 3d 30 20 29 7b 0a 20 20  0 && pc==0 ){.  
4e90: 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e      sqlite3Begin
4ea0: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
4eb0: 20 20 20 20 20 20 69 66 28 20 66 69 6c 65 45 78        if( fileEx
4ec0: 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f 73  ists(db, "vdbe_s
4ed0: 71 6c 74 72 61 63 65 22 29 20 29 7b 0a 20 20 20  qltrace") ){.   
4ee0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4ef0: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4f00: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
4f10: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
4f20: 63 28 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  c();.    }.#endi
4f30: 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a  f.      ..    /*
4f40: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
4f50: 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75   we need to simu
4f60: 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70  late an interrup
4f70: 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61  t.  This only ha
4f80: 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20  ppens.    ** if 
4f90: 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61  we have a specia
4fa0: 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20  l test build..  
4fb0: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
4fc0: 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20  TE_TEST.    if( 
4fd0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
4fe0: 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20  t_count>0 ){.   
4ff0: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
5000: 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20  rupt_count--;.  
5010: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
5020: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d  interrupt_count=
5030: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
5040: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
5050: 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
5060: 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64   }.#endif..#ifnd
5070: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
5080: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
5090: 0a 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65  .    /* Call the
50a0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
50b0: 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66  ck if it is conf
50c0: 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72  igured and the r
50d0: 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20  equired number. 
50e0: 20 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70     ** of VDBE op
50f0: 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63  s have been exec
5100: 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e  uted (either sin
5110: 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69  ce this invocati
5120: 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 73 71 6c  on of.    ** sql
5130: 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f  ite3VdbeExec() o
5140: 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d  r since last tim
5150: 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  e the progress c
5160: 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c  allback was call
5170: 65 64 29 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74  ed)..    ** If t
5180: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
5190: 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e  back returns non
51a0: 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20  -zero, exit the 
51b0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
51c0: 77 69 74 68 0a 20 20 20 20 2a 2a 20 61 20 72 65  with.    ** a re
51d0: 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45  turn code SQLITE
51e0: 5f 41 42 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a 20  _ABORT..    */. 
51f0: 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67     if( db->xProg
5200: 72 65 73 73 20 29 7b 0a 20 20 20 20 20 20 69 66  ress ){.      if
5210: 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  ( db->nProgressO
5220: 70 73 3d 3d 6e 50 72 6f 67 72 65 73 73 4f 70 73  ps==nProgressOps
5230: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   ){.        int 
5240: 70 72 63 3b 0a 20 20 20 20 20 20 20 20 69 66 28  prc;.        if(
5250: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
5260: 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
5270: 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
5280: 3b 0a 20 20 20 20 20 20 20 20 70 72 63 20 3d 64  ;.        prc =d
5290: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
52a0: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b 0a  >pProgressArg);.
52b0: 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
52c0: 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
52d0: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
52e0: 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
52f0: 20 20 20 20 69 66 28 20 70 72 63 21 3d 30 20 29      if( prc!=0 )
5300: 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
5310: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
5320: 54 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  T;.          got
5330: 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
5340: 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
5350: 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70       nProgressOp
5360: 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  s = 0;.      }. 
5370: 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70       nProgressOp
5380: 73 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  s++;.    }.#endi
5390: 66 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 63 6f 6d  f..    /* Do com
53a0: 6d 6f 6e 20 73 65 74 75 70 20 70 72 6f 63 65 73  mon setup proces
53b0: 73 69 6e 67 20 66 6f 72 20 61 6e 79 20 6f 70 63  sing for any opc
53c0: 6f 64 65 20 74 68 61 74 20 69 73 20 6d 61 72 6b  ode that is mark
53d0: 65 64 0a 20 20 20 20 2a 2a 20 77 69 74 68 20 74  ed.    ** with t
53e0: 68 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 65  he "out2-prerele
53f0: 61 73 65 22 20 74 61 67 2e 20 20 53 75 63 68 20  ase" tag.  Such 
5400: 6f 70 63 6f 64 65 73 20 68 61 76 65 20 61 20 73  opcodes have a s
5410: 69 6e 67 6c 65 0a 20 20 20 20 2a 2a 20 6f 75 74  ingle.    ** out
5420: 70 75 74 20 77 68 69 63 68 20 69 73 20 73 70 65  put which is spe
5430: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 50 32  cified by the P2
5440: 20 70 61 72 61 6d 65 74 65 72 2e 20 20 54 68 65   parameter.  The
5450: 20 50 32 20 72 65 67 69 73 74 65 72 0a 20 20 20   P2 register.   
5460: 20 2a 2a 20 69 73 20 69 6e 69 74 69 61 6c 69 7a   ** is initializ
5470: 65 64 20 74 6f 20 61 20 4e 55 4c 4c 2e 0a 20 20  ed to a NULL..  
5480: 20 20 2a 2f 0a 20 20 20 20 6f 70 50 72 6f 70 65    */.    opPrope
5490: 72 74 79 20 3d 20 6f 70 63 6f 64 65 50 72 6f 70  rty = opcodeProp
54a0: 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  erty[pOp->opcode
54b0: 5d 3b 0a 20 20 20 20 69 66 28 20 28 6f 70 50 72  ];.    if( (opPr
54c0: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f  operty & OPFLG_O
54d0: 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 29 21  UT2_PRERELEASE)!
54e0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
54f0: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5500: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5510: 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p2<=p->nMem 
5520: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20  );.      pOut = 
5530: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
5540: 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ];.      sqlite3
5550: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78  VdbeMemReleaseEx
5560: 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20 20  ternal(pOut);.  
5570: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
5580: 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
5590: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20    pOut->n = 0;. 
55a0: 20 20 20 7d 65 6c 73 65 0a 20 0a 20 20 20 20 2f     }else. .    /
55b0: 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65 74 75  * Do common setu
55c0: 70 20 66 6f 72 20 6f 70 63 6f 64 65 73 20 6d 61  p for opcodes ma
55d0: 72 6b 65 64 20 77 69 74 68 20 6f 6e 65 20 6f 66  rked with one of
55e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 20   the following. 
55f0: 20 20 20 2a 2a 20 63 6f 6d 62 69 6e 61 74 69 6f     ** combinatio
5600: 6e 73 20 6f 66 20 70 72 6f 70 65 72 74 69 65 73  ns of properties
5610: 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
5620: 20 20 20 20 20 20 20 20 20 20 69 6e 31 0a 20 20            in1.  
5630: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69    **           i
5640: 6e 31 20 69 6e 32 0a 20 20 20 20 2a 2a 20 20 20  n1 in2.    **   
5650: 20 20 20 20 20 20 20 20 69 6e 31 20 69 6e 32 20          in1 in2 
5660: 6f 75 74 33 0a 20 20 20 20 2a 2a 20 20 20 20 20  out3.    **     
5670: 20 20 20 20 20 20 69 6e 31 20 69 6e 33 0a 20 20        in1 in3.  
5680: 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 56 61 72 69    **.    ** Vari
5690: 61 62 6c 65 73 20 70 49 6e 31 2c 20 70 49 6e 32  ables pIn1, pIn2
56a0: 2c 20 61 6e 64 20 70 49 6e 33 20 61 72 65 20 6d  , and pIn3 are m
56b0: 61 64 65 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  ade to point to 
56c0: 61 70 70 72 6f 70 72 69 61 74 65 0a 20 20 20 20  appropriate.    
56d0: 2a 2a 20 72 65 67 69 73 74 65 72 73 20 66 6f 72  ** registers for
56e0: 20 69 6e 70 75 74 73 2e 20 20 56 61 72 69 61 62   inputs.  Variab
56f0: 6c 65 20 70 4f 75 74 20 70 6f 69 6e 74 73 20 74  le pOut points t
5700: 6f 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  o the output reg
5710: 69 73 74 65 72 2e 0a 20 20 20 20 2a 2f 0a 20 20  ister..    */.  
5720: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5730: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d  y & OPFLG_IN1)!=
5740: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5750: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
5760: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5770: 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
5780: 3b 0a 20 20 20 20 20 20 70 49 6e 31 20 3d 20 26  ;.      pIn1 = &
5790: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
57a0: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
57b0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
57c0: 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 69 66 28  pIn1);.      if(
57d0: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
57e0: 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a  PFLG_IN2)!=0 ){.
57f0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5800: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5810: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5820: 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p2<=p->nMem );
5830: 0a 20 20 20 20 20 20 20 20 70 49 6e 32 20 3d 20  .        pIn2 = 
5840: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
5850: 5d 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  ];.        REGIS
5860: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5870: 32 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 20 20  2, pIn2);.      
5880: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5890: 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21  y & OPFLG_OUT3)!
58a0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
58b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
58c0: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  0 );.          a
58d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
58e0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
58f0: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e       pOut = &p->
5900: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
5910: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
5920: 65 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70  else if( (opProp
5930: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33  erty & OPFLG_IN3
5940: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5950: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5960: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
5970: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  ert( pOp->p3<=p-
5980: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
5990: 20 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn3 = &p->aMem
59a0: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
59b0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
59c0: 45 28 70 4f 70 2d 3e 70 33 2c 20 70 49 6e 33 29  E(pOp->p3, pIn3)
59d0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
59e0: 6c 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65  lse if( (opPrope
59f0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  rty & OPFLG_IN2)
5a00: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5a10: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5a20: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5a30: 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p2<=p->nMem
5a40: 20 29 3b 0a 20 20 20 20 20 20 70 49 6e 32 20 3d   );.      pIn2 =
5a50: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
5a60: 32 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54  2];.      REGIST
5a70: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
5a80: 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c  , pIn2);.    }el
5a90: 73 65 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72  se if( (opProper
5aa0: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21  ty & OPFLG_IN3)!
5ab0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5ac0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
5ad0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5ae0: 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
5af0: 29 3b 0a 20 20 20 20 20 20 70 49 6e 33 20 3d 20  );.      pIn3 = 
5b00: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
5b10: 5d 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ];.      REGISTE
5b20: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
5b30: 20 70 49 6e 33 29 3b 0a 20 20 20 20 7d 0a 0a 20   pIn3);.    }.. 
5b40: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
5b50: 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a  opcode ){../****
5b60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ba0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61  *********.** Wha
5bb0: 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d  t follows is a m
5bc0: 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73 74  assive switch st
5bd0: 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61  atement where ea
5be0: 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e  ch case implemen
5bf0: 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65  ts a.** separate
5c00: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20   instruction in 
5c10: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
5c20: 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c  ine.  If we foll
5c30: 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20  ow the usual.** 
5c40: 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76  indentation conv
5c50: 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61  entions, each ca
5c60: 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  se should be ind
5c70: 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63 65  ented by 6 space
5c80: 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20  s.  But.** that 
5c90: 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74  is a lot of wast
5ca0: 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20  ed space on the 
5cb0: 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f  left margin.  So
5cc0: 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e   the code within
5cd0: 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20 73  .** the switch s
5ce0: 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72  tatement will br
5cf0: 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74  eak with convent
5d00: 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68  ion and be flush
5d10: 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a  -left. Another.*
5d20: 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73  * big comment (s
5d30: 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f  imilar to this o
5d40: 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68  ne) will mark th
5d50: 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63  e point in the c
5d60: 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20  ode where.** we 
5d70: 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20  transition back 
5d80: 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  to normal indent
5d90: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ation..**.** The
5da0: 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65   formatting of e
5db0: 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f  ach case is impo
5dc0: 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65  rtant.  The make
5dd0: 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a  file for SQLite.
5de0: 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f  ** generates two
5df0: 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65   C files "opcode
5e00: 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65  s.h" and "opcode
5e10: 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67  s.c" by scanning
5e20: 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f   this.** file lo
5e30: 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20  oking for lines 
5e40: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
5e50: 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65  "case OP_".  The
5e60: 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73   opcodes.h files
5e70: 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c  .** will be fill
5e80: 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65 73  ed with #defines
5e90: 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71 75   that give uniqu
5ea0: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  e integer values
5eb0: 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f   to each.** opco
5ec0: 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64  de and the opcod
5ed0: 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c  es.c file is fil
5ee0: 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72 61  led with an arra
5ef0: 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65  y of strings whe
5f00: 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e  re.** each strin
5f10: 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69  g is the symboli
5f20: 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63  c name for the c
5f30: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63  orresponding opc
5f40: 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ode.  If the.** 
5f50: 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69  case statement i
5f60: 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
5f70: 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66  comment of the f
5f80: 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20  orm "/# same as 
5f90: 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20  ... #/".** that 
5fa0: 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20  comment is used 
5fb0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
5fc0: 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75   particular valu
5fd0: 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  e of the opcode.
5fe0: 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79  .**.** Other key
5ff0: 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d  words in the com
6000: 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77  ment that follow
6010: 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65 20  s each case are 
6020: 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74  used to.** const
6030: 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49  ruct the OPFLG_I
6040: 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65  NITIALIZER value
6050: 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65   that initialize
6060: 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  s opcodeProperty
6070: 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20  []..** Keywords 
6080: 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e  include: in1, in
6090: 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65  2, in3, out2_pre
60a0: 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f  release, out2, o
60b0: 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65  ut3.  See.** the
60c0: 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73   mkopcodeh.awk s
60d0: 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69  cript for additi
60e0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
60f0: 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74  ..**.** Document
6100: 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45  ation about VDBE
6110: 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65   opcodes is gene
6120: 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e  rated by scannin
6130: 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66  g this file.** f
6140: 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74  or lines of that
6150: 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65   contain "Opcode
6160: 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61  :".  That line a
6170: 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  nd all subsequen
6180: 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e  t.** comment lin
6190: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74  es are used in t
61a0: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
61b0: 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c   the opcode.html
61c0: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a   documentation.*
61d0: 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55  * file..**.** SU
61e0: 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  MMARY:.**.**    
61f0: 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69   Formatting is i
6200: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69  mportant to scri
6210: 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68  pts that scan th
6220: 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20  is file..**     
6230: 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66  Do not deviate f
6240: 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69  rom the formatti
6250: 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74  ng style current
6260: 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  ly in use..**.**
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
62c0: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a   Opcode:  Goto *
62d0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
62e0: 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  An unconditional
62f0: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
6300: 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74   P2..** The next
6310: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65   instruction exe
6320: 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a  cuted will be .*
6330: 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64  * the one at ind
6340: 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62  ex P2 from the b
6350: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74  eginning of.** t
6360: 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63  he program..*/.c
6370: 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20  ase OP_Goto: {  
6380: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6390: 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f 46 4f  mp */.  CHECK_FO
63a0: 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
63b0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
63c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
63d0: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
63e0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
63f0: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6400: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6410: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6420: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6430: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
6440: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
6450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6460: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6470: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
6480: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d  ssert( pOp->p1<=
6490: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e  p->nMem );.  pIn
64a0: 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  1 = &p->aMem[pOp
64b0: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
64c0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
64d0: 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20  MEM_Dyn)==0 );. 
64e0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
64f0: 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e  EM_Int;.  pIn1->
6500: 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49  u.i = pc;.  REGI
6510: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
6520: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20  p1, pIn1);.  pc 
6530: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
6540: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6550: 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31  code:  Return P1
6560: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a   * * * *.**.** J
6570: 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ump to the next 
6580: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65  instruction afte
6590: 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  r the address in
65a0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f   register P1..*/
65b0: 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a  .case OP_Return:
65c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
65d0: 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
65e0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
65f0: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d  EM_Int );.  pc =
6600: 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b   (int)pIn1->u.i;
6610: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6620: 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50  Opcode:  Yield P
6630: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6640: 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d  Swap the program
6650: 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68   counter with th
6660: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
6670: 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  ter P1..*/.case 
6680: 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20  OP_Yield: {     
6690: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
66a0: 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20  .  int pcDest;. 
66b0: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
66c0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
66d0: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
66e0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
66f0: 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29    pcDest = (int)
6700: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
6710: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
6720: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
6730: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
6740: 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62  pc = pcDest;.  b
6750: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6760: 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20  de:  HaltIfNull 
6770: 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
6780: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
6790: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
67a0: 20 50 33 2e 20 20 49 66 20 69 73 20 69 73 20 4e   P3.  If is is N
67b0: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
67c0: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
67d0: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
67e0: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
67f0: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
6800: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
6810: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6820: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
6830: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
6840: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
6850: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66  /.case OP_HaltIf
6860: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Null: {      /* 
6870: 69 6e 33 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  in3 */.  if( (pI
6880: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
6890: 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b  Null)==0 ) break
68a0: 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
68b0: 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74  ugh into OP_Halt
68c0: 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65   */.}../* Opcode
68d0: 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20  :  Halt P1 P2 * 
68e0: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  P4 *.**.** Exit 
68f0: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
6900: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
6910: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
6920: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
6930: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
6940: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
6950: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
6960: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
6970: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
6980: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6990: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
69a0: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
69b0: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
69c0: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
69d0: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
69e0: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
69f0: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
6a00: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
6a10: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
6a20: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
6a30: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
6a40: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
6a50: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
6a60: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
6a70: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
6a80: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
6a90: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
6aa0: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
6ab0: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
6ac0: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
6ad0: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
6ae0: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
6af0: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
6b00: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
6b10: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
6b20: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
6b30: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
6b40: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
6b50: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
6b60: 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70   There is an imp
6b70: 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30  lied "Halt 0 0 0
6b80: 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  " instruction in
6b90: 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65  serted at the ve
6ba0: 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65  ry end of.** eve
6bb0: 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20  ry program.  So 
6bc0: 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20  a jump past the 
6bd0: 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  last instruction
6be0: 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a   of the program.
6bf0: 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  ** is the same a
6c00: 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74  s executing Halt
6c10: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
6c20: 74 3a 20 7b 0a 20 20 70 2d 3e 72 63 20 3d 20 70  t: {.  p->rc = p
6c30: 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 70 63 20  Op->p1;.  p->pc 
6c40: 3d 20 70 63 3b 0a 20 20 70 2d 3e 65 72 72 6f 72  = pc;.  p->error
6c50: 41 63 74 69 6f 6e 20 3d 20 70 4f 70 2d 3e 70 32  Action = pOp->p2
6c60: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
6c70: 7a 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  z ){.    sqlite3
6c80: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
6c90: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
6ca0: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 7d   pOp->p4.z);.  }
6cb0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
6cc0: 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73  dbeHalt(p);.  as
6cd0: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
6ce0: 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c  _BUSY || rc==SQL
6cf0: 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20  ITE_OK );.  if( 
6d00: 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
6d10: 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  ){.    p->rc = r
6d20: 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
6d30: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
6d40: 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54   = p->rc ? SQLIT
6d50: 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45  E_ERROR : SQLITE
6d60: 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74  _DONE;.  }.  got
6d70: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
6d80: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
6d90: 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  eger P1 P2 * * *
6da0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69  .**.** The 32-bi
6db0: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  t integer value 
6dc0: 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e  P1 is written in
6dd0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
6de0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
6df0: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  er: {         /*
6e00: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
6e10: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   */.  pOut->flag
6e20: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
6e30: 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e  Out->u.i = pOp->
6e40: 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p1;.  break;.}..
6e50: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34  /* Opcode: Int64
6e60: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a   * P2 * P4 *.**.
6e70: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
6e80: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69  er to a 64-bit i
6e90: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a  nteger value..**
6ea0: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
6eb0: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
6ec0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
6ed0: 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20  nt64: {         
6ee0: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
6ef0: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
6f00: 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d  ( pOp->p4.pI64!=
6f10: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  0 );.  pOut->fla
6f20: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6f30: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70  pOut->u.i = *pOp
6f40: 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
6f50: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6f60: 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34  : Real * P2 * P4
6f70: 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
6f80: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
6f90: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
6fa0: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
6fb0: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
6fc0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
6fd0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
6fe0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
6ff0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
7000: 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  AT, out2-prerele
7010: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66  ase */.  pOut->f
7020: 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b  lags = MEM_Real;
7030: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
7040: 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70  te3IsNaN(*pOp->p
7050: 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f  4.pReal) );.  pO
7060: 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34  ut->r = *pOp->p4
7070: 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b  .pReal;.  break;
7080: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
7090: 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34  tring8 * P2 * P4
70a0: 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e   *.**.** P4 poin
70b0: 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d  ts to a nul term
70c0: 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
70d0: 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  ing. This opcode
70e0: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
70f0: 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f 50 5f 53  .** into an OP_S
7100: 74 72 69 6e 67 20 62 65 66 6f 72 65 20 69 74 20  tring before it 
7110: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
7120: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 0a  the first time..
7130: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
7140: 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  g8: {         /*
7150: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49   same as TK_STRI
7160: 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65  NG, out2-prerele
7170: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7180: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7190: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
71a0: 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f   OP_String;.  pO
71b0: 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53  p->p1 = sqlite3S
71c0: 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e  trlen30(pOp->p4.
71d0: 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  z);..#ifndef SQL
71e0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
71f0: 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53   if( encoding!=S
7200: 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20  QLITE_UTF8 ){.  
7210: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
7220: 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70  SetStr(pOut, pOp
7230: 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49  ->p4.z, -1, SQLI
7240: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
7250: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28  STATIC);.    if(
7260: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69   SQLITE_OK!=sqli
7270: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
7280: 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
7290: 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  ding) ) goto no_
72a0: 6d 65 6d 3b 0a 20 20 20 20 69 66 28 20 53 51 4c  mem;.    if( SQL
72b0: 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56  ITE_OK!=sqlite3V
72c0: 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61  dbeMemMakeWritea
72d0: 62 6c 65 28 70 4f 75 74 29 20 29 20 67 6f 74 6f  ble(pOut) ) goto
72e0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 4f 75   no_mem;.    pOu
72f0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  t->zMalloc = 0;.
7300: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
7310: 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20  |= MEM_Static;. 
7320: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26     pOut->flags &
7330: 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20  = ~MEM_Dyn;.    
7340: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
7350: 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20  =P4_DYNAMIC ){. 
7360: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
7370: 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ee(db, pOp->p4.z
7380: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
7390: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59  ->p4type = P4_DY
73a0: 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e  NAMIC;.    pOp->
73b0: 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a  p4.z = pOut->z;.
73c0: 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f      pOp->p1 = pO
73d0: 75 74 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20 70  ut->n;.    if( p
73e0: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
73f0: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
7400: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
7410: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
7420: 20 20 7d 0a 20 20 20 20 55 50 44 41 54 45 5f 4d    }.    UPDATE_M
7430: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
7440: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
7450: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
7460: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
7470: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
7480: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
7490: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
74a0: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
74b0: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
74c0: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
74d0: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
74e0: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20   String P1 P2 * 
74f0: 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  P4 *.**.** The s
7500: 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f  tring value P4 o
7510: 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74  f length P1 (byt
7520: 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e  es) is stored in
7530: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
7540: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a  .case OP_String:
7550: 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
7560: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7570: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
7580: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
7590: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
75a0: 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
75b0: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
75c0: 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  >z = pOp->p4.z;.
75d0: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d    pOut->n = pOp-
75e0: 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >p1;.  pOut->enc
75f0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
7600: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
7610: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
7620: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7630: 20 4e 75 6c 6c 20 2a 20 50 32 20 2a 20 2a 20 2a   Null * P2 * * *
7640: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e  .**.** Write a N
7650: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
7660: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7670: 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Null: {        
7680: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7690: 6c 65 61 73 65 20 2a 2f 0a 20 20 62 72 65 61 6b  lease */.  break
76a0: 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
76b0: 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34   Blob P1 P2 * P4
76c0: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
76d0: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
76e0: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
76f0: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
7700: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
7710: 72 20 50 32 2e 20 54 68 69 73 20 69 6e 73 74 72  r P2. This instr
7720: 75 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6f  uction is not co
7730: 64 65 64 20 64 69 72 65 63 74 6c 79 0a 2a 2a 20  ded directly.** 
7740: 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 2e  by the compiler.
7750: 20 49 6e 73 74 65 61 64 2c 20 74 68 65 20 63 6f   Instead, the co
7760: 6d 70 69 6c 65 72 20 6c 61 79 65 72 20 73 70 65  mpiler layer spe
7770: 63 69 66 69 65 73 0a 2a 2a 20 61 6e 20 4f 50 5f  cifies.** an OP_
7780: 48 65 78 42 6c 6f 62 20 6f 70 63 6f 64 65 2c 20  HexBlob opcode, 
7790: 77 69 74 68 20 74 68 65 20 68 65 78 20 73 74 72  with the hex str
77a0: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
77b0: 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 6c 6f  on of.** the blo
77c0: 62 20 61 73 20 50 34 2e 20 54 68 69 73 20 6f 70  b as P4. This op
77d0: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
77e0: 6d 65 64 20 74 6f 20 61 6e 20 4f 50 5f 42 6c 6f  med to an OP_Blo
77f0: 62 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 74  b.** the first t
7800: 69 6d 65 20 69 74 20 69 73 20 65 78 65 63 75 74  ime it is execut
7810: 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  ed..*/.case OP_B
7820: 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  lob: {          
7830: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
7840: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
7850: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d  sert( pOp->p1 <=
7860: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
7870: 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  TH );.  sqlite3V
7880: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
7890: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f  t, pOp->p4.z, pO
78a0: 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20  p->p1, 0, 0);.  
78b0: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
78c0: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
78d0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
78e0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
78f0: 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62  * Opcode: Variab
7900: 6c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  le P1 P2 P3 P4 *
7910: 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  .**.** Transfer 
7920: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f  the values of bo
7930: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 20 50  und parameters P
7940: 31 2e 2e 50 31 2b 50 33 2d 31 20 69 6e 74 6f 20  1..P1+P3-1 into 
7950: 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 50 32 2e  registers.** P2.
7960: 2e 50 32 2b 50 33 2d 31 2e 0a 2a 2a 0a 2a 2a 20  .P2+P3-1..**.** 
7970: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
7980: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
7990: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
79a0: 20 69 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31   in P4 and P3==1
79b0: 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  ..** The P4 valu
79c0: 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c  e is used by sql
79d0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
79e0: 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63  ter_name()..*/.c
79f0: 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a  ase OP_Variable:
7a00: 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
7a10: 20 20 20 20 20 20 2f 2a 20 56 61 72 69 61 62 6c        /* Variabl
7a20: 65 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a  e to copy from *
7a30: 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
7a40: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
7a50: 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 20   to copy to */. 
7a60: 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
7a70: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
7a80: 61 6c 75 65 73 20 6c 65 66 74 20 74 6f 20 63 6f  alues left to co
7a90: 70 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61  py */.  Mem *pVa
7aa0: 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  r;       /* Valu
7ab0: 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72  e being transfer
7ac0: 72 65 64 20 2a 2f 0a 0a 20 20 70 31 20 3d 20 70  red */..  p1 = p
7ad0: 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 70 32  Op->p1 - 1;.  p2
7ae0: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 6e 20   = pOp->p2;.  n 
7af0: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
7b00: 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31  ert( p1>=0 && p1
7b10: 2b 6e 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20  +n<=p->nVar );. 
7b20: 20 61 73 73 65 72 74 28 20 70 32 3e 3d 31 20 26   assert( p2>=1 &
7b30: 26 20 70 32 2b 6e 2d 31 3c 3d 70 2d 3e 6e 4d 65  & p2+n-1<=p->nMe
7b40: 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  m );.  assert( p
7b50: 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70  Op->p4.z==0 || p
7b60: 4f 70 2d 3e 70 33 3d 3d 31 20 29 3b 0a 0a 20 20  Op->p3==1 );..  
7b70: 77 68 69 6c 65 28 20 6e 2d 2d 20 3e 20 30 20 29  while( n-- > 0 )
7b80: 7b 0a 20 20 20 20 70 56 61 72 20 3d 20 26 70 2d  {.    pVar = &p-
7b90: 3e 61 56 61 72 5b 70 31 2b 2b 5d 3b 0a 20 20 20  >aVar[p1++];.   
7ba0: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
7bb0: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
7bc0: 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
7bd0: 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20  o_big;.    }.   
7be0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
7bf0: 5b 70 32 2b 2b 5d 3b 0a 20 20 20 20 73 71 6c 69  [p2++];.    sqli
7c00: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
7c10: 65 45 78 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b  eExternal(pOut);
7c20: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
7c30: 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
7c40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
7c50: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
7c60: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
7c70: 63 29 3b 0a 20 20 20 20 55 50 44 41 54 45 5f 4d  c);.    UPDATE_M
7c80: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
7c90: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
7ca0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
7cb0: 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ve P1 P2 P3 * *.
7cc0: 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76  **.** Move the v
7cd0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
7ce0: 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76  r P1..P1+P3-1 ov
7cf0: 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  er into.** regis
7d00: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31  ters P2..P2+P3-1
7d10: 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e  .  Registers P1.
7d20: 2e 50 31 2b 50 31 2d 31 20 61 72 65 0a 2a 2a 20  .P1+P1-1 are.** 
7d30: 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e  left holding a N
7d40: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65  ULL.  It is an e
7d50: 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65  rror for registe
7d60: 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e  r ranges.** P1..
7d70: 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e  P1+P3-1 and P2..
7d80: 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c  P2+P3-1 to overl
7d90: 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  ap..*/.case OP_M
7da0: 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ove: {.  char *z
7db0: 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c  Malloc;   /* Hol
7dc0: 64 69 6e 67 20 76 61 72 69 61 62 6c 65 20 66 6f  ding variable fo
7dd0: 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f  r allocated memo
7de0: 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  ry */.  int n;  
7df0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7e00: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
7e10: 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a  left to copy */.
7e20: 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
7e30: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
7e40: 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20  o copy from */. 
7e50: 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
7e60: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
7e70: 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e   copy to */..  n
7e80: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31   = pOp->p3;.  p1
7e90: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
7ea0: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
7eb0: 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e  sert( n>0 && p1>
7ec0: 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61  0 && p2>0 );.  a
7ed0: 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20  ssert( p1+n<=p2 
7ee0: 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a  || p2+n<=p1 );..
7ef0: 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65    pIn1 = &p->aMe
7f00: 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  m[p1];.  pOut = 
7f10: 26 70 2d 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20  &p->aMem[p2];.  
7f20: 77 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20  while( n-- ){.  
7f30: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d    assert( pOut<=
7f40: 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  &p->aMem[p->nMem
7f50: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
7f60: 20 70 49 6e 31 3c 3d 26 70 2d 3e 61 4d 65 6d 5b   pIn1<=&p->aMem[
7f70: 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20  p->nMem] );.    
7f80: 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e  zMalloc = pOut->
7f90: 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f 75  zMalloc;.    pOu
7fa0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  t->zMalloc = 0;.
7fb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
7fc0: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e  emMove(pOut, pIn
7fd0: 31 29 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d  1);.    pIn1->zM
7fe0: 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b  alloc = zMalloc;
7ff0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
8000: 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b  ACE(p2++, pOut);
8010: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20  .    pIn1++;.   
8020: 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pOut++;.  }.  b
8030: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8040: 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 2a  de: Copy P1 P2 *
8050: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20   * *.**.** Make 
8060: 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  a copy of regist
8070: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
8080: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
8090: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
80a0: 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79  akes a deep copy
80b0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
80c0: 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69  A duplicate.** i
80d0: 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74  s made of any st
80e0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e  ring or blob con
80f0: 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f  stant.  See also
8100: 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61   OP_SCopy..*/.ca
8110: 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 20 20 20  se OP_Copy: {   
8120: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
8130: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8140: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  p->p2>0 );.  ass
8150: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ert( pOp->p2<=p-
8160: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20  >nMem );.  pOut 
8170: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
8180: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
8190: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
81a0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
81b0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
81c0: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
81d0: 0a 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a  .  Deephemeraliz
81e0: 65 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53  e(pOut);.  REGIS
81f0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
8200: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  2, pOut);.  brea
8210: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8220: 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a   SCopy P1 P2 * *
8230: 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20   *.**.** Make a 
8240: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
8250: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
8260: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
8270: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
8280: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61  tion makes a sha
8290: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65  llow copy of the
82a0: 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20   value.  If the 
82b0: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74  value.** is a st
82c0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68  ring or blob, th
82d0: 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f  en the copy is o
82e0: 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  nly a pointer to
82f0: 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
8300: 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68   and hence if th
8310: 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67  e original chang
8320: 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63  es so will the c
8330: 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69  opy..** Worse, i
8340: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69  f the original i
8350: 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74  s deallocated, t
8360: 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20  he copy becomes 
8370: 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73  invalid..** Thus
8380: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73   the program mus
8390: 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74  t guarantee that
83a0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69   the original wi
83b0: 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a  ll not change.**
83c0: 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65   during the life
83d0: 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79  time of the copy
83e0: 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74  .  Use OP_Copy t
83f0: 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74  o make a complet
8400: 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61  e.** copy..*/.ca
8410: 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20  se OP_SCopy: {  
8420: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
8430: 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54   */.  REGISTER_T
8440: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
8450: 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  n1);.  assert( p
8460: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
8470: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70  sert( pOp->p2<=p
8480: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74  ->nMem );.  pOut
8490: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
84a0: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
84b0: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
84c0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
84d0: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
84e0: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
84f0: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
8500: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
8510: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
8520: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74  * Opcode: Result
8530: 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Row P1 P2 * * *.
8540: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
8550: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
8560: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
8570: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
8580: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
8590: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
85a0: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
85b0: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
85c0: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
85d0: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
85e0: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
85f0: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
8600: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
8610: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
8620: 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20 50  ess to the top P
8630: 31 20 76 61 6c 75 65 73 20 61 73 20 74 68 65 20  1 values as the 
8640: 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a  result.** row..*
8650: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74  /.case OP_Result
8660: 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  Row: {.  Mem *pM
8670: 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61  em;.  int i;.  a
8680: 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f  ssert( p->nResCo
8690: 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b  lumn==pOp->p2 );
86a0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
86b0: 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p1>0 );.  assert
86c0: 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  ( pOp->p1+pOp->p
86d0: 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  2<=p->nMem+1 );.
86e0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
86f0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
8700: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
8710: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
8720: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
8730: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
8740: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
8750: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
8760: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
8770: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
8780: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
8790: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
87a0: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
87b0: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
87c0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
87d0: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
87e0: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
87f0: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
8800: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
8810: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
8820: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
8830: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
8840: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
8850: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
8860: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
8870: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
8880: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
8890: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
88a0: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
88b0: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
88c0: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
88d0: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
88e0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
88f0: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
8900: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
8910: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
8920: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
8930: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
8940: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
8950: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
8960: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
8970: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
8980: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2f  ansactions..  */
8990: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53  .  assert( p->iS
89a0: 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64  tatement==0 || d
89b0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
89c0: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 69  CountRows );.  i
89d0: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72  f( SQLITE_OK!=(r
89e0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
89f0: 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c  loseStatement(p,
8a00: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
8a10: 53 45 29 29 20 29 7b 0a 20 20 20 20 62 72 65 61  SE)) ){.    brea
8a20: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76  k;.  }..  /* Inv
8a30: 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65  alidate all ephe
8a40: 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77  meral cursor row
8a50: 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e   caches */.  p->
8a60: 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63  cacheCtr = (p->c
8a70: 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a  acheCtr + 2)|1;.
8a80: 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
8a90: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
8aa0: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61  he current row a
8ab0: 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74  re \000 terminat
8ac0: 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65  ed.  ** and have
8ad0: 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70   an assigned typ
8ae0: 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20  e.  The results 
8af0: 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c  are de-ephemeral
8b00: 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 73 20  ized as.  ** as 
8b10: 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a  side effect..  *
8b20: 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52  /.  pMem = p->pR
8b30: 65 73 75 6c 74 53 65 74 20 3d 20 26 70 2d 3e 61  esultSet = &p->a
8b40: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
8b50: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
8b60: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71  p2; i++){.    sq
8b70: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54  lite3VdbeMemNulT
8b80: 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69  erminate(&pMem[i
8b90: 5d 29 3b 0a 20 20 20 20 73 74 6f 72 65 54 79 70  ]);.    storeTyp
8ba0: 65 49 6e 66 6f 28 26 70 4d 65 6d 5b 69 5d 2c 20  eInfo(&pMem[i], 
8bb0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 52  encoding);.    R
8bc0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
8bd0: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
8be0: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
8bf0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
8c00: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
8c10: 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54   /* Return SQLIT
8c20: 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e  E_ROW.  */.  p->
8c30: 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72  pc = pc + 1;.  r
8c40: 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a  c = SQLITE_ROW;.
8c50: 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
8c60: 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  rn;.}../* Opcode
8c70: 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50  : Concat P1 P2 P
8c80: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20  3 * *.**.** Add 
8c90: 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69  the text in regi
8ca0: 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65  ster P1 onto the
8cb0: 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74   end of the text
8cc0: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
8cd0: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
8ce0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
8cf0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
8d00: 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50  ther the P1 or P
8d10: 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20  2 text are NULL 
8d20: 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20  then store NULL 
8d30: 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50  in P3..**.**   P
8d40: 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a  3 = P2 || P1.**.
8d50: 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
8d60: 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74   for P1 and P3 t
8d70: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65  o be the same re
8d80: 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65  gister. Sometime
8d90: 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74  s,.** if P3 is t
8da0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
8db0: 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c   as P2, the impl
8dc0: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62  ementation is ab
8dd0: 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61  le.** to avoid a
8de0: 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61   memcpy()..*/.ca
8df0: 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20  se OP_Concat: { 
8e00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
8e10: 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20  e as TK_CONCAT, 
8e20: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
8e30: 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a  /.  i64 nByte;..
8e40: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d    assert( pIn1!=
8e50: 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70  pOut );.  if( (p
8e60: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
8e70: 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f  2->flags) & MEM_
8e80: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  Null ){.    sqli
8e90: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
8ea0: 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65  l(pOut);.    bre
8eb0: 61 6b 3b 0a 20 20 7d 0a 20 20 45 78 70 61 6e 64  ak;.  }.  Expand
8ec0: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 53 74  Blob(pIn1);.  St
8ed0: 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e  ringify(pIn1, en
8ee0: 63 6f 64 69 6e 67 29 3b 0a 20 20 45 78 70 61 6e  coding);.  Expan
8ef0: 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 53  dBlob(pIn2);.  S
8f00: 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65  tringify(pIn2, e
8f10: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74  ncoding);.  nByt
8f20: 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49  e = pIn1->n + pI
8f30: 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79  n2->n;.  if( nBy
8f40: 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
8f50: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
8f60: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
8f70: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65  oo_big;.  }.  Me
8f80: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
8f90: 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69  t, MEM_Str);.  i
8fa0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
8fb0: 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74  mGrow(pOut, (int
8fc0: 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d  )nByte+2, pOut==
8fd0: 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74  pIn2) ){.    got
8fe0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
8ff0: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
9000: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
9010: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
9020: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d  In2->n);.  }.  m
9030: 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70  emcpy(&pOut->z[p
9040: 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a  In2->n], pIn1->z
9050: 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f  , pIn1->n);.  pO
9060: 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30  ut->z[nByte] = 0
9070: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
9080: 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74  e+1] = 0;.  pOut
9090: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
90a0: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  erm;.  pOut->n =
90b0: 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
90c0: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
90d0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
90e0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
90f0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9100: 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20   Opcode: Add P1 
9110: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
9120: 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  Add the value in
9130: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
9140: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9150: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
9160: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9170: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
9180: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
9190: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
91a0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
91b0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .*/./* Opcode: M
91c0: 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33  ultiply P1 P2 P3
91d0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75   * *.**.**.** Mu
91e0: 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65  ltiply the value
91f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
9200: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
9210: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
9220: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
9230: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
9240: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
9250: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
9260: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9270: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
9280: 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32  : Subtract P1 P2
9290: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75   P3 * *.**.** Su
92a0: 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  btract the value
92b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
92c0: 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69  from the value i
92d0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
92e0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
92f0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
9300: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
9310: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
9320: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
9330: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
9340: 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32  de: Divide P1 P2
9350: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69   P3 * *.**.** Di
9360: 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69  vide the value i
9370: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
9380: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
9390: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
93a0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
93b0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
93c0: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  .  If the value 
93d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
93e0: 2a 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  * is zero, then 
93f0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9400: 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  LL..** If either
9410: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
9420: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9430: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
9440: 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50  : Remainder P1 P
9450: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
9460: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
9470: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
9480: 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74  er division of t
9490: 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72  he value in.** r
94a0: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
94b0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
94c0: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
94d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50   the result in P
94e0: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
94f0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9500: 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P2 is zero the r
9510: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
9520: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
9530: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
9540: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
9550: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9570: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9580: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
9590: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
95a0: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
95b0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
95c0: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
95d0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
95e0: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9600: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
9610: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
9620: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
9630: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
9640: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9650: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
9660: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
9670: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
9680: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
9690: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
96a0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
96b0: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
96c0: 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f  /* Combined MEM_
96d0: 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74  * flags from bot
96e0: 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36  h inputs */.  i6
96f0: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
9700: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
9710: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
9720: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
9730: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
9740: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
9750: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
9760: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
9770: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
9780: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
9790: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
97a0: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
97b0: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
97c0: 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  .  applyNumericA
97d0: 66 66 69 6e 69 74 79 28 70 49 6e 31 29 3b 0a 20  ffinity(pIn1);. 
97e0: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
97f0: 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20 66  inity(pIn2);.  f
9800: 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61  lags = pIn1->fla
9810: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
9820: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20 26  ;.  if( (flags &
9830: 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20   MEM_Null)!=0 ) 
9840: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
9850: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
9860: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
9870: 67 73 20 26 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs & pIn2->flags
9880: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 4d 45 4d   & MEM_Int)==MEM
9890: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 69 41 20 3d  _Int ){.    iA =
98a0: 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn1->u.i;.    
98b0: 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a  iB = pIn2->u.i;.
98c0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
98d0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
98e0: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
98f0: 20 20 20 20 20 20 69 42 20 2b 3d 20 69 41 3b 20        iB += iA; 
9900: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9910: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
9920: 61 63 74 3a 20 20 20 20 69 42 20 2d 3d 20 69 41  act:    iB -= iA
9930: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
9940: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
9950: 74 69 70 6c 79 3a 20 20 20 20 69 42 20 2a 3d 20  tiply:    iB *= 
9960: 69 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  iA;       break;
9970: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
9980: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
9990: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
99a0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
99b0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
99c0: 20 20 20 20 20 2f 2a 20 44 69 76 69 64 69 6e 67       /* Dividing
99d0: 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 6f 73   the largest pos
99e0: 73 69 62 6c 65 20 6e 65 67 61 74 69 76 65 20 36  sible negative 6
99f0: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 28 31  4-bit integer (1
9a00: 3c 3c 36 33 29 20 62 79 20 0a 20 20 20 20 20 20  <<63) by .      
9a10: 20 20 2a 2a 20 2d 31 20 72 65 74 75 72 6e 73 20    ** -1 returns 
9a20: 61 6e 20 69 6e 74 65 67 65 72 20 74 6f 6f 20 6c  an integer too l
9a30: 61 72 67 65 20 74 6f 20 73 74 6f 72 65 20 69 6e  arge to store in
9a40: 20 61 20 36 34 2d 62 69 74 20 64 61 74 61 2d 74   a 64-bit data-t
9a50: 79 70 65 2e 20 4f 6e 0a 20 20 20 20 20 20 20 20  ype. On.        
9a60: 2a 2a 20 73 6f 6d 65 20 61 72 63 68 69 74 65 63  ** some architec
9a70: 74 75 72 65 73 2c 20 74 68 65 20 76 61 6c 75 65  tures, the value
9a80: 20 6f 76 65 72 66 6c 6f 77 73 20 74 6f 20 28 31   overflows to (1
9a90: 3c 3c 36 33 29 2e 20 4f 6e 20 6f 74 68 65 72 73  <<63). On others
9aa0: 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20 53  ,.        ** a S
9ab0: 49 47 46 50 45 20 69 73 20 69 73 73 75 65 64 2e  IGFPE is issued.
9ac0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
9ad0: 74 61 74 65 6d 65 6e 74 20 6e 6f 72 6d 61 6c 69  tatement normali
9ae0: 7a 65 73 20 74 68 69 73 0a 20 20 20 20 20 20 20  zes this.       
9af0: 20 2a 2a 20 62 65 68 61 76 69 6f 72 20 73 6f 20   ** behavior so 
9b00: 74 68 61 74 20 61 6c 6c 20 61 72 63 68 69 74 65  that all archite
9b10: 63 74 75 72 65 73 20 62 65 68 61 76 65 20 61 73  ctures behave as
9b20: 20 69 66 20 69 6e 74 65 67 65 72 20 0a 20 20 20   if integer .   
9b30: 20 20 20 20 20 2a 2a 20 6f 76 65 72 66 6c 6f 77       ** overflow
9b40: 20 6f 63 63 75 72 72 65 64 2e 0a 20 20 20 20 20   occurred..     
9b50: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66     */.        if
9b60: 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d  ( iA==-1 && iB==
9b70: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
9b80: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
9b90: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
9ba0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9bb0: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
9bc0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
9bd0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
9be0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9bf0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
9c00: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
9c10: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
9c20: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
9c30: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
9c40: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
9c50: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
9c60: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
9c70: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
9c80: 65 7b 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  e{.    rA = sqli
9c90: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
9ca0: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
9cb0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
9cc0: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
9cd0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
9ce0: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
9cf0: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
9d00: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
9d10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9d20: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
9d30: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
9d40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9d50: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
9d60: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
9d70: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
9d80: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
9d90: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
9da0: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
9db0: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
9dc0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
9dd0: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
9de0: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
9df0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
9e00: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9e10: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
9e20: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
9e30: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
9e40: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
9e50: 20 20 20 20 20 69 41 20 3d 20 72 41 3b 0a 20 20       iA = rA;.  
9e60: 20 20 20 20 20 20 69 42 20 3d 20 72 42 3b 0a 20        iB = rB;. 
9e70: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
9e80: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
9e90: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9ea0: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
9eb0: 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a  A==-1 ) iA = 1;.
9ec0: 20 20 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f          rB = (do
9ed0: 75 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a  uble)(iB % iA);.
9ee0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
9ef0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
9f00: 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61   if( sqlite3IsNa
9f10: 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67  N(rB) ){.      g
9f20: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
9f30: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
9f40: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 72     }.    pOut->r
9f50: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
9f60: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
9f70: 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69  MEM_Real);.    i
9f80: 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f  f( (flags & MEM_
9f90: 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
9fa0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
9fb0: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
9fc0: 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  t);.    }.  }.  
9fd0: 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74  break;..arithmet
9fe0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
9ff0: 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  l:.  sqlite3Vdbe
a000: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
a010: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
a020: 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71   Opcode: CollSeq
a030: 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34   * * P4.**.** P4
a040: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
a050: 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63   a CollSeq struc
a060: 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63  t. If the next c
a070: 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75  all to a user fu
a080: 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67  nction.** or agg
a090: 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c  regate calls sql
a0a0: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
a0b0: 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61  eq(), this colla
a0c0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69  tion sequence wi
a0d0: 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65  ll.** be returne
a0e0: 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  d. This is used 
a0f0: 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20  by the built-in 
a100: 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64  min(), max() and
a110: 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e   nullif().** fun
a120: 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ctions..**.** Th
a130: 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64  e interface used
a140: 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
a150: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66  tation of the af
a160: 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e  orementioned fun
a170: 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74  ctions.** to ret
a180: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74  rieve the collat
a190: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74  ion sequence set
a1a0: 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
a1b0: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
a1c0: 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e  .** publicly, on
a1d0: 6c 79 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ly to user funct
a1e0: 69 6f 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20  ions defined in 
a1f0: 66 75 6e 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20  func.c..*/.case 
a200: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
a210: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
a220: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
a230: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
a240: 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69  * Opcode: Functi
a250: 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
a260: 35 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61  5.**.** Invoke a
a270: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28   user function (
a280: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
a290: 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74  to a Function st
a2a0: 72 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20  ructure that.** 
a2b0: 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63  defines the func
a2c0: 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72  tion) with P5 ar
a2d0: 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72  guments taken fr
a2e0: 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
a2f0: 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  nd.** successors
a300: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
a310: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73   the function is
a320: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
a330: 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73  ter P3..** Regis
a340: 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20  ter P3 must not 
a350: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75  be one of the fu
a360: 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a  nction inputs..*
a370: 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d  *.** P1 is a 32-
a380: 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69  bit bitmask indi
a390: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
a3a0: 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d  r not each argum
a3b0: 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66  ent to the .** f
a3c0: 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65  unction was dete
a3d0: 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e  rmined to be con
a3e0: 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65  stant at compile
a3f0: 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69   time. If the fi
a400: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
a410: 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65  was constant the
a420: 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73  n bit 0 of P1 is
a430: 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73   set. This is us
a440: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a  ed to determine.
a450: 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20  ** whether meta 
a460: 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20  data associated 
a470: 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63  with a user func
a480: 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73  tion argument us
a490: 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74  ing the.** sqlit
a4a0: 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29  e3_set_auxdata()
a4b0: 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65   API may be safe
a4c0: 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69  ly retained unti
a4d0: 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  l the next.** in
a4e0: 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  vocation of this
a4f0: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
a500: 65 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70  ee also: AggStep
a510: 20 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f   and AggFinal.*/
a520: 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f  .case OP_Functio
a530: 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  n: {.  int i;.  
a540: 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c  Mem *pArg;.  sql
a550: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78  ite3_context ctx
a560: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
a570: 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74  e **apVal;.  int
a580: 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   n;..  n = pOp->
a590: 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d  p5;.  apVal = p-
a5a0: 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74  >apArg;.  assert
a5b0: 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20  ( apVal || n==0 
a5c0: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  );..  assert( n=
a5d0: 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30  =0 || (pOp->p2>0
a5e0: 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70   && pOp->p2+n<=p
a5f0: 2d 3e 6e 4d 65 6d 2b 31 29 20 29 3b 0a 20 20 61  ->nMem+1) );.  a
a600: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
a610: 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
a620: 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
a630: 20 20 70 41 72 67 20 3d 20 26 70 2d 3e 61 4d 65    pArg = &p->aMe
a640: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f  m[pOp->p2];.  fo
a650: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c  r(i=0; i<n; i++,
a660: 20 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 70   pArg++){.    ap
a670: 56 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20  Val[i] = pArg;. 
a680: 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f     storeTypeInfo
a690: 28 70 41 72 67 2c 20 65 6e 63 6f 64 69 6e 67 29  (pArg, encoding)
a6a0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
a6b0: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 41  RACE(pOp->p2, pA
a6c0: 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  rg);.  }..  asse
a6d0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
a6e0: 3d 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c 20 70  =P4_FUNCDEF || p
a6f0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
a700: 44 42 45 46 55 4e 43 20 29 3b 0a 20 20 69 66 28  DBEFUNC );.  if(
a710: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
a720: 5f 46 55 4e 43 44 45 46 20 29 7b 0a 20 20 20 20  _FUNCDEF ){.    
a730: 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  ctx.pFunc = pOp-
a740: 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20 20 63  >p4.pFunc;.    c
a750: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 30  tx.pVdbeFunc = 0
a760: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
a770: 74 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 28  tx.pVdbeFunc = (
a780: 56 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d 3e 70  VdbeFunc*)pOp->p
a790: 34 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20  4.pVdbeFunc;.   
a7a0: 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 63 74 78   ctx.pFunc = ctx
a7b0: 2e 70 56 64 62 65 46 75 6e 63 2d 3e 70 46 75 6e  .pVdbeFunc->pFun
a7c0: 63 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  c;.  }..  assert
a7d0: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
a7e0: 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
a7f0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
a800: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
a810: 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d   ctx.s.flags = M
a820: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73  EM_Null;.  ctx.s
a830: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
a840: 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
a850: 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  x.s.zMalloc = 0;
a860: 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
a870: 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
a880: 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
a890: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
a8a0: 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65  .  ** the pointe
a8b0: 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e  r to ctx.s so in
a8c0: 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
a8d0: 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a  unction can use.
a8e0: 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79    ** the already
a8f0: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
a900: 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
a910: 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e  ocating a new on
a920: 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
a930: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74  3VdbeMemMove(&ct
a940: 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65  x.s, pOut);.  Me
a950: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74  mSetTypeFlag(&ct
a960: 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  x.s, MEM_Null);.
a970: 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d  .  ctx.isError =
a980: 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46   0;.  if( ctx.pF
a990: 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  unc->flags & SQL
a9a0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
a9b0: 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  L ){.    assert(
a9c0: 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20   pOp>p->aOp );. 
a9d0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
a9e0: 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  1].p4type==P4_CO
a9f0: 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73  LLSEQ );.    ass
aa00: 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
aa10: 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
aa20: 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c  );.    ctx.pColl
aa30: 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43   = pOp[-1].p4.pC
aa40: 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  oll;.  }.  if( s
aa50: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
aa60: 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
aa70: 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
aa80: 20 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78    (*ctx.pFunc->x
aa90: 46 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61  Func)(&ctx, n, a
aaa0: 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c  pVal);.  if( sql
aab0: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
aac0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
aad0: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
aae0: 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20  tx.s);.    goto 
aaf0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
ab00: 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  use;.  }.  if( d
ab10: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
ab20: 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74  ){.    /* Even t
ab30: 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29  hough a malloc()
ab40: 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65   has failed, the
ab50: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
ab60: 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73  of the.    ** us
ab70: 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20  er function may 
ab80: 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73  have called an s
ab90: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58  qlite3_result_XX
aba0: 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  X() function.   
abb0: 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20   ** to return a 
abc0: 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f  value. The follo
abd0: 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73  wing call releas
abe0: 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73  es any resources
abf0: 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74  .    ** associat
ac00: 65 64 20 77 69 74 68 20 73 75 63 68 20 61 20 76  ed with such a v
ac10: 61 6c 75 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  alue..    **.   
ac20: 20 2a 2a 20 4e 6f 74 65 3a 20 4d 61 79 62 65 20   ** Note: Maybe 
ac30: 4d 65 6d 52 65 6c 65 61 73 65 28 29 20 73 68 6f  MemRelease() sho
ac40: 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 69 66  uld be called if
ac50: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
ac60: 28 29 0a 20 20 20 20 2a 2a 20 66 61 69 6c 73 20  ().    ** fails 
ac70: 61 6c 73 6f 20 28 74 68 65 20 69 66 28 2e 2e 2e  also (the if(...
ac80: 29 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76  ) statement abov
ac90: 65 29 2e 20 42 75 74 20 69 66 20 70 65 6f 70 6c  e). But if peopl
aca0: 65 20 61 72 65 0a 20 20 20 20 2a 2a 20 6d 69 73  e are.    ** mis
acb0: 75 73 69 6e 67 20 73 71 6c 69 74 65 2c 20 74 68  using sqlite, th
acc0: 65 79 20 68 61 76 65 20 62 69 67 67 65 72 20 70  ey have bigger p
acd0: 72 6f 62 6c 65 6d 73 20 74 68 61 6e 20 61 20 6c  roblems than a l
ace0: 65 61 6b 65 64 20 76 61 6c 75 65 2e 0a 20 20 20  eaked value..   
acf0: 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
ad00: 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63  dbeMemRelease(&c
ad10: 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20  tx.s);.    goto 
ad20: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f  no_mem;.  }..  /
ad30: 2a 20 49 66 20 61 6e 79 20 61 75 78 69 6c 69 61  * If any auxilia
ad40: 72 79 20 64 61 74 61 20 66 75 6e 63 74 69 6f 6e  ry data function
ad50: 73 20 68 61 76 65 20 62 65 65 6e 20 63 61 6c 6c  s have been call
ad60: 65 64 20 62 79 20 74 68 69 73 20 75 73 65 72 20  ed by this user 
ad70: 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69  function,.  ** i
ad80: 6d 6d 65 64 69 61 74 65 6c 79 20 63 61 6c 6c 20  mmediately call 
ad90: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 20 66  the destructor f
ada0: 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69  or any non-stati
adb0: 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20  c values..  */. 
adc0: 20 69 66 28 20 63 74 78 2e 70 56 64 62 65 46 75   if( ctx.pVdbeFu
add0: 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nc ){.    sqlite
ade0: 33 56 64 62 65 44 65 6c 65 74 65 41 75 78 44 61  3VdbeDeleteAuxDa
adf0: 74 61 28 63 74 78 2e 70 56 64 62 65 46 75 6e 63  ta(ctx.pVdbeFunc
ae00: 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
ae10: 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e  pOp->p4.pVdbeFun
ae20: 63 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e  c = ctx.pVdbeFun
ae30: 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79  c;.    pOp->p4ty
ae40: 70 65 20 3d 20 50 34 5f 56 44 42 45 46 55 4e 43  pe = P4_VDBEFUNC
ae50: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
ae60: 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  he function retu
ae70: 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74  rned an error, t
ae80: 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f  hrow an exceptio
ae90: 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69  n */.  if( ctx.i
aea0: 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71  sError ){.    sq
aeb0: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
aec0: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
aed0: 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
aee0: 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29  lue_text(&ctx.s)
aef0: 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e  );.    rc = ctx.
af00: 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  isError;.  }..  
af10: 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75  /* Copy the resu
af20: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
af30: 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  on into register
af40: 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33   P3 */.  sqlite3
af50: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
af60: 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64  ng(&ctx.s, encod
af70: 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ing);.  sqlite3V
af80: 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c  dbeMemMove(pOut,
af90: 20 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20   &ctx.s);.  if( 
afa0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
afb0: 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20  oBig(pOut) ){.  
afc0: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
afd0: 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f 54    }.  REGISTER_T
afe0: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
aff0: 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
b000: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
b010: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
b020: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
b030: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
b040: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
b050: 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20  wise AND of the 
b060: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
b070: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
b080: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
b090: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b0a0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b0b0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b0c0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b0d0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b0e0: 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50  e: BitOr P1 P2 P
b0f0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  3 * *.**.** Take
b100: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52   the bit-wise OR
b110: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
b120: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
b130: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
b140: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b150: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b160: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b170: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b180: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b190: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
b1a0: 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20  Left P1 P2 P3 * 
b1b0: 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  *.**.** Shift th
b1c0: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
b1d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
b1e0: 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68  o the left by th
b1f0: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
b200: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
b210: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
b220: 72 65 67 69 73 65 72 20 50 31 2e 0a 2a 2a 20 53  regiser P1..** S
b230: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b240: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b250: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b260: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b270: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b280: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
b290: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
b2a0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66  3 * *.**.** Shif
b2b0: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
b2c0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b2d0: 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  P2 to the right 
b2e0: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
b2f0: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
b300: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
b310: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
b320: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
b330: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b340: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b350: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b360: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b370: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
b380: 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20  _BitAnd:        
b390: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b3a0: 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69   as TK_BITAND, i
b3b0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b3c0: 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20  .case OP_BitOr: 
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3e0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
b3f0: 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  ITOR, in1, in2, 
b400: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b410: 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20  ShiftLeft:      
b420: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b430: 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e  as TK_LSHIFT, in
b440: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b450: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67  case OP_ShiftRig
b460: 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ht: {           
b470: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53  /* same as TK_RS
b480: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
b490: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 61 3b  out3 */.  i64 a;
b4a0: 0a 20 20 69 36 34 20 62 3b 0a 0a 20 20 69 66 28  .  i64 b;..  if(
b4b0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
b4c0: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
b4d0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
b4e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
b4f0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
b500: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 61 20 3d  break;.  }.  a =
b510: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
b520: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 62 20  alue(pIn2);.  b 
b530: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
b540: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 73  Value(pIn1);.  s
b550: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
b560: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f  de ){.    case O
b570: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 61  P_BitAnd:      a
b580: 20 26 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b   &= b;     break
b590: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69  ;.    case OP_Bi
b5a0: 74 4f 72 3a 20 20 20 20 20 20 20 61 20 7c 3d 20  tOr:       a |= 
b5b0: 62 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  b;     break;.  
b5c0: 20 20 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c    case OP_ShiftL
b5d0: 65 66 74 3a 20 20 20 61 20 3c 3c 3d 20 62 3b 20  eft:   a <<= b; 
b5e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
b5f0: 66 61 75 6c 74 3a 20 20 61 73 73 65 72 74 28 20  fault:  assert( 
b600: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
b610: 53 68 69 66 74 52 69 67 68 74 20 29 3b 0a 20 20  ShiftRight );.  
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b630: 20 20 20 20 20 20 20 61 20 3e 3e 3d 20 62 3b 20         a >>= b; 
b640: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
b650: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 61 3b 0a 20  pOut->u.i = a;. 
b660: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
b670: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
b680: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b690: 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50  pcode: AddImm  P
b6a0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a  1 P2 * * *.** .*
b6b0: 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61  * Add the consta
b6c0: 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c  nt P2 to the val
b6d0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b6e0: 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  1..** The result
b6f0: 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e   is always an in
b700: 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20  teger..**.** To 
b710: 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74  force any regist
b720: 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  er to be an inte
b730: 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e  ger, just add 0.
b740: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49  .*/.case OP_AddI
b750: 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mm: {           
b760: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 73 71 6c   /* in1 */.  sql
b770: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
b780: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
b790: 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
b7a0: 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p2;.  break;.}.
b7b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74  ./* Opcode: Must
b7c0: 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  BeInt P1 P2 * * 
b7d0: 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74  *.** .** Force t
b7e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b7f0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e  ster P1 to be an
b800: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68   integer.  If th
b810: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
b820: 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
b830: 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  er and cannot be
b840: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
b850: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69  an integer.** wi
b860: 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c  thout data loss,
b870: 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
b880: 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72  iately to P2, or
b890: 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69   if P2==0.** rai
b8a0: 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  se an SQLITE_MIS
b8b0: 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e  MATCH exception.
b8c0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74  .*/.case OP_Must
b8d0: 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  BeInt: {        
b8e0: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
b8f0: 20 2a 2f 0a 20 20 61 70 70 6c 79 41 66 66 69 6e   */.  applyAffin
b900: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
b910: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
b920: 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 28  coding);.  if( (
b930: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
b940: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
b950: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
b960: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
b970: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  LITE_MISMATCH;. 
b980: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
b990: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
b9a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
b9b0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
b9c0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
b9d0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
b9e0: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
b9f0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
ba00: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
ba10: 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20  alAffinity P1 * 
ba20: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72  * * *.**.** If r
ba30: 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73  egister P1 holds
ba40: 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76   an integer conv
ba50: 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c  ert it to a real
ba60: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
ba70: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
ba80: 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e  d when extractin
ba90: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  g information fr
baa0: 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74  om a column that
bab0: 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66  .** has REAL aff
bac0: 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c  inity.  Such col
bad0: 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73  umn values may s
bae0: 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61  till be stored a
baf0: 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66  s.** integers, f
bb00: 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65  or space efficie
bb10: 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65  ncy, but after e
bb20: 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e  xtraction we wan
bb30: 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76  t them.** to hav
bb40: 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61  e only a real va
bb50: 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
bb60: 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20  RealAffinity: { 
bb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb80: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28   /* in1 */.  if(
bb90: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
bba0: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71  EM_Int ){.    sq
bbb0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
bbc0: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
bbd0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
bbe0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
bbf0: 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  AST./* Opcode: T
bc00: 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a  oText P1 * * * *
bc10: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
bc20: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bc30: 65 72 20 50 31 20 74 6f 20 62 65 20 74 65 78 74  er P1 to be text
bc40: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
bc50: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
bc60: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
bc70: 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a  ring using the.*
bc80: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
bc90: 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20  printf().  Blob 
bca0: 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61  values are uncha
bcb0: 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20  nged and.** are 
bcc0: 61 66 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c  afterwards simpl
bcd0: 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  y interpreted as
bce0: 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e   text..**.** A N
bcf0: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
bd00: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
bd10: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
bd20: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
bd30: 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b  ase OP_ToText: {
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd50: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
bd60: 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a  TO_TEXT, in1 */.
bd70: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
bd80: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62  s & MEM_Null ) b
bd90: 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74 28 20  reak;.  assert( 
bda0: 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c  MEM_Str==(MEM_Bl
bdb0: 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31  ob>>3) );.  pIn1
bdc0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31  ->flags |= (pIn1
bdd0: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62  ->flags&MEM_Blob
bde0: 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66 66  )>>3;.  applyAff
bdf0: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
be00: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63  TE_AFF_TEXT, enc
be10: 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45  oding);.  rc = E
be20: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
be30: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
be40: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
be50: 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   || db->mallocFa
be60: 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  iled );.  pIn1->
be70: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49  flags &= ~(MEM_I
be80: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
be90: 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a  Blob|MEM_Zero);.
bea0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
beb0: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62  BSIZE(pIn1);.  b
bec0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
bed0: 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a 20  de: ToBlob P1 * 
bee0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
bef0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
bf00: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
bf10: 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74   a BLOB..** If t
bf20: 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65  he value is nume
bf30: 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ric, convert it 
bf40: 74 6f 20 61 20 73 74 72 69 6e 67 20 66 69 72 73  to a string firs
bf50: 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61 72  t..** Strings ar
bf60: 65 20 73 69 6d 70 6c 79 20 72 65 69 6e 74 65 72  e simply reinter
bf70: 70 72 65 74 65 64 20 61 73 20 62 6c 6f 62 73 20  preted as blobs 
bf80: 77 69 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a 2a  with no change.*
bf90: 2a 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79  * to the underly
bfa0: 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20  ing data..**.** 
bfb0: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
bfc0: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
bfd0: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
bfe0: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
bff0: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f 62  /.case OP_ToBlob
c000: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
c010: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
c020: 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20  TK_TO_BLOB, in1 
c030: 2a 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  */.  if( pIn1->f
c040: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
c050: 29 20 62 72 65 61 6b 3b 0a 20 20 69 66 28 20 28  ) break;.  if( (
c060: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c070: 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20  M_Blob)==0 ){.  
c080: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
c090: 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn1, SQLITE_AFF
c0a0: 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29  _TEXT, encoding)
c0b0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
c0c0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
c0d0: 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  Str || db->mallo
c0e0: 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d  cFailed );.    M
c0f0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
c100: 6e 31 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  n1, MEM_Blob);. 
c110: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
c120: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
c130: 5f 54 79 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42  _TypeMask&~MEM_B
c140: 6c 6f 62 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  lob);.  }.  UPDA
c150: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
c160: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
c170: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  }../* Opcode: To
c180: 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a  Numeric P1 * * *
c190: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
c1a0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
c1b0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75  ster P1 to be nu
c1c0: 6d 65 72 69 63 20 28 65 69 74 68 65 72 20 61 6e  meric (either an
c1d0: 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61  .** integer or a
c1e0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
c1f0: 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74  number.).** If t
c200: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
c210: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
c220: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
c230: 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  n using the.** e
c240: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
c250: 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e  i() or atof() an
c260: 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20  d store 0 if no 
c270: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
c280: 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  .** is possible.
c290: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
c2a0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
c2b0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
c2c0: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
c2d0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
c2e0: 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20  _ToNumeric: {   
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c300: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
c310: 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a  NUMERIC, in1 */.
c320: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
c330: 67 73 20 26 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  gs & (MEM_Null|M
c340: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
c350: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
c360: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69  te3VdbeMemNumeri
c370: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
c380: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
c390: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
c3a0: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
c3b0: 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20  e: ToInt P1 * * 
c3c0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
c3d0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c3e0: 69 73 74 65 72 20 50 31 20 62 65 20 61 6e 20 69  ister P1 be an i
c3f0: 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54  nteger.  If.** T
c400: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
c410: 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d  ently a real num
c420: 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72  ber, drop its fr
c430: 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a  actional part..*
c440: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
c450: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
c460: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
c470: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
c480: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
c490: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
c4a0: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
c4b0: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
c4c0: 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ion is possible.
c4d0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
c4e0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
c4f0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
c500: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
c510: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
c520: 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  _ToInt: {       
c530: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c540: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c  me as TK_TO_INT,
c550: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70   in1 */.  if( (p
c560: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c570: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
c580: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
c590: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
c5a0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
c5b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
c5c0: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
c5d0: 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a  ode: ToReal P1 *
c5e0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c5f0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c600: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c610: 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  e a floating poi
c620: 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66  nt number..** If
c630: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
c640: 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67  rrently an integ
c650: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a  er, convert it..
c660: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
c670: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
c680: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
c690: 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
c6a0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
c6b0: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
c6c0: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30  () and store 0.0
c6d0: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
c6e0: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
c6f0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
c700: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c710: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c720: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c730: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c740: 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20   OP_ToReal: {   
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c760: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
c770: 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  REAL, in1 */.  i
c780: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c790: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
c7a0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
c7b0: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
c7c0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c7d0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
c7e0: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a  TE_OMIT_CAST */.
c7f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
c800: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c810: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
c820: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c830: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
c840: 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31  f reg(P3)<reg(P1
c850: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
c860: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a  o address P2.  .
c870: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
c880: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
c890: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  it of P5 is set 
c8a0: 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50  and either reg(P
c8b0: 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29  1) or.** reg(P3)
c8c0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
c8d0: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
c8e0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
c8f0: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
c900: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
c910: 6c 20 74 68 72 75 20 69 66 20 65 69 74 68 65 72  l thru if either
c920: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
c930: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
c940: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
c950: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
c960: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
c970: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
c980: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
c990: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
c9a0: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
c9b0: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
c9c0: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
c9d0: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
c9e0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
c9f0: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
ca00: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
ca10: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
ca20: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
ca30: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
ca40: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
ca50: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
ca60: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
ca70: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
ca80: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
ca90: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
caa0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
cab0: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
cac0: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
cad0: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
cae0: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
caf0: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
cb00: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
cb10: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
cb20: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
cb30: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
cb40: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
cb50: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
cb60: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
cb70: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
cb80: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
cb90: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
cba0: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
cbb0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
cbc0: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
cbd0: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
cbe0: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
cbf0: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
cc00: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
cc10: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
cc20: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
cc30: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
cc40: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
cc50: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
cc60: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
cc70: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
cc80: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
cc90: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
cca0: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
ccb0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
ccc0: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
ccd0: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
cce0: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
ccf0: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
cd00: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
cd10: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
cd20: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
cd30: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
cd40: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
cd50: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
cd60: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
cd70: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
cd80: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
cd90: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
cda0: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
cdb0: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
cdc0: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
cdd0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f  egister P2..*/./
cde0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
cdf0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
ce00: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
ce10: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
ce20: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
ce30: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
ce40: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
ce50: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
ce60: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
ce70: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
ce80: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
ce90: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
cea0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
ceb0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
cec0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
ced0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
cee0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
cef0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
cf00: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
cf10: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
cf20: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
cf30: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
cf40: 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65  re equal..** See
cf50: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
cf60: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
cf70: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
cf80: 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50   Opcode: Le P1 P
cf90: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
cfa0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
cfb0: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
cfc0: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
cfd0: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
cfe0: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
cff0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
d000: 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P3 is less than 
d010: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
d020: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
d030: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
d040: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
d050: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
d060: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
d070: 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32  Opcode: Gt P1 P2
d080: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
d090: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
d0a0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
d0b0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
d0c0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
d0d0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
d0e0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
d0f0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
d100: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
d110: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
d120: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
d130: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
d140: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
d150: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
d160: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
d170: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
d180: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
d190: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
d1a0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
d1b0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
d1c0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
d1d0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
d1e0: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
d1f0: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
d200: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
d210: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
d220: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
d230: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
d240: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a  ..*/.case OP_Eq:
d250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d260: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c  * same as TK_EQ,
d270: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
d280: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20  */.case OP_Ne:  
d290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d2a0: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a  same as TK_NE, j
d2b0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
d2c0: 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20  .case OP_Lt:    
d2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d2e0: 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d  me as TK_LT, jum
d2f0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
d300: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20  ase OP_Le:      
d310: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d320: 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c   as TK_LE, jump,
d330: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
d340: 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20  e OP_Gt:        
d350: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d360: 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69  s TK_GT, jump, i
d370: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
d380: 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20  OP_Ge: {        
d390: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
d3a0: 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GE, jump, in1
d3b0: 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 66  , in3 */.  int f
d3c0: 6c 61 67 73 3b 0a 20 20 69 6e 74 20 72 65 73 3b  lags;.  int res;
d3d0: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
d3e0: 3b 0a 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ;..  flags = pIn
d3f0: 31 2d 3e 66 6c 61 67 73 7c 70 49 6e 33 2d 3e 66  1->flags|pIn3->f
d400: 6c 61 67 73 3b 0a 0a 20 20 69 66 28 20 66 6c 61  lags;..  if( fla
d410: 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  gs&MEM_Null ){. 
d420: 20 20 20 2f 2a 20 49 66 20 65 69 74 68 65 72 20     /* If either 
d430: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
d440: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
d450: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
d460: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
d470: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
d480: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
d490: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
d4a0: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70    */.    if( pOp
d4b0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
d4c0: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 70  OREP2 ){.      p
d4d0: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
d4e0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 4d  Op->p2];.      M
d4f0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
d500: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
d510: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
d520: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
d530: 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  t);.    }else if
d540: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
d550: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
d560: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
d570: 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2-1;.    }.   
d580: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 61   break;.  }..  a
d590: 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
d5a0: 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
d5b0: 41 53 4b 3b 0a 20 20 69 66 28 20 61 66 66 69 6e  ASK;.  if( affin
d5c0: 69 74 79 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ity ){.    apply
d5d0: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61  Affinity(pIn1, a
d5e0: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
d5f0: 67 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66  g);.    applyAff
d600: 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69  inity(pIn3, affi
d610: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
d620: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
d630: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
d640: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
d650: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
d660: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
d670: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  || pOp->p4.pColl
d680: 3d 3d 30 20 29 3b 0a 20 20 45 78 70 61 6e 64 42  ==0 );.  ExpandB
d690: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 45 78 70  lob(pIn1);.  Exp
d6a0: 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20  andBlob(pIn3);. 
d6b0: 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
d6c0: 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
d6d0: 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
d6e0: 6c 6c 29 3b 0a 20 20 73 77 69 74 63 68 28 20 70  ll);.  switch( p
d6f0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
d700: 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20    case OP_Eq:   
d710: 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20   res = res==0;  
d720: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
d730: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73  se OP_Ne:    res
d740: 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62   = res!=0;     b
d750: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
d760: 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Lt:    res = r
d770: 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es<0;      break
d780: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65  ;.    case OP_Le
d790: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d  :    res = res<=
d7a0: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
d7b0: 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20    case OP_Gt:   
d7c0: 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20   res = res>0;   
d7d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
d7e0: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
d7f0: 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62   = res>=0;     b
d800: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
d810: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
d820: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
d830: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
d840: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 4d  [pOp->p2];.    M
d850: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
d860: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
d870: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65    pOut->u.i = re
d880: 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  s;.    REGISTER_
d890: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
d8a0: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Out);.  }else if
d8b0: 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
d8c0: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
d8d0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d8e0: 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
d8f0: 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
d900: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
d910: 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
d920: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
d930: 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74  operator to be t
d940: 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69  he array.** of i
d950: 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a  ntegers in P4..*
d960: 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61  *.** The permuta
d970: 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c  tion is only val
d980: 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  id until the nex
d990: 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  t OP_Permutation
d9a0: 2c 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a  , OP_Compare,.**
d9b0: 20 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50 5f   OP_Halt, or OP_
d9c0: 52 65 73 75 6c 74 52 6f 77 2e 20 20 54 79 70 69  ResultRow.  Typi
d9d0: 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72  cally the OP_Per
d9e0: 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20  mutation should 
d9f0: 6f 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69 61  occur.** immedia
da00: 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68  tely prior to th
da10: 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f  e OP_Compare..*/
da20: 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61  .case OP_Permuta
da30: 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74  tion: {.  assert
da40: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
da50: 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
da60: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
da70: 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65  ai );.  aPermute
da80: 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
da90: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
daa0: 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31  code: Compare P1
dab0: 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
dac0: 2a 20 43 6f 6d 70 61 72 65 20 74 6f 20 76 65 63  * Compare to vec
dad0: 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65 72  tors of register
dae0: 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65  s in reg(P1)..re
daf0: 67 28 50 31 2b 50 33 2d 31 29 20 28 61 6c 6c 20  g(P1+P3-1) (all 
db00: 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 22 41 22 29  this.** one "A")
db10: 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e   and in reg(P2).
db20: 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22  .reg(P2+P3-1) ("
db30: 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72  B").  Save the r
db40: 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
db50: 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75  comparison for u
db60: 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f  se by the next O
db70: 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e  P_Jump instruct.
db80: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b  .**.** P4 is a K
db90: 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
dba0: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f   that defines co
dbb0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
dbc0: 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72  s and sort.** or
dbd0: 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d  ders for the com
dbe0: 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65  parison.  The pe
dbf0: 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65  rmutation applie
dc00: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a  s to registers.*
dc10: 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79  * only.  The Key
dc20: 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72  Info elements ar
dc30: 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61  e used sequentia
dc40: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  lly..**.** The c
dc50: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73  omparison is a s
dc60: 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20  ort comparison, 
dc70: 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65  so NULLs compare
dc80: 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73   equal,.** NULLs
dc90: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e   are less than n
dca0: 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20  umbers, numbers 
dcb0: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74  are less than st
dcc0: 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74  rings,.** and st
dcd0: 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74  rings are less t
dce0: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61  han blobs..*/.ca
dcf0: 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b  se OP_Compare: {
dd00: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
dd10: 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69  i;.  int p1;.  i
dd20: 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b  nt p2;.  const K
dd30: 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
dd40: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43  ;.  int idx;.  C
dd50: 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20  ollSeq *pColl;  
dd60: 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
dd70: 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f  equence to use o
dd80: 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20  n this term */. 
dd90: 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20   int bRev;      
dda0: 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
ddb0: 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20  DESCENDING sort 
ddc0: 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 6e 20 3d 20  order */..  n = 
ddd0: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49  pOp->p3;.  pKeyI
dde0: 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
ddf0: 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74  eyInfo;.  assert
de00: 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  ( n>0 );.  asser
de10: 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29  t( pKeyInfo!=0 )
de20: 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ;.  p1 = pOp->p1
de30: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3e 30  ;.  assert( p1>0
de40: 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e 6e 4d 65   && p1+n<=p->nMe
de50: 6d 2b 31 20 29 3b 0a 20 20 70 32 20 3d 20 70 4f  m+1 );.  p2 = pO
de60: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
de70: 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 70   p2>0 && p2+n<=p
de80: 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 66 6f  ->nMem+1 );.  fo
de90: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
dea0: 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72  {.    idx = aPer
deb0: 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b  mute ? aPermute[
dec0: 69 5d 20 3a 20 69 3b 0a 20 20 20 20 52 45 47 49  i] : i;.    REGI
ded0: 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
dee0: 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69  x, &p->aMem[p1+i
def0: 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  dx]);.    REGIST
df00: 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c  ER_TRACE(p2+idx,
df10: 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78   &p->aMem[p2+idx
df20: 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
df30: 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  i<pKeyInfo->nFie
df40: 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20  ld );.    pColl 
df50: 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c  = pKeyInfo->aCol
df60: 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d  l[i];.    bRev =
df70: 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74   pKeyInfo->aSort
df80: 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43  Order[i];.    iC
df90: 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33  ompare = sqlite3
dfa0: 4d 65 6d 43 6f 6d 70 61 72 65 28 26 70 2d 3e 61  MemCompare(&p->a
dfb0: 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 70 2d  Mem[p1+idx], &p-
dfc0: 3e 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70  >aMem[p2+idx], p
dfd0: 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69  Coll);.    if( i
dfe0: 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20  Compare ){.     
dff0: 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d   if( bRev ) iCom
e000: 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65  pare = -iCompare
e010: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
e020: 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d     }.  }.  aPerm
e030: 75 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  ute = 0;.  break
e040: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e050: 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20  Jump P1 P2 P3 * 
e060: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
e070: 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  the instruction 
e080: 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50  at address P1, P
e090: 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69  2, or P3 dependi
e0a0: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
e0b0: 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   in the most rec
e0c0: 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69  ent OP_Compare i
e0d0: 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50  nstruction the P
e0e0: 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73  1 vector was les
e0f0: 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20  s than.** equal 
e100: 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
e110: 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f  han the P2 vecto
e120: 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r, respectively.
e130: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
e140: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
e150: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
e160: 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20   iCompare<0 ){. 
e170: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20     pc = pOp->p1 
e180: 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  - 1;.  }else if(
e190: 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a   iCompare==0 ){.
e1a0: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
e1b0: 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   - 1;.  }else{. 
e1c0: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20     pc = pOp->p3 
e1d0: 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
e1e0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e1f0: 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
e200: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
e210: 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74  logical AND of t
e220: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
e230: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32  isters P1 and P2
e240: 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68   and.** write th
e250: 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65  e result into re
e260: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
e270: 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
e280: 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29   P2 is 0 (false)
e290: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e2a0: 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a   is 0 even if.**
e2b0: 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
e2c0: 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
e2d0: 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77  L and true or tw
e2e0: 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20  o NULLs give.** 
e2f0: 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
e300: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20  /./* Opcode: Or 
e310: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
e320: 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
e330: 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61  cal OR of the va
e340: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
e350: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
e360: 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77  * store the answ
e370: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
e380: 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
e390: 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e  er P1 or P2 is n
e3a0: 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68  onzero (true) th
e3b0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
e3c0: 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65   1 (true).** eve
e3d0: 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69  n if the other i
e3e0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
e3f0: 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20   NULL and false 
e400: 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20  or two NULLs.** 
e410: 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70  give a NULL outp
e420: 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ut..*/.case OP_A
e430: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
e440: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41   /* same as TK_A
e450: 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
e460: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72  t3 */.case OP_Or
e470: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
e480: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52  /* same as TK_OR
e490: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
e4a0: 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20   */.  int v1;   
e4b0: 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64   /* Left operand
e4c0: 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  :  0==FALSE, 1==
e4d0: 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
e4e0: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e   or NULL */.  in
e4f0: 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68  t v2;    /* Righ
e500: 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41  t operand: 0==FA
e510: 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
e520: 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
e530: 20 2a 2f 0a 0a 20 20 69 66 28 20 70 49 6e 31 2d   */..  if( pIn1-
e540: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
e550: 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b  l ){.    v1 = 2;
e560: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31  .  }else{.    v1
e570: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
e580: 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
e590: 0a 20 20 7d 0a 20 20 69 66 28 20 70 49 6e 32 2d  .  }.  if( pIn2-
e5a0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
e5b0: 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b  l ){.    v2 = 2;
e5c0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32  .  }else{.    v2
e5d0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
e5e0: 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b  tValue(pIn2)!=0;
e5f0: 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
e600: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29  opcode==OP_And )
e610: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
e620: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
e630: 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b   and_logic[] = {
e640: 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20   0, 0, 0, 0, 1, 
e650: 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20  2, 0, 2, 2 };.  
e660: 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63    v1 = and_logic
e670: 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c  [v1*3+v2];.  }el
e680: 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
e690: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
e6a0: 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20  ar or_logic[] = 
e6b0: 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c  { 0, 1, 2, 1, 1,
e6c0: 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20   1, 2, 1, 2 };. 
e6d0: 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63     v1 = or_logic
e6e0: 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20  [v1*3+v2];.  }. 
e6f0: 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
e700: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
e710: 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
e720: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
e730: 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
e740: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
e750: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
e760: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
e770: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
e780: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
e790: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
e7a0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e7b0: 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
e7c0: 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
e7d0: 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
e7e0: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
e7f0: 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
e800: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e810: 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
e820: 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
e830: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
e840: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
e850: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
e860: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
e870: 5f 4e 4f 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  _NOT, in1 */.  p
e880: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
e890: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70  Op->p2];.  if( p
e8a0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e8b0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
e8c0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
e8d0: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  ll(pOut);.  }els
e8e0: 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
e8f0: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
e900: 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65  ut, !sqlite3Vdbe
e910: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b  IntValue(pIn1));
e920: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
e930: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e  ./* Opcode: BitN
e940: 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
e950: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
e960: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
e970: 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20  gister P1 as an 
e980: 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20  integer.  Store 
e990: 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70  the.** ones-comp
e9a0: 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31  lement of the P1
e9b0: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
e9c0: 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20  ster P2.  If P1 
e9d0: 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20  holds.** a NULL 
e9e0: 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c  then store a NUL
e9f0: 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  L in P2..*/.case
ea00: 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20   OP_BitNot: {   
ea10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ea20: 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20  e as TK_BITNOT, 
ea30: 69 6e 31 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  in1 */.  pOut = 
ea40: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
ea50: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
ea60: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
ea70: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
ea80: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
ea90: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
eaa0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
eab0: 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73  etInt64(pOut, ~s
eac0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
ead0: 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20  ue(pIn1));.  }. 
eae0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
eaf0: 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
eb00: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
eb10: 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
eb20: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
eb30: 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
eb40: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20   value is.** is 
eb50: 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
eb60: 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
eb70: 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
eb80: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
eb90: 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
eba0: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
ebb0: 20 69 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a   if P3 is true..
ebc0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  */./* Opcode: If
ebd0: 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Not P1 P2 P3 * *
ebe0: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
ebf0: 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
ec00: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
ec10: 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c   False.  The val
ec20: 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73  ue is.** is cons
ec30: 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69  idered true if i
ec40: 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20  t has a numeric 
ec50: 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20  value of zero.  
ec60: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
ec70: 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
ec80: 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
ec90: 20 69 66 20 50 33 20 69 73 20 74 72 75 65 2e 0a   if P3 is true..
eca0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20  */.case OP_If:  
ecb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ecc0: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63  * jump, in1 */.c
ecd0: 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20  ase OP_IfNot: { 
ece0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
ecf0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
ed00: 20 63 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   c;.  if( pIn1->
ed10: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
ed20: 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d   ){.    c = pOp-
ed30: 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69  >p3;.  }else{.#i
ed40: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
ed50: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
ed60: 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
ed70: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
ed80: 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20  )!=0;.#else.    
ed90: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
eda0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  ealValue(pIn1)!=
edb0: 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  0.0;.#endif.    
edc0: 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
edd0: 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20  =OP_IfNot ) c = 
ede0: 21 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20  !c;.  }.  if( c 
edf0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
ee00: 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2-1;.  }.  bre
ee10: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
ee20: 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 50  : IsNull P1 P2 P
ee30: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
ee40: 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
ee50: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ee60: 50 31 20 69 73 20 4e 55 4c 4c 2e 20 20 49 66 20  P1 is NULL.  If 
ee70: 50 33 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  P3 is greater.**
ee80: 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
ee90: 20 63 68 65 63 6b 20 61 6c 6c 20 76 61 6c 75 65   check all value
eea0: 73 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50  s reg(P1), reg(P
eeb0: 31 2b 31 29 2c 20 0a 2a 2a 20 72 65 67 28 50 31  1+1), .** reg(P1
eec0: 2b 32 29 2c 20 2e 2e 2e 2c 20 72 65 67 28 50 31  +2), ..., reg(P1
eed0: 2b 50 33 2d 31 29 2e 0a 2a 2f 0a 63 61 73 65 20  +P3-1)..*/.case 
eee0: 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20  OP_IsNull: {    
eef0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ef00: 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75  as TK_ISNULL, ju
ef10: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
ef20: 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   n;..  n = pOp->
ef30: 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p3;.  assert( pO
ef40: 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p3==0 || pOp-
ef50: 3e 70 31 3e 30 20 29 3b 0a 20 20 64 6f 7b 0a 20  >p1>0 );.  do{. 
ef60: 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
ef70: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
ef80: 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  =0 ){.      pc =
ef90: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
efa0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
efb0: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
efc0: 77 68 69 6c 65 28 20 2d 2d 6e 20 3e 20 30 20 29  while( --n > 0 )
efd0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
efe0: 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c   Opcode: NotNull
eff0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
f000: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
f010: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
f020: 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
f030: 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
f040: 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
f050: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f060: 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
f070: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
f080: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
f090: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
f0a0: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
f0b0: 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
f0c0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
f0d0: 64 65 3a 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e  de: SetNumColumn
f0e0: 73 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  s * P2 * * *.**.
f0f0: 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 73  ** This opcode s
f100: 65 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ets the number o
f110: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68  f columns for th
f120: 65 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  e cursor opened 
f130: 62 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  by the.** follow
f140: 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ing instruction 
f150: 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  to P2..**.** An 
f160: 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  OP_SetNumColumns
f170: 20 69 73 20 6f 6e 6c 79 20 75 73 65 66 75 6c 20   is only useful 
f180: 69 66 20 69 74 20 6f 63 63 75 72 73 20 69 6d 6d  if it occurs imm
f190: 65 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20  ediately before 
f1a0: 0a 2a 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  .** one of the f
f1b0: 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73  ollowing opcodes
f1c0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  :.**.**     Open
f1d0: 52 65 61 64 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  Read.**     Open
f1e0: 57 72 69 74 65 0a 2a 2a 20 20 20 20 20 4f 70 65  Write.**     Ope
f1f0: 6e 50 73 65 75 64 6f 0a 2a 2a 0a 2a 2a 20 49 66  nPseudo.**.** If
f200: 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
f210: 70 63 6f 64 65 20 69 73 20 74 6f 20 62 65 20 65  pcode is to be e
f220: 78 65 63 75 74 65 64 20 6f 6e 20 61 20 63 75 72  xecuted on a cur
f230: 73 6f 72 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69  sor, then.** thi
f240: 73 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65  s opcode must be
f250: 20 70 72 65 73 65 6e 74 20 69 6d 6d 65 64 69 61   present immedia
f260: 74 65 6c 79 20 62 65 66 6f 72 65 20 74 68 65 20  tely before the 
f270: 6f 70 63 6f 64 65 20 74 68 61 74 0a 2a 2a 20 6f  opcode that.** o
f280: 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 2e  pens the cursor.
f290: 0a 2a 2f 0a 23 69 66 20 30 0a 63 61 73 65 20 4f  .*/.#if 0.case O
f2a0: 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 3a  P_SetNumColumns:
f2b0: 20 7b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   {.  break;.}.#e
f2c0: 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
f2d0: 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33   Column P1 P2 P3
f2e0: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65   P4 *.**.** Inte
f2f0: 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74  rpret the data t
f300: 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
f310: 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72  ints to as a str
f320: 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69  ucture built usi
f330: 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65  ng.** the MakeRe
f340: 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
f350: 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65  .  (See the Make
f360: 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f  Record opcode fo
f370: 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20  r additional.** 
f380: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
f390: 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  t the format of 
f3a0: 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72  the data.)  Extr
f3b0: 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f  act the P2-th co
f3c0: 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69  lumn.** from thi
f3d0: 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68  s record.  If th
f3e0: 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
f3f0: 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c  t (P2+1) .** val
f400: 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ues in the recor
f410: 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  d, extract a NUL
f420: 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c  L..**.** The val
f430: 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20  ue extracted is 
f440: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
f450: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
f460: 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  the column conta
f470: 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50  ins fewer than P
f480: 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65  2 fields, then e
f490: 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20  xtract a NULL.  
f4a0: 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34  Or,.** if the P4
f4b0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
f4c0: 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61  4_MEM use the va
f4d0: 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72  lue of the P4 ar
f4e0: 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65  gument as.** the
f4f0: 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 63 61 73 65   result..*/.case
f500: 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20   OP_Column: {.  
f510: 75 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b  u32 payloadSize;
f520: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f530: 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63  bytes in the rec
f540: 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 70 61 79  ord */.  i64 pay
f550: 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e  loadSize64; /* N
f560: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
f570: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
f580: 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
f590: 20 20 20 20 20 2f 2a 20 50 31 20 76 61 6c 75 65       /* P1 value
f5a0: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a   of the opcode *
f5b0: 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
f5c0: 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e         /* column
f5d0: 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69   number to retri
f5e0: 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  eve */.  VdbeCur
f5f0: 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
f600: 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a  he VDBE cursor *
f610: 2f 0a 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20  /.  char *zRec; 
f620: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
f630: 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65  r to complete re
f640: 63 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42  cord-data */.  B
f650: 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20  tCursor *pCrsr; 
f660: 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63    /* The BTree c
f670: 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a  ursor */.  u32 *
f680: 61 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a  aType;        /*
f690: 20 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20   aType[i] holds 
f6a0: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
f6b0: 20 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c   of the i-th col
f6c0: 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f  umn */.  u32 *aO
f6d0: 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61  ffset;      /* a
f6e0: 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66  Offset[i] is off
f6f0: 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20  set to start of 
f700: 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f  data for i-th co
f710: 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  lumn */.  int nF
f720: 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ield;        /* 
f730: 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
f740: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
f750: 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20  /.  int len;    
f760: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65         /* The le
f770: 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69  ngth of the seri
f780: 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20  alized data for 
f790: 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  the column */.  
f7a0: 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
f7b0: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
f7c0: 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44  er */.  char *zD
f7d0: 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61  ata;       /* Pa
f7e0: 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  rt of the record
f7f0: 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
f800: 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20  /.  Mem *pDest; 
f810: 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
f820: 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74  to write the ext
f830: 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a  racted value */.
f840: 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
f850: 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
f860: 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
f870: 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
f880: 20 20 75 38 20 2a 7a 49 64 78 3b 20 20 20 20 20    u8 *zIdx;     
f890: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
f8a0: 74 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75  to header */.  u
f8b0: 38 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20 20  8 *zEndHdr;     
f8c0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
f8d0: 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72  first byte after
f8e0: 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
f8f0: 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20   u32 offset;    
f900: 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
f910: 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20  to the data */. 
f920: 20 75 36 34 20 6f 66 66 73 65 74 36 34 3b 20 20   u64 offset64;  
f930: 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 66      /* 64-bit of
f940: 66 73 65 74 2e 20 20 36 34 20 62 69 74 73 20 6e  fset.  64 bits n
f950: 65 65 64 65 64 20 74 6f 20 63 61 74 63 68 20 6f  eeded to catch o
f960: 76 65 72 66 6c 6f 77 20 2a 2f 0a 20 20 69 6e 74  verflow */.  int
f970: 20 73 7a 48 64 72 3b 20 20 20 20 20 20 20 20 20   szHdr;         
f980: 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68  /* Size of the h
f990: 65 61 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64  eader size field
f9a0: 20 61 74 20 73 74 61 72 74 20 6f 66 20 72 65 63   at start of rec
f9b0: 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61  ord */.  int ava
f9c0: 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  il;         /* N
f9d0: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
f9e0: 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61  f available data
f9f0: 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f 70   */...  p1 = pOp
fa00: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
fa10: 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b 0a  ->p2;.  pC = 0;.
fa20: 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
fa30: 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
fa40: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3c 70  ;.  assert( p1<p
fa50: 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
fa60: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
fa70: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
fa80: 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20  nMem );.  pDest 
fa90: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
faa0: 70 33 5d 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  p3];.  MemSetTyp
fab0: 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d  eFlag(pDest, MEM
fac0: 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 2f 2a 20 54 68  _Null);..  /* Th
fad0: 69 73 20 62 6c 6f 63 6b 20 73 65 74 73 20 74 68  is block sets th
fae0: 65 20 76 61 72 69 61 62 6c 65 20 70 61 79 6c 6f  e variable paylo
faf0: 61 64 53 69 7a 65 20 74 6f 20 62 65 20 74 68 65  adSize to be the
fb00: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
fb10: 0a 20 20 2a 2a 20 62 79 74 65 73 20 69 6e 20 74  .  ** bytes in t
fb20: 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a  he record..  **.
fb30: 20 20 2a 2a 20 7a 52 65 63 20 69 73 20 73 65 74    ** zRec is set
fb40: 20 74 6f 20 62 65 20 74 68 65 20 63 6f 6d 70 6c   to be the compl
fb50: 65 74 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  ete text of the 
fb60: 72 65 63 6f 72 64 20 69 66 20 69 74 20 69 73 20  record if it is 
fb70: 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20  available..  ** 
fb80: 54 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63  The complete rec
fb90: 6f 72 64 20 74 65 78 74 20 69 73 20 61 6c 77 61  ord text is alwa
fba0: 79 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  ys available for
fbb0: 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 73 0a 20   pseudo-tables. 
fbc0: 20 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72   ** If the recor
fbd0: 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  d is stored in a
fbe0: 20 63 75 72 73 6f 72 2c 20 74 68 65 20 63 6f 6d   cursor, the com
fbf0: 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74 65 78  plete record tex
fc00: 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 62 65 20  t.  ** might be 
fc10: 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65  available in the
fc20: 20 20 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65    pC->aRow cache
fc30: 2e 20 20 4f 72 20 69 74 20 6d 69 67 68 74 20 6e  .  Or it might n
fc40: 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49 66 20 74  ot be..  ** If t
fc50: 68 65 20 64 61 74 61 20 69 73 20 75 6e 61 76 61  he data is unava
fc60: 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63 20 69 73  ilable,  zRec is
fc70: 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20   set to NULL..  
fc80: 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c 73 6f 20  **.  ** We also 
fc90: 63 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  compute the numb
fca0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
fcb0: 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 46 6f   the record.  Fo
fcc0: 72 20 63 75 72 73 6f 72 73 2c 0a 20 20 2a 2a 20  r cursors,.  ** 
fcd0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
fce0: 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72 65 64 20  lumns is stored 
fcf0: 69 6e 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  in the VdbeCurso
fd00: 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d 65 6e 74  r.nField element
fd10: 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d 20 70 2d  ..  */.  pC = p-
fd20: 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20 20 61 73  >apCsr[p1];.  as
fd30: 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
fd40: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
fd50: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
fd60: 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56    assert( pC->pV
fd70: 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 0a  tabCursor==0 );.
fd80: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 43 2d  #endif.  if( pC-
fd90: 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20  >pCursor!=0 ){. 
fda0: 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64     /* The record
fdb0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
fdc0: 42 2d 54 72 65 65 20 2a 2f 0a 20 20 20 20 72 63  B-Tree */.    rc
fdd0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
fde0: 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
fdf0: 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
fe00: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
fe10: 72 72 6f 72 3b 0a 20 20 20 20 7a 52 65 63 20 3d  rror;.    zRec =
fe20: 20 30 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20   0;.    pCrsr = 
fe30: 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20  pC->pCursor;.   
fe40: 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
fe50: 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61   ){.      payloa
fe60: 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d  dSize = 0;.    }
fe70: 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63  else if( pC->cac
fe80: 68 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63  heStatus==p->cac
fe90: 68 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70  heCtr ){.      p
fea0: 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
feb0: 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20  >payloadSize;.  
fec0: 20 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72      zRec = (char
fed0: 2a 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  *)pC->aRow;.    
fee0: 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73  }else if( pC->is
fef0: 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 73  Index ){.      s
ff00: 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
ff10: 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f  ze(pCrsr, &paylo
ff20: 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20  adSize64);.     
ff30: 20 69 66 28 20 28 70 61 79 6c 6f 61 64 53 69 7a   if( (payloadSiz
ff40: 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58  e64 & SQLITE_MAX
ff50: 5f 55 33 32 29 21 3d 28 75 36 34 29 70 61 79 6c  _U32)!=(u64)payl
ff60: 6f 61 64 53 69 7a 65 36 34 20 29 7b 0a 20 20 20  oadSize64 ){.   
ff70: 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
ff80: 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
ff90: 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
ffa0: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
ffb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 61        }.      pa
ffc0: 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32  yloadSize = (u32
ffd0: 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a  )payloadSize64;.
ffe0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
fff0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
10000 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61  aSize(pCrsr, &pa
10010 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20  yloadSize);.    
10020 7d 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  }.    nField = p
10030 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 7d 65 6c  C->nField;.  }el
10040 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
10050 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20  pC->pseudoTable 
10060 29 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65  );.    /* The re
10070 63 6f 72 64 20 69 73 20 74 68 65 20 73 6f 6c 65  cord is the sole
10080 20 65 6e 74 72 79 20 6f 66 20 61 20 70 73 65 75   entry of a pseu
10090 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  do-table */.    
100a0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
100b0 2d 3e 6e 44 61 74 61 3b 0a 20 20 20 20 7a 52 65  ->nData;.    zRe
100c0 63 20 3d 20 70 43 2d 3e 70 44 61 74 61 3b 0a 20  c = pC->pData;. 
100d0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
100e0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
100f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 61  ;.    assert( pa
10100 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20  yloadSize==0 || 
10110 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20 20 20 6e  zRec!=0 );.    n
10120 46 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65  Field = pC->nFie
10130 6c 64 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20  ld;.    pCrsr = 
10140 30 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  0;.  }..  /* If 
10150 70 61 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30  payloadSize is 0
10160 2c 20 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72  , then just stor
10170 65 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66  e a NULL */.  if
10180 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30  ( payloadSize==0
10190 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
101a0 70 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d  pDest->flags&MEM
101b0 5f 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74  _Null );.    got
101c0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
101d0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64  .  }.  assert( d
101e0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
101f0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d  _LIMIT_LENGTH]>=
10200 30 20 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f  0 );.  if( paylo
10210 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62  adSize > (u32)db
10220 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
10230 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
10240 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
10250 67 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  g;.  }..  assert
10260 28 20 70 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a  ( p2<nField );..
10270 20 20 2f 2a 20 52 65 61 64 20 61 6e 64 20 70 61    /* Read and pa
10280 72 73 65 20 74 68 65 20 74 61 62 6c 65 20 68 65  rse the table he
10290 61 64 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  ader.  Store the
102a0 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
102b0 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20  parse.  ** into 
102c0 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
102d0 72 20 63 61 63 68 65 20 66 69 65 6c 64 73 20 6f  r cache fields o
102e0 66 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20  f the cursor..  
102f0 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20 70 43 2d  */.  aType = pC-
10300 3e 61 54 79 70 65 3b 0a 20 20 69 66 28 20 70 43  >aType;.  if( pC
10310 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70  ->cacheStatus==p
10320 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20  ->cacheCtr ){.  
10330 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e    aOffset = pC->
10340 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65  aOffset;.  }else
10350 7b 0a 20 20 20 20 61 73 73 65 72 74 28 61 54 79  {.    assert(aTy
10360 70 65 29 3b 0a 20 20 20 20 61 76 61 69 6c 20 3d  pe);.    avail =
10370 20 30 3b 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66   0;.    pC->aOff
10380 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20 3d 20  set = aOffset = 
10390 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a  &aType[nField];.
103a0 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53      pC->payloadS
103b0 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a  ize = payloadSiz
103c0 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  e;.    pC->cache
103d0 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68  Status = p->cach
103e0 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69  eCtr;..    /* Fi
103f0 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e  gure out how man
10400 79 20 62 79 74 65 73 20 61 72 65 20 69 6e 20 74  y bytes are in t
10410 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20  he header */.   
10420 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20   if( zRec ){.   
10430 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b     zData = zRec;
10440 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
10450 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65    if( pC->isInde
10460 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44 61  x ){.        zDa
10470 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69  ta = (char*)sqli
10480 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68  te3BtreeKeyFetch
10490 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
104a0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
104b0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63        zData = (c
104c0 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65  har*)sqlite3Btre
104d0 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73 72  eDataFetch(pCrsr
104e0 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20  , &avail);.     
104f0 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 4b   }.      /* If K
10500 65 79 46 65 74 63 68 28 29 2f 44 61 74 61 46 65  eyFetch()/DataFe
10510 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20 74 6f  tch() managed to
10520 20 67 65 74 20 74 68 65 20 65 6e 74 69 72 65 20   get the entire 
10530 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a  payload,.      *
10540 2a 20 73 61 76 65 20 74 68 65 20 70 61 79 6c 6f  * save the paylo
10550 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e 61 52  ad in the pC->aR
10560 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61 74 20  ow cache.  That 
10570 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66 72 6f  will save us fro
10580 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76 69 6e  m.      ** havin
10590 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69 74 69  g to make additi
105a0 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65  onal calls to fe
105b0 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  tch the content 
105c0 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20  portion of.     
105d0 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   ** the record..
105e0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
105f0 73 73 65 72 74 28 20 61 76 61 69 6c 3e 3d 30 20  ssert( avail>=0 
10600 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 61 79  );.      if( pay
10610 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32  loadSize <= (u32
10620 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20  )avail ){.      
10630 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a    zRec = zData;.
10640 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
10650 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20   = (u8*)zData;. 
10660 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
10670 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30      pC->aRow = 0
10680 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
10690 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
106a0 77 69 6e 67 20 61 73 73 65 72 74 20 69 73 20 74  wing assert is t
106b0 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73 65 73  rue in all cases
106c0 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20 20 20   accept when.   
106d0 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
106e0 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20 63   file has been c
106f0 6f 72 72 75 70 74 65 64 20 65 78 74 65 72 6e 61  orrupted externa
10700 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61  lly..    **    a
10710 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30 20 7c  ssert( zRec!=0 |
10720 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64  | avail>=payload
10730 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39  Size || avail>=9
10740 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72   ); */.    szHdr
10750 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 28   = getVarint32((
10760 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66 66 73 65  u8*)zData, offse
10770 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65  t);..    /* Make
10780 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74 20   sure a corrupt 
10790 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
107a0 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65   given us an ove
107b0 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20  rsize header..  
107c0 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77    ** Do this now
107d0 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65   to avoid an ove
107e0 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  rsize memory all
107f0 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a  ocation..    **.
10800 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72      ** Type entr
10810 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65  ies can be betwe
10820 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73  en 1 and 5 bytes
10830 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e   each.  But 4 an
10840 64 20 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20  d 5 byte.    ** 
10850 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63  types use so muc
10860 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61  h data space tha
10870 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79  t there can only
10880 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20   be 4096 and 32 
10890 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20  of.    ** them, 
108a0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
108b0 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65  o the maximum he
108c0 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75  ader length resu
108d0 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a  lts from a.    *
108e0 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f  * 3-byte type fo
108f0 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61  r each of the ma
10900 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63  ximum of 32768 c
10910 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65  olumns plus thre
10920 65 0a 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62  e.    ** extra b
10930 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61  ytes for the hea
10940 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c  der length itsel
10950 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20  f.  32768*3 + 3 
10960 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a  = 98307..    */.
10970 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e      if( offset >
10980 20 39 38 33 30 37 20 29 7b 0a 20 20 20 20 20 20   98307 ){.      
10990 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
109a0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
109b0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
109c0 75 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ut;.    }..    /
109d0 2a 20 43 6f 6d 70 75 74 65 20 69 6e 20 6c 65 6e  * Compute in len
109e0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
109f0 79 74 65 73 20 6f 66 20 64 61 74 61 20 77 65 20  ytes of data we 
10a00 6e 65 65 64 20 74 6f 20 72 65 61 64 20 69 6e 20  need to read in 
10a10 6f 72 64 65 72 0a 20 20 20 20 2a 2a 20 74 6f 20  order.    ** to 
10a20 67 65 74 20 6e 46 69 65 6c 64 20 74 79 70 65 20  get nField type 
10a30 76 61 6c 75 65 73 2e 20 20 6f 66 66 73 65 74 20  values.  offset 
10a40 69 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e  is an upper boun
10a50 64 20 6f 6e 20 74 68 69 73 2e 20 20 42 75 74 0a  d on this.  But.
10a60 20 20 20 20 2a 2a 20 6e 46 69 65 6c 64 20 6d 69      ** nField mi
10a70 67 68 74 20 62 65 20 73 69 67 6e 69 66 69 63 61  ght be significa
10a80 6e 74 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74  ntly less than t
10a90 68 65 20 74 72 75 65 20 6e 75 6d 62 65 72 20 6f  he true number o
10aa0 66 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a  f columns.    **
10ab0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 61   in the table, a
10ac0 6e 64 20 69 6e 20 74 68 61 74 20 63 61 73 65 2c  nd in that case,
10ad0 20 35 2a 6e 46 69 65 6c 64 2b 33 20 6d 69 67 68   5*nField+3 migh
10ae0 74 20 62 65 20 73 6d 61 6c 6c 65 72 20 74 68 61  t be smaller tha
10af0 6e 20 6f 66 66 73 65 74 2e 0a 20 20 20 20 2a 2a  n offset..    **
10b00 20 57 65 20 77 61 6e 74 20 74 6f 20 6d 69 6e 69   We want to mini
10b10 6d 69 7a 65 20 6c 65 6e 20 69 6e 20 6f 72 64 65  mize len in orde
10b20 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 73  r to limit the s
10b30 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ize of the memor
10b40 79 0a 20 20 20 20 2a 2a 20 61 6c 6c 6f 63 61 74  y.    ** allocat
10b50 69 6f 6e 2c 20 65 73 70 65 63 69 61 6c 6c 79 20  ion, especially 
10b60 69 66 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  if a corrupt dat
10b70 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 63  abase file has c
10b80 61 75 73 65 64 20 6f 66 66 73 65 74 0a 20 20 20  aused offset.   
10b90 20 2a 2a 20 74 6f 20 62 65 20 6f 76 65 72 73 69   ** to be oversi
10ba0 7a 65 64 2e 20 4f 66 66 73 65 74 20 69 73 20 6c  zed. Offset is l
10bb0 69 6d 69 74 65 64 20 74 6f 20 39 38 33 30 37 20  imited to 98307 
10bc0 61 62 6f 76 65 2e 20 20 42 75 74 20 39 38 33 30  above.  But 9830
10bd0 37 20 6d 69 67 68 74 0a 20 20 20 20 2a 2a 20 73  7 might.    ** s
10be0 74 69 6c 6c 20 65 78 63 65 65 64 20 52 6f 62 73  till exceed Robs
10bf0 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  on memory alloca
10c00 74 69 6f 6e 20 6c 69 6d 69 74 73 20 6f 6e 20 73  tion limits on s
10c10 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ome configuratio
10c20 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 73 79  ns..    ** On sy
10c30 73 74 65 6d 73 20 74 68 61 74 20 63 61 6e 6e 6f  stems that canno
10c40 74 20 74 6f 6c 65 72 61 74 65 20 6c 61 72 67 65  t tolerate large
10c50 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
10c60 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a 35 2b 33 0a  ons, nField*5+3.
10c70 20 20 20 20 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65      ** will like
10c80 6c 79 20 62 65 20 6d 75 63 68 20 73 6d 61 6c 6c  ly be much small
10c90 65 72 20 73 69 6e 63 65 20 6e 46 69 65 6c 64 20  er since nField 
10ca0 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6c  will likely be l
10cb0 65 73 73 20 74 68 61 6e 0a 20 20 20 20 2a 2a 20  ess than.    ** 
10cc0 32 30 20 6f 72 20 73 6f 2e 20 20 54 68 69 73 20  20 or so.  This 
10cd0 69 6e 73 75 72 65 73 20 74 68 61 74 20 52 6f 62  insures that Rob
10ce0 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  son memory alloc
10cf0 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 61 72 65  ation limits are
10d00 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 65 78 63 65  .    ** not exce
10d10 65 64 65 64 20 65 76 65 6e 20 66 6f 72 20 63 6f  eded even for co
10d20 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66  rrupt database f
10d30 69 6c 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  iles..    */.   
10d40 20 6c 65 6e 20 3d 20 6e 46 69 65 6c 64 2a 35 20   len = nField*5 
10d50 2b 20 33 3b 0a 20 20 20 20 69 66 28 20 6c 65 6e  + 3;.    if( len
10d60 20 3e 20 6f 66 66 73 65 74 20 29 20 6c 65 6e 20   > offset ) len 
10d70 3d 20 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f  = offset;..    /
10d80 2a 20 54 68 65 20 4b 65 79 46 65 74 63 68 28 29  * The KeyFetch()
10d90 20 6f 72 20 44 61 74 61 46 65 74 63 68 28 29 20   or DataFetch() 
10da0 61 62 6f 76 65 20 61 72 65 20 66 61 73 74 20 61  above are fast a
10db0 6e 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20  nd will get the 
10dc0 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65  entire.    ** re
10dd0 63 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d  cord header in m
10de0 6f 73 74 20 63 61 73 65 73 2e 20 20 42 75 74 20  ost cases.  But 
10df0 74 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74  they will fail t
10e00 6f 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65  o get the comple
10e10 74 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  te.    ** record
10e20 20 68 65 61 64 65 72 20 69 66 20 74 68 65 20 72   header if the r
10e30 65 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65  ecord header doe
10e40 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73  s not fit on a s
10e50 69 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a  ingle page.    *
10e60 2a 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e  * in the B-Tree.
10e70 20 20 57 68 65 6e 20 74 68 61 74 20 68 61 70 70    When that happ
10e80 65 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33  ens, use sqlite3
10e90 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
10ea0 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71  () to.    ** acq
10eb0 75 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74  uire the complet
10ec0 65 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20  e header text.. 
10ed0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a     */.    if( !z
10ee0 52 65 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e  Rec && avail<len
10ef0 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66   ){.      sMem.f
10f00 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  lags = 0;.      
10f10 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20  sMem.db = 0;.   
10f20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
10f30 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
10f40 70 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70  pCrsr, 0, len, p
10f50 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65  C->isIndex, &sMe
10f60 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  m);.      if( rc
10f70 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
10f80 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
10f90 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20  olumn_out;.     
10fa0 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d   }.      zData =
10fb0 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20   sMem.z;.    }. 
10fc0 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38     zEndHdr = (u8
10fd0 20 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a   *)&zData[len];.
10fe0 20 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a      zIdx = (u8 *
10ff0 29 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a  )&zData[szHdr];.
11000 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65  .    /* Scan the
11010 20 68 65 61 64 65 72 20 61 6e 64 20 75 73 65 20   header and use 
11020 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68  it to fill in th
11030 65 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f  e aType[] and aO
11040 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61  ffset[].    ** a
11050 72 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d  rrays.  aType[i]
11060 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68   will contain th
11070 65 20 74 79 70 65 20 69 6e 74 65 67 65 72 20 66  e type integer f
11080 6f 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20  or the i-th.    
11090 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f  ** column and aO
110a0 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f  ffset[i] will co
110b0 6e 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74  ntain the offset
110c0 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
110d0 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ing.    ** of th
110e0 65 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20  e record to the 
110f0 73 74 61 72 74 20 6f 66 20 74 68 65 20 64 61 74  start of the dat
11100 61 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63  a for the i-th c
11110 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20  olumn.    */.   
11120 20 6f 66 66 73 65 74 36 34 20 3d 20 6f 66 66 73   offset64 = offs
11130 65 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  et;.    for(i=0;
11140 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b   i<nField; i++){
11150 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 3c  .      if( zIdx<
11160 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20 20  zEndHdr ){.     
11170 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
11180 28 75 33 32 29 6f 66 66 73 65 74 36 34 3b 0a 20  (u32)offset64;. 
11190 20 20 20 20 20 20 20 7a 49 64 78 20 2b 3d 20 67         zIdx += g
111a0 65 74 56 61 72 69 6e 74 33 32 28 7a 49 64 78 2c  etVarint32(zIdx,
111b0 20 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20   aType[i]);.    
111c0 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
111d0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
111e0 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 69  lTypeLen(aType[i
111f0 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ]);.      }else{
11200 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69  .        /* If i
11210 20 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46   is less that nF
11220 69 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ield, then there
11230 20 61 72 65 20 6c 65 73 73 20 66 69 65 6c 64 73   are less fields
11240 20 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20 20   in this.       
11250 20 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e 20   ** record than 
11260 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e  SetNumColumns in
11270 64 69 63 61 74 65 64 20 74 68 65 72 65 20 61 72  dicated there ar
11280 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
11290 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c  .        ** tabl
112a0 65 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73 65  e. Set the offse
112b0 74 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61 20  t for any extra 
112c0 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65 73  columns not pres
112d0 65 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20 2a  ent in.        *
112e0 2a 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  * the record to 
112f0 30 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63 6f  0. This tells co
11300 64 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f 72  de below to stor
11310 65 20 61 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20  e a NULL.       
11320 20 2a 2a 20 69 6e 73 74 65 61 64 20 6f 66 20 64   ** instead of d
11330 65 73 65 72 69 61 6c 69 7a 69 6e 67 20 61 20 76  eserializing a v
11340 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65  alue from the re
11350 63 6f 72 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f  cord..        */
11360 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74  .        aOffset
11370 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  [i] = 0;.      }
11380 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
11390 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
113a0 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 73 4d 65  (&sMem);.    sMe
113b0 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  m.flags = MEM_Nu
113c0 6c 6c 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 77  ll;..    /* If w
113d0 65 20 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65  e have read more
113e0 20 68 65 61 64 65 72 20 64 61 74 61 20 74 68 61   header data tha
113f0 6e 20 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20  n was contained 
11400 69 6e 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20  in the header,. 
11410 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20     ** or if the 
11420 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
11430 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
11440 20 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64   be past the end
11450 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 72   of the.    ** r
11460 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65  ecord, or if the
11470 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74   end of the last
11480 20 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74   field appears t
11490 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68 65 20  o be before the 
114a0 65 6e 64 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  end.    ** of th
114b0 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61  e record (when a
114c0 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e  ll fields presen
114d0 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74  t), then we must
114e0 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20   be dealing .   
114f0 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72 72 75   ** with a corru
11500 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  pt database..   
11510 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 7a 49 64   */.    if( (zId
11520 78 20 3e 20 7a 45 6e 64 48 64 72 29 7c 7c 20 28  x > zEndHdr)|| (
11530 6f 66 66 73 65 74 36 34 20 3e 20 70 61 79 6c 6f  offset64 > paylo
11540 61 64 53 69 7a 65 29 0a 20 20 20 20 20 7c 7c 20  adSize).     || 
11550 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26  (zIdx==zEndHdr &
11560 26 20 6f 66 66 73 65 74 36 34 21 3d 28 75 36 34  & offset64!=(u64
11570 29 70 61 79 6c 6f 61 64 53 69 7a 65 29 20 29 7b  )payloadSize) ){
11580 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
11590 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
115a0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
115b0 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
115c0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74  .  }..  /* Get t
115d0 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f 72 6d  he column inform
115e0 61 74 69 6f 6e 2e 20 49 66 20 61 4f 66 66 73 65  ation. If aOffse
115f0 74 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72  t[p2] is non-zer
11600 6f 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 64 65  o, then .  ** de
11610 73 65 72 69 61 6c 69 7a 65 20 74 68 65 20 76 61  serialize the va
11620 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  lue from the rec
11630 6f 72 64 2e 20 49 66 20 61 4f 66 66 73 65 74 5b  ord. If aOffset[
11640 70 32 5d 20 69 73 20 7a 65 72 6f 2c 0a 20 20 2a  p2] is zero,.  *
11650 2a 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65  * then there are
11660 20 6e 6f 74 20 65 6e 6f 75 67 68 20 66 69 65 6c   not enough fiel
11670 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
11680 20 74 6f 20 73 61 74 69 73 66 79 20 74 68 65 0a   to satisfy the.
11690 20 20 2a 2a 20 72 65 71 75 65 73 74 2e 20 20 49    ** request.  I
116a0 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73 65 74  n this case, set
116b0 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20   the value NULL 
116c0 6f 72 20 74 6f 20 50 34 20 69 66 20 50 34 20 69  or to P4 if P4 i
116d0 73 0a 20 20 2a 2a 20 61 20 70 6f 69 6e 74 65 72  s.  ** a pointer
116e0 20 74 6f 20 61 20 4d 65 6d 20 6f 62 6a 65 63 74   to a Mem object
116f0 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61 4f 66  ..  */.  if( aOf
11700 66 73 65 74 5b 70 32 5d 20 29 7b 0a 20 20 20 20  fset[p2] ){.    
11710 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
11720 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28  TE_OK );.    if(
11730 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20 20 73   zRec ){.      s
11740 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
11750 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70 44 65  easeExternal(pDe
11760 73 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  st);.      sqlit
11770 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
11780 28 75 38 20 2a 29 26 7a 52 65 63 5b 61 4f 66 66  (u8 *)&zRec[aOff
11790 73 65 74 5b 70 32 5d 5d 2c 20 61 54 79 70 65 5b  set[p2]], aType[
117a0 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  p2], pDest);.   
117b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 65   }else{.      le
117c0 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
117d0 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 61 54 79  erialTypeLen(aTy
117e0 70 65 5b 70 32 5d 29 3b 0a 20 20 20 20 20 20 73  pe[p2]);.      s
117f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
11800 65 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29 3b  e(&sMem, pDest);
11810 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
11820 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
11830 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73  ree(pCrsr, aOffs
11840 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 43 2d  et[p2], len, pC-
11850 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65 6d 29  >isIndex, &sMem)
11860 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
11870 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
11880 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
11890 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  umn_out;.      }
118a0 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 73  .      zData = s
118b0 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c  Mem.z;.      sql
118c0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
118d0 74 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 61 54  t((u8*)zData, aT
118e0 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b  ype[p2], pDest);
118f0 0a 20 20 20 20 7d 0a 20 20 20 20 70 44 65 73 74  .    }.    pDest
11900 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
11910 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
11920 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
11930 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20  P4_MEM ){.      
11940 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
11950 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c  allowCopy(pDest,
11960 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d   pOp->p4.pMem, M
11970 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
11980 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
11990 65 72 74 28 20 70 44 65 73 74 2d 3e 66 6c 61 67  ert( pDest->flag
119a0 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20  s&MEM_Null );.  
119b0 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66    }.  }..  /* If
119c0 20 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   we dynamically 
119d0 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
119e0 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
119f0 20 28 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73 71   (in the.  ** sq
11a00 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
11a10 42 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f  Btree() call abo
11a20 76 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65  ve) then transfe
11a30 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61  r control of tha
11a40 74 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c  t.  ** dynamical
11a50 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  ly allocated spa
11a60 63 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20 70  ce over to the p
11a70 44 65 73 74 20 73 74 72 75 63 74 75 72 65 2e 0a  Dest structure..
11a80 20 20 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e    ** This preven
11a90 74 73 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79  ts a memory copy
11aa0 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d 65  ..  */.  if( sMe
11ab0 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20  m.zMalloc ){.   
11ac0 20 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d   assert( sMem.z=
11ad0 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b  =sMem.zMalloc );
11ae0 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28 70  .    assert( !(p
11af0 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Dest->flags & ME
11b00 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 61 73  M_Dyn) );.    as
11b10 73 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66  sert( !(pDest->f
11b20 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
11b30 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70 44  |MEM_Str)) || pD
11b40 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20 29  est->z==sMem.z )
11b50 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61  ;.    pDest->fla
11b60 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65  gs &= ~(MEM_Ephe
11b70 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  m|MEM_Static);. 
11b80 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
11b90 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20  |= MEM_Term;.   
11ba0 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65 6d   pDest->z = sMem
11bb0 2e 7a 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a  .z;.    pDest->z
11bc0 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d  Malloc = sMem.zM
11bd0 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72 63  alloc;.  }..  rc
11be0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
11bf0 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70  mMakeWriteable(p
11c00 44 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d  Dest);..op_colum
11c10 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f  n_out:.  UPDATE_
11c20 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
11c30 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  st);.  REGISTER_
11c40 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
11c50 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Dest);.  break;.
11c60 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66  }../* Opcode: Af
11c70 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50  finity P1 P2 * P
11c80 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20  4 *.**.** Apply 
11c90 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20  affinities to a 
11ca0 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69  range of P2 regi
11cb0 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77  sters starting w
11cc0 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  ith P1..**.** P4
11cd0 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61   is a string tha
11ce0 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
11cf0 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68  rs long. The nth
11d00 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
11d10 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
11d20 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
11d30 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
11d40 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
11d50 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d  r the nth.** mem
11d60 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  ory cell in the 
11d70 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  range..*/.case O
11d80 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20  P_Affinity: {.  
11d90 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
11da0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
11db0 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
11dc0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61   */.  Mem *pData
11dd0 30 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73  0;       /* Firs
11de0 74 20 72 65 67 69 73 74 65 72 20 74 6f 20 77 68  t register to wh
11df0 69 63 68 20 74 6f 20 61 70 70 6c 79 20 61 66 66  ich to apply aff
11e00 69 6e 69 74 79 20 2a 2f 0a 20 20 4d 65 6d 20 2a  inity */.  Mem *
11e10 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  pLast;        /*
11e20 20 4c 61 73 74 20 72 65 67 69 73 74 65 72 20 74   Last register t
11e30 6f 20 77 68 69 63 68 20 74 6f 20 61 70 70 6c 79  o which to apply
11e40 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 20 20 4d   affinity */.  M
11e50 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20  em *pRec;       
11e60 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 72 65 67    /* Current reg
11e70 69 73 74 65 72 20 2a 2f 0a 0a 20 20 7a 41 66 66  ister */..  zAff
11e80 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
11e90 7a 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 70  z;.  pData0 = &p
11ea0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
11eb0 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
11ec0 61 30 5b 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20  a0[pOp->p2-1];. 
11ed0 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
11ee0 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
11ef0 52 65 63 2b 2b 29 7b 0a 20 20 20 20 45 78 70 61  Rec++){.    Expa
11f00 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20  ndBlob(pRec);.  
11f10 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
11f20 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b  pRec, zAffinity[
11f30 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e  pRec-pData0], en
11f40 63 6f 64 69 6e 67 29 3b 0a 20 20 7d 0a 20 20 62  coding);.  }.  b
11f50 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
11f60 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50  de: MakeRecord P
11f70 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
11f80 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
11f90 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
11fa0 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 61  g with P1 into a
11fb0 20 73 69 6e 67 6c 65 20 65 6e 74 72 79 0a 2a 2a   single entry.**
11fc0 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73   suitable for us
11fd0 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f  e as a data reco
11fe0 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  rd in a database
11ff0 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b   table or as a k
12000 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65  ey.** in an inde
12010 78 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20  x.  The details 
12020 6f 66 20 74 68 65 20 66 6f 72 6d 61 74 20 61 72  of the format ar
12030 65 20 69 72 72 65 6c 65 76 61 6e 74 20 61 73 20  e irrelevant as 
12040 6c 6f 6e 67 20 61 73 0a 2a 2a 20 74 68 65 20 4f  long as.** the O
12050 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20  P_Column opcode 
12060 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72  can decode the r
12070 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 20  ecord later..** 
12080 52 65 66 65 72 20 74 6f 20 73 6f 75 72 63 65 20  Refer to source 
12090 63 6f 64 65 20 63 6f 6d 6d 65 6e 74 73 20 66 6f  code comments fo
120a0 72 20 74 68 65 20 64 65 74 61 69 6c 73 20 6f 66  r the details of
120b0 20 74 68 65 20 72 65 63 6f 72 64 0a 2a 2a 20 66   the record.** f
120c0 6f 72 6d 61 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ormat..**.** P4 
120d0 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
120e0 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
120f0 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
12100 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
12110 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
12120 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
12130 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
12140 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
12150 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
12160 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
12170 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
12180 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
12190 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
121a0 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
121b0 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
121c0 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
121d0 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
121e0 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
121f0 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
12200 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
12210 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
12220 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NONE..*/.case OP
12230 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
12240 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
12250 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
12260 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
12270 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
12280 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
12290 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
122a0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
122b0 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
122c0 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
122d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
122e0 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
122f0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
12300 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
12310 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
12320 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
12330 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
12340 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12350 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
12360 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
12370 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a  cord */.  int nZ
12380 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20  ero;            
12390 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
123a0 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
123b0 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
123c0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
123d0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
123e0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
123f0 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
12400 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
12410 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
12420 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
12430 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
12440 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
12450 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
12460 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
12470 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
12480 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12490 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
124a0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
124b0 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
124c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
124d0 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
124e0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
124f0 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
12500 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
12510 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
12520 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
12530 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
12540 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
12550 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
12560 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
12570 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
12580 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
12590 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
125a0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  ] */.  int len; 
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
125c0 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
125d0 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
125e0 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
125f0 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
12600 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
12610 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
12620 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
12630 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
12640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12650 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12660 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12670 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
12680 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
12690 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
126a0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
126b0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
126c0 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
126d0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
126e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
126f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12700 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12710 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
12720 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
12730 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
12740 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
12750 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
12760 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
12770 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a  nd so froth..  *
12780 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
12790 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
127a0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
127b0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
127c0 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
127d0 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
127e0 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
127f0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
12800 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
12810 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
12820 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
12830 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
12840 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
12850 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
12860 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
12870 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
12880 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
12890 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
128a0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
128b0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
128c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
128d0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
128e0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
128f0 42 79 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20  Byte = 0;       
12900 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20    /* Data space 
12910 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
12920 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 5a  s record */.  nZ
12930 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ero = 0;        
12940 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
12950 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
12960 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
12970 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20  d */.  nField = 
12980 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69  pOp->p1;.  zAffi
12990 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
129a0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
129b0 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e  ld>0 && pOp->p2>
129c0 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69  0 && pOp->p2+nFi
129d0 65 6c 64 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  eld<=p->nMem+1 )
129e0 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 70 2d  ;.  pData0 = &p-
129f0 3e 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20  >aMem[nField];. 
12a00 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
12a10 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44  2;.  pLast = &pD
12a20 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a  ata0[nField-1];.
12a30 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20    file_format = 
12a40 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
12a50 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f  ormat;..  /* Loo
12a60 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c  p through the el
12a70 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c  ements that will
12a80 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63   make up the rec
12a90 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20  ord to figure.  
12aa0 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20  ** out how much 
12ab0 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65  space is require
12ac0 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  d for the new re
12ad0 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72  cord..  */.  for
12ae0 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52  (pRec=pData0; pR
12af0 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b  ec<=pLast; pRec+
12b00 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a 41 66 66  +){.    if( zAff
12b10 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61  inity ){.      a
12b20 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65  pplyAffinity(pRe
12b30 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65  c, zAffinity[pRe
12b40 63 2d 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64  c-pData0], encod
12b50 69 6e 67 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ing);.    }.    
12b60 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 26  if( pRec->flags&
12b70 4d 45 4d 5f 5a 65 72 6f 20 26 26 20 70 52 65 63  MEM_Zero && pRec
12b80 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  ->n>0 ){.      s
12b90 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
12ba0 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20  andBlob(pRec);. 
12bb0 20 20 20 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f     }.    serial_
12bc0 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
12bd0 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
12be0 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
12bf0 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74  .    len = sqlit
12c00 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
12c10 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
12c20 3b 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c  ;.    nData += l
12c30 65 6e 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20  en;.    nHdr += 
12c40 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
12c50 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
12c60 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
12c70 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
12c80 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70  .      /* Only p
12c90 75 72 65 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20  ure zero-filled 
12ca0 42 4c 4f 42 73 20 63 61 6e 20 62 65 20 69 6e 70  BLOBs can be inp
12cb0 75 74 20 74 6f 20 74 68 69 73 20 4f 70 63 6f 64  ut to this Opcod
12cc0 65 2e 0a 20 20 20 20 20 20 2a 2a 20 57 65 20 64  e..      ** We d
12cd0 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62  o not allow blob
12ce0 73 20 77 69 74 68 20 61 20 70 72 65 66 69 78 20  s with a prefix 
12cf0 61 6e 64 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65  and a zero-fille
12d00 64 20 74 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20  d tail. */.     
12d10 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e   nZero += pRec->
12d20 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c  u.nZero;.    }el
12d30 73 65 20 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20  se if( len ){.  
12d40 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20      nZero = 0;. 
12d50 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41     }.  }..  /* A
12d60 64 64 20 74 68 65 20 69 6e 69 74 69 61 6c 20 68  dd the initial h
12d70 65 61 64 65 72 20 76 61 72 69 6e 74 20 61 6e 64  eader varint and
12d80 20 74 6f 74 61 6c 20 74 68 65 20 73 69 7a 65 20   total the size 
12d90 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61  */.  nHdr += nVa
12da0 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61  rint = sqlite3Va
12db0 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20  rintLen(nHdr);. 
12dc0 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c   if( nVarint<sql
12dd0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
12de0 64 72 29 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b  dr) ){.    nHdr+
12df0 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d  +;.  }.  nByte =
12e00 20 6e 48 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72   nHdr+nData-nZer
12e10 6f 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64  o;.  if( nByte>d
12e20 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
12e30 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
12e40 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
12e50 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61  ig;.  }..  /* Ma
12e60 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70  ke sure the outp
12e70 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ut register has 
12e80 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65  a buffer large e
12e90 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a  nough to store .
12ea0 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63    ** the new rec
12eb0 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20  ord. The output 
12ec0 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70  register (pOp->p
12ed0 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  3) is not allowe
12ee0 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65  d to.  ** be one
12ef0 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65   of the input re
12f00 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65  gisters (because
12f10 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
12f20 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
12f30 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 29  te3VdbeMemGrow()
12f40 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74   could clobber t
12f50 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  he value before 
12f60 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a  it is used)..  *
12f70 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
12f80 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70  >p3<pOp->p1 || p
12f90 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b  Op->p3>=pOp->p1+
12fa0 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75  pOp->p2 );.  pOu
12fb0 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
12fc0 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 73 71 6c  ->p3];.  if( sql
12fd0 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
12fe0 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
12ff0 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  , 0) ){.    goto
13000 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a   no_mem;.  }.  z
13010 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20  NewRecord = (u8 
13020 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a  *)pOut->z;..  /*
13030 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72   Write the recor
13040 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61  d */.  i = putVa
13050 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72  rint32(zNewRecor
13060 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28  d, nHdr);.  for(
13070 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
13080 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
13090 29 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79  ){.    serial_ty
130a0 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
130b0 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
130c0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20   file_format);. 
130d0 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e     i += putVarin
130e0 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  t32(&zNewRecord[
130f0 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  i], serial_type)
13100 3b 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c  ;      /* serial
13110 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66   type */.  }.  f
13120 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
13130 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
13140 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c  c++){  /* serial
13150 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b   data */.    i +
13160 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
13170 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f  ialPut(&zNewReco
13180 72 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79  rd[i], (int)(nBy
13190 74 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65  te-i), pRec,file
131a0 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20  _format);.  }.  
131b0 61 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65  assert( i==nByte
131c0 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   );..  assert( p
131d0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
131e0 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
131f0 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
13200 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
13210 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
13220 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f   | MEM_Dyn;.  pO
13230 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20  ut->xDel = 0;.  
13240 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20  if( nZero ){.   
13250 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d   pOut->u.nZero =
13260 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74   nZero;.    pOut
13270 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a  ->flags |= MEM_Z
13280 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ero;.  }.  pOut-
13290 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
132a0 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
132b0 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
132c0 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65   converted to te
132d0 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52  xt */.  REGISTER
132e0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
132f0 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
13300 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
13310 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
13320 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74  /* Opcode: Count
13330 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
13340 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d  ** Store the num
13350 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28  ber of entries (
13360 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
13370 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  ) in the table o
13380 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e  r index .** open
13390 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20  ed by cursor P1 
133a0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
133b0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
133c0 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
133d0 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20  .case OP_Count: 
133e0 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
133f0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
13400 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20    i64 nEntry;.  
13410 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
13420 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61  ..  pCrsr = p->a
13430 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70  pCsr[pOp->p1]->p
13440 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43  Cursor;.  if( pC
13450 72 73 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  rsr ){.    rc = 
13460 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e  sqlite3BtreeCoun
13470 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79  t(pCrsr, &nEntry
13480 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
13490 6e 45 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a  nEntry = 0;.  }.
134a0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
134b0 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 4f 75 74 2d  MEM_Int;.  pOut-
134c0 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20  >u.i = nEntry;. 
134d0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
134e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 61  ../* Opcode: Sta
134f0 74 65 6d 65 6e 74 20 50 31 20 2a 20 2a 20 2a 20  tement P1 * * * 
13500 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 6e  *.**.** Begin an
13510 20 69 6e 64 69 76 69 64 75 61 6c 20 73 74 61 74   individual stat
13520 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
13530 6e 20 77 68 69 63 68 20 69 73 20 70 61 72 74 20  n which is part 
13540 6f 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 74  of a larger.** t
13550 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 69  ransaction.  Thi
13560 73 20 69 73 20 6e 65 65 64 65 64 20 73 6f 20 74  s is needed so t
13570 68 61 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e  hat the statemen
13580 74 0a 2a 2a 20 63 61 6e 20 62 65 20 72 6f 6c 6c  t.** can be roll
13590 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e  ed back after an
135a0 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68   error without h
135b0 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61  aving to roll ba
135c0 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65  ck the.** entire
135d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54   transaction.  T
135e0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
135f0 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 75  nsaction will au
13600 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 63  tomatically.** c
13610 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56  ommit when the V
13620 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a  DBE halts..**.**
13630 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
13640 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
13650 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f  urrently in auto
13660 63 6f 6d 6d 69 74 20 6d 6f 64 65 20 28 74 68 61  commit mode (tha
13670 74 20 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 2c  t .** is to say,
13680 20 69 66 20 69 74 20 69 73 20 69 6e 20 62 65 74   if it is in bet
13690 77 65 65 6e 20 42 45 47 49 4e 20 61 6e 64 20 43  ween BEGIN and C
136a0 4f 4d 4d 49 54 29 0a 2a 2a 20 61 6e 64 20 69 66  OMMIT).** and if
136b0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74   there are no ot
136c0 68 65 72 20 61 63 74 69 76 65 20 73 74 61 74 65  her active state
136d0 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 73 61 6d  ments on the sam
136e0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
136f0 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  nnection, then t
13700 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  his operation is
13710 20 61 20 6e 6f 2d 6f 70 2e 20 20 4e 6f 20 73 74   a no-op.  No st
13720 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
13730 69 6f 6e 0a 2a 2a 20 69 73 20 6e 65 65 64 65 64  ion.** is needed
13740 20 73 69 6e 63 65 20 61 6e 79 20 65 72 72 6f 72   since any error
13750 20 63 61 6e 20 75 73 65 20 74 68 65 20 6e 6f 72   can use the nor
13760 6d 61 6c 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  mal ROLLBACK pro
13770 63 65 73 73 20 74 6f 0a 2a 2a 20 75 6e 64 6f 20  cess to.** undo 
13780 63 68 61 6e 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  changes..**.** I
13790 66 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  f a statement tr
137a0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
137b0 72 74 65 64 2c 20 74 68 65 6e 20 61 20 73 74 61  rted, then a sta
137c0 74 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 66  tement journal f
137d0 69 6c 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 61  ile.** will be a
137e0 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 69 6e 69  llocated and ini
137f0 74 69 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20  tialized..**.** 
13800 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73  The statement is
13810 20 62 65 67 75 6e 20 6f 6e 20 74 68 65 20 64 61   begun on the da
13820 74 61 62 61 73 65 20 66 69 6c 65 20 77 69 74 68  tabase file with
13830 20 69 6e 64 65 78 20 50 31 2e 20 20 54 68 65 20   index P1.  The 
13840 6d 61 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65  main.** database
13850 20 66 69 6c 65 20 68 61 73 20 61 6e 20 69 6e 64   file has an ind
13860 65 78 20 6f 66 20 30 20 61 6e 64 20 74 68 65 20  ex of 0 and the 
13870 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
13880 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 0a 2a  mporary tables.*
13890 2a 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  * has an index o
138a0 66 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  f 1..*/.case OP_
138b0 53 74 61 74 65 6d 65 6e 74 3a 20 7b 0a 20 20 69  Statement: {.  i
138c0 6e 74 20 69 3b 0a 20 20 42 74 72 65 65 20 2a 70  nt i;.  Btree *p
138d0 42 74 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 75  Bt;.  if( db->au
138e0 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64  toCommit==0 || d
138f0 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
13900 3e 31 20 29 7b 0a 20 20 20 20 69 20 3d 20 70 4f  >1 ){.    i = pO
13910 70 2d 3e 70 31 3b 0a 20 20 20 20 61 73 73 65 72  p->p1;.    asser
13920 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d  t( i>=0 && i<db-
13930 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65  >nDb );.    asse
13940 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  rt( db->aDb[i].p
13950 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 70 42 74  Bt!=0 );.    pBt
13960 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42   = db->aDb[i].pB
13970 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  t;.    assert( s
13980 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
13990 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20  rans(pBt) );.   
139a0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
139b0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 29 29  eeMask & (1<<i))
139c0 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70  !=0 );.    if( p
139d0 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
139e0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
139f0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e   db->nStatement>
13a00 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70  =0 && db->nSavep
13a10 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20  oint>=0 );.     
13a20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
13a30 2b 3b 20 0a 20 20 20 20 20 20 70 2d 3e 69 53 74  +; .      p->iSt
13a40 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53  atement = db->nS
13a50 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e  avepoint + db->n
13a60 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 7d  Statement;.    }
13a70 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
13a80 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28  3BtreeBeginStmt(
13a90 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  pBt, p->iStateme
13aa0 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
13ab0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
13ac0 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a  Savepoint P1 * *
13ad0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e   P4 *.**.** Open
13ae0 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c  , release or rol
13af0 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f  lback the savepo
13b00 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72  int named by par
13b10 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e  ameter P4, depen
13b20 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76  ding.** on the v
13b30 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f  alue of P1. To o
13b40 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f  pen a new savepo
13b50 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72  int, P1==0. To r
13b60 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
13b70 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73  an.** existing s
13b80 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c  avepoint, P1==1,
13b90 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20   or to rollback 
13ba0 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  an existing save
13bb0 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a  point P1==2..*/.
13bc0 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e  case OP_Savepoin
13bd0 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20  t: {.  int p1;  
13be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bf0 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
13c00 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f  of P1 operand */
13c10 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61     /* Name of sa
13c40 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74  vepoint */.  int
13c50 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f   nName;.  Savepo
13c60 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76  int *pNew;.  Sav
13c70 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
13c80 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  nt;.  Savepoint 
13c90 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61  *pTmp;.  int iSa
13ca0 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69  vepoint;.  int i
13cb0 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  i;..  p1 = pOp->
13cc0 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f  p1;.  zName = pO
13cd0 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41  p->p4.z;..  /* A
13ce0 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
13cf0 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76  1 parameter is v
13d00 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20  alid. Also that 
13d10 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  if there is no o
13d20 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  pen.  ** transac
13d30 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65  tion, then there
13d40 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73   cannot be any s
13d50 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f  avepoints. .  */
13d60 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
13d70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20  Savepoint==0 || 
13d80 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
13d90 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
13da0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
13db0 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  IN||p1==SAVEPOIN
13dc0 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53  T_RELEASE||p1==S
13dd0 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
13de0 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  K );.  assert( d
13df0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c  b->pSavepoint ||
13e00 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
13e10 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29  onSavepoint==0 )
13e20 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63  ;.  assert( chec
13e30 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
13e40 64 62 29 20 29 3b 0a 0a 20 20 69 66 28 20 70 31  db) );..  if( p1
13e50 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
13e60 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  N ){.    if( db-
13e70 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20  >writeVdbeCnt>0 
13e80 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65  ){.      /* A ne
13e90 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e  w savepoint cann
13ea0 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66  ot be created if
13eb0 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
13ec0 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a  e write .      *
13ed0 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e  * statements (i.
13ee0 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69  e. open read/wri
13ef0 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62  te incremental b
13f00 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20  lob handles)..  
13f10 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
13f20 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
13f30 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
13f40 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65  cannot open save
13f50 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20  point - ".      
13f60 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
13f70 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
13f80 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
13f90 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
13fa0 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20  se{.      nName 
13fb0 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
13fc0 30 28 7a 4e 61 6d 65 29 3b 0a 0a 20 20 20 20 20  0(zName);..     
13fd0 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77   /* Create a new
13fe0 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63   savepoint struc
13ff0 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ture. */.      p
14000 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  New = sqlite3DbM
14010 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
14020 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e  eof(Savepoint)+n
14030 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69  Name+1);.      i
14040 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  f( pNew ){.     
14050 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d     pNew->zName =
14060 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31   (char *)&pNew[1
14070 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70  ];.        memcp
14080 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a  y(pNew->zName, z
14090 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a  Name, nName+1);.
140a0 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
140b0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  If there is no o
140c0 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
140d0 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20   then mark this 
140e0 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20  as a special.   
140f0 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63       ** "transac
14100 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e  tion savepoint".
14110 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
14120 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
14130 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
14140 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
14150 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73            db->is
14160 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
14170 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  oint = 1;.      
14180 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
14190 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
141a0 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
141b0 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c     .        /* L
141c0 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65  ink the new save
141d0 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64  point into the d
141e0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73  atabase handle's
141f0 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20   list. */.      
14200 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20    pNew->pNext = 
14210 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
14220 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
14230 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20  epoint = pNew;. 
14240 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
14250 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70  else{.    iSavep
14260 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f  oint = 0;..    /
14270 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64  * Find the named
14280 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74   savepoint. If t
14290 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
142a0 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20  savepoint, then 
142b0 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72  an.    ** an err
142c0 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  or is returned t
142d0 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a  o the user.  */.
142e0 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70      for(.      p
142f0 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
14300 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20  pSavepoint; .   
14310 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26     pSavepoint &&
14320 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
14330 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d  pSavepoint->zNam
14340 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  e, zName);.     
14350 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53   pSavepoint = pS
14360 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a  avepoint->pNext.
14370 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61      ){.      iSa
14380 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d  vepoint++;.    }
14390 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70  .    if( !pSavep
143a0 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  oint ){.      sq
143b0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
143c0 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
143d0 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69  "no such savepoi
143e0 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b  nt: %s", zName);
143f0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
14400 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65  TE_ERROR;.    }e
14410 6c 73 65 20 69 66 28 20 0a 20 20 20 20 20 20 20  lse if( .       
14420 20 64 62 2d 3e 77 72 69 74 65 56 64 62 65 43 6e   db->writeVdbeCn
14430 74 3e 30 20 7c 7c 20 28 70 31 3d 3d 53 41 56 45  t>0 || (p1==SAVE
14440 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26  POINT_ROLLBACK &
14450 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  & db->activeVdbe
14460 43 6e 74 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  Cnt>1) .    ){. 
14470 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f       /* It is no
14480 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65  t possible to re
14490 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
144a0 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68   savepoint if th
144b0 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a  ere are .      *
144c0 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20 73  * active write s
144d0 74 61 74 65 6d 65 6e 74 73 2e 20 49 74 20 69 73  tatements. It is
144e0 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
144f0 20 72 6f 6c 6c 62 61 63 6b 20 61 20 73 61 76 65   rollback a save
14500 70 6f 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 69  point.      ** i
14510 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20  f there are any 
14520 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
14530 73 20 61 74 20 61 6c 6c 2e 0a 20 20 20 20 20 20  s at all..      
14540 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
14550 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
14560 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20  rrMsg, db, .    
14570 20 20 20 20 22 63 61 6e 6e 6f 74 20 25 73 20 73      "cannot %s s
14580 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73  avepoint - SQL s
14590 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
145a0 67 72 65 73 73 22 2c 0a 20 20 20 20 20 20 20 20  gress",.        
145b0 28 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  (p1==SAVEPOINT_R
145c0 4f 4c 4c 42 41 43 4b 20 3f 20 22 72 6f 6c 6c 62  OLLBACK ? "rollb
145d0 61 63 6b 22 3a 20 22 72 65 6c 65 61 73 65 22 29  ack": "release")
145e0 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
145f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
14600 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20  ;.    }else{..  
14610 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65      /* Determine
14620 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
14630 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
14640 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e  ction savepoint.
14650 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a   If so,.      **
14660 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52   and this is a R
14670 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20  ELEASE command, 
14680 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  then the current
14690 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20   transaction .  
146a0 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74      ** is commit
146b0 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  ted. .      */. 
146c0 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73       int isTrans
146d0 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f  action = pSavepo
146e0 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26  int->pNext==0 &&
146f0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
14700 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  onSavepoint;.   
14710 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63     if( isTransac
14720 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45  tion && p1==SAVE
14730 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
14740 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
14750 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
14760 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
14770 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
14780 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
14790 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
147a0 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
147b0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
147c0 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20            p->rc 
147d0 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
147e0 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  SY;.          go
147f0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
14800 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
14810 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
14820 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
14830 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70  ;.        rc = p
14840 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ->rc;.      }els
14850 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65  e{.        iSave
14860 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76  point = db->nSav
14870 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f  epoint - iSavepo
14880 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  int - 1;.       
14890 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
148a0 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
148b0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
148c0 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69  ite3BtreeSavepoi
148d0 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  nt(db->aDb[ii].p
148e0 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  Bt, p1, iSavepoi
148f0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nt);.          i
14900 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
14910 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
14920 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
14930 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
14940 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
14950 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53         if( p1==S
14960 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
14970 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 26  K && (db->flags&
14980 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
14990 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20 20  nges)!=0 ){.    
149a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
149b0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
149c0 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20  ments(db);.     
149d0 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
149e0 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
149f0 64 62 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  db, 0);.        
14a00 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  }.      }.  .   
14a10 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73     /* Regardless
14a20 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73   of whether this
14a30 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72   is a RELEASE or
14a40 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72   ROLLBACK, destr
14a50 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a  oy all .      **
14a60 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74   savepoints nest
14a70 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65  ed inside of the
14a80 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
14a90 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f   operated on. */
14aa0 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62  .      while( db
14ab0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53  ->pSavepoint!=pS
14ac0 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
14ad0 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70      pTmp = db->p
14ae0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
14af0 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
14b00 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b  t = pTmp->pNext;
14b10 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
14b20 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
14b30 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
14b40 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
14b50 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
14b60 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45   it is a RELEASE
14b70 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74  , then destroy t
14b80 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
14b90 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 74  ng operated on t
14ba0 6f 6f 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  oo */.      if( 
14bb0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
14bc0 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
14bd0 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f   assert( pSavepo
14be0 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f  int==db->pSavepo
14bf0 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64  int );.        d
14c00 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
14c10 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
14c20 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
14c30 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61  e3DbFree(db, pSa
14c40 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
14c50 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
14c60 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  tion ){.        
14c70 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
14c80 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
14c90 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
14ca0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
14cb0 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d  Opcode: AutoComm
14cc0 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  it P1 P2 * * *.*
14cd0 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74  *.** Set the dat
14ce0 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  abase auto-commi
14cf0 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20  t flag to P1 (1 
14d00 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20  or 0). If P2 is 
14d10 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61  true, roll.** ba
14d20 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79  ck any currently
14d30 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72   active btree tr
14d40 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74  ansactions. If t
14d50 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
14d60 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72  ive.** VMs (apar
14d70 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29  t from this one)
14d80 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43  , then a ROLLBAC
14d90 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d  K fails.  A COMM
14da0 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74  IT fails if.** t
14db0 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
14dc0 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61  writing VMs or a
14dd0 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75  ctive VMs that u
14de0 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e  se shared cache.
14df0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
14e00 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74  ruction causes t
14e10 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a  he VM to halt..*
14e20 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f  /.case OP_AutoCo
14e30 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65  mmit: {.  int de
14e40 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
14e50 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b  .  int iRollback
14e60 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43  ;.  int turnOnAC
14e70 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f  ;..  desiredAuto
14e80 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
14e90 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20  ;.  iRollback = 
14ea0 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f  pOp->p2;.  turnO
14eb0 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41 75 74  nAC = desiredAut
14ec0 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e  oCommit && !db->
14ed0 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73  autoCommit;.  as
14ee0 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
14ef0 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65  oCommit==1 || de
14f00 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
14f10 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
14f20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
14f30 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63  t==1 || iRollbac
14f40 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  k==0 );.  assert
14f50 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  ( db->activeVdbe
14f60 43 6e 74 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20  Cnt>0 );  /* At 
14f70 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56  least this one V
14f80 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a  M is active */..
14f90 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26    if( turnOnAC &
14fa0 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64  & iRollback && d
14fb0 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
14fc0 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  >1 ){.    /* If 
14fd0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
14fe0 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f   implements a RO
14ff0 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72  LLBACK and other
15000 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20   VMs are.    ** 
15010 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61  still running, a
15020 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  nd a transaction
15030 20 69 73 20 61 63 74 69 76 65 2c 20 72 65 74 75   is active, retu
15040 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
15050 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68  cating.    ** th
15060 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
15070 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
15080 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  irst. .    */.  
15090 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
150a0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
150b0 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  db, "cannot roll
150c0 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e  back transaction
150d0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
150e0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
150f0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
15100 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
15110 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 74 75  ;.  }else if( tu
15120 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c  rnOnAC && !iRoll
15130 62 61 63 6b 20 26 26 20 64 62 2d 3e 77 72 69 74  back && db->writ
15140 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20  eVdbeCnt>1 ){.  
15150 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
15160 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
15170 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64  nts a COMMIT and
15180 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77   other VMs are w
15190 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  riting.    ** re
151a0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e  turn an error in
151b0 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68  dicating that th
151c0 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74  e other VMs must
151d0 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e   complete first.
151e0 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c   .    */.    sql
151f0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
15200 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
15210 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72  cannot commit tr
15220 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20  ansaction - ".  
15230 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
15240 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
15250 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  s");.    rc = SQ
15260 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
15270 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75  se if( desiredAu
15280 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75  toCommit!=db->au
15290 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
152a0 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b  if( iRollback ){
152b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
152c0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
152d0 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==1 );.      sql
152e0 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
152f0 64 62 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  db);.      db->a
15300 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
15310 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15320 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
15330 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f   (u8)desiredAuto
15340 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66  Commit;.      if
15350 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
15360 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
15370 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  Y ){.        p->
15380 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20  pc = pc;.       
15390 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
153a0 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64  = (u8)(1-desired
153b0 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20  AutoCommit);.   
153c0 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
153d0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
153e0 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
153f0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d  _return;.      }
15400 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
15410 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
15420 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  t==0 );.    sqli
15430 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
15440 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20  ts(db);.    if( 
15450 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
15460 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
15470 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20  QLITE_DONE;.    
15480 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
15490 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
154a0 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76      }.    goto v
154b0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65  dbe_return;.  }e
154c0 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
154d0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
154e0 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20  rrMsg, db,.     
154f0 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f     (!desiredAuto
15500 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20  Commit)?"cannot 
15510 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
15520 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61  ion within a tra
15530 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20  nsaction":(.    
15540 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f      (iRollback)?
15550 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
15560 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
15570 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20  n is active":.  
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15590 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
155a0 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
155b0 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20   is active"));. 
155c0 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20          .    rc 
155d0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
155e0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
155f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73  /* Opcode: Trans
15600 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20 2a  action P1 P2 * *
15610 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61   *.**.** Begin a
15620 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54   transaction.  T
15630 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65  he transaction e
15640 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d 69  nds when a Commi
15650 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a 2a  t or Rollback.**
15660 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f 75   opcode is encou
15670 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64 69  ntered.  Dependi
15680 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f 4e  ng on the ON CON
15690 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20 74  FLICT setting, t
156a0 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  he.** transactio
156b0 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20  n might also be 
156c0 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20 61  rolled back if a
156d0 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  n error is encou
156e0 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31  ntered..**.** P1
156f0 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
15700 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
15710 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  le on which the 
15720 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a  transaction is.*
15730 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65  * started.  Inde
15740 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  x 0 is the main 
15750 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
15760 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65  d index 1 is the
15770 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f  .** file used fo
15780 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  r temporary tabl
15790 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20  es.  Indices of 
157a0 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73  2 or more are us
157b0 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68  ed for.** attach
157c0 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a  ed databases..**
157d0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e  .** If P2 is non
157e0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72  -zero, then a wr
157f0 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
15800 69 73 20 73 74 61 72 74 65 64 2e 20 20 41 20 52  is started.  A R
15810 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73 0a  ESERVED lock is.
15820 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74  ** obtained on t
15830 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
15840 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72   when a write-tr
15850 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
15860 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74 68  rted.  No.** oth
15870 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20 73  er process can s
15880 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72 69  tart another wri
15890 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  te transaction w
158a0 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73 61  hile this transa
158b0 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64 65  ction is.** unde
158c0 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67 20  rway.  Starting 
158d0 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  a write transact
158e0 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65 73  ion also creates
158f0 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72   a rollback jour
15900 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65 20  nal. A.** write 
15910 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
15920 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
15930 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 63  re any changes c
15940 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68  an be made to th
15950 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20  e.** database.  
15960 49 66 20 50 32 20 69 73 20 32 20 6f 72 20 67 72  If P2 is 2 or gr
15970 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20 45 58  eater then an EX
15980 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73 20  CLUSIVE lock is 
15990 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a 2a  also obtained.**
159a0 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a 2a   on the file..**
159b0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72  .** If P2 is zer
159c0 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 6c  o, then a read-l
159d0 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
159e0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
159f0 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  file..*/.case OP
15a00 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
15a10 20 20 69 6e 74 20 69 3b 0a 20 20 42 74 72 65 65    int i;.  Btree
15a20 20 2a 70 42 74 3b 0a 0a 20 20 69 20 3d 20 70 4f   *pBt;..  i = pO
15a30 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
15a40 20 69 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e   i>=0 && i<db->n
15a50 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
15a60 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
15a70 28 31 3c 3c 69 29 29 21 3d 30 20 29 3b 0a 20 20  (1<<i))!=0 );.  
15a80 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d  pBt = db->aDb[i]
15a90 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74  .pBt;..  if( pBt
15aa0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
15ab0 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
15ac0 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32  ans(pBt, pOp->p2
15ad0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
15ae0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
15af0 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a      p->pc = pc;.
15b00 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
15b10 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
15b20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
15b30 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20  return;.    }.  
15b40 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
15b50 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c 49 54  _OK && rc!=SQLIT
15b60 45 5f 52 45 41 44 4f 4e 4c 59 20 2f 2a 20 26 26  E_READONLY /* &&
15b70 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc!=SQLITE_BUSY
15b80 20 2a 2f 20 29 7b 0a 20 20 20 20 20 20 67 6f 74   */ ){.      got
15b90 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15ba0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
15bb0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
15bc0 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69  pcode: ReadCooki
15bd0 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
15be0 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65  *.** Read cookie
15bf0 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20   number P3 from 
15c00 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
15c10 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65  write it into re
15c20 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33  gister P2..** P3
15c30 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
15c40 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d  a version.  P3==
15c50 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
15c60 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d  e format..** P3=
15c70 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
15c80 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
15c90 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  e size, and so f
15ca0 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a  orth.  P1==0 is.
15cb0 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
15cc0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
15cd0 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
15ce0 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
15cf0 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72   store.** tempor
15d00 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
15d10 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20  * There must be 
15d20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74  a read-lock on t
15d30 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74  he database (eit
15d40 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
15d50 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61  n.** must be sta
15d60 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75  rted or there mu
15d70 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75  st be an open cu
15d80 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20  rsor) before.** 
15d90 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69  executing this i
15da0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
15db0 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69  ase OP_ReadCooki
15dc0 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
15dd0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
15de0 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69  lease */.  int i
15df0 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Meta;.  int iDb;
15e00 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a  .  int iCookie;.
15e10 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
15e20 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f  ;.  iCookie = pO
15e30 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
15e40 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f   pOp->p3<SQLITE_
15e50 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
15e60 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
15e70 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
15e80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
15e90 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30  >aDb[iDb].pBt!=0
15ea0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
15eb0 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31  ->btreeMask & (1
15ec0 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 0a 20  <<iDb))!=0 );.. 
15ed0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
15ee0 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44  eeGetMeta(db->aD
15ef0 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f  b[iDb].pBt, iCoo
15f00 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65  kie, (u32 *)&iMe
15f10 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ta);.  pOut->u.i
15f20 20 3d 20 69 4d 65 74 61 3b 0a 20 20 4d 65 6d 53   = iMeta;.  MemS
15f30 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
15f40 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
15f50 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
15f60 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50  : SetCookie P1 P
15f70 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  2 P3 * *.**.** W
15f80 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  rite the content
15f90 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
15fa0 28 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20  (interpreted as 
15fb0 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69  an integer).** i
15fc0 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  nto cookie numbe
15fd0 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65  r P2 of database
15fe0 20 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74   P1.  P2==1 is t
15ff0 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
16000 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73  n.  .** P2==2 is
16010 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
16020 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74  rmat. P2==3 is t
16030 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70  he recommended p
16040 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73  ager cache .** s
16050 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  ize, and so fort
16060 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65  h.  P1==0 is the
16070 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
16080 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
16090 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73   the .** databas
160a0 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73  e file used to s
160b0 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74  tore temporary t
160c0 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74  ables..**.** A t
160d0 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20  ransaction must 
160e0 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72  be started befor
160f0 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  e executing this
16100 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
16110 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b   OP_SetCookie: {
16120 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f         /* in3 */
16130 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73  .  Db *pDb;.  as
16140 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51  sert( pOp->p2<SQ
16150 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
16160 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  A );.  assert( p
16170 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
16180 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
16190 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
161a0 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f  reeMask & (1<<pO
161b0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
161c0 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
161d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
161e0 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
161f0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
16200 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
16210 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74  3);.  /* See not
16220 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68  e about index sh
16230 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61  ifting on OP_Rea
16240 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20  dCookie */.  rc 
16250 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70  = sqlite3BtreeUp
16260 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42  dateMeta(pDb->pB
16270 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74  t, pOp->p2, (int
16280 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69  )pIn3->u.i);.  i
16290 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
162a0 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
162b0 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20   ){.    /* When 
162c0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
162d0 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72  e changes, recor
162e0 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65  d the new cookie
162f0 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20   internally */. 
16300 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
16310 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d  >schema_cookie =
16320 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b   (int)pIn3->u.i;
16330 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
16340 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  = SQLITE_InternC
16350 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20  hanges;.  }else 
16360 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
16370 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29  EE_FILE_FORMAT )
16380 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
16390 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
163a0 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
163b0 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
163c0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75  file_format = (u
163d0 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d  8)pIn3->u.i;.  }
163e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
163f0 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61  1 ){.    /* Inva
16400 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61  lidate all prepa
16410 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
16420 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50  henever the TEMP
16430 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a   database.    **
16440 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67   schema is chang
16450 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34  ed.  Ticket #164
16460 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  4 */.    sqlite3
16470 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
16480 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
16490 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
164a0 20 4f 70 63 6f 64 65 3a 20 56 65 72 69 66 79 43   Opcode: VerifyC
164b0 6f 6f 6b 69 65 20 50 31 20 50 32 20 2a 0a 2a 2a  ookie P1 P2 *.**
164c0 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61  .** Check the va
164d0 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20 64 61  lue of global da
164e0 74 61 62 61 73 65 20 70 61 72 61 6d 65 74 65 72  tabase parameter
164f0 20 6e 75 6d 62 65 72 20 30 20 28 74 68 65 0a 2a   number 0 (the.*
16500 2a 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  * schema version
16510 29 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20  ) and make sure 
16520 69 74 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50  it is equal to P
16530 32 2e 20 20 0a 2a 2a 20 50 31 20 69 73 20 74 68  2.  .** P1 is th
16540 65 20 64 61 74 61 62 61 73 65 20 6e 75 6d 62 65  e database numbe
16550 72 20 77 68 69 63 68 20 69 73 20 30 20 66 6f 72  r which is 0 for
16560 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
16570 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e 64 20 31  se file.** and 1
16580 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 68 6f   for the file ho
16590 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20  lding temporary 
165a0 74 61 62 6c 65 73 20 61 6e 64 20 73 6f 6d 65 20  tables and some 
165b0 68 69 67 68 65 72 20 6e 75 6d 62 65 72 0a 2a 2a  higher number.**
165c0 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20 64   for auxiliary d
165d0 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
165e0 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
165f0 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
16600 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
16610 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
16620 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
16630 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
16640 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
16650 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
16660 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
16670 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
16680 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
16690 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
166a0 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74 68 65 72  ma..**.** Either
166b0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e   a transaction n
166c0 65 65 64 73 20 74 6f 20 68 61 76 65 20 62 65 65  eeds to have bee
166d0 6e 20 73 74 61 72 74 65 64 20 6f 72 20 61 6e 20  n started or an 
166e0 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73 0a 2a 2a  OP_Open needs.**
166f0 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20   to be executed 
16700 28 74 6f 20 65 73 74 61 62 6c 69 73 68 20 61 20  (to establish a 
16710 72 65 61 64 20 6c 6f 63 6b 29 20 62 65 66 6f 72  read lock) befor
16720 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  e this opcode is
16730 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a 2a 2f 0a  .** invoked..*/.
16740 63 61 73 65 20 4f 50 5f 56 65 72 69 66 79 43 6f  case OP_VerifyCo
16750 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74 20 69 4d  okie: {.  int iM
16760 65 74 61 3b 0a 20 20 42 74 72 65 65 20 2a 70 42  eta;.  Btree *pB
16770 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  t;.  assert( pOp
16780 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
16790 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
167a0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
167b0 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
167c0 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42  >p1))!=0 );.  pB
167d0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
167e0 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20  >p1].pBt;.  if( 
167f0 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  pBt ){.    rc = 
16800 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
16810 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53  eta(pBt, BTREE_S
16820 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28  CHEMA_VERSION, (
16830 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
16840 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
16850 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
16860 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20  iMeta = 0;.  }. 
16870 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
16880 4f 4b 20 26 26 20 69 4d 65 74 61 21 3d 70 4f 70  OK && iMeta!=pOp
16890 2d 3e 70 32 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p2 ){.    sqli
168a0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
168b0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
168c0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
168d0 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
168e0 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
168f0 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
16900 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
16910 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
16920 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
16930 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
16940 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
16950 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
16960 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
16970 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
16980 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
16990 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
169a0 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
169b0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
169c0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
169d0 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
169e0 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
169f0 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
16a00 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
16a10 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
16a20 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
16a30 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
16a40 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
16a50 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
16a60 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
16a70 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
16a80 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
16a90 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
16aa0 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
16ab0 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
16ac0 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
16ad0 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
16ae0 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
16af0 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
16b00 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
16b10 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
16b20 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
16b30 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
16b40 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
16b50 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
16b60 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
16b70 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
16b80 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
16b90 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
16ba0 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
16bb0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
16bc0 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
16bd0 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
16be0 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
16bf0 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
16c00 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
16c10 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
16c20 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
16c30 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  alSchema(db, pOp
16c40 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  ->p1);.    }..  
16c50 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
16c60 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
16c70 73 28 64 62 29 3b 0a 20 20 20 20 72 63 20 3d 20  s(db);.    rc = 
16c80 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20  SQLITE_SCHEMA;. 
16c90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
16ca0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65  * Opcode: OpenRe
16cb0 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ad P1 P2 P3 P4 P
16cc0 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  5.**.** Open a r
16cd0 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
16ce0 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
16cf0 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
16d00 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
16d10 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
16d20 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
16d30 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
16d40 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
16d50 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
16d60 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
16d70 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
16d80 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
16d90 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
16da0 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
16db0 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
16dc0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
16dd0 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
16de0 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
16df0 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
16e00 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
16e10 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
16e20 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
16e30 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
16e40 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
16e50 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
16e60 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
16e70 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
16e80 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
16e90 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
16ea0 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
16eb0 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
16ec0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
16ed0 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
16ee0 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
16ef0 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
16f00 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
16f10 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
16f20 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
16f30 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
16f40 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
16f50 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
16f60 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
16f70 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
16f80 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
16f90 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
16fa0 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
16fb0 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
16fc0 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
16fd0 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
16fe0 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
16ff0 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
17000 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
17010 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
17020 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
17030 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
17040 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
17050 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
17060 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
17070 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
17080 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
17090 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
170a0 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
170b0 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
170c0 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
170d0 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
170e0 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
170f0 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
17100 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
17110 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
17120 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
17130 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
17140 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
17150 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
17160 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
17170 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
17180 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
17190 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
171a0 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
171b0 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
171c0 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
171d0 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
171e0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
171f0 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
17200 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
17210 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
17220 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
17230 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
17240 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57  * See also OpenW
17250 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rite..*/./* Opco
17260 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
17270 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
17280 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77  ** Open a read/w
17290 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65  rite cursor name
172a0 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c  d P1 on the tabl
172b0 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
172c0 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73   root.** page is
172d0 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d   P2.  Or if P5!=
172e0 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  0 use the conten
172f0 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
17300 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20   to find the.** 
17310 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a  root page..**.**
17320 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
17330 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
17340 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
17350 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
17360 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
17370 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
17380 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
17390 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
173a0 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
173b0 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
173c0 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
173d0 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
173e0 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
173f0 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
17400 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
17410 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
17420 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
17430 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
17440 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
17450 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
17460 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f   in the table, o
17470 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67  r to the.** larg
17480 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79  est index of any
17490 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74   column of the t
174a0 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63 74  able that is act
174b0 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a  ually used..**.*
174c0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
174d0 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  on works just li
174e0 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65  ke OpenRead exce
174f0 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
17500 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69   the cursor.** i
17510 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64  n read/write mod
17520 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20  e.  For a given 
17530 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e  table, there can
17540 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   be one or more 
17550 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72  read-only.** cur
17560 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65  sors or a single
17570 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
17580 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e  or but not both.
17590 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20  .**.** See also 
175a0 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73  OpenRead..*/.cas
175b0 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63  e OP_OpenRead:.c
175c0 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ase OP_OpenWrite
175d0 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64  : {.  int nField
175e0 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
175f0 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 3b 0a  yInfo;.  int i;.
17600 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20    int p2;.  int 
17610 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  iDb;.  int wrFla
17620 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
17630 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
17640 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20  ur;.  Db *pDb;. 
17650 20 69 6e 74 20 66 6c 61 67 73 3b 0a 0a 20 20 6e   int flags;..  n
17660 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65  Field = 0;.  pKe
17670 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 69 20 3d  yInfo = 0;.  i =
17680 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
17690 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20   pOp->p2;.  iDb 
176a0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
176b0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
176c0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
176d0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
176e0 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29  eMask & (1<<iDb)
176f0 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  )!=0 );.  pDb = 
17700 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20  &db->aDb[iDb];. 
17710 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a   pX = pDb->pBt;.
17720 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20    assert( pX!=0 
17730 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
17740 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
17750 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67  te ){.    wrFlag
17760 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 44   = 1;.    if( pD
17770 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
17780 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e  _format < p->min
17790 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
177a0 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57  ){.      p->minW
177b0 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d  riteFileFormat =
177c0 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
177d0 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20  ile_format;.    
177e0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77  }.  }else{.    w
177f0 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rFlag = 0;.  }. 
17800 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
17810 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
17820 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
17830 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
17840 20 20 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d     pIn2 = &p->aM
17850 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73 71 6c 69  em[p2];.    sqli
17860 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
17870 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20  rify(pIn2);.    
17880 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e  p2 = (int)pIn2->
17890 75 2e 69 3b 0a 20 20 20 20 69 66 28 20 70 32 3c  u.i;.    if( p2<
178a0 32 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d  2 ) {.      rc =
178b0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
178c0 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BKPT;.      goto
178d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
178e0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
178f0 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b   assert( i>=0 );
17900 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
17910 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
17920 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d  {.    pKeyInfo =
17930 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
17940 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 2d  o;.    pKeyInfo-
17950 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62  >enc = ENC(p->db
17960 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  );.    nField = 
17970 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
17980 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  +1;.  }else if( 
17990 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
179a0 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
179b0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
179c0 0a 20 20 7d 0a 20 20 70 43 75 72 20 3d 20 61 6c  .  }.  pCur = al
179d0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
179e0 69 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20  i, nField, iDb, 
179f0 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d  1);.  if( pCur==
17a00 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
17a10 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
17a20 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
17a30 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
17a40 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20  pX, p2, wrFlag, 
17a50 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e  pKeyInfo, pCur->
17a60 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72  pCursor);.  pCur
17a70 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65  ->pKeyInfo = pKe
17a80 79 49 6e 66 6f 3b 0a 0a 20 20 73 77 69 74 63 68  yInfo;..  switch
17a90 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65  ( rc ){.    case
17aa0 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 7b 0a   SQLITE_BUSY: {.
17ab0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
17ac0 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
17ad0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17ae0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
17af0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
17b00 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
17b10 4f 4b 3a 20 7b 0a 20 20 20 20 20 20 66 6c 61 67  OK: {.      flag
17b20 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
17b30 46 6c 61 67 73 28 70 43 75 72 2d 3e 70 43 75 72  Flags(pCur->pCur
17b40 73 6f 72 29 3b 0a 20 20 20 20 20 20 2f 2a 20 53  sor);.      /* S
17b50 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 2e 20  anity checking. 
17b60 20 4f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20   Only the lower 
17b70 66 6f 75 72 20 62 69 74 73 20 6f 66 20 74 68 65  four bits of the
17b80 20 66 6c 61 67 73 20 62 79 74 65 20 73 68 6f 75   flags byte shou
17b90 6c 64 0a 20 20 20 20 20 20 2a 2a 20 62 65 20 75  ld.      ** be u
17ba0 73 65 64 2e 20 20 42 69 74 20 33 20 28 6d 61 73  sed.  Bit 3 (mas
17bb0 6b 20 30 78 30 38 29 20 69 73 20 75 6e 70 72 65  k 0x08) is unpre
17bc0 64 69 63 74 61 62 6c 65 2e 20 20 54 68 65 20 6c  dictable.  The l
17bd0 6f 77 65 72 20 33 20 62 69 74 73 0a 20 20 20 20  ower 3 bits.    
17be0 20 20 2a 2a 20 28 6d 61 73 6b 20 30 78 30 37 29    ** (mask 0x07)
17bf0 20 73 68 6f 75 6c 64 20 62 65 20 65 69 74 68 65   should be eithe
17c00 72 20 35 20 28 69 6e 74 6b 65 79 2b 6c 65 61 66  r 5 (intkey+leaf
17c10 64 61 74 61 20 66 6f 72 20 74 61 62 6c 65 73 29  data for tables)
17c20 20 6f 72 0a 20 20 20 20 20 20 2a 2a 20 32 20 28   or.      ** 2 (
17c30 7a 65 72 6f 64 61 74 61 20 66 6f 72 20 69 6e 64  zerodata for ind
17c40 69 63 65 73 29 2e 20 20 49 66 20 74 68 65 73 65  ices).  If these
17c50 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 72 65 20   conditions are 
17c60 6e 6f 74 20 6d 65 74 20 69 74 20 63 61 6e 0a 20  not met it can. 
17c70 20 20 20 20 20 2a 2a 20 6f 6e 6c 79 20 6d 65 61       ** only mea
17c80 6e 20 74 68 61 74 20 77 65 20 61 72 65 20 64 65  n that we are de
17c90 61 6c 69 6e 67 20 77 69 74 68 20 61 20 63 6f 72  aling with a cor
17ca0 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66 69  rupt database fi
17cb0 6c 65 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  le.      */.    
17cc0 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 30    if( (flags & 0
17cd0 78 66 30 29 21 3d 30 20 7c 7c 20 28 28 66 6c 61  xf0)!=0 || ((fla
17ce0 67 73 20 26 20 30 78 30 37 29 21 3d 35 20 26 26  gs & 0x07)!=5 &&
17cf0 20 28 66 6c 61 67 73 20 26 20 30 78 30 37 29 21   (flags & 0x07)!
17d00 3d 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 72  =2) ){.        r
17d10 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
17d20 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20  PT_BKPT;.       
17d30 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17d40 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
17d50 7d 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73  }.      pCur->is
17d60 54 61 62 6c 65 20 3d 20 28 66 6c 61 67 73 20 26  Table = (flags &
17d70 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 29 21 3d   BTREE_INTKEY)!=
17d80 30 20 3f 31 3a 30 3b 0a 20 20 20 20 20 20 70 43  0 ?1:0;.      pC
17d90 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 28 66  ur->isIndex = (f
17da0 6c 61 67 73 20 26 20 42 54 52 45 45 5f 5a 45 52  lags & BTREE_ZER
17db0 4f 44 41 54 41 29 21 3d 30 20 3f 31 3a 30 3b 0a  ODATA)!=0 ?1:0;.
17dc0 20 20 20 20 20 20 2f 2a 20 49 66 20 50 34 3d 3d        /* If P4==
17dd0 30 20 69 74 20 6d 65 61 6e 73 20 77 65 20 61 72  0 it means we ar
17de0 65 20 65 78 70 65 63 74 65 64 20 74 6f 20 6f 70  e expected to op
17df0 65 6e 20 61 20 74 61 62 6c 65 2e 20 20 49 66 20  en a table.  If 
17e00 50 34 21 3d 30 20 74 68 65 6e 0a 20 20 20 20 20  P4!=0 then.     
17e10 20 2a 2a 20 77 65 20 65 78 70 65 63 74 20 74 6f   ** we expect to
17e20 20 62 65 20 6f 70 65 6e 69 6e 67 20 61 6e 20 69   be opening an i
17e30 6e 64 65 78 2e 20 20 49 66 20 74 68 69 73 20 69  ndex.  If this i
17e40 73 20 6e 6f 74 20 77 68 61 74 20 68 61 70 70 65  s not what happe
17e50 6e 65 64 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ned,.      ** th
17e60 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
17e70 69 73 20 63 6f 72 72 75 70 74 0a 20 20 20 20 20  is corrupt.     
17e80 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70   */.      if( (p
17e90 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 26 26 20  Cur->isTable && 
17ea0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
17eb0 4b 45 59 49 4e 46 4f 29 0a 20 20 20 20 20 20 20  KEYINFO).       
17ec0 7c 7c 20 28 70 43 75 72 2d 3e 69 73 49 6e 64 65  || (pCur->isInde
17ed0 78 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65  x && pOp->p4type
17ee0 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 29 20 29 7b  !=P4_KEYINFO) ){
17ef0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
17f00 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
17f10 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  T;.        goto 
17f20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
17f30 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
17f40 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
17f50 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45     case SQLITE_E
17f60 4d 50 54 59 3a 20 7b 0a 20 20 20 20 20 20 70 43  MPTY: {.      pC
17f70 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  ur->isTable = pO
17f80 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
17f90 59 49 4e 46 4f 3b 0a 20 20 20 20 20 20 70 43 75  YINFO;.      pCu
17fa0 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43  r->isIndex = !pC
17fb0 75 72 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 20  ur->isTable;.   
17fc0 20 20 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72     pCur->pCursor
17fd0 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d   = 0;.      rc =
17fe0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
17ff0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
18000 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
18010 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
18020 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
18030 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
18040 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
18050 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50  enEphemeral P1 P
18060 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  2 * P4 *.**.** O
18070 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
18080 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65   P1 to a transie
18090 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  nt table..** The
180a0 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79   cursor is alway
180b0 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72  s opened read/wr
180c0 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20  ite even if .** 
180d0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
180e0 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20  e is read-only. 
180f0 20 54 68 65 20 74 72 61 6e 73 69 65 6e 74 20 6f   The transient o
18100 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  r virtual.** tab
18110 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75  le is deleted au
18120 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
18130 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
18140 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  losed..**.** P2 
18150 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
18160 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
18170 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
18180 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69  * The cursor poi
18190 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74  nts to a BTree t
181a0 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e  able if P4==0 an
181b0 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64  d to a BTree ind
181c0 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e  ex.** if P4 is n
181d0 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20  ot 0.  If P4 is 
181e0 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69  not NULL, it poi
181f0 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  nts to a KeyInfo
18200 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68   structure.** th
18210 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  at defines the f
18220 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e  ormat of keys in
18230 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a   the index..**.*
18240 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 61  * This opcode wa
18250 73 20 6f 6e 63 65 20 63 61 6c 6c 65 64 20 4f 70  s once called Op
18260 65 6e 54 65 6d 70 2e 20 20 42 75 74 20 74 68 61  enTemp.  But tha
18270 74 20 63 72 65 61 74 65 64 0a 2a 2a 20 63 6f 6e  t created.** con
18280 66 75 73 69 6f 6e 20 62 65 63 61 75 73 65 20 74  fusion because t
18290 68 65 20 74 65 72 6d 20 22 74 65 6d 70 20 74 61  he term "temp ta
182a0 62 6c 65 22 2c 20 6d 69 67 68 74 20 72 65 66 65  ble", might refe
182b0 72 20 65 69 74 68 65 72 0a 2a 2a 20 74 6f 20 61  r either.** to a
182c0 20 54 45 4d 50 20 74 61 62 6c 65 20 61 74 20 74   TEMP table at t
182d0 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 6f 72  he SQL level, or
182e0 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 70 65 6e   to a table open
182f0 65 64 20 62 79 0a 2a 2a 20 74 68 69 73 20 6f 70  ed by.** this op
18300 63 6f 64 65 2e 20 20 54 68 65 6e 20 74 68 69 73  code.  Then this
18310 20 6f 70 63 6f 64 65 20 77 61 73 20 63 61 6c 6c   opcode was call
18320 20 4f 70 65 6e 56 69 72 74 75 61 6c 2e 20 20 42   OpenVirtual.  B
18330 75 74 0a 2a 2a 20 74 68 61 74 20 63 72 65 61 74  ut.** that creat
18340 65 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 69 74  ed confusion wit
18350 68 20 74 68 65 20 77 68 6f 6c 65 20 76 69 72 74  h the whole virt
18360 75 61 6c 2d 74 61 62 6c 65 20 69 64 65 61 2e 0a  ual-table idea..
18370 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45  */.case OP_OpenE
18380 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 69 6e  phemeral: {.  in
18390 74 20 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  t i;.  VdbeCurso
183a0 72 20 2a 70 43 78 3b 0a 20 20 73 74 61 74 69 63  r *pCx;.  static
183b0 20 63 6f 6e 73 74 20 69 6e 74 20 6f 70 65 6e 46   const int openF
183c0 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51  lags = .      SQ
183d0 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52  LITE_OPEN_READWR
183e0 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ITE |.      SQLI
183f0 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c  TE_OPEN_CREATE |
18400 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
18410 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20  EN_EXCLUSIVE |. 
18420 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
18430 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c  _DELETEONCLOSE |
18440 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
18450 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b  EN_TRANSIENT_DB;
18460 0a 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ..  i = pOp->p1;
18470 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
18480 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
18490 61 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c 20  ateCursor(p, i, 
184a0 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b  pOp->p2, -1, 1);
184b0 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
184c0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
184d0 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
184e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
184f0 74 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20  treeFactory(db, 
18500 30 2c 20 31 2c 20 53 51 4c 49 54 45 5f 44 45 46  0, 1, SQLITE_DEF
18510 41 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f  AULT_TEMP_CACHE_
18520 53 49 5a 45 2c 20 6f 70 65 6e 46 6c 61 67 73 2c  SIZE, openFlags,
18530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18540 20 20 20 20 20 20 20 20 20 20 20 20 26 70 43 78              &pCx
18550 2d 3e 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63  ->pBt);.  if( rc
18560 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
18570 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18580 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
18590 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d  Cx->pBt, 1);.  }
185a0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
185b0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49  E_OK ){.    /* I
185c0 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  f a transient in
185d0 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c  dex is required,
185e0 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61   create it by ca
185f0 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c  lling.    ** sql
18600 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
18610 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20  able() with the 
18620 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 20 66  BTREE_ZERODATA f
18630 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a  lag before.    *
18640 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66  * opening it. If
18650 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
18660 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  le is required, 
18670 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20  just use the.   
18680 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   ** automaticall
18690 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y created table 
186a0 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31  with root-page 1
186b0 20 28 61 6e 20 49 4e 54 4b 45 59 20 74 61 62 6c   (an INTKEY tabl
186c0 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  e)..    */.    i
186d0 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49  f( pOp->p4.pKeyI
186e0 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  nfo ){.      int
186f0 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73   pgno;.      ass
18700 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
18710 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
18720 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
18730 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
18740 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67  le(pCx->pBt, &pg
18750 6e 6f 2c 20 42 54 52 45 45 5f 5a 45 52 4f 44 41  no, BTREE_ZERODA
18760 54 41 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20  TA); .      if( 
18770 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
18780 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
18790 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f   pgno==MASTER_RO
187a0 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20  OT+1 );.        
187b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
187c0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
187d0 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20  , pgno, 1, .    
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 20 20 20 20 20 20 20 20 20 20 20 28 4b 65 79              (Key
18800 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c  Info*)pOp->p4.z,
18810 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a   pCx->pCursor);.
18820 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65          pCx->pKe
18830 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
18840 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
18850 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d    pCx->pKeyInfo-
18860 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62  >enc = ENC(p->db
18870 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
18880 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
18890 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
188a0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
188b0 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
188c0 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  >pBt, MASTER_ROO
188d0 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43  T, 1, 0, pCx->pC
188e0 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43  ursor);.      pC
188f0 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
18900 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d      }.  }.  pCx-
18910 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d  >isIndex = !pCx-
18920 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61  >isTable;.  brea
18930 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
18940 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50   OpenPseudo P1 P
18950 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f  2 P3 * *.**.** O
18960 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
18970 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
18980 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61  a fake table tha
18990 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  t contains a sin
189a0 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61  gle.** row of da
189b0 74 61 2e 20 20 41 6e 79 20 61 74 74 65 6d 70 74  ta.  Any attempt
189c0 20 74 6f 20 77 72 69 74 65 20 61 20 73 65 63 6f   to write a seco
189d0 6e 64 20 72 6f 77 20 6f 66 20 64 61 74 61 20 63  nd row of data c
189e0 61 75 73 65 73 20 74 68 65 0a 2a 2a 20 66 69 72  auses the.** fir
189f0 73 74 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c  st row to be del
18a00 65 74 65 64 2e 20 20 41 6c 6c 20 64 61 74 61 20  eted.  All data 
18a10 69 73 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20  is deleted when 
18a20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
18a30 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41   closed..**.** A
18a40 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
18a50 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
18a60 63 6f 64 65 20 69 73 20 75 73 65 66 75 6c 20 66  code is useful f
18a70 6f 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 0a 2a  or holding the.*
18a80 2a 20 4e 45 57 20 6f 72 20 4f 4c 44 20 74 61 62  * NEW or OLD tab
18a90 6c 65 73 20 69 6e 20 61 20 74 72 69 67 67 65 72  les in a trigger
18aa0 2e 20 20 41 6c 73 6f 20 75 73 65 64 20 74 6f 20  .  Also used to 
18ab0 68 6f 6c 64 20 74 68 65 20 61 20 73 69 6e 67 6c  hold the a singl
18ac0 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20  e.** row output 
18ad0 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20  from the sorter 
18ae0 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  so that the row 
18af0 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65  can be decompose
18b00 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  d into.** indivi
18b10 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69  dual columns usi
18b20 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ng the OP_Column
18b30 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57   opcode..**.** W
18b40 68 65 6e 20 4f 50 5f 49 6e 73 65 72 74 20 69 73  hen OP_Insert is
18b50 20 65 78 65 63 75 74 65 64 20 74 6f 20 69 6e 73   executed to ins
18b60 65 72 74 20 61 20 72 6f 77 20 69 6e 20 74 6f 20  ert a row in to 
18b70 74 68 65 20 70 73 65 75 64 6f 20 74 61 62 6c 65  the pseudo table
18b80 2c 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  ,.** the pseudo-
18b90 74 61 62 6c 65 20 63 75 72 73 6f 72 20 6d 61 79  table cursor may
18ba0 20 6f 72 20 6d 61 79 20 6e 6f 74 20 6d 61 6b 65   or may not make
18bb0 20 69 74 27 73 20 6f 77 6e 20 63 6f 70 79 20 6f   it's own copy o
18bc0 66 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  f the.** origina
18bd0 6c 20 72 6f 77 20 64 61 74 61 2e 20 49 66 20 50  l row data. If P
18be0 32 20 69 73 20 30 2c 20 74 68 65 6e 20 74 68 65  2 is 0, then the
18bf0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 77 69   pseudo-table wi
18c00 6c 6c 20 63 6f 70 79 20 74 68 65 0a 2a 2a 20 6f  ll copy the.** o
18c10 72 69 67 69 6e 61 6c 20 72 6f 77 20 64 61 74 61  riginal row data
18c20 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 61 20 70  . Otherwise, a p
18c30 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6f 72  ointer to the or
18c40 69 67 69 6e 61 6c 20 6d 65 6d 6f 72 79 20 63 65  iginal memory ce
18c50 6c 6c 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 2e  ll.** is stored.
18c60 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74   In this case, t
18c70 68 65 20 76 64 62 65 20 70 72 6f 67 72 61 6d 20  he vdbe program 
18c80 6d 75 73 74 20 65 6e 73 75 72 65 20 74 68 61 74  must ensure that
18c90 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
18ca0 63 65 6c 6c 20 63 6f 6e 74 61 69 6e 69 6e 67 20  cell containing 
18cb0 74 68 65 20 72 6f 77 20 64 61 74 61 20 69 73 20  the row data is 
18cc0 6e 6f 74 20 6f 76 65 72 77 72 69 74 74 65 6e 20  not overwritten 
18cd0 75 6e 74 69 6c 20 74 68 65 0a 2a 2a 20 70 73 65  until the.** pse
18ce0 75 64 6f 20 74 61 62 6c 65 20 69 73 20 63 6c 6f  udo table is clo
18cf0 73 65 64 20 28 6f 72 20 61 20 6e 65 77 20 72 6f  sed (or a new ro
18d00 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e  w is inserted in
18d10 74 6f 20 69 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 33  to it)..**.** P3
18d20 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
18d30 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
18d40 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
18d50 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
18d60 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
18d70 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
18d80 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 69  penPseudo: {.  i
18d90 6e 74 20 69 3b 0a 20 20 56 64 62 65 43 75 72 73  nt i;.  VdbeCurs
18da0 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 69 20 3d 20  or *pCx;..  i = 
18db0 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
18dc0 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20 70 43 78  t( i>=0 );.  pCx
18dd0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
18de0 72 28 70 2c 20 69 2c 20 70 4f 70 2d 3e 70 33 2c  r(p, i, pOp->p3,
18df0 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70   -1, 0);.  if( p
18e00 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
18e10 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
18e20 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
18e30 70 73 65 75 64 6f 54 61 62 6c 65 20 3d 20 31 3b  pseudoTable = 1;
18e40 0a 20 20 70 43 78 2d 3e 65 70 68 65 6d 50 73 65  .  pCx->ephemPse
18e50 75 64 6f 54 61 62 6c 65 20 3d 20 28 75 38 29 70  udoTable = (u8)p
18e60 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69  Op->p2;.  pCx->i
18e70 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43  sTable = 1;.  pC
18e80 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20 30 3b 0a  x->isIndex = 0;.
18e90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
18ea0 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20  pcode: Close P1 
18eb0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c  * * * *.**.** Cl
18ec0 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65  ose a cursor pre
18ed0 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61  viously opened a
18ee0 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20  s P1.  If P1 is 
18ef0 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79  not.** currently
18f00 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74   open, this inst
18f10 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  ruction is a no-
18f20 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  op..*/.case OP_C
18f30 6c 6f 73 65 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  lose: {.  int i;
18f40 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .  i = pOp->p1;.
18f50 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
18f60 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
18f70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46  ;.  sqlite3VdbeF
18f80 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e  reeCursor(p, p->
18f90 61 70 43 73 72 5b 69 5d 29 3b 0a 20 20 70 2d 3e  apCsr[i]);.  p->
18fa0 61 70 43 73 72 5b 69 5d 20 3d 20 30 3b 0a 20 20  apCsr[i] = 0;.  
18fb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18fc0 6f 64 65 3a 20 53 65 65 6b 47 65 20 50 31 20 50  ode: SeekGe P1 P
18fd0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
18fe0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
18ff0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
19000 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
19010 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
19020 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
19030 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
19040 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79  er P3 as the key
19050 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  .  If cursor P1 
19060 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
19070 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
19080 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
19090 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
190a0 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
190b0 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
190c0 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
190d0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
190e0 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
190f0 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
19100 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
19110 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
19120 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
19130 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
19140 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
19150 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
19160 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72  o records .** gr
19170 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
19180 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
19190 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
191a0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
191b0 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
191c0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
191d0 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
191e0 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53  eekLt, SeekGt, S
191f0 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
19200 64 65 3a 20 53 65 65 6b 47 74 20 50 31 20 50 32  de: SeekGt P1 P2
19210 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
19220 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
19230 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
19240 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
19250 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
19260 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
19270 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
19280 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
19290 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
192a0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
192b0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
192c0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
192d0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
192e0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
192f0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
19300 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
19310 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
19320 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
19330 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
19340 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
19350 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
19360 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
19370 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
19380 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
19390 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65  o records greate
193a0 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  r than .** the k
193b0 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
193c0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
193d0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65   to P2..**.** Se
193e0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
193f0 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63  otFound, Distinc
19400 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47  t, SeekLt, SeekG
19410 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  e, SeekLe.*/./* 
19420 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 74 20 50  Opcode: SeekLt P
19430 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a  1 P2 P3 P4 * .**
19440 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
19450 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
19460 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
19470 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
19480 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
19490 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
194a0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
194b0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
194c0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
194d0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
194e0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
194f0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
19500 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
19510 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
19520 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
19530 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
19540 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
19550 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
19560 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
19570 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
19580 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
19590 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
195a0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
195b0 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20  no records less 
195c0 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
195d0 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
195e0 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
195f0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
19600 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
19610 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
19620 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
19630 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
19640 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31 20  code: SeekLe P1 
19650 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
19660 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
19670 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
19680 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
19690 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
196a0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
196b0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
196c0 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
196d0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
196e0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
196f0 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
19700 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
19710 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
19720 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
19730 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
19740 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
19750 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
19760 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
19770 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
19780 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
19790 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
197a0 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
197b0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
197c0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
197d0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
197e0 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e  ds .** less than
197f0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
19800 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
19810 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
19820 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
19830 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
19840 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69   NotFound, Disti
19850 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  nct, SeekGt, See
19860 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63  kGe, SeekLt.*/.c
19870 61 73 65 20 4f 50 5f 53 65 65 6b 4c 74 3a 20 20  ase OP_SeekLt:  
19880 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
19890 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
198a0 65 65 6b 4c 65 3a 20 20 20 20 20 20 20 20 20 2f  eekLe:         /
198b0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
198c0 61 73 65 20 4f 50 5f 53 65 65 6b 47 65 3a 20 20  ase OP_SeekGe:  
198d0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
198e0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
198f0 65 65 6b 47 74 3a 20 7b 20 20 20 20 20 20 20 2f  eekGt: {       /
19900 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
19910 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 72 65   int i;.  int re
19920 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56  s;.  int oc;.  V
19930 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
19940 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
19950 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  r;.  int nField;
19960 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
19970 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77    /* The rowid w
19980 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f  e are to seek to
19990 20 2a 2f 0a 0a 20 20 69 20 3d 20 70 4f 70 2d 3e   */..  i = pOp->
199a0 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e  p1;.  assert( i>
199b0 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
199c0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
199d0 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20  pOp->p2!=0 );.  
199e0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
199f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
19a00 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70  0 );.  if( pC->p
19a10 43 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20  Cursor!=0 ){.   
19a20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   oc = pOp->opcod
19a30 65 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  e;.    pC->nullR
19a40 6f 77 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20  ow = 0;.    if( 
19a50 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20  pC->isTable ){. 
19a60 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75       /* The inpu
19a70 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69  t value in P3 mi
19a80 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79  ght be of any ty
19a90 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61  pe: integer, rea
19aa0 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 20  l, string,.     
19ab0 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c   ** blob, or NUL
19ac0 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73  L.  But it needs
19ad0 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
19ae0 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20  r before we can 
19af0 64 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  do.      ** the 
19b00 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20  seek, so covert 
19b10 69 74 2e 20 2a 2f 0a 20 20 20 20 20 20 61 70 70  it. */.      app
19b20 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
19b30 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 69  y(pIn3);.      i
19b40 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
19b50 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b  eIntValue(pIn3);
19b60 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  .      pC->rowid
19b70 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20  IsValid = 0;..  
19b80 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
19b90 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74   value could not
19ba0 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
19bb0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69  to an integer wi
19bc0 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a 20 6c  thout.      ** l
19bd0 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
19be0 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c  on, then special
19bf0 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72   processing is r
19c00 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20  equired... */.  
19c10 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
19c20 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
19c30 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  =0 ){.        if
19c40 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
19c50 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
19c60 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66  .          /* If
19c70 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 61   the P3 value ca
19c80 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
19c90 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20  d into any kind 
19ca0 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20  of a number,.   
19cb0 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74         ** then t
19cc0 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70  he seek is not p
19cd0 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70  ossible, so jump
19ce0 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20   to P2 */.      
19cf0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
19d00 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20   - 1;.          
19d10 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
19d20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 77  .        /* If w
19d30 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  e reach this poi
19d40 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50 33 20  nt, then the P3 
19d50 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 61 20  value must be a 
19d60 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20 20 20  floating.       
19d70 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72   ** point number
19d80 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
19d90 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ert( (pIn3->flag
19da0 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21 3d 30  s & MEM_Real)!=0
19db0 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28   );..        if(
19dc0 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f   iKey==SMALLEST_
19dd0 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33 2d 3e  INT64 && (pIn3->
19de0 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 7c  r<(double)iKey |
19df0 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a  | pIn3->r>0) ){.
19e00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19e10 20 50 33 20 76 61 6c 75 65 20 69 73 20 74 6f 20   P3 value is to 
19e20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e 69 74 75  large in magnitu
19e30 64 65 20 74 6f 20 62 65 20 65 78 70 72 65 73 73  de to be express
19e40 65 64 20 61 73 20 61 6e 0a 20 20 20 20 20 20 20  ed as an.       
19e50 20 20 20 2a 2a 20 69 6e 74 65 67 65 72 2e 20 2a     ** integer. *
19e60 2f 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20  /.          res 
19e70 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 69  = 1;.          i
19e80 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a  f( pIn3->r<0 ){.
19e90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
19ea0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c  oc==OP_SeekGt ||
19eb0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29   oc==OP_SeekGe )
19ec0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
19ed0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
19ee0 65 46 69 72 73 74 28 70 43 2d 3e 70 43 75 72 73  eFirst(pC->pCurs
19ef0 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
19f00 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
19f10 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
19f20 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
19f30 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
19f40 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 65    }.          }e
19f50 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
19f60 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
19f70 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Lt || oc==OP_See
19f80 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  kLe ){.         
19f90 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
19fa0 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70  3BtreeLast(pC->p
19fb0 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28               if(
19fd0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
19fe0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19ff0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1a000 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1a010 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
1a020 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20  ( res ){.       
1a030 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1a040 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20  2 - 1;.         
1a050 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65   }.          bre
1a060 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  ak;.        }els
1a070 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  e if( oc==OP_See
1a080 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLt || oc==OP_Se
1a090 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20 20  ekGe ){.        
1a0a0 20 20 2f 2a 20 55 73 65 20 74 68 65 20 63 65 69    /* Use the cei
1a0b0 6c 69 6e 67 28 29 20 66 75 6e 63 74 69 6f 6e 20  ling() function 
1a0c0 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d  to convert real-
1a0d0 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  >int */.        
1a0e0 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3e 20    if( pIn3->r > 
1a0f0 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69  (double)iKey ) i
1a100 4b 65 79 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  Key++;.        }
1a110 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
1a120 2f 2a 20 55 73 65 20 74 68 65 20 66 6c 6f 6f 72  /* Use the floor
1a130 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63  () function to c
1a140 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74  onvert real->int
1a150 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73   */.          as
1a160 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1a170 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLe || oc==OP_Se
1a180 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20  ekGt );.        
1a190 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3c 20    if( pIn3->r < 
1a1a0 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69  (double)iKey ) i
1a1b0 4b 65 79 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d  Key--;.        }
1a1c0 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20  .      } .      
1a1d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1a1e0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1a1f0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
1a200 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72  (u64)iKey, 0, &r
1a210 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1a220 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1a230 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
1a240 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1a250 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
1a260 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
1a270 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1a280 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Valid = 1;.     
1a290 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64     pC->lastRowid
1a2a0 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 7d   = iKey;.      }
1a2b0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1a2c0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
1a2d0 70 34 2e 69 3b 0a 20 20 20 20 20 20 61 73 73 65  p4.i;.      asse
1a2e0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1a2f0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
1a300 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c     assert( nFiel
1a310 64 3e 30 20 29 3b 0a 20 20 20 20 20 20 72 2e 70  d>0 );.      r.p
1a320 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
1a330 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e  eyInfo;.      r.
1a340 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46  nField = (u16)nF
1a350 69 65 6c 64 3b 0a 20 20 20 20 20 20 69 66 28 20  ield;.      if( 
1a360 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c  oc==OP_SeekGt ||
1a370 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29   oc==OP_SeekLe )
1a380 7b 0a 20 20 20 20 20 20 20 20 72 2e 66 6c 61 67  {.        r.flag
1a390 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43  s = UNPACKED_INC
1a3a0 52 4b 45 59 3b 0a 20 20 20 20 20 20 7d 65 6c 73  RKEY;.      }els
1a3b0 65 7b 0a 20 20 20 20 20 20 20 20 72 2e 66 6c 61  e{.        r.fla
1a3c0 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  gs = 0;.      }.
1a3d0 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26        r.aMem = &
1a3e0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
1a3f0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1a400 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1a410 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1a420 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  sor, &r, 0, 0, &
1a430 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
1a440 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1a450 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
1a460 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a470 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1a480 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1a490 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
1a4a0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1a4b0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
1a4c0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1a4d0 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
1a4e0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1a4f0 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
1a500 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1a510 0a 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  .    if( oc==OP_
1a520 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGe || oc==OP
1a530 5f 53 65 65 6b 47 74 20 29 7b 0a 20 20 20 20 20  _SeekGt ){.     
1a540 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72   if( res<0 || (r
1a550 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
1a560 53 65 65 6b 47 74 29 20 29 7b 0a 20 20 20 20 20  SeekGt) ){.     
1a570 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1a580 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75  treeNext(pC->pCu
1a590 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1a5a0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1a5b0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1a5c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a5d0 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f  ;.        pC->ro
1a5e0 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1a5f0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1a600 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1a610 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
1a620 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f  .      assert( o
1a630 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20  c==OP_SeekLt || 
1a640 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b  oc==OP_SeekLe );
1a650 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3e 30  .      if( res>0
1a660 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
1a670 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29 20 29 7b  c==OP_SeekLt) ){
1a680 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1a690 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
1a6a0 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  us(pC->pCursor, 
1a6b0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69  &res);.        i
1a6c0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1a6d0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1a6e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1a6f0 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1a700 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20  alid = 0;.      
1a710 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
1a720 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e  * res might be n
1a730 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20  egative because 
1a740 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70  the table is emp
1a750 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20  ty.  Check to.  
1a760 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20        ** see if 
1a770 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65  this is the case
1a780 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
1a790 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74       res = sqlit
1a7a0 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70  e3BtreeEof(pC->p
1a7b0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1a7c0 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
1a7d0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
1a7e0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1a7f0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1a800 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
1a810 65 6c 73 65 20 69 66 28 20 21 70 43 2d 3e 70 73  else if( !pC->ps
1a820 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20  eudoTable ){.   
1a830 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
1a840 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67   when attempting
1a850 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 71 6c   to open the sql
1a860 69 74 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c  ite3_master tabl
1a870 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72 65 61  e.    ** for rea
1a880 64 20 61 63 63 65 73 73 20 72 65 74 75 72 6e 73  d access returns
1a890 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 20 49   SQLITE_EMPTY. I
1a8a0 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 77 61  n this case alwa
1a8b0 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65 20 74  ys.    ** take t
1a8c0 68 65 20 6a 75 6d 70 20 28 73 69 6e 63 65 20 74  he jump (since t
1a8d0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1a8e0 72 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  rds in the table
1a8f0 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70 63  )..    */.    pc
1a900 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1a910 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1a920 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20  /* Opcode: Seek 
1a930 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1a940 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20  * P1 is an open 
1a950 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64  table cursor and
1a960 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20 69   P2 is a rowid i
1a970 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65  nteger.  Arrange
1a980 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f  .** for P1 to mo
1a990 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  ve so that it po
1a9a0 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69  ints to the rowi
1a9b0 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a  d given by P2..*
1a9c0 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74  *.** This is act
1a9d0 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64  ually a deferred
1a9e0 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20   seek.  Nothing 
1a9f0 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73  actually happens
1aa00 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75   until.** the cu
1aa10 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20  rsor is used to 
1aa20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20  read a record.  
1aa30 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20  That way, if no 
1aa40 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20  reads.** occur, 
1aa50 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49  no unnecessary I
1aa60 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63  /O happens..*/.c
1aa70 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20  ase OP_Seek: {  
1aa80 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 69 6e    /* in2 */.  in
1aa90 74 20 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  t i;.  VdbeCurso
1aaa0 72 20 2a 70 43 3b 0a 0a 20 20 69 20 3d 20 70 4f  r *pC;..  i = pO
1aab0 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
1aac0 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1aad0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1aae0 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1aaf0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1ab00 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f    if( pC->pCurso
1ab10 72 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  r!=0 ){.    asse
1ab20 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1ab30 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  );.    pC->nullR
1ab40 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  ow = 0;.    pC->
1ab50 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73  movetoTarget = s
1ab60 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
1ab70 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43  ue(pIn2);.    pC
1ab80 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1ab90 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65   0;.    pC->defe
1aba0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
1abb0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20    }.  break;.}. 
1abc0 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f   ../* Opcode: Fo
1abd0 75 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  und P1 P2 P3 * *
1abe0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
1abf0 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1ac00 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1ac10 61 6b 65 52 65 63 6f 72 64 2e 20 20 50 31 20 69  akeRecord.  P1 i
1ac20 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  s an index..** I
1ac30 66 20 61 6e 20 65 6e 74 72 79 20 74 68 61 74 20  f an entry that 
1ac40 6d 61 74 63 68 65 73 20 74 68 65 20 76 61 6c 75  matches the valu
1ac50 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 33  e in register p3
1ac60 20 65 78 69 73 74 73 20 69 6e 20 50 31 20 74 68   exists in P1 th
1ac70 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32  en.** jump to P2
1ac80 2e 20 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  .  If the P3 val
1ac90 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  ue does not matc
1aca0 68 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  h any entry in P
1acb0 31 0a 2a 2a 20 74 68 65 6e 20 66 61 6c 6c 20 74  1.** then fall t
1acc0 68 72 75 2e 20 20 54 68 65 20 50 31 20 63 75 72  hru.  The P1 cur
1acd0 73 6f 72 20 69 73 20 6c 65 66 74 20 70 6f 69 6e  sor is left poin
1ace0 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63  ting at the matc
1acf0 68 69 6e 67 20 65 6e 74 72 79 0a 2a 2a 20 69 66  hing entry.** if
1ad00 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a   it exists..**.*
1ad10 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
1ad20 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d  on is used to im
1ad30 70 6c 65 6d 65 6e 74 20 74 68 65 20 49 4e 20 6f  plement the IN o
1ad40 70 65 72 61 74 6f 72 20 77 68 65 72 65 20 74 68  perator where th
1ad50 65 0a 2a 2a 20 6c 65 66 74 2d 68 61 6e 64 20 73  e.** left-hand s
1ad60 69 64 65 20 69 73 20 61 20 53 45 4c 45 43 54 20  ide is a SELECT 
1ad70 73 74 61 74 65 6d 65 6e 74 2e 20 20 50 31 20 6d  statement.  P1 m
1ad80 61 79 20 62 65 20 61 20 74 72 75 65 20 69 6e 64  ay be a true ind
1ad90 65 78 2c 20 6f 72 20 69 74 0a 2a 2a 20 6d 61 79  ex, or it.** may
1ada0 20 62 65 20 61 20 74 65 6d 70 6f 72 61 72 79 20   be a temporary 
1adb0 69 6e 64 65 78 20 74 68 61 74 20 68 6f 6c 64 73  index that holds
1adc0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
1add0 74 68 65 20 53 45 4c 45 43 54 0a 2a 2a 20 73 74  the SELECT.** st
1ade0 61 74 65 6d 65 6e 74 2e 20 20 20 54 68 69 73 20  atement.   This 
1adf0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
1ae00 6c 73 6f 20 75 73 65 64 20 74 6f 20 69 6d 70 6c  lso used to impl
1ae10 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 44 49 53  ement the.** DIS
1ae20 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 69 6e  TINCT keyword in
1ae30 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1ae40 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ts..**.** This i
1ae50 6e 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63 6b  nstruction check
1ae60 73 20 69 66 20 69 6e 64 65 78 20 50 31 20 63 6f  s if index P1 co
1ae70 6e 74 61 69 6e 73 20 61 20 72 65 63 6f 72 64 20  ntains a record 
1ae80 66 6f 72 20 77 68 69 63 68 20 0a 2a 2a 20 74 68  for which .** th
1ae90 65 20 66 69 72 73 74 20 4e 20 73 65 72 69 61 6c  e first N serial
1aea0 69 7a 65 64 20 76 61 6c 75 65 73 20 65 78 61 63  ized values exac
1aeb0 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20 4e 20  tly match the N 
1aec0 73 65 72 69 61 6c 69 7a 65 64 20 76 61 6c 75 65  serialized value
1aed0 73 0a 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 6f  s.** in the reco
1aee0 72 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  rd in register P
1aef0 33 2c 20 77 68 65 72 65 20 4e 20 69 73 20 74 68  3, where N is th
1af00 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
1af10 66 20 76 61 6c 75 65 73 20 69 6e 0a 2a 2a 20 74  f values in.** t
1af20 68 65 20 50 33 20 72 65 63 6f 72 64 20 28 74 68  he P3 record (th
1af30 65 20 50 33 20 72 65 63 6f 72 64 20 69 73 20 61  e P3 record is a
1af40 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 50   prefix of the P
1af50 31 20 72 65 63 6f 72 64 29 2e 20 0a 2a 2a 0a 2a  1 record). .**.*
1af60 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
1af70 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 2c 20  ound, IsUnique, 
1af80 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 2f 2a 20  NotExists.*/./* 
1af90 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64  Opcode: NotFound
1afa0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1afb0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20  .** Register P3 
1afc0 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1afd0 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1afe0 52 65 63 6f 72 64 2e 20 20 50 31 20 69 73 0a 2a  Record.  P1 is.*
1aff0 2a 20 61 6e 20 69 6e 64 65 78 2e 20 20 49 66 20  * an index.  If 
1b000 6e 6f 20 65 6e 74 72 79 20 65 78 69 73 74 73 20  no entry exists 
1b010 69 6e 20 50 31 20 74 68 61 74 20 6d 61 74 63 68  in P1 that match
1b020 65 73 20 74 68 65 20 62 6c 6f 62 20 74 68 65 6e  es the blob then
1b030 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20   jump.** to P2. 
1b040 20 49 66 20 61 6e 20 65 6e 74 72 79 20 64 6f 65   If an entry doe
1b050 73 20 65 78 69 73 74 69 6e 67 2c 20 66 61 6c 6c  s existing, fall
1b060 20 74 68 72 6f 75 67 68 2e 20 20 54 68 65 20 63   through.  The c
1b070 75 72 73 6f 72 20 69 73 20 6c 65 66 74 0a 2a 2a  ursor is left.**
1b080 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
1b090 20 65 6e 74 72 79 20 74 68 61 74 20 6d 61 74 63   entry that matc
1b0a0 68 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  hes..**.** See a
1b0b0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  lso: Found, NotE
1b0c0 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75 65 0a  xists, IsUnique.
1b0d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f  */.case OP_NotFo
1b0e0 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75  und:       /* ju
1b0f0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1b100 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20  OP_Found: {     
1b110 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1b120 2a 2f 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  */.  int i;.  in
1b130 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  t alreadyExists;
1b140 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1b150 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
1b160 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
1b170 70 49 64 78 4b 65 79 3b 0a 20 20 63 68 61 72 20  pIdxKey;.  char 
1b180 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28  aTempRec[ROUND8(
1b190 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52  sizeof(UnpackedR
1b1a0 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66  ecord)) + sizeof
1b1b0 28 4d 65 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a 20  (Mem)*3 + 7];.. 
1b1c0 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
1b1d0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
1b1e0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  0;.  assert( i>=
1b1f0 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f  0 && i<p->nCurso
1b200 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1b210 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b  ->apCsr[i]!=0 );
1b220 0a 20 20 69 66 28 20 28 70 43 20 3d 20 70 2d 3e  .  if( (pC = p->
1b230 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73  apCsr[i])->pCurs
1b240 6f 72 21 3d 30 20 29 7b 0a 0a 20 20 20 20 61 73  or!=0 ){..    as
1b250 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1b260 65 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  e==0 );.    asse
1b270 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
1b280 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
1b290 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69    pIdxKey = sqli
1b2a0 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70  te3VdbeRecordUnp
1b2b0 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  ack(pC->pKeyInfo
1b2c0 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d  , pIn3->n, pIn3-
1b2d0 3e 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  >z,.            
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2f0 20 20 20 20 20 20 20 20 20 20 61 54 65 6d 70 52            aTempR
1b300 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70  ec, sizeof(aTemp
1b310 52 65 63 29 29 3b 0a 20 20 20 20 69 66 28 20 70  Rec));.    if( p
1b320 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20  IdxKey==0 ){.   
1b330 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
1b340 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f      }.    if( pO
1b350 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f  p->opcode==OP_Fo
1b360 75 6e 64 20 29 7b 0a 20 20 20 20 20 20 70 49 64  und ){.      pId
1b370 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55  xKey->flags |= U
1b380 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d  NPACKED_PREFIX_M
1b390 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ATCH;.    }.    
1b3a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b3b0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1b3c0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49 64  pC->pCursor, pId
1b3d0 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73  xKey, 0, 0, &res
1b3e0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
1b3f0 62 65 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64  beDeleteUnpacked
1b400 52 65 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b  Record(pIdxKey);
1b410 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
1b420 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1b430 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
1b440 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
1b450 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 20 20 70   (res==0);.    p
1b460 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1b470 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
1b480 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1b490 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
1b4a0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1b4b0 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20  =OP_Found ){.   
1b4c0 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73   if( alreadyExis
1b4d0 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  ts ) pc = pOp->p
1b4e0 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2 - 1;.  }else{.
1b4f0 20 20 20 20 69 66 28 20 21 61 6c 72 65 61 64 79      if( !already
1b500 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f  Exists ) pc = pO
1b510 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
1b520 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b530 63 6f 64 65 3a 20 49 73 55 6e 69 71 75 65 20 50  code: IsUnique P
1b540 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
1b550 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
1b560 6f 70 65 6e 20 6f 6e 20 61 6e 20 69 6e 64 65 78  open on an index
1b570 2e 20 20 53 6f 20 69 74 20 68 61 73 20 6e 6f 20  .  So it has no 
1b580 64 61 74 61 20 61 6e 64 20 69 74 73 20 6b 65 79  data and its key
1b590 20 63 6f 6e 73 69 73 74 73 20 0a 2a 2a 20 6f 66   consists .** of
1b5a0 20 61 20 72 65 63 6f 72 64 20 67 65 6e 65 72 61   a record genera
1b5b0 74 65 64 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65  ted by OP_MakeRe
1b5c0 63 6f 72 64 20 77 68 65 72 65 20 74 68 65 20 6c  cord where the l
1b5d0 61 73 74 20 66 69 65 6c 64 20 69 73 20 74 68 65  ast field is the
1b5e0 20 0a 2a 2a 20 72 6f 77 69 64 20 6f 66 20 74 68   .** rowid of th
1b5f0 65 20 65 6e 74 72 79 20 74 68 61 74 20 74 68 65  e entry that the
1b600 20 69 6e 64 65 78 20 72 65 66 65 72 73 20 74 6f   index refers to
1b610 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 72  ..**.** The P3 r
1b620 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69 6e 73  egister contains
1b630 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 63 6f   an integer reco
1b640 72 64 20 6e 75 6d 62 65 72 2e 20 43 61 6c 6c 20  rd number. Call 
1b650 74 68 69 73 20 72 65 63 6f 72 64 20 0a 2a 2a 20  this record .** 
1b660 6e 75 6d 62 65 72 20 52 2e 20 52 65 67 69 73 74  number R. Regist
1b670 65 72 20 50 34 20 69 73 20 74 68 65 20 66 69 72  er P4 is the fir
1b680 73 74 20 69 6e 20 61 20 73 65 74 20 6f 66 20 4e  st in a set of N
1b690 20 63 6f 6e 74 69 67 75 6f 75 73 20 72 65 67 69   contiguous regi
1b6a0 73 74 65 72 73 0a 2a 2a 20 74 68 61 74 20 6d 61  sters.** that ma
1b6b0 6b 65 20 75 70 20 61 6e 20 75 6e 70 61 63 6b 65  ke up an unpacke
1b6c0 64 20 69 6e 64 65 78 20 6b 65 79 20 74 68 61 74  d index key that
1b6d0 20 63 61 6e 20 62 65 20 75 73 65 64 20 77 69 74   can be used wit
1b6e0 68 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  h cursor P1..** 
1b6f0 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e 20 63  The value of N c
1b700 61 6e 20 62 65 20 69 6e 66 65 72 72 65 64 20 66  an be inferred f
1b710 72 6f 6d 20 74 68 65 20 63 75 72 73 6f 72 2e 20  rom the cursor. 
1b720 4e 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 72  N includes the r
1b730 6f 77 69 64 0a 2a 2a 20 76 61 6c 75 65 20 61 70  owid.** value ap
1b740 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20 65 6e  pended to the en
1b750 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 72  d of the index r
1b760 65 63 6f 72 64 2e 20 54 68 69 73 20 72 6f 77 69  ecord. This rowi
1b770 64 20 76 61 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f  d value may.** o
1b780 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 74 68 65  r may not be the
1b790 20 73 61 6d 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a   same as R..**.*
1b7a0 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65 20  * If any of the 
1b7b0 4e 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69  N registers begi
1b7c0 6e 6e 69 6e 67 20 77 69 74 68 20 72 65 67 69 73  nning with regis
1b7d0 74 65 72 20 50 34 20 63 6f 6e 74 61 69 6e 73 20  ter P4 contains 
1b7e0 61 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c  a NULL.** value,
1b7f0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1b800 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f  y to P2..**.** O
1b810 74 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 69  therwise, this i
1b820 6e 73 74 72 75 63 74 69 6f 6e 20 63 68 65 63 6b  nstruction check
1b830 73 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 63  s if cursor P1 c
1b840 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6e 74 72 79  ontains an entry
1b850 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 66 69  .** where the fi
1b860 72 73 74 20 28 4e 2d 31 29 20 66 69 65 6c 64 73  rst (N-1) fields
1b870 20 6d 61 74 63 68 20 62 75 74 20 74 68 65 20 72   match but the r
1b880 6f 77 69 64 20 76 61 6c 75 65 20 61 74 20 74 68  owid value at th
1b890 65 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68 65 20  e end.** of the 
1b8a0 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6e  index entry is n
1b8b0 6f 74 20 52 2e 20 49 66 20 74 68 65 72 65 20 69  ot R. If there i
1b8c0 73 20 6e 6f 20 73 75 63 68 20 65 6e 74 72 79 2c  s no such entry,
1b8d0 20 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a   control jumps.*
1b8e0 2a 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  * to instruction
1b8f0 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
1b900 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
1b910 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64   conflicting ind
1b920 65 78 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 63  ex.** entry is c
1b930 6f 70 69 65 64 20 74 6f 20 72 65 67 69 73 74 65  opied to registe
1b940 72 20 50 33 20 61 6e 64 20 63 6f 6e 74 72 6f 6c  r P3 and control
1b950 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74   falls through t
1b960 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  o the next.** in
1b970 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
1b980 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
1b990 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
1b9a0 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20 4f 50  Found.*/.case OP
1b9b0 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20 20 20 20  _IsUnique: {    
1b9c0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1b9d0 20 2a 2f 0a 20 20 75 31 36 20 69 69 3b 0a 20 20   */.  u16 ii;.  
1b9e0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1b9f0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1ba00 73 72 3b 0a 20 20 75 31 36 20 6e 46 69 65 6c 64  sr;.  u16 nField
1ba10 3b 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 0a 20  ;.  Mem *aMem;. 
1ba20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1ba30 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1ba40 20 20 20 20 2f 2a 20 42 2d 54 72 65 65 20 69 6e      /* B-Tree in
1ba50 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 20 2a  dex search key *
1ba60 2f 0a 20 20 69 36 34 20 52 3b 20 20 20 20 20 20  /.  i64 R;      
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba80 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20         /* Rowid 
1ba90 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1baa0 65 72 20 50 33 20 2a 2f 0a 0a 20 20 61 4d 65 6d  er P3 */..  aMem
1bab0 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
1bac0 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73 73  >p4.i];.  /* Ass
1bad0 65 72 74 20 74 68 61 74 20 74 68 65 20 76 61 6c  ert that the val
1bae0 75 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  ues of parameter
1baf0 73 20 50 31 20 61 6e 64 20 50 34 20 61 72 65 20  s P1 and P4 are 
1bb00 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a 20 20 61  in range. */.  a
1bb10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1bb20 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1bb30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1bb40 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34  4.i>0 && pOp->p4
1bb50 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  .i<=p->nMem );. 
1bb60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1bb70 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1bb80 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 0a 20 20  ->nCursor );..  
1bb90 2f 2a 20 46 69 6e 64 20 74 68 65 20 69 6e 64 65  /* Find the inde
1bba0 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 70  x cursor. */.  p
1bbb0 43 78 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  Cx = p->apCsr[pO
1bbc0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1bbd0 28 20 70 43 78 2d 3e 64 65 66 65 72 72 65 64 4d  ( pCx->deferredM
1bbe0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43  oveto==0 );.  pC
1bbf0 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  x->seekResult = 
1bc00 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63 68 65 53  0;.  pCx->cacheS
1bc10 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1bc20 41 4c 45 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  ALE;.  pCrsr = p
1bc30 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20  Cx->pCursor;..  
1bc40 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65  /* If any of the
1bc50 20 76 61 6c 75 65 73 20 61 72 65 20 4e 55 4c 4c   values are NULL
1bc60 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  , take the jump.
1bc70 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
1bc80 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  Cx->pKeyInfo->nF
1bc90 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69 69 3d 30  ield;.  for(ii=0
1bca0 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20 69 69 2b  ; ii<nField; ii+
1bcb0 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 4d 65 6d  +){.    if( aMem
1bcc0 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  [ii].flags & MEM
1bcd0 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70  _Null ){.      p
1bce0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1bcf0 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d 20 30  .      pCrsr = 0
1bd00 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
1bd10 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72     }.  }.  asser
1bd20 74 28 20 28 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d  t( (aMem[nField]
1bd30 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  .flags & MEM_Nul
1bd40 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20  l)==0 );..  if( 
1bd50 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20  pCrsr!=0 ){.    
1bd60 2f 2a 20 50 6f 70 75 6c 61 74 65 20 74 68 65 20  /* Populate the 
1bd70 69 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65 79  index search key
1bd80 2e 20 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79 49  . */.    r.pKeyI
1bd90 6e 66 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49  nfo = pCx->pKeyI
1bda0 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
1bdb0 64 20 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b 0a  d = nField + 1;.
1bdc0 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e      r.flags = UN
1bdd0 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45  PACKED_PREFIX_SE
1bde0 41 52 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65 6d  ARCH;.    r.aMem
1bdf0 20 3d 20 61 4d 65 6d 3b 0a 0a 20 20 20 20 2f 2a   = aMem;..    /*
1be00 20 45 78 74 72 61 63 74 20 74 68 65 20 76 61 6c   Extract the val
1be10 75 65 20 6f 66 20 52 20 66 72 6f 6d 20 72 65 67  ue of R from reg
1be20 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a 20 20 20  ister P3. */.   
1be30 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1be40 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b  ntegerify(pIn3);
1be50 0a 20 20 20 20 52 20 3d 20 70 49 6e 33 2d 3e 75  .    R = pIn3->u
1be60 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72  .i;..    /* Sear
1be70 63 68 20 74 68 65 20 42 2d 54 72 65 65 20 69 6e  ch the B-Tree in
1be80 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f 6e 66 6c  dex. If no confl
1be90 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20 69 73  icting record is
1bea0 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a 20 20 20   found, jump.   
1beb0 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72   ** to P2. Other
1bec0 77 69 73 65 2c 20 63 6f 70 79 20 74 68 65 20 72  wise, copy the r
1bed0 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e 66  owid of the conf
1bee0 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64 20 74  licting record t
1bef0 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69 73 74 65  o.    ** registe
1bf00 72 20 50 33 20 61 6e 64 20 66 61 6c 6c 20 74 68  r P3 and fall th
1bf10 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1bf20 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  t instruction.  
1bf30 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
1bf40 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1bf50 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72  packed(pCrsr, &r
1bf60 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d 3e 73 65  , 0, 0, &pCx->se
1bf70 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20 20 20 69  ekResult);.    i
1bf80 66 28 20 28 72 2e 66 6c 61 67 73 20 26 20 55 4e  f( (r.flags & UN
1bf90 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45  PACKED_PREFIX_SE
1bfa0 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f 77 69 64  ARCH) || r.rowid
1bfb0 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70 63 20  ==R ){.      pc 
1bfc0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1bfd0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1bfe0 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72 2e 72 6f  pIn3->u.i = r.ro
1bff0 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  wid;.    }.  }. 
1c000 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1c010 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20  code: NotExists 
1c020 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
1c030 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e 74 65  ** Use the conte
1c040 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
1c050 33 20 61 73 20 61 20 69 6e 74 65 67 65 72 20 6b  3 as a integer k
1c060 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f 72 64  ey.  If a record
1c070 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74 20 6b   .** with that k
1c080 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  ey does not exis
1c090 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20 50 31  t in table of P1
1c0a0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1c0b0 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72 65  2. .** If the re
1c0c0 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73 74 2c  cord does exist,
1c0d0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 75 2e   then fall thru.
1c0e0 20 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20    The cursor is 
1c0f0 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e  left .** pointin
1c100 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  g to the record 
1c110 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a  if it exists..**
1c120 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e  .** The differen
1c130 63 65 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  ce between this 
1c140 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 4e 6f  operation and No
1c150 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74 20 74  tFound is that t
1c160 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
1c170 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b 65 79   assumes the key
1c180 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 61   is an integer a
1c190 6e 64 20 74 68 61 74 20 50 31 20 69 73 20 61 20  nd that P1 is a 
1c1a0 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a 2a 2a  table whereas.**
1c1b0 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75 6d 65   NotFound assume
1c1c0 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f 62 20  s key is a blob 
1c1d0 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d  constructed from
1c1e0 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e 64 0a   MakeRecord and.
1c1f0 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65  ** P1 is an inde
1c200 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  x..**.** See als
1c210 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1c220 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a  nd, IsUnique.*/.
1c230 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74  case OP_NotExist
1c240 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
1c250 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1c260 74 20 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  t i;.  VdbeCurso
1c270 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
1c280 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
1c290 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b  res;.  u64 iKey;
1c2a0 0a 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ..  i = pOp->p1;
1c2b0 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1c2c0 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1c2d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1c2e0 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20  apCsr[i]!=0 );. 
1c2f0 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 28 70   if( (pCrsr = (p
1c300 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29  C = p->apCsr[i])
1c310 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b  ->pCursor)!=0 ){
1c320 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  .    res = 0;.  
1c330 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
1c340 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
1c350 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1c360 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e 69 73 54 61  ->apCsr[i]->isTa
1c370 62 6c 65 20 29 3b 0a 20 20 20 20 69 4b 65 79 20  ble );.    iKey 
1c380 3d 20 69 6e 74 54 6f 4b 65 79 28 70 49 6e 33 2d  = intToKey(pIn3-
1c390 3e 75 2e 69 29 3b 0a 20 20 20 20 72 63 20 3d 20  >u.i);.    rc = 
1c3a0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1c3b0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
1c3c0 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72  , 0, iKey, 0, &r
1c3d0 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73  es);.    pC->las
1c3e0 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75  tRowid = pIn3->u
1c3f0 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  .i;.    pC->rowi
1c400 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d  dIsValid = res==
1c410 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e  0 ?1:0;.    pC->
1c420 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1c430 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1c440 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1c450 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
1c460 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
1c470 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20  if( res!=0 ){.  
1c480 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1c490 20 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65   - 1;.      asse
1c4a0 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  rt( pC->rowidIsV
1c4b0 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  alid==0 );.    }
1c4c0 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  .    pC->seekRes
1c4d0 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c  ult = res;.  }el
1c4e0 73 65 20 69 66 28 20 21 70 43 2d 3e 70 73 65 75  se if( !pC->pseu
1c4f0 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  doTable ){.    /
1c500 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
1c510 68 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20 74  hen an attempt t
1c520 6f 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63 75  o open a read cu
1c530 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20 20  rsor on the .   
1c540 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   ** sqlite_maste
1c550 72 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73 20  r table returns 
1c560 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20  SQLITE_EMPTY..  
1c570 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
1c580 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
1c590 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1c5a0 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74   - 1;.    assert
1c5b0 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1c5c0 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d  id==0 );.    pC-
1c5d0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b  >seekResult = 0;
1c5e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1c5f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
1c600 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  ence P1 P2 * * *
1c610 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20  .**.** Find the 
1c620 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73  next available s
1c630 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66  equence number f
1c640 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
1c650 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65   Write the seque
1c660 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20  nce number into 
1c670 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
1c680 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  The sequence num
1c690 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f  ber on the curso
1c6a0 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
1c6b0 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69   after this.** i
1c6c0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f  nstruction.  .*/
1c6d0 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63  .case OP_Sequenc
1c6e0 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
1c6f0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
1c700 65 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70  e */.  int i = p
1c710 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
1c720 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1c730 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1c740 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21  rt( p->apCsr[i]!
1c750 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
1c760 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 2d  i = p->apCsr[i]-
1c770 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 4d  >seqCount++;.  M
1c780 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
1c790 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
1c7a0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
1c7b0 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
1c7c0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1c7d0 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65  * Get a new inte
1c7e0 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
1c7f0 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22  r (a.k.a "rowid"
1c800 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  ) used as the ke
1c810 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  y to a table..**
1c820 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   The record numb
1c830 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  er is not previo
1c840 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b  usly used as a k
1c850 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ey in the databa
1c860 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74  se.** table that
1c870 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
1c880 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72  s to.  The new r
1c890 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
1c8a0 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74  written.** writt
1c8b0 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  en to register P
1c8c0 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30  2..**.** If P3>0
1c8d0 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65   then P3 is a re
1c8e0 67 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64  gister that hold
1c8f0 73 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72  s the largest pr
1c900 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 67 65 6e 65  eviously.** gene
1c910 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
1c920 62 65 72 2e 20 20 4e 6f 20 6e 65 77 20 72 65 63  ber.  No new rec
1c930 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 20  ord numbers are 
1c940 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65  allowed to be le
1c950 73 73 0a 2a 2a 20 74 68 61 6e 20 74 68 69 73 20  ss.** than this 
1c960 76 61 6c 75 65 2e 20 20 57 68 65 6e 20 74 68 69  value.  When thi
1c970 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20  s value reaches 
1c980 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 61 20 53  its maximum, a S
1c990 51 4c 49 54 45 5f 46 55 4c 4c 0a 2a 2a 20 65 72  QLITE_FULL.** er
1c9a0 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
1c9b0 2e 20 20 54 68 65 20 50 33 20 72 65 67 69 73 74  .  The P3 regist
1c9c0 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69  er is updated wi
1c9d0 74 68 20 74 68 65 20 67 65 6e 65 72 61 74 65 64  th the generated
1c9e0 0a 2a 2a 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  .** record numbe
1c9f0 72 2e 20 20 54 68 69 73 20 50 33 20 6d 65 63 68  r.  This P3 mech
1ca00 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f  anism is used to
1ca10 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20   help implement 
1ca20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45  the.** AUTOINCRE
1ca30 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f  MENT feature..*/
1ca40 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69  .case OP_NewRowi
1ca50 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
1ca60 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
1ca70 65 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 0a 20 20  e */.  int i;.  
1ca80 69 36 34 20 76 3b 0a 20 20 56 64 62 65 43 75 72  i64 v;.  VdbeCur
1ca90 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
1caa0 65 73 3b 0a 20 20 69 6e 74 20 72 78 3b 0a 20 20  es;.  int rx;.  
1cab0 69 6e 74 20 63 6e 74 3b 0a 20 20 69 36 34 20 78  int cnt;.  i64 x
1cac0 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 0a  ;.  Mem *pMem;..
1cad0 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20    i = pOp->p1;. 
1cae0 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20   v = 0;.  res = 
1caf0 30 3b 0a 20 20 72 78 20 3d 20 53 51 4c 49 54 45  0;.  rx = SQLITE
1cb00 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 69  _OK;.  assert( i
1cb10 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
1cb20 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
1cb30 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20   p->apCsr[i]!=0 
1cb40 29 3b 0a 20 20 69 66 28 20 28 70 43 20 3d 20 70  );.  if( (pC = p
1cb50 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75  ->apCsr[i])->pCu
1cb60 72 73 6f 72 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  rsor==0 ){.    /
1cb70 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69  * The zero initi
1cb80 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20  alization above 
1cb90 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e  is all that is n
1cba0 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65  eeded */.  }else
1cbb0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  {.    /* The nex
1cbc0 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72  t rowid or recor
1cbd0 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72  d number (differ
1cbe0 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68  ent terms for th
1cbf0 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68  e same.    ** th
1cc00 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64  ing) is obtained
1cc10 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61   in a two-step a
1cc20 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a  lgorithm..    **
1cc30 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65  .    ** First we
1cc40 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
1cc50 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
1cc60 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20  sting rowid and 
1cc70 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74  add one.    ** t
1cc80 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20  o that.  But if 
1cc90 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
1cca0 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c  ting rowid is al
1ccb0 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75  ready the maximu
1ccc0 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76  m.    ** positiv
1ccd0 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61  e integer, we ha
1cce0 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75  ve to fall throu
1ccf0 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64  gh to the second
1cd00 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c  .    ** probabil
1cd10 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a  istic algorithm.
1cd20 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68      **.    ** Th
1cd30 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74  e second algorit
1cd40 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20  hm is to select 
1cd50 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f  a rowid at rando
1cd60 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20  m and see if.   
1cd70 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65   ** it already e
1cd80 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62  xists in the tab
1cd90 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  le.  If it does 
1cda0 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61  not exist, we ha
1cdb0 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65  ve.    ** succee
1cdc0 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e  ded.  If the ran
1cdd0 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65  dom rowid does e
1cde0 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20  xist, we select 
1cdf0 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a  a new one.    **
1ce00 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20   and try again, 
1ce10 75 70 20 74 6f 20 31 30 30 30 20 74 69 6d 65 73  up to 1000 times
1ce20 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1ce30 46 6f 72 20 61 20 74 61 62 6c 65 20 77 69 74 68  For a table with
1ce40 20 6c 65 73 73 20 74 68 61 6e 20 32 20 62 69 6c   less than 2 bil
1ce50 6c 69 6f 6e 20 65 6e 74 72 69 65 73 2c 20 74 68  lion entries, th
1ce60 65 20 70 72 6f 62 61 62 69 6c 69 74 79 0a 20 20  e probability.  
1ce70 20 20 2a 2a 20 6f 66 20 6e 6f 74 20 66 69 6e 64    ** of not find
1ce80 69 6e 67 20 61 20 75 6e 75 73 65 64 20 72 6f 77  ing a unused row
1ce90 69 64 20 69 73 20 61 62 6f 75 74 20 31 2e 30 65  id is about 1.0e
1cea0 2d 33 30 30 2e 20 20 54 68 69 73 20 69 73 20 61  -300.  This is a
1ceb0 20 0a 20 20 20 20 2a 2a 20 6e 6f 6e 2d 7a 65 72   .    ** non-zer
1cec0 6f 20 70 72 6f 62 61 62 69 6c 69 74 79 2c 20 62  o probability, b
1ced0 75 74 20 69 74 20 69 73 20 73 74 69 6c 6c 20 76  ut it is still v
1cee0 61 6e 69 73 68 69 6e 67 6c 79 20 73 6d 61 6c 6c  anishingly small
1cef0 20 61 6e 64 20 73 68 6f 75 6c 64 0a 20 20 20 20   and should.    
1cf00 2a 2a 20 6e 65 76 65 72 20 63 61 75 73 65 20 61  ** never cause a
1cf10 20 70 72 6f 62 6c 65 6d 2e 20 20 59 6f 75 20 61   problem.  You a
1cf20 72 65 20 6d 75 63 68 2c 20 6d 75 63 68 20 6d 6f  re much, much mo
1cf30 72 65 20 6c 69 6b 65 6c 79 20 74 6f 20 68 61 76  re likely to hav
1cf40 65 20 61 0a 20 20 20 20 2a 2a 20 68 61 72 64 77  e a.    ** hardw
1cf50 61 72 65 20 66 61 69 6c 75 72 65 20 74 68 61 6e  are failure than
1cf60 20 66 6f 72 20 74 68 69 73 20 61 6c 67 6f 72 69   for this algori
1cf70 74 68 6d 20 74 6f 20 66 61 69 6c 2e 0a 20 20 20  thm to fail..   
1cf80 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 61   **.    ** The a
1cf90 6e 61 6c 79 73 69 73 20 69 6e 20 74 68 65 20 70  nalysis in the p
1cfa0 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
1cfb0 68 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 79  h assumes that y
1cfc0 6f 75 20 68 61 76 65 20 61 20 67 6f 6f 64 0a 20  ou have a good. 
1cfd0 20 20 20 2a 2a 20 73 6f 75 72 63 65 20 6f 66 20     ** source of 
1cfe0 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 73 2e 20  random numbers. 
1cff0 20 49 73 20 61 20 6c 69 62 72 61 72 79 20 66 75   Is a library fu
1d000 6e 63 74 69 6f 6e 20 6c 69 6b 65 20 6c 72 61 6e  nction like lran
1d010 64 34 38 28 29 0a 20 20 20 20 2a 2a 20 67 6f 6f  d48().    ** goo
1d020 64 20 65 6e 6f 75 67 68 3f 20 20 4d 61 79 62 65  d enough?  Maybe
1d030 2e 20 4d 61 79 62 65 20 6e 6f 74 2e 20 49 74 27  . Maybe not. It'
1d040 73 20 68 61 72 64 20 74 6f 20 6b 6e 6f 77 20 77  s hard to know w
1d050 68 65 74 68 65 72 20 74 68 65 72 65 0a 20 20 20  hether there.   
1d060 20 2a 2a 20 6d 69 67 68 74 20 62 65 20 73 75 62   ** might be sub
1d070 74 6c 65 20 62 75 67 73 20 69 73 20 73 6f 6d 65  tle bugs is some
1d080 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
1d090 20 6f 66 20 6c 72 61 6e 64 34 38 28 29 20 74 68   of lrand48() th
1d0a0 61 74 0a 20 20 20 20 2a 2a 20 63 6f 75 6c 64 20  at.    ** could 
1d0b0 63 61 75 73 65 20 70 72 6f 62 6c 65 6d 73 2e 20  cause problems. 
1d0c0 54 6f 20 61 76 6f 69 64 20 75 6e 63 65 72 74 61  To avoid uncerta
1d0d0 69 6e 74 79 2c 20 53 51 4c 69 74 65 20 75 73 65  inty, SQLite use
1d0e0 73 20 69 74 73 20 6f 77 6e 20 0a 20 20 20 20 2a  s its own .    *
1d0f0 2a 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20  * random number 
1d100 67 65 6e 65 72 61 74 6f 72 20 62 61 73 65 64 20  generator based 
1d110 6f 6e 20 74 68 65 20 52 43 34 20 61 6c 67 6f 72  on the RC4 algor
1d120 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
1d130 20 2a 2a 20 54 6f 20 70 72 6f 6d 6f 74 65 20 6c   ** To promote l
1d140 6f 63 61 6c 69 74 79 20 6f 66 20 72 65 66 65 72  ocality of refer
1d150 65 6e 63 65 20 66 6f 72 20 72 65 70 65 74 69 74  ence for repetit
1d160 69 76 65 20 69 6e 73 65 72 74 73 2c 20 74 68 65  ive inserts, the
1d170 0a 20 20 20 20 2a 2a 20 66 69 72 73 74 20 66 65  .    ** first fe
1d180 77 20 61 74 74 65 6d 70 74 73 20 61 74 20 63 68  w attempts at ch
1d190 6f 6f 73 69 6e 67 20 61 20 72 61 6e 64 6f 6d 20  oosing a random 
1d1a0 72 6f 77 69 64 20 70 69 63 6b 20 76 61 6c 75 65  rowid pick value
1d1b0 73 20 6a 75 73 74 20 61 20 6c 69 74 74 6c 65 0a  s just a little.
1d1c0 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68      ** larger th
1d1d0 61 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  an the previous 
1d1e0 72 6f 77 69 64 2e 20 20 54 68 69 73 20 68 61 73  rowid.  This has
1d1f0 20 62 65 65 6e 20 73 68 6f 77 6e 20 65 78 70 65   been shown expe
1d200 72 69 6d 65 6e 74 61 6c 6c 79 0a 20 20 20 20 2a  rimentally.    *
1d210 2a 20 74 6f 20 64 6f 75 62 6c 65 20 74 68 65 20  * to double the 
1d220 73 70 65 65 64 20 6f 66 20 74 68 65 20 43 4f 50  speed of the COP
1d230 59 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 20  Y operation..   
1d240 20 2a 2f 0a 20 20 20 20 63 6e 74 20 3d 20 30 3b   */.    cnt = 0;
1d250 0a 20 20 20 20 69 66 28 20 28 73 71 6c 69 74 65  .    if( (sqlite
1d260 33 42 74 72 65 65 46 6c 61 67 73 28 70 43 2d 3e  3BtreeFlags(pC->
1d270 70 43 75 72 73 6f 72 29 26 28 42 54 52 45 45 5f  pCursor)&(BTREE_
1d280 49 4e 54 4b 45 59 7c 42 54 52 45 45 5f 5a 45 52  INTKEY|BTREE_ZER
1d290 4f 44 41 54 41 29 29 20 21 3d 0a 20 20 20 20 20  ODATA)) !=.     
1d2a0 20 20 20 20 20 42 54 52 45 45 5f 49 4e 54 4b 45       BTREE_INTKE
1d2b0 59 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  Y ){.      rc = 
1d2c0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
1d2d0 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
1d2e0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1d2f0 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73  or;.    }.    as
1d300 73 65 72 74 28 20 28 73 71 6c 69 74 65 33 42 74  sert( (sqlite3Bt
1d310 72 65 65 46 6c 61 67 73 28 70 43 2d 3e 70 43 75  reeFlags(pC->pCu
1d320 72 73 6f 72 29 20 26 20 42 54 52 45 45 5f 49 4e  rsor) & BTREE_IN
1d330 54 4b 45 59 29 21 3d 30 20 29 3b 0a 20 20 20 20  TKEY)!=0 );.    
1d340 61 73 73 65 72 74 28 20 28 73 71 6c 69 74 65 33  assert( (sqlite3
1d350 42 74 72 65 65 46 6c 61 67 73 28 70 43 2d 3e 70  BtreeFlags(pC->p
1d360 43 75 72 73 6f 72 29 20 26 20 42 54 52 45 45 5f  Cursor) & BTREE_
1d370 5a 45 52 4f 44 41 54 41 29 3d 3d 30 20 29 3b 0a  ZERODATA)==0 );.
1d380 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33  .#ifdef SQLITE_3
1d390 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64  2BIT_ROWID.#   d
1d3a0 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
1d3b0 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65  0x7fffffff.#else
1d3c0 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d  .    /* Some com
1d3d0 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  pilers complain 
1d3e0 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  about constants 
1d3f0 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66  of the form 0x7f
1d400 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a  ffffffffffffff..
1d410 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f      ** Others co
1d420 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37  mplain about 0x7
1d430 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  ffffffffffffffff
1d440 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  LL.  The followi
1d450 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20  ng macro seems. 
1d460 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65     ** to provide
1d470 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68   the constant wh
1d480 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63  ile making all c
1d490 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a  ompilers happy..
1d4a0 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e      */.#   defin
1d4b0 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36  e MAX_ROWID  (i6
1d4c0 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66  4)( (((u64)0x7ff
1d4d0 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75  fffff)<<32) | (u
1d4e0 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a  64)0xffffffff ).
1d4f0 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20  #endif..    if( 
1d500 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f  !pC->useRandomRo
1d510 77 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  wid ){.      v =
1d520 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
1d530 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e  CachedRowid(pC->
1d540 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1d550 69 66 28 20 76 3d 3d 30 20 29 7b 0a 20 20 20 20  if( v==0 ){.    
1d560 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1d570 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43  BtreeLast(pC->pC
1d580 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1d590 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1d5a0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1d5b0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1d5c0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1d5d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1d5e0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
1d5f0 20 20 20 20 20 76 20 3d 20 31 3b 0a 20 20 20 20       v = 1;.    
1d600 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1d610 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
1d620 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
1d630 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20  rsor, &v);.     
1d640 20 20 20 20 20 76 20 3d 20 6b 65 79 54 6f 49 6e       v = keyToIn
1d650 74 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  t(v);.          
1d660 69 66 28 20 76 3d 3d 4d 41 58 5f 52 4f 57 49 44  if( v==MAX_ROWID
1d670 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
1d680 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
1d690 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
1d6a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1d6b0 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20 20       v++;.      
1d6c0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
1d6d0 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66        }..#ifndef
1d6e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
1d6f0 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 20  OINCREMENT.     
1d700 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
1d710 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1d720 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
1d730 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
1d740 20 2f 2a 20 50 33 20 69 73 20 61 20 76 61 6c 69   /* P3 is a vali
1d750 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  d memory cell */
1d760 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20  .        pMem = 
1d770 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
1d780 5d 3b 0a 09 52 45 47 49 53 54 45 52 5f 54 52 41  ];..REGISTER_TRA
1d790 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d  CE(pOp->p3, pMem
1d7a0 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
1d7b0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1d7c0 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  ify(pMem);.     
1d7d0 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
1d7e0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1d7f0 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d  t)!=0 );  /* mem
1d800 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e  (P3) holds an in
1d810 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  teger */.       
1d820 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
1d830 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
1d840 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
1d850 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
1d860 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 0a 20  = SQLITE_FULL;. 
1d870 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
1d880 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1d890 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1d8a0 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e      if( v<pMem->
1d8b0 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20  u.i+1 ){.       
1d8c0 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69     v = pMem->u.i
1d8d0 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a   + 1;.        }.
1d8e0 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e          pMem->u.
1d8f0 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a 23  i = v;.      }.#
1d900 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73 71 6c  endif..      sql
1d910 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
1d920 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72  edRowid(pC->pCur
1d930 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49 44  sor, v<MAX_ROWID
1d940 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20 20   ? v+1 : 0);.   
1d950 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75   }.    if( pC->u
1d960 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1d970 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1d980 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a  Op->p3==0 );  /*
1d990 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 6d 75 73   SQLITE_FULL mus
1d9a0 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
1d9b0 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 2a 2f  prior to this */
1d9c0 0a 20 20 20 20 20 20 76 20 3d 20 64 62 2d 3e 70  .      v = db->p
1d9d0 72 69 6f 72 4e 65 77 52 6f 77 69 64 3b 0a 20 20  riorNewRowid;.  
1d9e0 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20      cnt = 0;.   
1d9f0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69     do{.        i
1da00 66 28 20 63 6e 74 3d 3d 30 20 26 26 20 28 76 26  f( cnt==0 && (v&
1da10 30 78 66 66 66 66 66 66 29 3d 3d 76 20 29 7b 0a  0xffffff)==v ){.
1da20 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20            v++;. 
1da30 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1da40 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1da50 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
1da60 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
1da70 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29       if( cnt<5 )
1da80 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a   v &= 0xffffff;.
1da90 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1daa0 20 20 69 66 28 20 76 3d 3d 30 20 29 20 63 6f 6e    if( v==0 ) con
1dab0 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 78  tinue;.        x
1dac0 20 3d 20 69 6e 74 54 6f 4b 65 79 28 76 29 3b 0a   = intToKey(v);.
1dad0 20 20 20 20 20 20 20 20 72 78 20 3d 20 73 71 6c          rx = sql
1dae0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1daf0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1db00 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 78 2c 20  sor, 0, (u64)x, 
1db10 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  0, &res);.      
1db20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 7d    cnt++;.      }
1db30 77 68 69 6c 65 28 20 63 6e 74 3c 31 30 30 20 26  while( cnt<100 &
1db40 26 20 72 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  & rx==SQLITE_OK 
1db50 26 26 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 20  && res==0 );.   
1db60 20 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77 52     db->priorNewR
1db70 6f 77 69 64 20 3d 20 76 3b 0a 20 20 20 20 20 20  owid = v;.      
1db80 69 66 28 20 72 78 3d 3d 53 51 4c 49 54 45 5f 4f  if( rx==SQLITE_O
1db90 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K && res==0 ){. 
1dba0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
1dbb0 54 45 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20  TE_FULL;.       
1dbc0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1dbd0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1dbe0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  }.    }.    pC->
1dbf0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1dc00 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1dc10 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1dc20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1dc30 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1dc40 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
1dc50 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
1dc60 49 6e 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  Int);.  pOut->u.
1dc70 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
1dc80 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
1dc90 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
1dca0 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20   P5.**.** Write 
1dcb0 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
1dcc0 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
1dcd0 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
1dce0 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
1dcf0 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
1dd00 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
1dd10 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
1dd20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
1dd30 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
1dd40 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
1dd50 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
1dd60 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
1dd70 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
1dd80 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1dd90 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
1dda0 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 6e 20 69   must.** be an i
1ddb0 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66  nteger..**.** If
1ddc0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
1ddd0 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69  NGE flag of P5 i
1dde0 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
1ddf0 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
1de00 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
1de10 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
1de20 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  t).  If the OPFL
1de30 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61  AG_LASTROWID fla
1de40 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a  g of P5 is set,.
1de50 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73  ** then rowid is
1de60 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73   stored for subs
1de70 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79  equent return by
1de80 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
1de90 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
1dea0 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74  d() function (ot
1deb0 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e  herwise it is un
1dec0 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a  modified)..**.**
1ded0 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61   Parameter P4 ma
1dee0 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72  y point to a str
1def0 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
1df00 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f  he table-name, o
1df10 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c  r.** may be NULL
1df20 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e  . If it is not N
1df30 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70  ULL, then the up
1df40 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73  date-hook .** (s
1df50 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61  qlite3.xUpdateCa
1df60 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b  llback) is invok
1df70 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73  ed following a s
1df80 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74  uccessful insert
1df90 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47  ..**.** (WARNING
1dfa0 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20  /TODO: If P1 is 
1dfb0 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  a pseudo-cursor 
1dfc0 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69  and P2 is dynami
1dfd0 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  cally.** allocat
1dfe0 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68  ed, then ownersh
1dff0 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e  ip of P2 is tran
1e000 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70  sferred to the p
1e010 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20  seudo-cursor.** 
1e020 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20  and register P2 
1e030 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61  becomes ephemera
1e040 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f  l.  If the curso
1e050 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  r is changed, th
1e060 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65  e.** value of re
1e070 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74  gister P2 will t
1e080 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b  hen change.  Mak
1e090 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73  e sure this does
1e0a0 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e   not.** cause an
1e0b0 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a  y problems.).**.
1e0c0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1e0d0 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  ion only works o
1e0e0 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65  n tables.  The e
1e0f0 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
1e100 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64  ction.** for ind
1e110 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e  ices is OP_IdxIn
1e120 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sert..*/.case OP
1e130 5f 49 6e 73 65 72 74 3a 20 7b 0a 20 20 4d 65 6d  _Insert: {.  Mem
1e140 20 2a 70 44 61 74 61 3b 0a 20 20 4d 65 6d 20 2a   *pData;.  Mem *
1e150 70 4b 65 79 3b 0a 20 20 69 36 34 20 69 4b 65 79  pKey;.  i64 iKey
1e160 3b 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67  ;   /* The integ
1e170 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20  er ROWID or key 
1e180 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74  for the record t
1e190 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f  o be inserted */
1e1a0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 56 64 62 65  .  int i;.  Vdbe
1e1b0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
1e1c0 74 20 6e 5a 65 72 6f 3b 0a 20 20 69 6e 74 20 73  t nZero;.  int s
1e1d0 65 65 6b 52 65 73 75 6c 74 3b 0a 20 20 63 6f 6e  eekResult;.  con
1e1e0 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20  st char *zDb;.  
1e1f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c  const char *zTbl
1e200 3b 0a 20 20 69 6e 74 20 6f 70 3b 0a 0a 20 20 70  ;.  int op;..  p
1e210 44 61 74 61 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  Data = &p->aMem[
1e220 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4b 65 79  pOp->p2];.  pKey
1e230 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
1e240 3e 70 33 5d 3b 0a 20 20 69 20 3d 20 70 4f 70 2d  >p3];.  i = pOp-
1e250 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
1e260 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
1e270 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1e280 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73  >apCsr[i];.  ass
1e290 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1e2a0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1e2b0 73 6f 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73  sor!=0 || pC->ps
1e2c0 65 75 64 6f 54 61 62 6c 65 20 29 3b 0a 20 20 61  eudoTable );.  a
1e2d0 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61  ssert( pKey->fla
1e2e0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
1e2f0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1e300 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49 53  Table );.  REGIS
1e310 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
1e320 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 52 45 47  2, pData);.  REG
1e330 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1e340 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 0a 20 20 69  >p3, pKey);..  i
1e350 4b 65 79 20 3d 20 69 6e 74 54 6f 4b 65 79 28 70  Key = intToKey(p
1e360 4b 65 79 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28  Key->u.i);.  if(
1e370 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1e380 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
1e390 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20  Change++;.  if( 
1e3a0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1e3b0 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d  _LASTROWID ) db-
1e3c0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70 4b 65  >lastRowid = pKe
1e3d0 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 70 44  y->u.i;.  if( pD
1e3e0 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ata->flags & MEM
1e3f0 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61  _Null ){.    pDa
1e400 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70  ta->z = 0;.    p
1e410 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d  Data->n = 0;.  }
1e420 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
1e430 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
1e440 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
1e450 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  tr) );.  }.  if(
1e460 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1e470 20 29 7b 0a 20 20 20 20 69 66 28 20 21 70 43 2d   ){.    if( !pC-
1e480 3e 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c  >ephemPseudoTabl
1e490 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  e ){.      sqlit
1e4a0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 43 2d  e3DbFree(db, pC-
1e4b0 3e 70 44 61 74 61 29 3b 0a 20 20 20 20 7d 0a 20  >pData);.    }. 
1e4c0 20 20 20 70 43 2d 3e 69 4b 65 79 20 3d 20 69 4b     pC->iKey = iK
1e4d0 65 79 3b 0a 20 20 20 20 70 43 2d 3e 6e 44 61 74  ey;.    pC->nDat
1e4e0 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20  a = pData->n;.  
1e4f0 20 20 69 66 28 20 70 44 61 74 61 2d 3e 7a 3d 3d    if( pData->z==
1e500 70 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 7c  pData->zMalloc |
1e510 7c 20 70 43 2d 3e 65 70 68 65 6d 50 73 65 75 64  | pC->ephemPseud
1e520 6f 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  oTable ){.      
1e530 70 43 2d 3e 70 44 61 74 61 20 3d 20 70 44 61 74  pC->pData = pDat
1e540 61 2d 3e 7a 3b 0a 20 20 20 20 20 20 69 66 28 20  a->z;.      if( 
1e550 21 70 43 2d 3e 65 70 68 65 6d 50 73 65 75 64 6f  !pC->ephemPseudo
1e560 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 20  Table ){.       
1e570 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 3d   pData->flags &=
1e580 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 20   ~MEM_Dyn;.     
1e590 20 20 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20     pData->flags 
1e5a0 7c 3d 20 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20  |= MEM_Ephem;.  
1e5b0 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 4d 61        pData->zMa
1e5c0 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 20 20  lloc = 0;.      
1e5d0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
1e5e0 20 20 20 70 43 2d 3e 70 44 61 74 61 20 3d 20 73     pC->pData = s
1e5f0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 70 43  qlite3Malloc( pC
1e600 2d 3e 6e 44 61 74 61 2b 32 20 29 3b 0a 20 20 20  ->nData+2 );.   
1e610 20 20 20 69 66 28 20 21 70 43 2d 3e 70 44 61 74     if( !pC->pDat
1e620 61 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  a ) goto no_mem;
1e630 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 43  .      memcpy(pC
1e640 2d 3e 70 44 61 74 61 2c 20 70 44 61 74 61 2d 3e  ->pData, pData->
1e650 7a 2c 20 70 43 2d 3e 6e 44 61 74 61 29 3b 0a 20  z, pC->nData);. 
1e660 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70       pC->pData[p
1e670 43 2d 3e 6e 44 61 74 61 5d 20 3d 20 30 3b 0a 20  C->nData] = 0;. 
1e680 20 20 20 20 20 70 43 2d 3e 70 44 61 74 61 5b 70       pC->pData[p
1e690 43 2d 3e 6e 44 61 74 61 2b 31 5d 20 3d 20 30 3b  C->nData+1] = 0;
1e6a0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 6e  .    }.    pC->n
1e6b0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 7d 65  ullRow = 0;.  }e
1e6c0 6c 73 65 7b 0a 20 20 20 20 73 65 65 6b 52 65 73  lse{.    seekRes
1e6d0 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20  ult = ((pOp->p5 
1e6e0 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
1e6f0 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
1e700 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20  ekResult : 0);. 
1e710 20 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c     if( pData->fl
1e720 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
1e730 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20  {.      nZero = 
1e740 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a  pData->u.nZero;.
1e750 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1e760 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20   nZero = 0;.    
1e770 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  }.    sqlite3Btr
1e780 65 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64  eeSetCachedRowid
1e790 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29  (pC->pCursor, 0)
1e7a0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
1e7b0 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
1e7c0 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b  ->pCursor, 0, iK
1e7d0 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7f0 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d  pData->z, pData-
1e800 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20  >n, nZero,.     
1e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e820 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 35 20 26         pOp->p5 &
1e830 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 2c 20   OPFLAG_APPEND, 
1e840 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 20 20 29  seekResult.    )
1e850 3b 0a 20 20 7d 0a 20 20 0a 20 20 70 43 2d 3e 72  ;.  }.  .  pC->r
1e860 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1e870 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
1e880 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
1e890 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1e8a0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
1e8b0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
1e8c0 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
1e8d0 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
1e8e0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
1e8f0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
1e900 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ack && pOp->p4.z
1e910 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   ){.    zDb = db
1e920 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
1e930 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d  Name;.    zTbl =
1e940 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
1e950 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  op = ((pOp->p5 &
1e960 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
1e970 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ) ? SQLITE_UPDAT
1e980 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  E : SQLITE_INSER
1e990 54 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  T);.    assert( 
1e9a0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1e9b0 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
1e9c0 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
1e9d0 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20  teArg, op, zDb, 
1e9e0 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20  zTbl, iKey);.   
1e9f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
1ea00 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >=0 );.  }.  bre
1ea10 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1ea20 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a  : Delete P1 P2 *
1ea30 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65   P4 *.**.** Dele
1ea40 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  te the record at
1ea50 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75   which the P1 cu
1ea60 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c  rsor is currentl
1ea70 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a  y pointing..**.*
1ea80 2a 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c  * The cursor wil
1ea90 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69  l be left pointi
1eaa0 6e 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65  ng at either the
1eab0 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65   next or the pre
1eac0 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20  vious.** record 
1ead0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  in the table. If
1eae0 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   it is left poin
1eaf0 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74  ting at the next
1eb00 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a   record, then.**
1eb10 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69   the next Next i
1eb20 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20  nstruction will 
1eb30 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e  be a no-op.  Hen
1eb40 63 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64  ce it is OK to d
1eb50 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72  elete.** a recor
1eb60 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
1eb70 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a   Next loop..**.*
1eb80 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
1eb90 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
1eba0 50 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P2 is set, then 
1ebb0 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63  the row change c
1ebc0 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65  ount is.** incre
1ebd0 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
1ebe0 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31  e not)..**.** P1
1ebf0 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65   must not be pse
1ec00 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68  udo-table.  It h
1ec10 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20  as to be a real 
1ec20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75  table with.** mu
1ec30 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a  ltiple rows..**.
1ec40 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
1ec50 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73  NULL, then it is
1ec60 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
1ec70 20 74 61 62 6c 65 20 74 68 61 74 20 50 31 20 69   table that P1 i
1ec80 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f  s.** pointing to
1ec90 2e 20 20 54 68 65 20 75 70 64 61 74 65 20 68 6f  .  The update ho
1eca0 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b  ok will be invok
1ecb0 65 64 2c 20 69 66 20 69 74 20 65 78 69 73 74 73  ed, if it exists
1ecc0 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  ..** If P4 is no
1ecd0 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  t NULL then the 
1ece0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68  P1 cursor must h
1ecf0 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f  ave been positio
1ed00 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f  ned.** using OP_
1ed10 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74  NotFound prior t
1ed20 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20  o invoking this 
1ed30 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
1ed40 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69  OP_Delete: {.  i
1ed50 6e 74 20 69 3b 0a 20 20 69 36 34 20 69 4b 65 79  nt i;.  i64 iKey
1ed60 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1ed70 70 43 3b 0a 0a 20 20 69 20 3d 20 70 4f 70 2d 3e  pC;..  i = pOp->
1ed80 70 31 3b 0a 20 20 69 4b 65 79 20 3d 20 30 3b 0a  p1;.  iKey = 0;.
1ed90 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
1eda0 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
1edb0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1edc0 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  r[i];.  assert( 
1edd0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1ede0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1edf0 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61  0 );  /* Only va
1ee00 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62  lid for real tab
1ee10 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61  les, no pseudota
1ee20 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  bles */..  /* If
1ee30 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1ee40 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
1ee50 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74 68  , set iKey to th
1ee60 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a 20  e rowid of the. 
1ee70 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64 65   ** row being de
1ee80 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66  leted..  */.  if
1ee90 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  ( db->xUpdateCal
1eea0 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34  lback && pOp->p4
1eeb0 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  .z ){.    assert
1eec0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1eed0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1eee0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 3b  >rowidIsValid );
1eef0 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20 73    /* lastRowid s
1ef00 65 74 20 62 79 20 70 72 65 76 69 6f 75 73 20 4f  et by previous O
1ef10 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20  P_NotFound */.  
1ef20 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73    iKey = pC->las
1ef30 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 72  tRowid;.  }..  r
1ef40 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
1ef50 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
1ef60 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1ef70 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1ef80 72 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 42 74  ror;.  sqlite3Bt
1ef90 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77 69  reeSetCachedRowi
1efa0 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
1efb0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
1efc0 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d  3BtreeDelete(pC-
1efd0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d  >pCursor);.  pC-
1efe0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1eff0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
1f000 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
1f010 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
1f020 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
1f030 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
1f040 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
1f050 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a  ack && pOp->p4.z
1f060 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   ){.    const ch
1f070 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44  ar *zDb = db->aD
1f080 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
1f090 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  ;.    const char
1f0a0 20 2a 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34   *zTbl = pOp->p4
1f0b0 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64  .z;.    db->xUpd
1f0c0 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
1f0d0 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49  pUpdateArg, SQLI
1f0e0 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20  TE_DELETE, zDb, 
1f0f0 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20  zTbl, iKey);.   
1f100 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
1f110 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  >=0 );.  }.  if(
1f120 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
1f130 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
1f140 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61  Change++;.  brea
1f150 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1f160 20 52 65 73 65 74 43 6f 75 6e 74 20 50 31 20 2a   ResetCount P1 *
1f170 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
1f180 63 6f 64 65 20 72 65 73 65 74 73 20 74 68 65 20  code resets the 
1f190 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61  VMs internal cha
1f1a0 6e 67 65 20 63 6f 75 6e 74 65 72 20 74 6f 20 30  nge counter to 0
1f1b0 2e 20 49 66 20 50 31 20 69 73 20 74 72 75 65 2c  . If P1 is true,
1f1c0 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 76 61 6c  .** then the val
1f1d0 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65  ue of the change
1f1e0 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69   counter is copi
1f1f0 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
1f200 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61  se handle.** cha
1f210 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74  nge counter (ret
1f220 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75  urned by subsequ
1f230 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  ent calls to sql
1f240 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 0a  ite3_changes()).
1f250 2a 2a 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ** before it is 
1f260 72 65 73 65 74 2e 20 54 68 69 73 20 69 73 20 75  reset. This is u
1f270 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
1f280 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
1f290 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
1f2a0 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  {.  if( pOp->p1 
1f2b0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
1f2c0 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
1f2d0 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
1f2e0 7d 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  }.  p->nChange =
1f2f0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
1f300 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61  /* Opcode: RowDa
1f310 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ta P1 P2 * * *.*
1f320 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
1f330 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
1f340 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74  complete row dat
1f350 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  a for cursor P1.
1f360 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
1f370 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
1f380 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
1f390 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69   It is just copi
1f3a0 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72  ed onto the P2 r
1f3b0 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
1f3c0 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
1f3d0 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
1f3e0 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
1f3f0 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
1f400 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
1f410 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
1f420 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
1f430 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
1f440 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
1f450 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f  o-table..*/./* O
1f460 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31  pcode: RowKey P1
1f470 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1f480 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
1f490 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
1f4a0 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20  ete row key for 
1f4b0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
1f4c0 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
1f4d0 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
1f4e0 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b  data.  .** The k
1f4f0 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74  ey is copied ont
1f500 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  o the P3 registe
1f510 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
1f520 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
1f530 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1f540 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
1f550 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
1f560 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
1f570 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
1f580 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
1f590 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
1f5a0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
1f5b0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  e..*/.case OP_Ro
1f5c0 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f  wKey:.case OP_Ro
1f5d0 77 44 61 74 61 3a 20 7b 0a 20 20 69 6e 74 20 69  wData: {.  int i
1f5e0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1f5f0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
1f600 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a  pCrsr;.  u32 n;.
1f610 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 69 20    i64 n64;..  i 
1f620 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75  = pOp->p1;.  pOu
1f630 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
1f640 2d 3e 70 32 5d 3b 0a 0a 20 20 2f 2a 20 4e 6f 74  ->p2];..  /* Not
1f650 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e  e that RowKey an
1f660 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65  d RowData are re
1f670 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65  ally exactly the
1f680 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f   same instructio
1f690 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 69  n */.  assert( i
1f6a0 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
1f6b0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1f6c0 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73  >apCsr[i];.  ass
1f6d0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
1f6e0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
1f6f0 3d 4f 50 5f 52 6f 77 4b 65 79 20 29 3b 0a 20 20  =OP_RowKey );.  
1f700 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 49 6e  assert( pC->isIn
1f710 64 65 78 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  dex || pOp->opco
1f720 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de==OP_RowData )
1f730 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1f740 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1f750 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
1f760 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1f770 73 65 75 64 6f 54 61 62 6c 65 3d 3d 30 20 29 3b  seudoTable==0 );
1f780 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1f790 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70  Cursor!=0 );.  p
1f7a0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
1f7b0 6f 72 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  or;.  rc = sqlit
1f7c0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
1f7d0 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
1f7e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1f7f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
1f800 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
1f810 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43  .    assert( !pC
1f820 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
1f830 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
1f840 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34  Size(pCrsr, &n64
1f850 29 3b 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64  );.    if( n64>d
1f860 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
1f870 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
1f880 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f  {.      goto too
1f890 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _big;.    }.    
1f8a0 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20  n = (u32)n64;.  
1f8b0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
1f8c0 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
1f8d0 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20  pCrsr, &n);.    
1f8e0 69 66 28 20 6e 3e 64 62 2d 3e 61 4c 69 6d 69 74  if( n>db->aLimit
1f8f0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
1f900 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
1f910 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
1f920 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c   }.  }.  if( sql
1f930 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
1f940 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20  pOut, n, 0) ){. 
1f950 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
1f960 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
1f970 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
1f980 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
1f990 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
1f9a0 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72 63  sIndex ){.    rc
1f9b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
1f9c0 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ey(pCrsr, 0, n, 
1f9d0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73  pOut->z);.  }els
1f9e0 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e{.    rc = sqli
1f9f0 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43 72  te3BtreeData(pCr
1fa00 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
1fa10 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  z);.  }.  pOut->
1fa20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
1fa30 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
1fa40 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
1fa50 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a  cast to text */.
1fa60 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
1fa70 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
1fa80 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1fa90 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20  de: Rowid P1 P2 
1faa0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  * * *.**.** Stor
1fab0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
1fac0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
1fad0 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
1fae0 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
1faf0 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
1fb00 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
1fb10 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
1fb20 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
1fb30 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
1fb40 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
1fb50 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
1fb60 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
1fb70 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
1fb80 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
1fb90 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
1fba0 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
1fbb0 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
1fbc0 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
1fbd0 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
1fbe0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
1fbf0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1fc00 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1fc10 69 6e 74 20 69 3b 0a 20 20 56 64 62 65 43 75 72  int i;.  VdbeCur
1fc20 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76  sor *pC;.  i64 v
1fc30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
1fc40 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
1fc50 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
1fc60 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 69 20 3d  *pModule;..  i =
1fc70 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65   pOp->p1;.  asse
1fc80 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d  rt( i>=0 && i<p-
1fc90 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1fca0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a   = p->apCsr[i];.
1fcb0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1fcc0 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  );.  if( pC->nul
1fcd0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 2f 2a 20 44  lRow ){.    /* D
1fce0 6f 20 6e 6f 74 68 69 6e 67 20 73 6f 20 74 68 61  o nothing so tha
1fcf0 74 20 72 65 67 5b 50 32 5d 20 72 65 6d 61 69 6e  t reg[P2] remain
1fd00 73 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72  s NULL */.    br
1fd10 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
1fd20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1fd30 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
1fd40 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
1fd50 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
1fd60 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a  >pseudoTable ){.
1fd70 20 20 20 20 76 20 3d 20 6b 65 79 54 6f 49 6e 74      v = keyToInt
1fd80 28 70 43 2d 3e 69 4b 65 79 29 3b 0a 23 69 66 6e  (pC->iKey);.#ifn
1fd90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1fda0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d  VIRTUALTABLE.  }
1fdb0 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74  else if( pC->pVt
1fdc0 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20  abCursor ){.    
1fdd0 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61  pVtab = pC->pVta
1fde0 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
1fdf0 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56      pModule = pV
1fe00 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
1fe10 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
1fe20 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  e->xRowid );.   
1fe30 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
1fe40 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f  tyOff(db) ) goto
1fe50 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
1fe60 73 75 73 65 3b 0a 20 20 20 20 72 63 20 3d 20 70  suse;.    rc = p
1fe70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70  Module->xRowid(p
1fe80 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20  C->pVtabCursor, 
1fe90 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  &v);.    sqlite3
1fea0 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
1feb0 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a  rrMsg);.    p->z
1fec0 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
1fed0 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74  zErrMsg;.    pVt
1fee0 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
1fef0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
1ff00 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67  SafetyOn(db) ) g
1ff10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1ff20 5f 6d 69 73 75 73 65 3b 0a 23 65 6e 64 69 66 20  _misuse;.#endif 
1ff30 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
1ff40 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20  IRTUALTABLE */. 
1ff50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
1ff60 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
1ff70 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
1ff80 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1ff90 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1ffa0 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  or;.    if( pC->
1ffb0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a  rowidIsValid ){.
1ffc0 20 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61        v = pC->la
1ffd0 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c  stRowid;.    }el
1ffe0 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
1fff0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
20000 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
20010 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
20020 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
20030 20 20 20 20 20 20 76 20 3d 20 6b 65 79 54 6f 49        v = keyToI
20040 6e 74 28 76 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  nt(v);.    }.  }
20050 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
20060 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
20070 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
20080 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
20090 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
200a0 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
200b0 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
200c0 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
200d0 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
200e0 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
200f0 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
20100 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
20110 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
20120 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
20130 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
20140 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
20150 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 56  : {.  int i;.  V
20160 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
20170 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20    i = pOp->p1;. 
20180 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
20190 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
201a0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
201b0 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  [i];.  assert( p
201c0 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75  C!=0 );.  pC->nu
201d0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d  llRow = 1;.  pC-
201e0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
201f0 30 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75  0;.  if( pC->pCu
20200 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rsor ){.    sqli
20210 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72  te3BtreeClearCur
20220 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  sor(pC->pCursor)
20230 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
20240 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73  ../* Opcode: Las
20250 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
20260 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
20270 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
20280 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20   Column or Next 
20290 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
202a0 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
202b0 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e  r to the last en
202c0 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
202d0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
202e0 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
202f0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
20300 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
20310 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
20320 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
20330 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
20340 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
20350 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
20360 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
20370 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
20380 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
20390 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a  */.case OP_Last:
203a0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
203b0 70 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 0a 20 20  p */.  int i;.  
203c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
203d0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
203e0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
203f0 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
20400 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
20410 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
20420 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
20430 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
20440 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
20450 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
20460 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
20470 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
20480 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73  e3BtreeLast(pCrs
20490 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e  r, &res);.  pC->
204a0 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
204b0 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
204c0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
204d0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
204e0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
204f0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
20500 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 20  TALE;.  if( res 
20510 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a  && pOp->p2>0 ){.
20520 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
20530 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
20540 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
20550 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a  : Sort P1 P2 * *
20560 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
20570 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c  code does exactl
20580 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67  y the same thing
20590 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78   as OP_Rewind ex
205a0 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20  cept that.** it 
205b0 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e  increments an un
205c0 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61  documented globa
205d0 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20  l variable used 
205e0 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a  for testing..**.
205f0 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63  ** Sorting is ac
20600 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72  complished by wr
20610 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e  iting records in
20620 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64  to a sorting ind
20630 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69  ex,.** then rewi
20640 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78  nding that index
20650 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20   and playing it 
20660 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e  back from beginn
20670 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20  ing to.** end.  
20680 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f  We use the OP_So
20690 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61  rt opcode instea
206a0 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74  d of OP_Rewind t
206b0 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69  o do the.** rewi
206c0 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68  nding so that th
206d0 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
206e0 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d  e will be increm
206f0 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67  ented and.** reg
20700 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61  ression tests ca
20710 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  n determine whet
20720 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f  her or not the o
20730 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63  ptimizer is.** c
20740 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a  orrectly optimiz
20750 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a  ing out sorts..*
20760 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20  /.case OP_Sort: 
20770 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
20780 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
20790 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
207a0 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20  _sort_count++;. 
207b0 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
207c0 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a  count--;.#endif.
207d0 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51    p->aCounter[SQ
207e0 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
207f0 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20  SORT-1]++;.  /* 
20800 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
20810 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d  o OP_Rewind */.}
20820 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69  ./* Opcode: Rewi
20830 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nd P1 P2 * * *.*
20840 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
20850 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
20860 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74  r Column or Next
20870 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
20880 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
20890 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
208a0 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
208b0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
208c0 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
208d0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
208e0 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
208f0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
20900 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
20910 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
20920 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
20930 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
20940 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
20950 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
20960 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
20970 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
20980 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
20990 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 69   jump */.  int i
209a0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
209b0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
209c0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
209d0 3b 0a 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31  ;..  i = pOp->p1
209e0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ;.  assert( i>=0
209f0 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
20a00 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
20a10 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
20a20 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
20a30 20 28 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43   (pCrsr = pC->pC
20a40 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20  ursor)!=0 ){.   
20a50 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
20a60 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
20a70 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74  res);.    pC->at
20a80 46 69 72 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f  First = res==0 ?
20a90 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  1:0;.    pC->def
20aa0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
20ab0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
20ac0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
20ad0 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  LE;.    pC->rowi
20ae0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
20af0 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 73 20 3d  }else{.    res =
20b00 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75   1;.  }.  pC->nu
20b10 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
20b20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20b30 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  p2>0 && pOp->p2<
20b40 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20  p->nOp );.  if( 
20b50 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
20b60 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
20b70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
20b80 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
20b90 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41  P2 * * *.**.** A
20ba0 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
20bb0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
20bc0 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
20bd0 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
20be0 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
20bf0 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
20c00 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
20c10 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
20c20 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
20c30 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
20c40 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
20c50 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
20c60 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
20c70 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
20c80 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
20c90 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
20ca0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
20cb0 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
20cc0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
20cd0 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  -table..**.** Se
20ce0 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a  e also: Prev.*/.
20cf0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20  /* Opcode: Prev 
20d00 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
20d10 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
20d20 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
20d30 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
20d40 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
20d50 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
20d60 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
20d70 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
20d80 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
20d90 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
20da0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
20db0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
20dc0 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
20dd0 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
20de0 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
20df0 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
20e00 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
20e10 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
20e20 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
20e30 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
20e40 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
20e50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76  .*/.case OP_Prev
20e60 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
20e70 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
20e80 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  xt: {        /* 
20e90 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
20ea0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
20eb0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
20ec0 6e 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b  nt res;..  CHECK
20ed0 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a  _FOR_INTERRUPT;.
20ee0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20ef0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
20f00 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
20f10 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
20f20 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43  p->p1];.  if( pC
20f30 3d 3d 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  ==0 ){.    break
20f40 3b 20 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74  ;  /* See ticket
20f50 20 23 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20   #2273 */.  }.  
20f60 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
20f70 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
20f80 43 72 73 72 20 29 3b 0a 20 20 72 65 73 20 3d 20  Crsr );.  res = 
20f90 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  1;.  assert( pC-
20fa0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
20fb0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70  =0 );.  rc = pOp
20fc0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78  ->opcode==OP_Nex
20fd0 74 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65  t ? sqlite3Btree
20fe0 4e 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73  Next(pCrsr, &res
20ff0 29 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) :.            
21000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21010 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72    sqlite3BtreePr
21020 65 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72  evious(pCrsr, &r
21030 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  es);.  pC->nullR
21040 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
21050 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
21060 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
21070 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
21080 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
21090 2d 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  - 1;.    if( pOp
210a0 2d 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74  ->p5 ) p->aCount
210b0 65 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b  er[pOp->p5-1]++;
210c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
210d0 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
210e0 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
210f0 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d  #endif.  }.  pC-
21100 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
21110 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
21120 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73  * Opcode: IdxIns
21130 65 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50  ert P1 P2 P3 * P
21140 35 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  5.**.** Register
21150 20 50 32 20 68 6f 6c 64 73 20 61 20 53 51 4c 20   P2 holds a SQL 
21160 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
21170 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
21180 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
21190 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
211a0 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
211b0 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e  y.** into the in
211c0 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f  dex P1.  Data fo
211d0 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
211e0 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  il..**.** P3 is 
211f0 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76  a flag that prov
21200 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74  ides a hint to t
21210 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  he b-tree layer 
21220 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73  that this.** ins
21230 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  ert is likely to
21240 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a   be an append..*
21250 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
21260 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
21270 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54   for indices.  T
21280 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
21290 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
212a0 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e   tables is OP_In
212b0 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sert..*/.case OP
212c0 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20  _IdxInsert: {   
212d0 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
212e0 20 69 6e 74 20 69 3b 0a 20 20 56 64 62 65 43 75   int i;.  VdbeCu
212f0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
21300 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
21310 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74  nt nKey;.  const
21320 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20   char *zKey;..  
21330 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  i = pOp->p1;.  a
21340 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
21350 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
21360 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
21370 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73  r[i]!=0 );.  ass
21380 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73  ert( pIn2->flags
21390 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
213a0 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 28 70   if( (pCrsr = (p
213b0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29  C = p->apCsr[i])
213c0 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b  ->pCursor)!=0 ){
213d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
213e0 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
213f0 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c     rc = ExpandBl
21400 6f 62 28 70 49 6e 32 29 3b 0a 20 20 20 20 69 66  ob(pIn2);.    if
21410 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21420 29 7b 0a 20 20 20 20 20 20 6e 4b 65 79 20 3d 20  ){.      nKey = 
21430 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a  pIn2->n;.      z
21440 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20  Key = pIn2->z;. 
21450 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
21460 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 72  3BtreeInsert(pCr
21470 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20  sr, zKey, nKey, 
21480 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70  "", 0, 0, pOp->p
21490 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28 28  3, .          ((
214a0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
214b0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
214c0 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
214d0 20 3a 20 30 29 0a 20 20 20 20 20 20 29 3b 0a 20   : 0).      );. 
214e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
214f0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
21500 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  =0 );.      pC->
21510 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
21520 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d  CHE_STALE;.    }
21530 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
21540 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44  ./* Opcode: IdxD
21550 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a  elete P1 P2 P3 *
21560 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e   *.**.** The con
21570 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73  tent of P3 regis
21580 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61 74  ters starting at
21590 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f 72   register P2 for
215a0 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64  m.** an unpacked
215b0 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73   index key. This
215c0 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20   opcode removes 
215d0 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20  that entry from 
215e0 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70  the .** index op
215f0 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50  ened by cursor P
21600 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  1..*/.case OP_Id
21610 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 6e 74  xDelete: {.  int
21620 20 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72   i;.  VdbeCursor
21630 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
21640 20 2a 70 43 72 73 72 3b 0a 0a 20 20 69 20 3d 20   *pCrsr;..  i = 
21650 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
21660 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
21670 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21680 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
21690 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b  Op->p3<=p->nMem+
216a0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  1 );.  assert( i
216b0 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
216c0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
216d0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20   p->apCsr[i]!=0 
216e0 29 3b 0a 20 20 69 66 28 20 28 70 43 72 73 72 20  );.  if( (pCrsr 
216f0 3d 20 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  = (pC = p->apCsr
21700 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d  [i])->pCursor)!=
21710 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 65 73  0 ){.    int res
21720 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65  ;.    UnpackedRe
21730 63 6f 72 64 20 72 3b 0a 20 20 20 20 72 2e 70 4b  cord r;.    r.pK
21740 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
21750 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
21760 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
21770 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20  p3;.    r.flags 
21780 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20  = 0;.    r.aMem 
21790 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
217a0 70 32 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  p2];.    rc = sq
217b0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
217c0 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
217d0 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
217e0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
217f0 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
21800 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
21810 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
21820 65 28 70 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a  e(pCrsr);.    }.
21830 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
21840 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
21850 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  0 );.    pC->cac
21860 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
21870 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 62 72  _STALE;.  }.  br
21880 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21890 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50  e: IdxRowid P1 P
218a0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
218b0 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
218c0 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20  r P2 an integer 
218d0 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73  which is the las
218e0 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72  t entry in the r
218f0 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20  ecord at.** the 
21900 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  end of the index
21910 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20   key pointed to 
21920 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54  by cursor P1.  T
21930 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75  his integer shou
21940 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77  ld be.** the row
21950 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
21960 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74  entry to which t
21970 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20  his index entry 
21980 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  points..**.** Se
21990 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d  e also: Rowid, M
219a0 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61  akeRecord..*/.ca
219b0 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20  se OP_IdxRowid: 
219c0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  {              /
219d0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
219e0 65 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 0a 20 20  e */.  int i;.  
219f0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
21a00 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
21a10 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a  C;.  i64 rowid;.
21a20 0a 20 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .  i = pOp->p1;.
21a30 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
21a40 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
21a50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
21a60 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20  pCsr[i]!=0 );.  
21a70 69 66 28 20 28 70 43 72 73 72 20 3d 20 28 70 43  if( (pCrsr = (pC
21a80 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d   = p->apCsr[i])-
21a90 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a  >pCursor)!=0 ){.
21aa0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21ab0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
21ac0 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
21ad0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
21ae0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
21af0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
21b00 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
21b10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
21b20 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
21b30 20 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c     if( !pC->null
21b40 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 72 63 20  Row ){.      rc 
21b50 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
21b60 52 6f 77 69 64 28 70 43 72 73 72 2c 20 26 72 6f  Rowid(pCrsr, &ro
21b70 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28 20  wid);.      if( 
21b80 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
21b90 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
21ba0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
21bb0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
21bc0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
21bd0 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
21be0 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d       pOut->u.i =
21bf0 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
21c00 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
21c10 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50   Opcode: IdxGE P
21c20 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
21c30 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
21c40 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
21c50 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
21c60 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
21c70 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
21c80 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
21c90 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
21ca0 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
21cb0 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
21cc0 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
21cd0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
21ce0 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
21cf0 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
21d00 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
21d10 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
21d20 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
21d30 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
21d40 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
21d50 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
21d60 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
21d70 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
21d80 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
21d90 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
21da0 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
21db0 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
21dc0 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
21dd0 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72  psilon .** prior
21de0 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
21df0 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20 74  on.  This make t
21e00 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
21e10 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70 74  ike IdxGT except
21e20 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65 20  .** that if the 
21e30 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74 65  key from registe
21e40 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69 78  r P3 is a prefix
21e50 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20 74   of the key in t
21e60 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  he cursor,.** th
21e70 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
21e80 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f 75  e whereas it wou
21e90 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68 20  ld be true with 
21ea0 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  IdxGT..*/./* Opc
21eb0 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32  ode: IdxLT P1 P2
21ec0 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54   P3 * P5.**.** T
21ed0 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
21ee0 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
21ef0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
21f00 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
21f10 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
21f20 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f  s the ROWID.  Co
21f30 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
21f40 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65  alue against the
21f50 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20   index .** that 
21f60 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
21f70 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
21f80 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20  oring the ROWID 
21f90 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
21fa0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
21fb0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
21fc0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
21fd0 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d  y value then jum
21fe0 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65  p to P2..** Othe
21ff0 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
22000 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
22010 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
22020 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a  * If P5 is non-z
22030 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79  ero then the key
22040 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61   value is increa
22050 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f  sed by an epsilo
22060 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20 74  n prior .** to t
22070 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
22080 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20 6f  This makes the o
22090 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20  pcode work like 
220a0 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f  IdxLE..*/.case O
220b0 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20  P_IdxLT:        
220c0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
220d0 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a  /.case OP_IdxGE:
220e0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
220f0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
22100 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  i;.  VdbeCursor 
22110 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
22120 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
22130 20 72 3b 0a 0a 20 20 69 20 3d 20 70 4f 70 2d 3e   r;..  i = pOp->
22140 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e  p1;.  assert( i>
22150 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73  =0 && i<p->nCurs
22160 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
22170 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29  p->apCsr[i]!=0 )
22180 3b 0a 20 20 69 66 28 20 28 70 43 20 3d 20 70 2d  ;.  if( (pC = p-
22190 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72  >apCsr[i])->pCur
221a0 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  sor!=0 ){.    as
221b0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
221c0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
221d0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
221e0 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
221f0 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==1 );.    asser
22200 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
22210 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20  P4_INT32 );.    
22220 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
22230 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
22240 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
22250 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66  Op->p4.i;.    if
22260 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
22270 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50     r.flags = UNP
22280 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20  ACKED_INCRKEY | 
22290 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f  UNPACKED_IGNORE_
222a0 52 4f 57 49 44 3b 0a 20 20 20 20 7d 65 6c 73 65  ROWID;.    }else
222b0 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20  {.      r.flags 
222c0 3d 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52  = UNPACKED_IGNOR
222d0 45 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 0a 20  E_ROWID;.    }. 
222e0 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 70 2d 3e     r.aMem = &p->
222f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
22300 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
22310 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65  dbeIdxKeyCompare
22320 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a  (pC, &r, &res);.
22330 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
22340 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 7b  ode==OP_IdxLT ){
22350 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d 72 65  .      res = -re
22360 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  s;.    }else{.  
22370 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
22380 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
22390 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73 2b 2b  E );.      res++
223a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
223b0 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20 20 70  res>0 ){.      p
223c0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 20  c = pOp->p2 - 1 
223d0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
223e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
223f0 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32  e: Destroy P1 P2
22400 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65   P3 * *.**.** De
22410 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64  lete an entire d
22420 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
22430 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
22440 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61  t page in the da
22450 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69  tabase.** file i
22460 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a  s given by P1..*
22470 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62  *.** The table b
22480 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69  eing destroyed i
22490 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
224a0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
224b0 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d  3==0.  If.** P3=
224c0 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
224d0 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
224e0 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
224f0 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
22500 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
22510 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
22520 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
22530 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
22540 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55  BLE..**.** If AU
22550 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62  TOVACUUM is enab
22560 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70  led then it is p
22570 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
22580 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a  ther root page.*
22590 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64  * might be moved
225a0 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20   into the newly 
225b0 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67  deleted root pag
225c0 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  e in order to ke
225d0 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70  ep all.** root p
225e0 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20  ages contiguous 
225f0 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
22600 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
22610 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a  .  The former.**
22620 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
22630 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76  ot page that mov
22640 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62  ed - its value b
22650 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f  efore the move o
22660 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20  ccurred -.** is 
22670 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
22680 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61  er P2.  If no pa
22690 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20  ge .** movement 
226a0 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65  was required (be
226b0 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20  cause the table 
226c0 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61  being dropped wa
226d0 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68  s already .** th
226e0 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68  e last one in th
226f0 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e  e database) then
22700 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65   a zero is store
22710 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
22720 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  ..** If AUTOVACU
22730 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74  UM is disabled t
22740 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74  hen a zero is st
22750 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
22760 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
22770 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61  lso: Clear.*/.ca
22780 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b  se OP_Destroy: {
22790 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
227a0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
227b0 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69   iMoved;.  int i
227c0 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64  Cnt;.  Vdbe *pVd
227d0 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 23  be;.  int iDb;.#
227e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
227f0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
22800 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f    iCnt = 0;.  fo
22810 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62  r(pVdbe=db->pVdb
22820 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65 20  e; pVdbe; pVdbe 
22830 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b  = pVdbe->pNext){
22840 0a 20 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e  .    if( pVdbe->
22850 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49  magic==VDBE_MAGI
22860 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e  C_RUN && pVdbe->
22870 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26  inVtabMethod<2 &
22880 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 29  & pVdbe->pc>=0 )
22890 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a  {.      iCnt++;.
228a0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a      }.  }.#else.
228b0 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61 63 74    iCnt = db->act
228c0 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65 6e 64  iveVdbeCnt;.#end
228d0 69 66 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20  if.  if( iCnt>1 
228e0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
228f0 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70  TE_LOCKED;.    p
22900 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
22910 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73  OE_Abort;.  }els
22920 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70  e{.    iDb = pOp
22930 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74  ->p3;.    assert
22940 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20  ( iCnt==1 );.   
22950 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
22960 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62  eeMask & (1<<iDb
22970 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  ))!=0 );.    rc 
22980 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72  = sqlite3BtreeDr
22990 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  opTable(db->aDb[
229a0 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  iDb].pBt, pOp->p
229b0 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20  1, &iMoved);.   
229c0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
229d0 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
229e0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
229f0 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20  iMoved;.#ifndef 
22a00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
22a10 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72  VACUUM.    if( r
22a20 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
22a30 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
22a40 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
22a50 67 65 4d 6f 76 65 64 28 26 64 62 2d 3e 61 44 62  geMoved(&db->aDb
22a60 5b 69 44 62 5d 2c 20 69 4d 6f 76 65 64 2c 20 70  [iDb], iMoved, p
22a70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 23  Op->p1);.    }.#
22a80 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
22a90 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22aa0 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a   Clear P1 P2 P3.
22ab0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
22ac0 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
22ad0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
22ae0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
22af0 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74  oot page.** in t
22b00 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
22b10 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
22b20 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65    But, unlike De
22b30 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a  stroy, do not.**
22b40 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c   remove the tabl
22b50 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20  e or index from 
22b60 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
22b70 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  e..**.** The tab
22b80 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69  le being clear i
22b90 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
22ba0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
22bb0 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d  2==0.  If.** P2=
22bc0 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
22bd0 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
22be0 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
22bf0 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
22c00 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
22c10 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
22c20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
22c30 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
22c40 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  BLE..**.** If th
22c50 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P3 value is no
22c60 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
22c70 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20   table referred 
22c80 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a  to must be an.**
22c90 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61   intkey table (a
22ca0 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74  n SQL table, not
22cb0 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74   an index). In t
22cc0 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77  his case the row
22cd0 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e   change .** coun
22ce0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
22cf0 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
22d00 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
22d10 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
22d20 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  d. .** If P3 is 
22d30 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
22d40 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  o, then the valu
22d50 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  e stored in regi
22d60 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c  ster P3 is.** al
22d70 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  so incremented b
22d80 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
22d90 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
22da0 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
22db0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
22dc0 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65   Destroy.*/.case
22dd0 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69   OP_Clear: {.  i
22de0 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20  nt nChange;. .  
22df0 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61  nChange = 0;.  a
22e00 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
22e10 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
22e20 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  p2))!=0 );.  rc 
22e30 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
22e40 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
22e50 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
22e60 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
22e70 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
22e80 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
22e90 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
22ea0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
22eb0 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
22ec0 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
22ed0 20 20 20 20 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d      p->aMem[pOp-
22ee0 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61  >p3].u.i += nCha
22ef0 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  nge;.    }.  }. 
22f00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22f10 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c  code: CreateTabl
22f20 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
22f30 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
22f40 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  ew table in the 
22f50 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
22f60 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
22f70 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
22f80 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
22f90 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
22fa0 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
22fb0 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
22fc0 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
22fd0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
22fe0 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
22ff0 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
23000 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66  2.**.** The diff
23010 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61  erence between a
23020 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e   table and an in
23030 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20  dex is this:  A 
23040 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61  table must.** ha
23050 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65  ve a 4-byte inte
23060 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20  ger key and can 
23070 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64  have arbitrary d
23080 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a  ata.  An index.*
23090 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61  * has an arbitra
230a0 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61  ry key but no da
230b0 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ta..**.** See al
230c0 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a  so: CreateIndex.
230d0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  */./* Opcode: Cr
230e0 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20  eateIndex P1 P2 
230f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  * * *.**.** Allo
23100 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78  cate a new index
23110 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
23120 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
23130 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
23140 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
23150 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
23160 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
23170 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
23180 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
23190 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
231a0 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
231b0 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
231c0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
231d0 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
231e0 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54  on on OP_CreateT
231f0 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  able for additio
23200 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
23210 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61  .*/.case OP_Crea
23220 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20  teIndex:        
23230 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
23240 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f  elease */.case O
23250 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b  P_CreateTable: {
23260 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
23270 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
23280 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e    int pgno;.  in
23290 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70  t flags;.  Db *p
232a0 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b  Db;..  pgno = 0;
232b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
232c0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
232d0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
232e0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
232f0 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
23300 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20  1))!=0 );.  pDb 
23310 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
23320 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
23330 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
23340 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
23350 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20  =OP_CreateTable 
23360 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20  ){.    /* flags 
23370 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20  = BTREE_INTKEY; 
23380 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  */.    flags = B
23390 54 52 45 45 5f 4c 45 41 46 44 41 54 41 7c 42 54  TREE_LEAFDATA|BT
233a0 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65  REE_INTKEY;.  }e
233b0 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d  lse{.    flags =
233c0 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 3b   BTREE_ZERODATA;
233d0 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
233e0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
233f0 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70  ble(pDb->pBt, &p
23400 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70  gno, flags);.  p
23410 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b  Out->u.i = pgno;
23420 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
23430 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
23440 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
23450 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63   Opcode: ParseSc
23460 68 65 6d 61 20 50 31 20 50 32 20 2a 20 50 34 20  hema P1 P2 * P4 
23470 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64  *.**.** Read and
23480 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69   parse all entri
23490 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  es from the SQLI
234a0 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
234b0 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a  of database P1.*
234c0 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65  * that match the
234d0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34   WHERE clause P4
234e0 2e 20 20 50 32 20 69 73 20 74 68 65 20 22 66 6f  .  P2 is the "fo
234f0 72 63 65 22 20 66 6c 61 67 2e 20 20 20 41 6c 77  rce" flag.   Alw
23500 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20 70 61  ays do.** the pa
23510 72 73 69 6e 67 20 69 66 20 50 32 20 69 73 20 74  rsing if P2 is t
23520 72 75 65 2e 20 20 49 66 20 50 32 20 69 73 20 66  rue.  If P2 is f
23530 61 6c 73 65 2c 20 74 68 65 6e 20 74 68 69 73 20  alse, then this 
23540 72 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a 2a 20  routine is a.** 
23550 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 73 63 68  no-op if the sch
23560 65 6d 61 20 69 73 20 6e 6f 74 20 63 75 72 72 65  ema is not curre
23570 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20 49 6e  ntly loaded.  In
23580 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
23590 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73 65 2c   P2.** is false,
235a0 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
235b0 45 52 20 74 61 62 6c 65 20 69 73 20 6f 6e 6c 79  ER table is only
235c0 20 70 61 72 73 65 64 20 69 66 20 74 68 65 20 72   parsed if the r
235d0 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  est of the.** sc
235e0 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64 79 20  hema is already 
235f0 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74 68 65 20  loaded into the 
23600 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a 2a 2a  symbol table..**
23610 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
23620 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73  invokes the pars
23630 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  er to create a n
23640 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
23650 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73  ne,.** then runs
23660 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
23670 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73   machine.  It is
23680 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61   thus a re-entra
23690 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  nt opcode..*/.ca
236a0 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  se OP_ParseSchem
236b0 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  a: {.  int iDb;.
236c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
236d0 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a  aster;.  char *z
236e0 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20  Sql;.  InitData 
236f0 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 69 44 62  initData;..  iDb
23700 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73   = pOp->p1;.  as
23710 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
23720 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a  iDb<db->nDb );..
23730 20 20 2f 2a 20 49 66 20 70 4f 70 2d 3e 70 32 20    /* If pOp->p2 
23740 69 73 20 30 2c 20 74 68 65 6e 20 74 68 69 73 20  is 0, then this 
23750 6f 70 63 6f 64 65 20 69 73 20 62 65 69 6e 67 20  opcode is being 
23760 65 78 65 63 75 74 65 64 20 74 6f 20 72 65 61 64  executed to read
23770 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 72   a.  ** single r
23780 6f 77 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 20  ow, for example 
23790 74 68 65 20 72 6f 77 20 63 6f 72 72 65 73 70 6f  the row correspo
237a0 6e 64 69 6e 67 20 74 6f 20 61 20 6e 65 77 20 69  nding to a new i
237b0 6e 64 65 78 0a 20 20 2a 2a 20 63 72 65 61 74 65  ndex.  ** create
237c0 64 20 62 79 20 74 68 69 73 20 56 44 42 45 2c 20  d by this VDBE, 
237d0 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74 65 5f  from the sqlite_
237e0 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 20 49 74  master table. It
237f0 20 6f 6e 6c 79 0a 20 20 2a 2a 20 64 6f 65 73 20   only.  ** does 
23800 74 68 69 73 20 69 66 20 74 68 65 20 63 6f 72 72  this if the corr
23810 65 73 70 6f 6e 64 69 6e 67 20 69 6e 2d 6d 65 6d  esponding in-mem
23820 6f 72 79 20 73 63 68 65 6d 61 20 69 73 20 63 75  ory schema is cu
23830 72 72 65 6e 74 6c 79 0a 20 20 2a 2a 20 6c 6f 61  rrently.  ** loa
23840 64 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ded. Otherwise, 
23850 74 68 65 20 6e 65 77 20 69 6e 64 65 78 20 64 65  the new index de
23860 66 69 6e 69 74 69 6f 6e 20 63 61 6e 20 62 65 20  finition can be 
23870 6c 6f 61 64 65 64 20 61 6c 6f 6e 67 0a 20 20 2a  loaded along.  *
23880 2a 20 77 69 74 68 20 74 68 65 20 72 65 73 74 20  * with the rest 
23890 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 77 68  of the schema wh
238a0 65 6e 20 69 74 20 69 73 20 72 65 71 75 69 72 65  en it is require
238b0 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 41 6c 74  d..  **.  ** Alt
238c0 68 6f 75 67 68 20 74 68 65 20 6d 75 74 65 78 20  hough the mutex 
238d0 6f 6e 20 74 68 65 20 42 74 53 68 61 72 65 64 20  on the BtShared 
238e0 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 72 72  object that corr
238f0 65 73 70 6f 6e 64 73 20 74 6f 0a 20 20 2a 2a 20  esponds to.  ** 
23900 64 61 74 61 62 61 73 65 20 69 44 62 20 28 74 68  database iDb (th
23910 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74 61  e database conta
23920 69 6e 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  ining the sqlite
23930 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20  _master table.  
23940 2a 2a 20 72 65 61 64 20 62 79 20 74 68 69 73 20  ** read by this 
23950 69 6e 73 74 72 75 63 74 69 6f 6e 29 20 69 73 20  instruction) is 
23960 63 75 72 72 65 6e 74 6c 79 20 68 65 6c 64 2c 20  currently held, 
23970 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20  it is necessary 
23980 74 6f 0a 20 20 2a 2a 20 6f 62 74 61 69 6e 20 74  to.  ** obtain t
23990 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 61 6c  he mutexes on al
239a0 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
239b0 61 73 65 73 20 62 65 66 6f 72 65 20 63 68 65 63  ases before chec
239c0 6b 69 6e 67 20 69 66 0a 20 20 2a 2a 20 74 68 65  king if.  ** the
239d0 20 73 63 68 65 6d 61 20 6f 66 20 69 44 62 20 69   schema of iDb i
239e0 73 20 6c 6f 61 64 65 64 2e 20 54 68 69 73 20 69  s loaded. This i
239f0 73 20 62 65 63 61 75 73 65 2c 20 61 74 20 74 68  s because, at th
23a00 65 20 73 74 61 72 74 20 6f 66 0a 20 20 2a 2a 20  e start of.  ** 
23a10 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65 63  the sqlite3_exec
23a20 28 29 20 63 61 6c 6c 20 62 65 6c 6f 77 2c 20 53  () call below, S
23a30 51 4c 69 74 65 20 77 69 6c 6c 20 69 6e 76 6f 6b  QLite will invok
23a40 65 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  e .  ** sqlite3B
23a50 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 29 2e 20  treeEnterAll(). 
23a60 49 66 20 61 6c 6c 20 6d 75 74 65 78 65 73 20 61  If all mutexes a
23a70 72 65 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 68  re not already h
23a80 65 6c 64 2c 20 74 68 65 0a 20 20 2a 2a 20 69 44  eld, the.  ** iD
23a90 62 20 6d 75 74 65 78 20 6d 61 79 20 62 65 20 74  b mutex may be t
23aa0 65 6d 70 6f 72 61 72 69 6c 79 20 72 65 6c 65 61  emporarily relea
23ab0 73 65 64 20 74 6f 20 61 76 6f 69 64 20 64 65 61  sed to avoid dea
23ac0 64 6c 6f 63 6b 2e 20 49 66 20 0a 20 20 2a 2a 20  dlock. If .  ** 
23ad0 74 68 69 73 20 68 61 70 70 65 6e 73 2c 20 74 68  this happens, th
23ae0 65 6e 20 73 6f 6d 65 20 6f 74 68 65 72 20 74 68  en some other th
23af0 72 65 61 64 20 6d 61 79 20 64 65 6c 65 74 65 20  read may delete 
23b00 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 0a 20  the in-memory . 
23b10 20 2a 2a 20 73 63 68 65 6d 61 20 6f 66 20 64 61   ** schema of da
23b20 74 61 62 61 73 65 20 69 44 62 20 62 65 66 6f 72  tabase iDb befor
23b30 65 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  e the SQL statem
23b40 65 6e 74 20 72 75 6e 73 2e 20 54 68 65 20 73 63  ent runs. The sc
23b50 68 65 6d 61 0a 20 20 2a 2a 20 77 69 6c 6c 20 6e  hema.  ** will n
23b60 6f 74 20 62 65 20 72 65 6c 6f 61 64 65 64 20 62  ot be reloaded b
23b70 65 63 75 61 73 65 20 74 68 65 20 64 62 2d 3e 69  ecuase the db->i
23b80 6e 69 74 2e 62 75 73 79 20 66 6c 61 67 20 69 73  nit.busy flag is
23b90 20 73 65 74 2e 20 54 68 69 73 0a 20 20 2a 2a 20   set. This.  ** 
23ba0 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20 61 20  can result in a 
23bb0 22 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  "no such table: 
23bc0 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20 6f  sqlite_master" o
23bd0 72 20 22 6d 61 6c 66 6f 72 6d 65 64 0a 20 20 2a  r "malformed.  *
23be0 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
23bf0 61 22 20 65 72 72 6f 72 20 62 65 69 6e 67 20 72  a" error being r
23c00 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75  eturned to the u
23c10 73 65 72 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ser..  */.  asse
23c20 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
23c30 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
23c40 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
23c50 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e    sqlite3BtreeEn
23c60 74 65 72 41 6c 6c 28 64 62 29 3b 0a 20 20 69 66  terAll(db);.  if
23c70 28 20 70 4f 70 2d 3e 70 32 20 7c 7c 20 44 62 48  ( pOp->p2 || DbH
23c80 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  asProperty(db, i
23c90 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  Db, DB_SchemaLoa
23ca0 64 65 64 29 20 29 7b 0a 20 20 20 20 7a 4d 61 73  ded) ){.    zMas
23cb0 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42  ter = SCHEMA_TAB
23cc0 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69  LE(iDb);.    ini
23cd0 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
23ce0 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
23cf0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69  = pOp->p1;.    i
23d00 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
23d10 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a   = &p->zErrMsg;.
23d20 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
23d30 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
23d40 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
23d50 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
23d60 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
23d70 45 52 45 20 25 73 22 2c 0a 20 20 20 20 20 20 20  ERE %s",.       
23d80 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61  db->aDb[iDb].zNa
23d90 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70  me, zMaster, pOp
23da0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28  ->p4.z);.    if(
23db0 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zSql==0 ){.    
23dc0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
23dd0 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  MEM;.    }else{.
23de0 20 20 20 20 20 20 28 76 6f 69 64 29 73 71 6c 69        (void)sqli
23df0 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29  te3SafetyOff(db)
23e00 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
23e10 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30  db->init.busy==0
23e20 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e   );.      db->in
23e30 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20  it.busy = 1;.   
23e40 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d     initData.rc =
23e50 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
23e60 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d    assert( !db->m
23e70 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
23e80 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
23e90 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c  3_exec(db, zSql,
23ea0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
23eb0 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c  back, &initData,
23ec0 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
23ed0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72  c==SQLITE_OK ) r
23ee0 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b  c = initData.rc;
23ef0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
23f00 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a  Free(db, zSql);.
23f10 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
23f20 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 28  usy = 0;.      (
23f30 76 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66 65  void)sqlite3Safe
23f40 74 79 4f 6e 28 64 62 29 3b 0a 20 20 20 20 7d 0a  tyOn(db);.    }.
23f50 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72    }.  sqlite3Btr
23f60 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b 0a  eeLeaveAll(db);.
23f70 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
23f80 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f  _NOMEM ){.    go
23f90 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
23fa0 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66   break;  .}..#if
23fb0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23fc0 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 26  _OMIT_ANALYZE) &
23fd0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
23fe0 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52 29 0a 2f  E_OMIT_PARSER)./
23ff0 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e  * Opcode: LoadAn
24000 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20  alysis P1 * * * 
24010 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65  *.**.** Read the
24020 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
24030 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65  ble for database
24040 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65   P1 and load the
24050 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74   content.** of t
24060 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74  hat table into t
24070 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  he internal inde
24080 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54  x hash table.  T
24090 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a  his will cause.*
240a0 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74  * the analysis t
240b0 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70  o be used when p
240c0 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62  reparing all sub
240d0 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e  sequent queries.
240e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64  .*/.case OP_Load
240f0 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73  Analysis: {.  as
24100 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
24110 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
24120 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  nDb );.  rc = sq
24130 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
24140 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  d(db, pOp->p1);.
24150 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e    break;  .}.#en
24160 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
24170 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
24180 59 5a 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  YZE) && !defined
24190 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 52  (SQLITE_OMIT_PAR
241a0 53 45 52 29 20 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  SER)  */../* Opc
241b0 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
241c0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
241d0 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
241e0 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
241f0 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
24200 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
24210 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
24220 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
24230 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
24240 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
24250 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
24260 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
24270 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
24280 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
24290 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
242a0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
242b0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
242c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
242d0 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  able: {.  sqlite
242e0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
242f0 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70  Table(db, pOp->p
24300 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
24310 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
24320 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20  code: DropIndex 
24330 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
24340 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
24350 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
24360 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
24370 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
24380 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d  ** the index nam
24390 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
243a0 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
243b0 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69  alled after an i
243c0 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70  ndex.** is dropp
243d0 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
243e0 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
243f0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
24400 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
24410 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
24420 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
24430 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
24440 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69  pIndex: {.  sqli
24450 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
24460 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d  teIndex(db, pOp-
24470 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
24480 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
24490 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67  Opcode: DropTrig
244a0 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ger P1 * * P4 *.
244b0 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
244c0 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
244d0 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
244e0 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
244f0 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67  ibe.** the trigg
24500 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  er named P4 in d
24510 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
24520 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
24530 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69  r a trigger.** i
24540 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64  s dropped in ord
24550 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
24560 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
24570 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
24580 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
24590 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
245a0 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
245b0 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a   OP_DropTrigger:
245c0 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
245d0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
245e0 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  er(db, pOp->p1, 
245f0 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
24600 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
24610 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
24620 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20  EGRITY_CHECK./* 
24630 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74  Opcode: Integrit
24640 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50  yCk P1 P2 P3 * P
24650 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e  5.**.** Do an an
24660 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75  alysis of the cu
24670 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74  rrently open dat
24680 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e  abase.  Store in
24690 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
246a0 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65  the text of an e
246b0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73  rror message des
246c0 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62  cribing any prob
246d0 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70  lems..** If no p
246e0 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e  roblems are foun
246f0 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  d, store a NULL 
24700 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
24710 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
24720 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
24730 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
24740 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72  r of allowed err
24750 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20  ors..** At most 
24760 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77  reg(P3) errors w
24770 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e  ill be reported.
24780 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
24790 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73  ds, the analysis
247a0 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61   stops as soon a
247b0 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73  s reg(P1) errors
247c0 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20   are .** seen.  
247d0 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74  Reg(P1) is updat
247e0 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62  ed with the numb
247f0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  er of errors rem
24800 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  aining..**.** Th
24810 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
24820 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  ers of all table
24830 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
24840 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a  e are integer.**
24850 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50   stored in reg(P
24860 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72  1), reg(P1+1), r
24870 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20  eg(P1+2), ....  
24880 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62  There are P2 tab
24890 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a  les.** total..**
248a0 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
248b0 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b   zero, the check
248c0 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20   is done on the 
248d0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
248e0 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20  se.** file, not 
248f0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
24900 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
24910 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
24920 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
24930 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  he integrity_che
24940 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61  ck pragma..*/.ca
24950 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43  se OP_IntegrityC
24960 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74  k: {.  int nRoot
24970 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
24980 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68   of tables to ch
24990 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66  eck.  (Number of
249a0 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f   root pages.) */
249b0 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20  .  int *aRoot;  
249c0 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72     /* Array of r
249d0 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ootpage numbers 
249e0 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65  for tables to be
249f0 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e   checked */.  in
24a00 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  t j;          /*
24a10 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
24a20 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
24a30 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
24a40 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20  errors reported 
24a50 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20  */.  char *z;   
24a60 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
24a70 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74  the error report
24a80 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72   */.  Mem *pnErr
24a90 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  ;     /* Registe
24aa0 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  r keeping track 
24ab0 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
24ac0 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f  ing */.  .  nRoo
24ad0 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  t = pOp->p2;.  a
24ae0 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29  ssert( nRoot>0 )
24af0 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69  ;.  aRoot = sqli
24b00 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
24b10 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28  b, sizeof(int)*(
24b20 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66  nRoot+1) );.  if
24b30 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74  ( aRoot==0 ) got
24b40 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65  o no_mem;.  asse
24b50 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
24b60 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
24b70 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  m );.  pnErr = &
24b80 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
24b90 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
24ba0 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  rr->flags & MEM_
24bb0 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Int)!=0 );.  ass
24bc0 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
24bd0 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
24be0 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
24bf0 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn1 = &p->aMem
24c00 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
24c10 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a  (j=0; j<nRoot; j
24c20 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a  ++){.    aRoot[j
24c30 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33  ] = (int)sqlite3
24c40 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49  VdbeIntValue(&pI
24c50 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52  n1[j]);.  }.  aR
24c60 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73  oot[j] = 0;.  as
24c70 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62  sert( pOp->p5<db
24c80 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
24c90 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
24ca0 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 35 29 29   & (1<<pOp->p5))
24cb0 21 3d 30 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c  !=0 );.  z = sql
24cc0 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69  ite3BtreeIntegri
24cd0 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b  tyCheck(db->aDb[
24ce0 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52  pOp->p5].pBt, aR
24cf0 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20  oot, nRoot,.    
24d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d10 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
24d20 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e  t)pnErr->u.i, &n
24d30 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  Err);.  sqlite3D
24d40 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29  bFree(db, aRoot)
24d50 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d  ;.  pnErr->u.i -
24d60 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65  = nErr;.  sqlite
24d70 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
24d80 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72  pIn1);.  if( nEr
24d90 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  r==0 ){.    asse
24da0 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65  rt( z==0 );.  }e
24db0 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  lse if( z==0 ){.
24dc0 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
24dd0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
24de0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
24df0 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20  tr(pIn1, z, -1, 
24e00 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c  SQLITE_UTF8, sql
24e10 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a  ite3_free);.  }.
24e20 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
24e30 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73  BSIZE(pIn1);.  s
24e40 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
24e50 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65  Encoding(pIn1, e
24e60 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
24e70 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
24e80 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
24e90 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f  RITY_CHECK */../
24ea0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
24eb0 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Add P1 P2 * * *.
24ec0 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65  **.** Insert the
24ed0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68   integer value h
24ee0 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20  eld by register 
24ef0 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61  P2 into a boolea
24f00 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20  n index.** held 
24f10 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
24f20 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69  **.** An asserti
24f30 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69  on fails if P2 i
24f40 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
24f50 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
24f60 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20  SetAdd: {       
24f70 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20  /* in2 */.  Mem 
24f80 2a 70 49 64 78 3b 0a 20 20 4d 65 6d 20 2a 70 56  *pIdx;.  Mem *pV
24f90 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  al;.  assert( pO
24fa0 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
24fb0 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p1<=p->nMem );. 
24fc0 20 70 49 64 78 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIdx = &p->aMem
24fd0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24fe0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
24ff0 26 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d  & pOp->p2<=p->nM
25000 65 6d 20 29 3b 0a 20 20 70 56 61 6c 20 3d 20 26  em );.  pVal = &
25010 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  p->aMem[pOp->p2]
25020 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 56 61  ;.  assert( (pVa
25030 6c 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  l->flags & MEM_I
25040 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  nt)!=0 );.  if( 
25050 28 70 49 64 78 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIdx->flags & M
25060 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
25070 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
25080 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 64  MemSetRowSet(pId
25090 78 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 64  x);.    if( (pId
250a0 78 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  x->flags & MEM_R
250b0 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
250c0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73   no_mem;.  }.  s
250d0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
250e0 72 74 28 70 49 64 78 2d 3e 75 2e 70 52 6f 77 53  rt(pIdx->u.pRowS
250f0 65 74 2c 20 70 56 61 6c 2d 3e 75 2e 69 29 3b 0a  et, pVal->u.i);.
25100 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
25110 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61  pcode: RowSetRea
25120 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
25130 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65  *.** Extract the
25140 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
25150 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  from boolean ind
25160 65 78 20 50 31 20 61 6e 64 20 70 75 74 20 74 68  ex P1 and put th
25170 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a  at value into.**
25180 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f   register P3.  O
25190 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e  r, if boolean in
251a0 64 65 78 20 50 31 20 69 73 20 69 6e 69 74 69 61  dex P1 is initia
251b0 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65  lly empty, leave
251c0 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64   P3.** unchanged
251d0 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73   and jump to ins
251e0 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
251f0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65  case OP_RowSetRe
25200 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  ad: {       /* j
25210 75 6d 70 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 4d  ump, out3 */.  M
25220 65 6d 20 2a 70 49 64 78 3b 0a 20 20 69 36 34 20  em *pIdx;.  i64 
25230 76 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 70  val;.  assert( p
25240 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
25250 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p1<=p->nMem );.
25260 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45    CHECK_FOR_INTE
25270 52 52 55 50 54 3b 0a 20 20 70 49 64 78 20 3d 20  RRUPT;.  pIdx = 
25280 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  &p->aMem[pOp->p1
25290 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  ];.  pOut = &p->
252a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
252b0 20 69 66 28 20 28 70 49 64 78 2d 3e 66 6c 61 67   if( (pIdx->flag
252c0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
252d0 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65  =0 .   || sqlite
252e0 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 64 78  3RowSetNext(pIdx
252f0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61  ->u.pRowSet, &va
25300 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f  l)==0.  ){.    /
25310 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e  * The boolean in
25320 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  dex is empty */.
25330 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
25340 65 6d 53 65 74 4e 75 6c 6c 28 70 49 64 78 29 3b  emSetNull(pIdx);
25350 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
25360 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2 - 1;.  }else{.
25370 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77      /* A value w
25380 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74  as pulled from t
25390 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  he index */.    
253a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
253b0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
253c0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 73 71 6c  >nMem );.    sql
253d0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
253e0 74 36 34 28 70 4f 75 74 2c 20 76 61 6c 29 3b 0a  t64(pOut, val);.
253f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
25400 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
25410 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50  tTest P1 P2 P3 P
25420 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  4.**.** Register
25430 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74   P3 is assumed t
25440 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20  o hold a 64-bit 
25450 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
25460 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  f register P1.**
25470 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53   contains a RowS
25480 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68  et object and th
25490 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  at RowSet object
254a0 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65   contains.** the
254b0 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50   value held in P
254c0 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73  3, jump to regis
254d0 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ter P2. Otherwis
254e0 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a  e, insert the.**
254f0 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69   integer in P3 i
25500 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61  nto the RowSet a
25510 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74  nd continue on t
25520 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70  o the.** next op
25530 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
25540 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73  RowSet object is
25550 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74   optimized for t
25560 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75  he case where su
25570 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a  ccessive sets.**
25580 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68   of integers, wh
25590 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e  ere each set con
255a0 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61  tains no duplica
255b0 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a  tes. Each set.**
255c0 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64   of values is id
255d0 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e  entified by a un
255e0 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54  ique P4 value. T
255f0 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20  he first set.** 
25600 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c  must have P4==0,
25610 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50   the final set P
25620 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62  4=-1.  P4 must b
25630 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a  e either -1 or.*
25640 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20  * non-negative. 
25650 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76   For non-negativ
25660 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f  e values of P4 o
25670 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a  nly the lower 4.
25680 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e  ** bits are sign
25690 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54  ificant..**.** T
256a0 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d  his allows optim
256b0 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68  izations: (a) wh
256c0 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69  en P4==0 there i
256d0 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73  s no need to tes
256e0 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20  t.** the rowset 
256f0 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61  object for P3, a
25700 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  s it is guarante
25710 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69  ed not to contai
25720 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65  n it,.** (b) whe
25730 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69  n P4==-1 there i
25740 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73  s no need to ins
25750 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61  ert the value, a
25760 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76  s it will.** nev
25770 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72  er be tested for
25780 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61  , and (c) when a
25790 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70   value that is p
257a0 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a  art of set X is.
257b0 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65  ** inserted, the
257c0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
257d0 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69   search to see i
257e0 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  f the same value
257f0 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
25800 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ly inserted as p
25810 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e  art of set X (on
25820 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65  ly if it was pre
25830 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72  viously.** inser
25840 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
25850 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a  ome other set)..
25860 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
25870 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20  tTest: {        
25880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25890 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
258a0 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20  /.  int iSet;.  
258b0 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 69  int exists;..  i
258c0 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Set = pOp->p4.i;
258d0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
258e0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
258f0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65  ;..  /* If there
25900 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68   is anything oth
25910 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74  er than a rowset
25920 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72   object in memor
25930 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20  y cell P1,.  ** 
25940 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e  delete it now an
25950 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20  d initialize P1 
25960 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f  with an empty ro
25970 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20  wset.  */.  if( 
25980 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
25990 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
259a0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
259b0 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
259c0 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
259d0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
259e0 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
259f0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
25a00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
25a10 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
25a20 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d  .  assert( iSet=
25a30 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29  =-1 || iSet>=0 )
25a40 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a  ;.  if( iSet ){.
25a50 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c      exists = sql
25a60 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70  ite3RowSetTest(p
25a70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
25a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25aa0 28 75 38 29 28 69 53 65 74 3e 3d 30 20 3f 20 69  (u8)(iSet>=0 ? i
25ab0 53 65 74 20 26 20 30 78 66 20 3a 20 30 78 66 66  Set & 0xf : 0xff
25ac0 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ae0 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20    pIn3->u.i);.  
25af0 20 20 69 66 28 20 65 78 69 73 74 73 20 29 7b 0a    if( exists ){.
25b00 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
25b10 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72  p2 - 1;.      br
25b20 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
25b30 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a   if( iSet>=0 ){.
25b40 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65      sqlite3RowSe
25b50 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
25b60 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75  pRowSet, pIn3->u
25b70 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  .i);.  }.  break
25b80 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
25b90 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
25ba0 52 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  R./* Opcode: Con
25bb0 74 65 78 74 50 75 73 68 20 2a 20 2a 20 2a 20 0a  textPush * * * .
25bc0 2a 2a 0a 2a 2a 20 53 61 76 65 20 74 68 65 20 63  **.** Save the c
25bd0 75 72 72 65 6e 74 20 56 64 62 65 20 63 6f 6e 74  urrent Vdbe cont
25be0 65 78 74 20 73 75 63 68 20 74 68 61 74 20 69 74  ext such that it
25bf0 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
25c00 20 62 79 20 61 20 43 6f 6e 74 65 78 74 50 6f 70   by a ContextPop
25c10 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  .** opcode. The 
25c20 63 6f 6e 74 65 78 74 20 73 74 6f 72 65 73 20 74  context stores t
25c30 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20 72  he last insert r
25c40 6f 77 20 69 64 2c 20 74 68 65 20 6c 61 73 74 20  ow id, the last 
25c50 73 74 61 74 65 6d 65 6e 74 20 63 68 61 6e 67 65  statement change
25c60 0a 2a 2a 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74  .** count, and t
25c70 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  he current state
25c80 6d 65 6e 74 20 63 68 61 6e 67 65 20 63 6f 75 6e  ment change coun
25c90 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  t..*/.case OP_Co
25ca0 6e 74 65 78 74 50 75 73 68 3a 20 7b 0a 20 20 69  ntextPush: {.  i
25cb0 6e 74 20 69 3b 0a 20 20 43 6f 6e 74 65 78 74 20  nt i;.  Context 
25cc0 2a 70 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 69 20  *pContext;..  i 
25cd0 3d 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63  = p->contextStac
25ce0 6b 54 6f 70 2b 2b 3b 0a 20 20 61 73 73 65 72 74  kTop++;.  assert
25cf0 28 20 69 3e 3d 30 20 29 3b 0a 20 20 2f 2a 20 46  ( i>=0 );.  /* F
25d00 49 58 20 4d 45 3a 20 54 68 69 73 20 73 68 6f 75  IX ME: This shou
25d10 6c 64 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 20  ld be allocated 
25d20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 76  as part of the v
25d30 64 62 65 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  dbe at compile-t
25d40 69 6d 65 20 2a 2f 0a 20 20 69 66 28 20 69 3e 3d  ime */.  if( i>=
25d50 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 44  p->contextStackD
25d60 65 70 74 68 20 29 7b 0a 20 20 20 20 70 2d 3e 63  epth ){.    p->c
25d70 6f 6e 74 65 78 74 53 74 61 63 6b 44 65 70 74 68  ontextStackDepth
25d80 20 3d 20 69 2b 31 3b 0a 20 20 20 20 70 2d 3e 63   = i+1;.    p->c
25d90 6f 6e 74 65 78 74 53 74 61 63 6b 20 3d 20 73 71  ontextStack = sq
25da0 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
25db0 46 72 65 65 28 64 62 2c 20 70 2d 3e 63 6f 6e 74  Free(db, p->cont
25dc0 65 78 74 53 74 61 63 6b 2c 0a 20 20 20 20 20 20  extStack,.      
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25df0 20 20 20 20 73 69 7a 65 6f 66 28 43 6f 6e 74 65      sizeof(Conte
25e00 78 74 29 2a 28 69 2b 31 29 29 3b 0a 20 20 20 20  xt)*(i+1));.    
25e10 69 66 28 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74  if( p->contextSt
25e20 61 63 6b 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  ack==0 ) goto no
25e30 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 43 6f 6e  _mem;.  }.  pCon
25e40 74 65 78 74 20 3d 20 26 70 2d 3e 63 6f 6e 74 65  text = &p->conte
25e50 78 74 53 74 61 63 6b 5b 69 5d 3b 0a 20 20 70 43  xtStack[i];.  pC
25e60 6f 6e 74 65 78 74 2d 3e 6c 61 73 74 52 6f 77 69  ontext->lastRowi
25e70 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
25e80 64 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 6e  d;.  pContext->n
25e90 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
25ea0 6e 67 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nge;.  break;.}.
25eb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 74  ./* Opcode: Cont
25ec0 65 78 74 50 6f 70 20 2a 20 2a 20 2a 20 0a 2a 2a  extPop * * * .**
25ed0 0a 2a 2a 20 52 65 73 74 6f 72 65 20 74 68 65 20  .** Restore the 
25ee0 56 64 62 65 20 63 6f 6e 74 65 78 74 20 74 6f 20  Vdbe context to 
25ef0 74 68 65 20 73 74 61 74 65 20 69 74 20 77 61 73  the state it was
25f00 20 69 6e 20 77 68 65 6e 20 63 6f 6e 74 65 78 74   in when context
25f10 50 75 73 68 20 77 61 73 20 6c 61 73 74 0a 2a 2a  Push was last.**
25f20 20 65 78 65 63 75 74 65 64 2e 20 54 68 65 20 63   executed. The c
25f30 6f 6e 74 65 78 74 20 73 74 6f 72 65 73 20 74 68  ontext stores th
25f40 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20 72 6f  e last insert ro
25f50 77 20 69 64 2c 20 74 68 65 20 6c 61 73 74 20 73  w id, the last s
25f60 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 63 68 61 6e  tatement.** chan
25f70 67 65 20 63 6f 75 6e 74 2c 20 61 6e 64 20 74 68  ge count, and th
25f80 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 6d  e current statem
25f90 65 6e 74 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  ent change count
25fa0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
25fb0 74 65 78 74 50 6f 70 3a 20 7b 0a 20 20 43 6f 6e  textPop: {.  Con
25fc0 74 65 78 74 20 2a 70 43 6f 6e 74 65 78 74 3b 0a  text *pContext;.
25fd0 20 20 70 43 6f 6e 74 65 78 74 20 3d 20 26 70 2d    pContext = &p-
25fe0 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b 2d 2d  >contextStack[--
25ff0 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54  p->contextStackT
26000 6f 70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  op];.  assert( p
26010 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f  ->contextStackTo
26020 70 3e 3d 30 20 29 3b 0a 20 20 64 62 2d 3e 6c 61  p>=0 );.  db->la
26030 73 74 52 6f 77 69 64 20 3d 20 70 43 6f 6e 74 65  stRowid = pConte
26040 78 74 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  xt->lastRowid;. 
26050 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 43   p->nChange = pC
26060 6f 6e 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65 3b  ontext->nChange;
26070 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
26080 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
26090 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
260a0 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  R */..#ifndef SQ
260b0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
260c0 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
260d0 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
260e0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
260f0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
26100 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
26110 6d 61 78 69 6d 75 6d 20 6f 66 20 69 74 73 20 63  maximum of its c
26120 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 2a 2a 20  urrent value.** 
26130 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  and the value in
26140 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
26150 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
26160 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65  tion throws an e
26170 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f  rror if the memo
26180 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69  ry cell is not i
26190 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69  nitially.** an i
261a0 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
261b0 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20  OP_MemMax: {    
261c0 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20      /* in1, in2 
261d0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
261e0 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
261f0 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
26200 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
26210 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
26220 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
26230 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
26240 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
26250 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
26260 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
26270 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
26280 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
26290 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20  IfPos P1 P2 * * 
262a0 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  *.**.** If the v
262b0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
262c0 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
262d0 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ter, jump to P2.
262e0 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
262f0 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
26300 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
26310 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
26320 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
26330 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
26340 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
26350 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
26360 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
26370 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
26380 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
26390 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
263a0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
263b0 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
263c0 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20  n1->u.i>0 ){.   
263d0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
263e0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
263f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
26400 66 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a  fNeg P1 P2 * * *
26410 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
26420 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
26430 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P1 is less than 
26440 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32  zero, jump to P2
26450 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  . .**.** It is i
26460 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68  llegal to use th
26470 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
26480 6e 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  n a register tha
26490 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f  t does.** not co
264a0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
264b0 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  .  An assertion 
264c0 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c  fault will resul
264d0 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f  t if you try..*/
264e0 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20  .case OP_IfNeg: 
264f0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
26500 2c 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  , in1 */.  asser
26510 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
26520 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20  EM_Int );.  if( 
26530 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20  pIn1->u.i<0 ){. 
26540 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
26550 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
26560 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26570 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20   IfZero P1 P2 * 
26580 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  * *.**.** If the
26590 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
265a0 65 72 20 50 31 20 69 73 20 65 78 61 63 74 6c 79  er P1 is exactly
265b0 20 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20   0, jump to P2. 
265c0 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
265d0 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
265e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
265f0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
26600 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
26610 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
26620 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
26630 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
26640 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
26650 61 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b  ase OP_IfZero: {
26660 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
26670 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
26680 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
26690 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
266a0 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20  In1->u.i==0 ){. 
266b0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
266c0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
266d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
266e0 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33   AggStep * P2 P3
266f0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65   P4 P5.**.** Exe
26700 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
26710 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
26720 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
26730 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
26740 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
26750 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
26760 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
26770 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
26780 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
26790 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69  ction.  Use regi
267a0 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68  ster.** P3 as th
267b0 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  e accumulator..*
267c0 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
267d0 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
267e0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
267f0 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
26800 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20  essors..*/.case 
26810 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20  OP_AggStep: {.  
26820 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
26830 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d    Mem *pMem;.  M
26840 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69  em *pRec;.  sqli
26850 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
26860 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
26870 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d   **apVal;..  n =
26880 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
26890 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52  rt( n>=0 );.  pR
268a0 65 63 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  ec = &p->aMem[pO
268b0 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20  p->p2];.  apVal 
268c0 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73  = p->apArg;.  as
268d0 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e  sert( apVal || n
268e0 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30  ==0 );.  for(i=0
268f0 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63  ; i<n; i++, pRec
26900 2b 2b 29 7b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ++){.    apVal[i
26910 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 73 74  ] = pRec;.    st
26920 6f 72 65 54 79 70 65 49 6e 66 6f 28 70 52 65 63  oreTypeInfo(pRec
26930 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 7d  , encoding);.  }
26940 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70  .  ctx.pFunc = p
26950 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
26960 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
26970 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
26980 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63 74 78 2e 70  >nMem );.  ctx.p
26990 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 70 2d  Mem = pMem = &p-
269a0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
269b0 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63    pMem->n++;.  c
269c0 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  tx.s.flags = MEM
269d0 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a  _Null;.  ctx.s.z
269e0 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d   = 0;.  ctx.s.zM
269f0 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78  alloc = 0;.  ctx
26a00 2e 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63  .s.xDel = 0;.  c
26a10 74 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20  tx.s.db = db;.  
26a20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b  ctx.isError = 0;
26a30 0a 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30  .  ctx.pColl = 0
26a40 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e  ;.  if( ctx.pFun
26a50 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  c->flags & SQLIT
26a60 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
26a70 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
26a80 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20 20  Op>p->aOp );.   
26a90 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
26aa0 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  .p4type==P4_COLL
26ab0 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65 72  SEQ );.    asser
26ac0 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
26ad0 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b  e==OP_CollSeq );
26ae0 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d  .    ctx.pColl =
26af0 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c   pOp[-1].p4.pCol
26b00 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70 46  l;.  }.  (ctx.pF
26b10 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74 78  unc->xStep)(&ctx
26b20 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 0a 20 20 69  , n, apVal);.  i
26b30 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29  f( ctx.isError )
26b40 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
26b50 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
26b60 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
26b70 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
26b80 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72  (&ctx.s));.    r
26b90 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b  c = ctx.isError;
26ba0 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
26bb0 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
26bc0 78 2e 73 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  x.s);.  break;.}
26bd0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
26be0 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34  Final P1 P2 * P4
26bf0 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65   *.**.** Execute
26c00 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66   the finalizer f
26c10 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
26c20 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73  ggregate.  P1 is
26c30 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  .** the memory l
26c40 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  ocation that is 
26c50 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  the accumulator 
26c60 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74  for the aggregat
26c70 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  e..**.** P2 is t
26c80 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
26c90 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
26ca0 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
26cb0 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
26cc0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
26cd0 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
26ce0 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
26cf0 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
26d00 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
26d10 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
26d20 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
26d30 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
26d40 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
26d50 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
26d60 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
26d70 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
26d80 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
26d90 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
26da0 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61  he degenerate ca
26db0 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20  se where.** the 
26dc0 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61  step function wa
26dd0 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
26de0 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65   called..*/.case
26df0 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a   OP_AggFinal: {.
26e00 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61    Mem *pMem;.  a
26e10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
26e20 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
26e30 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d  nMem );.  pMem =
26e40 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
26e50 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
26e60 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d  Mem->flags & ~(M
26e70 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29  EM_Null|MEM_Agg)
26e80 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )==0 );.  rc = s
26e90 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e  qlite3VdbeMemFin
26ea0 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d  alize(pMem, pOp-
26eb0 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66  >p4.pFunc);.  if
26ec0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52  ( rc==SQLITE_ERR
26ed0 4f 52 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OR ){.    sqlite
26ee0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
26ef0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
26f00 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
26f10 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d  text(pMem));.  }
26f20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
26f30 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65  angeEncoding(pMe
26f40 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  m, encoding);.  
26f50 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
26f60 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28  IZE(pMem);.  if(
26f70 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
26f80 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20  ooBig(pMem) ){. 
26f90 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
26fa0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
26fb0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
26fc0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
26fd0 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  M) && !defined(S
26fe0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
26ff0 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  H)./* Opcode: Va
27000 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  cuum * * * * *.*
27010 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20  *.** Vacuum the 
27020 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e  entire database.
27030 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69    This opcode wi
27040 6c 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76  ll cause other v
27050 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e  irtual.** machin
27060 65 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64  es to be created
27070 20 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61   and run.  It ma
27080 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20  y not be called 
27090 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61  from within.** a
270a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f   transaction..*/
270b0 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a  .case OP_Vacuum:
270c0 20 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   {.  if( sqlite3
270d0 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20  SafetyOff(db) ) 
270e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
270f0 6f 5f 6d 69 73 75 73 65 3b 20 0a 20 20 72 63 20  o_misuse; .  rc 
27100 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  = sqlite3RunVacu
27110 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  um(&p->zErrMsg, 
27120 64 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  db);.  if( sqlit
27130 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
27140 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
27150 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 62 72 65  to_misuse;.  bre
27160 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
27170 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
27180 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
27190 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  M)./* Opcode: In
271a0 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a  crVacuum P1 P2 *
271b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f   * *.**.** Perfo
271c0 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70  rm a single step
271d0 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e   of the incremen
271e0 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65  tal vacuum proce
271f0 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50  dure on.** the P
27200 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74  1 database. If t
27210 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69  he vacuum has fi
27220 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20  nished, jump to 
27230 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50  instruction.** P
27240 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
27250 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
27260 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
27270 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
27280 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20  ncrVacuum: {    
27290 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
272a0 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
272b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
272c0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
272d0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
272e0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
272f0 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29   & (1<<pOp->p1))
27300 21 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64  !=0 );.  pBt = d
27310 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
27320 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  pBt;.  rc = sqli
27330 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75  te3BtreeIncrVacu
27340 75 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20 72  um(pBt);.  if( r
27350 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
27360 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
27370 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d  p2 - 1;.    rc =
27380 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a   SQLITE_OK;.  }.
27390 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
273a0 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78  f../* Opcode: Ex
273b0 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  pire P1 * * * *.
273c0 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63  **.** Cause prec
273d0 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e  ompiled statemen
273e0 74 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78 70  ts to become exp
273f0 69 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65 64  ired. An expired
27400 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 61   statement.** fa
27410 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ils with an erro
27420 72 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45  r code of SQLITE
27430 5f 53 43 48 45 4d 41 20 69 66 20 69 74 20 69 73  _SCHEMA if it is
27440 20 65 76 65 72 20 65 78 65 63 75 74 65 64 20 0a   ever executed .
27450 2a 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33 5f  ** (via sqlite3_
27460 73 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20  step())..** .** 
27470 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e  If P1 is 0, then
27480 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65   all SQL stateme
27490 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72  nts become expir
274a0 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  ed. If P1 is non
274b0 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f  -zero,.** then o
274c0 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c  nly the currentl
274d0 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74  y executing stat
274e0 65 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74 65  ement is affecte
274f0 64 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  d. .*/.case OP_E
27500 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21  xpire: {.  if( !
27510 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
27520 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
27530 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
27540 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
27550 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
27560 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
27570 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27580 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
27590 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62  E./* Opcode: Tab
275a0 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20  leLock P1 P2 P3 
275b0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69  P4 *.**.** Obtai
275c0 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61  n a lock on a pa
275d0 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20  rticular table. 
275e0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
275f0 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68   is only used wh
27600 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64  en.** the shared
27610 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69  -cache feature i
27620 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a  s enabled. .**.*
27630 2a 20 49 66 20 50 31 20 69 73 20 20 74 68 65 20  * If P1 is  the 
27640 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
27650 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
27660 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
27670 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
27680 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
27690 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
276a0 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
276b0 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
276c0 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
276d0 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
276e0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
276f0 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
27700 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
27710 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
27720 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
27730 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
27740 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
27750 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
27760 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
27770 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
27780 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
27790 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
277a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
277b0 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 69 6e 74 20  leLock: {.  int 
277c0 70 31 3b 0a 20 20 75 38 20 69 73 57 72 69 74 65  p1;.  u8 isWrite
277d0 4c 6f 63 6b 3b 0a 0a 20 20 70 31 20 3d 20 70 4f  Lock;..  p1 = pO
277e0 70 2d 3e 70 31 3b 20 0a 20 20 69 73 57 72 69 74  p->p1; .  isWrit
277f0 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d  eLock = (u8)pOp-
27800 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
27810 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e  1>=0 && p1<db->n
27820 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
27830 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
27840 28 31 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20  (1<<p1))!=0 );. 
27850 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65   assert( isWrite
27860 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69  Lock==0 || isWri
27870 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 72  teLock==1 );.  r
27880 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
27890 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44  LockTable(db->aD
278a0 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  b[p1].pBt, pOp->
278b0 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29  p2, isWriteLock)
278c0 3b 0a 20 20 69 66 28 20 28 72 63 26 30 78 46 46  ;.  if( (rc&0xFF
278d0 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  )==SQLITE_LOCKED
278e0 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   ){.    const ch
278f0 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ar *z = pOp->p4.
27900 7a 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  z;.    sqlite3Se
27910 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
27920 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61  Msg, db, "databa
27930 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b  se table is lock
27940 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 7d  ed: %s", z);.  }
27950 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
27960 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
27970 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a  T_SHARED_CACHE *
27980 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
27990 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
279a0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
279b0 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  Begin * * * P4 *
279c0 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
279d0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
279e0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
279f0 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20  ructure. If so, 
27a00 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65  call the .** xBe
27a10 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74  gin method for t
27a20 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  hat table..**.**
27a30 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f   Also, whether o
27a40 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c  r not P4 is set,
27a50 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73   check that this
27a60 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61   is not being ca
27a70 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74  lled from.** wit
27a80 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74  hin a callback t
27a90 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
27aa0 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64  e xSync() method
27ab0 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20  . If it is, the 
27ac0 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69  error.** code wi
27ad0 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c  ll be set to SQL
27ae0 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63  ITE_LOCKED..*/.c
27af0 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b  ase OP_VBegin: {
27b00 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
27b10 2a 70 56 74 61 62 3b 0a 20 20 70 56 74 61 62 20  *pVtab;.  pVtab 
27b20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b  = pOp->p4.pVtab;
27b30 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
27b40 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 74  tabBegin(db, pVt
27b50 61 62 29 3b 0a 20 20 69 66 28 20 70 56 74 61 62  ab);.  if( pVtab
27b60 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
27b70 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
27b80 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
27b90 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
27ba0 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61  ErrMsg;.    pVta
27bb0 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  b->zErrMsg = 0;.
27bc0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
27bd0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
27be0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
27bf0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
27c00 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
27c10 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
27c20 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a 20 2a  : VCreate P1 * *
27c30 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
27c40 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
27c50 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
27c60 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 43 61   database P1. Ca
27c70 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d  ll the xCreate m
27c80 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68 61  ethod.** for tha
27c90 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
27ca0 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20   OP_VCreate: {. 
27cb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
27cc0 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20  bCallCreate(db, 
27cd0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
27ce0 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29  .z, &p->zErrMsg)
27cf0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
27d00 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
27d10 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
27d20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
27d30 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
27d40 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
27d50 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20  VDestroy P1 * * 
27d60 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
27d70 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
27d80 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
27d90 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61  database P1.  Ca
27da0 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20  ll the xDestroy 
27db0 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61  method.** of tha
27dc0 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
27dd0 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a   OP_VDestroy: {.
27de0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
27df0 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73 71  d = 2;.  rc = sq
27e00 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
27e10 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31  troy(db, pOp->p1
27e20 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
27e30 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
27e40 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
27e50 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
27e60 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
27e70 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
27e80 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
27e90 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
27ea0 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20  e: VOpen P1 * * 
27eb0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
27ec0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
27ed0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
27ee0 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
27ef0 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
27f00 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
27f10 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73  or number.  This
27f20 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20   opcode opens a 
27f30 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69  cursor to the vi
27f40 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61  rtual.** table a
27f50 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 63  nd stores that c
27f60 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a  ursor in P1..*/.
27f70 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b  case OP_VOpen: {
27f80 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
27f90 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
27fa0 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61  tab_cursor *pVta
27fb0 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74  bCursor;.  sqlit
27fc0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
27fd0 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65    sqlite3_module
27fe0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 43   *pModule;..  pC
27ff0 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 43  ur = 0;.  pVtabC
28000 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74  ursor = 0;.  pVt
28010 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
28020 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
28030 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  (sqlite3_module 
28040 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  *)pVtab->pModule
28050 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74 61 62  ;.  assert(pVtab
28060 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20   && pModule);.  
28070 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
28080 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20  yOff(db) ) goto 
28090 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73  abort_due_to_mis
280a0 75 73 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  use;.  rc = pMod
280b0 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62  ule->xOpen(pVtab
280c0 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b  , &pVtabCursor);
280d0 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
280e0 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
280f0 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d  ;.  p->zErrMsg =
28100 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b   pVtab->zErrMsg;
28110 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73  .  pVtab->zErrMs
28120 67 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c  g = 0;.  if( sql
28130 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
28140 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28150 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 69  e_to_misuse;.  i
28160 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63  f( SQLITE_OK==rc
28170 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69   ){.    /* Initi
28180 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74  alize sqlite3_vt
28190 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63  ab_cursor base c
281a0 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61  lass */.    pVta
281b0 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d  bCursor->pVtab =
281c0 20 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20   pVtab;..    /* 
281d0 49 6e 69 74 69 61 6c 69 73 65 20 76 64 62 65 20  Initialise vdbe 
281e0 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f  cursor object */
281f0 0a 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  .    pCur = allo
28200 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
28210 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29  p->p1, 0, -1, 0)
28220 3b 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29  ;.    if( pCur )
28230 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56  {.      pCur->pV
28240 74 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61  tabCursor = pVta
28250 62 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70  bCursor;.      p
28260 43 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70  Cur->pModule = p
28270 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
28280 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
28290 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
282a0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
282b0 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65  1;.      pModule
282c0 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75  ->xClose(pVtabCu
282d0 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
282e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
282f0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
28300 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
28310 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
28320 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
28330 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
28340 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20  Filter P1 P2 P3 
28350 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  P4 *.**.** P1 is
28360 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64   a cursor opened
28370 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50   using VOpen.  P
28380 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20  2 is an address 
28390 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a  to jump to if.**
283a0 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65   the filtered re
283b0 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
283c0 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65  y..**.** P4 is e
283d0 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
283e0 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20  string that was 
283f0 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
28400 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d   xBestIndex.** m
28410 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
28420 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70  ule.  The interp
28430 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
28440 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66  P4 string is lef
28450 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75  t.** to the modu
28460 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
28470 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
28480 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
28490 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
284a0 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
284b0 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a  able specified.*
284c0 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e  * by P1.  The in
284d0 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e  teger query plan
284e0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46   parameter to xF
284f0 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20  ilter is stored 
28500 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  in register.** P
28510 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31  3. Register P3+1
28520 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63   stores the argc
28530 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65   parameter to be
28540 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a   passed to the.*
28550 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  * xFilter method
28560 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32  . Registers P3+2
28570 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20  ..P3+1+argc are 
28580 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69  the argc.** addi
28590 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72  tional parameter
285a0 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73  s which are pass
285b0 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72  ed to.** xFilter
285c0 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74   as argv. Regist
285d0 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20  er P3+2 becomes 
285e0 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73  argv[0] when pas
285f0 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a  sed to xFilter..
28600 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20  **.** A jump is 
28610 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68  made to P2 if th
28620 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74  e result set aft
28630 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75  er filtering wou
28640 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a  ld be empty..*/.
28650 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a  case OP_VFilter:
28660 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
28670 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
28680 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73  t iQuery;.  cons
28690 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
286a0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
286b0 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20   *pQuery;.  Mem 
286c0 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65  *pArgc;.  sqlite
286d0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
286e0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
286f0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
28700 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  b;.  VdbeCursor 
28710 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73  *pCur;.  int res
28720 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  ;.  int i;.  Mem
28730 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75   **apArg;..  pQu
28740 65 72 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ery = &p->aMem[p
28750 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63  Op->p3];.  pArgc
28760 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20   = &pQuery[1];. 
28770 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
28780 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 52 45 47  [pOp->p1];.  REG
28790 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
287a0 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20  >p3, pQuery);.  
287b0 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
287c0 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  tabCursor );.  p
287d0 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75  VtabCursor = pCu
287e0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r->pVtabCursor;.
287f0 20 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43    pVtab = pVtabC
28800 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
28810 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
28820 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20  >pModule;..  /* 
28830 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e  Grab the index n
28840 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70  umber and argc p
28850 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61  arameters */.  a
28860 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e  ssert( (pQuery->
28870 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d  flags&MEM_Int)!=
28880 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67  0 && pArgc->flag
28890 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
288a0 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67  nArg = (int)pArg
288b0 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79  c->u.i;.  iQuery
288c0 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e   = (int)pQuery->
288d0 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  u.i;..  /* Invok
288e0 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  e the xFilter me
288f0 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20  thod */.  {.    
28900 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41  res = 0;.    apA
28910 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
28920 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c     for(i = 0; i<
28930 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
28940 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41    apArg[i] = &pA
28950 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20  rgc[i+1];.      
28960 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 61 70  storeTypeInfo(ap
28970 41 72 67 5b 69 5d 2c 20 30 29 3b 0a 20 20 20 20  Arg[i], 0);.    
28980 7d 0a 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  }..    if( sqlit
28990 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
289a0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
289b0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
289c0 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
289d0 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 69  pVtab);.    p->i
289e0 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b  nVtabMethod = 1;
289f0 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
28a00 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62  e->xFilter(pVtab
28a10 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20  Cursor, iQuery, 
28a20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c  pOp->p4.z, nArg,
28a30 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e   apArg);.    p->
28a40 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30  inVtabMethod = 0
28a50 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
28a60 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
28a70 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
28a80 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72  Msg = pVtab->zEr
28a90 72 4d 73 67 3b 0a 20 20 20 20 70 56 74 61 62 2d  rMsg;.    pVtab-
28aa0 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  >zErrMsg = 0;.  
28ab0 20 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c    sqlite3VtabUnl
28ac0 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a  ock(db, pVtab);.
28ad0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
28ae0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
28af0 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
28b00 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  of(pVtabCursor);
28b10 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73  .    }.    if( s
28b20 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
28b30 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
28b40 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a  due_to_misuse;..
28b50 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
28b60 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
28b70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
28b80 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
28b90 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a   = 0;..  break;.
28ba0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
28bb0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
28bc0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
28bd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
28be0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
28bf0 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20  ode: VColumn P1 
28c00 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
28c10 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20  Store the value 
28c20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  of the P2-th col
28c30 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f  umn of.** the ro
28c40 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  w of the virtual
28c50 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20  -table that the 
28c60 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73  .** P1 cursor is
28c70 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74   pointing to int
28c80 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
28c90 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d  /.case OP_VColum
28ca0 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  n: {.  sqlite3_v
28cb0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
28cc0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
28cd0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
28ce0 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c  em *pDest;.  sql
28cf0 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f  ite3_context sCo
28d00 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75  ntext;..  VdbeCu
28d10 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
28d20 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28d30 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
28d40 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
28d50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
28d60 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
28d70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73  ->nMem );.  pDes
28d80 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
28d90 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 70 43 75  ->p3];.  if( pCu
28da0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
28db0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
28dc0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
28dd0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
28de0 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
28df0 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
28e00 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
28e10 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
28e20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
28e30 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
28e40 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
28e50 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
28e60 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  ext));..  /* The
28e70 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61 79   output cell may
28e80 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
28e90 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
28ea0 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65 20  . Move.  ** the 
28eb0 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73  current contents
28ec0 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20 73   to sContext.s s
28ed0 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75 73  o in case the us
28ee0 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20 2a  er-function .  *
28ef0 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61 6c  * can use the al
28f00 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 20  ready allocated 
28f10 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20 6f  buffer instead o
28f20 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20 0a  f allocating a .
28f30 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20 20    ** new one..  
28f40 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
28f50 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65 78  MemMove(&sContex
28f60 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20 4d  t.s, pDest);.  M
28f70 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 73  emSetTypeFlag(&s
28f80 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e  Context.s, MEM_N
28f90 75 6c 6c 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  ull);..  if( sql
28fa0 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
28fb0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
28fc0 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20  ue_to_misuse;.  
28fd0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  rc = pModule->xC
28fe0 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61  olumn(pCur->pVta
28ff0 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65  bCursor, &sConte
29000 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  xt, pOp->p2);.  
29010 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
29020 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
29030 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
29040 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
29050 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
29060 20 30 3b 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74   0;..  /* Copy t
29070 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
29080 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65   function to the
29090 20 50 33 20 72 65 67 69 73 74 65 72 2e 20 57 65   P3 register. We
290a0 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20 72 65  .  ** do this re
290b0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
290c0 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72  her or not an er
290d0 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74 6f 20  ror occurred to 
290e0 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20  ensure any.  ** 
290f0 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69  dynamic allocati
29100 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73  on in sContext.s
29110 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74 29 20   (a Mem struct) 
29120 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a 20 20  is  released..  
29130 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
29140 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26  ChangeEncoding(&
29150 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f  sContext.s, enco
29160 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45  ding);.  REGISTE
29170 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
29180 20 70 44 65 73 74 29 3b 0a 20 20 73 71 6c 69 74   pDest);.  sqlit
29190 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44  e3VdbeMemMove(pD
291a0 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73  est, &sContext.s
291b0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
291c0 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
291d0 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ..  if( sqlite3S
291e0 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
291f0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
29200 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 7d  e_to_misuse;.  }
29210 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
29220 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73  beMemTooBig(pDes
29230 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  t) ){.    goto t
29240 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
29250 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
29260 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
29270 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
29280 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29290 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
292a0 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20  * Opcode: VNext 
292b0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
292c0 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61  * Advance virtua
292d0 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68  l table P1 to th
292e0 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74  e next row in it
292f0 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64  s result set and
29300 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  .** jump to inst
29310 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c  ruction P2.  Or,
29320 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   if the virtual 
29330 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65  table has reache
29340 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  d.** the end of 
29350 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20  its result set, 
29360 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
29370 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
29380 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
29390 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20  se OP_VNext: {  
293a0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71   /* jump */.  sq
293b0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
293c0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
293d0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
293e0 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  le;.  int res;. 
293f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
29400 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  r;..  res = 0;. 
29410 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
29420 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
29430 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
29440 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
29450 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
29460 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
29470 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
29480 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
29490 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
294a0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
294b0 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
294c0 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f  e->xNext );..  /
294d0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65  * Invoke the xNe
294e0 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74  xt() method of t
294f0 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65  he module. There
29500 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74   is no way for t
29510 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69  he.  ** underlyi
29520 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ng implementatio
29530 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65  n to return an e
29540 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75  rror if one occu
29550 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78  rs during.  ** x
29560 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c  Next(). Instead,
29570 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   if an error occ
29580 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74  urs, true is ret
29590 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e  urned (indicatin
295a0 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74  g that .  ** dat
295b0 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20  a is available) 
295c0 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f  and the error co
295d0 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  de returned when
295e0 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a   xColumn or.  **
295f0 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68   some other meth
29600 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b  od is next invok
29610 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76  ed on the save v
29620 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
29630 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  sor..  */.  if( 
29640 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
29650 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
29660 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
29670 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  .  sqlite3VtabLo
29680 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e  ck(pVtab);.  p->
29690 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31  inVtabMethod = 1
296a0 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
296b0 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 70 56  ->xNext(pCur->pV
296c0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d  tabCursor);.  p-
296d0 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
296e0 30 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  0;.  sqlite3DbFr
296f0 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
29700 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73 67  g);.  p->zErrMsg
29710 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73   = pVtab->zErrMs
29720 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72 72  g;.  pVtab->zErr
29730 4d 73 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  Msg = 0;.  sqlit
29740 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c  e3VtabUnlock(db,
29750 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72   pVtab);.  if( r
29760 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
29770 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
29780 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56  e->xEof(pCur->pV
29790 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  tabCursor);.  }.
297a0 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
297b0 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
297c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
297d0 73 75 73 65 3b 0a 0a 20 20 69 66 28 20 21 72 65  suse;..  if( !re
297e0 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  s ){.    /* If t
297f0 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75  here is data, ju
29800 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
29810 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
29820 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
29830 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
29840 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
29850 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
29860 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
29870 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
29880 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a  de: VRename P1 *
29890 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
298a0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
298b0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
298c0 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
298d0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
298e0 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
298f0 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
29900 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65  orresponding xRe
29910 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65  name method. The
29920 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67   value.** in reg
29930 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73  ister P1 is pass
29940 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20  ed as the zName 
29950 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
29960 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a  xRename method..
29970 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61  */.case OP_VRena
29980 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  me: {.  sqlite3_
29990 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d  vtab *pVtab;.  M
299a0 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56  em *pName;..  pV
299b0 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
299c0 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26  tab;.  pName = &
299d0 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  p->aMem[pOp->p1]
299e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61  ;.  assert( pVta
299f0 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
29a00 61 6d 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ame );.  REGISTE
29a10 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
29a20 20 70 4e 61 6d 65 29 3b 0a 0a 20 20 53 74 72 69   pName);..  Stri
29a30 6e 67 69 66 79 28 70 4e 61 6d 65 2c 20 65 6e 63  ngify(pName, enc
29a40 6f 64 69 6e 67 29 3b 0a 0a 20 20 69 66 28 20 73  oding);..  if( s
29a50 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
29a60 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
29a70 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
29a80 20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63    sqlite3VtabLoc
29a90 6b 28 70 56 74 61 62 29 3b 0a 20 20 72 63 20 3d  k(pVtab);.  rc =
29aa0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
29ab0 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20  >xRename(pVtab, 
29ac0 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c  pName->z);.  sql
29ad0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
29ae0 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d  ->zErrMsg);.  p-
29af0 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
29b00 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74  ->zErrMsg;.  pVt
29b10 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b  ab->zErrMsg = 0;
29b20 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  .  sqlite3VtabUn
29b30 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b  lock(db, pVtab);
29b40 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
29b50 66 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74  fetyOn(db) ) got
29b60 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
29b70 69 73 75 73 65 3b 0a 0a 20 20 62 72 65 61 6b 3b  isuse;..  break;
29b80 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
29b90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
29ba0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
29bb0 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50  pcode: VUpdate P
29bc0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
29bd0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
29be0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
29bf0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
29c00 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
29c10 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
29c20 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
29c30 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
29c40 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  g xUpdate method
29c50 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61  . P2 values.** a
29c60 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65  re contiguous me
29c70 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74  mory cells start
29c80 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73  ing at P3 to pas
29c90 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65  s to the xUpdate
29ca0 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e   .** invocation.
29cb0 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   The value in re
29cc0 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29  gister (P3+P2-1)
29cd0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
29ce0 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65  the .** p2th ele
29cf0 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76  ment of the argv
29d00 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f   array passed to
29d10 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20   xUpdate..**.** 
29d20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  The xUpdate meth
29d30 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c  od will do a DEL
29d40 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54  ETE or an INSERT
29d50 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65   or both..** The
29d60 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74   argv[0] element
29d70 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f   (which correspo
29d80 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65  nds to memory ce
29d90 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65  ll P3).** is the
29da0 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20   rowid of a row 
29db0 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61  to delete.  If a
29dc0 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74  rgv[0] is NULL t
29dd0 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74  hen no .** delet
29de0 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65  ion occurs.  The
29df0 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74   argv[1] element
29e00 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
29e10 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
29e20 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e  .  This can be N
29e30 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20  ULL to have the 
29e40 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65  virtual table se
29e50 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a  lect the new .**
29e60 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c   rowid for itsel
29e70 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65  f.  The subseque
29e80 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  nt elements in t
29e90 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a  he array are .**
29ea0 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63   the values of c
29eb0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65  olumns in the ne
29ec0 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  w row..**.** If 
29ed0 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e  P2==1 then no in
29ee0 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65  sert is performe
29ef0 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74  d.  argv[0] is t
29f00 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61  he rowid of.** a
29f10 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a   row to delete..
29f20 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f  **.** P1 is a bo
29f30 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69  olean flag. If i
29f40 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65  t is set to true
29f50 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65   and the xUpdate
29f60 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63   call.** is succ
29f70 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65  essful, then the
29f80 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
29f90 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  by sqlite3_last_
29fa0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a  insert_rowid() .
29fb0 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ** is set to the
29fc0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
29fd0 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20  wid for the row 
29fe0 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a  just inserted..*
29ff0 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74  /.case OP_VUpdat
2a000 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
2a010 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71  tab *pVtab;.  sq
2a020 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2a030 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72  odule;.  int nAr
2a040 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71  g;.  int i;.  sq
2a050 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64  lite_int64 rowid
2a060 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b  ;.  Mem **apArg;
2a070 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 70  .  Mem *pX;..  p
2a080 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
2a090 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2a0a0 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
2a0b0 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
2a0c0 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70  le;.  nArg = pOp
2a0d0 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
2a0e0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2a0f0 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 70 4d  VTAB );.  if( pM
2a100 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 3d 3d  odule->xUpdate==
2a110 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
2a120 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2a130 72 72 4d 73 67 2c 20 64 62 2c 20 22 72 65 61 64  rrMsg, db, "read
2a140 2d 6f 6e 6c 79 20 74 61 62 6c 65 22 29 3b 0a 20  -only table");. 
2a150 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
2a160 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  RROR;.  }else{. 
2a170 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70     apArg = p->ap
2a180 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 70  Arg;.    pX = &p
2a190 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
2a1a0 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
2a1b0 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
2a1c0 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28    storeTypeInfo(
2a1d0 70 58 2c 20 30 29 3b 0a 20 20 20 20 20 20 61 70  pX, 0);.      ap
2a1e0 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20  Arg[i] = pX;.   
2a1f0 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20     pX++;.    }. 
2a200 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61     if( sqlite3Sa
2a210 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
2a220 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2a230 6d 69 73 75 73 65 3b 0a 20 20 20 20 73 71 6c 69  misuse;.    sqli
2a240 74 65 33 56 74 61 62 4c 6f 63 6b 28 70 56 74 61  te3VtabLock(pVta
2a250 62 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f  b);.    rc = pMo
2a260 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56  dule->xUpdate(pV
2a270 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  tab, nArg, apArg
2a280 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 73  , &rowid);.    s
2a290 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2a2a0 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
2a2b0 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70    p->zErrMsg = p
2a2c0 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20  Vtab->zErrMsg;. 
2a2d0 20 20 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73     pVtab->zErrMs
2a2e0 67 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  g = 0;.    sqlit
2a2f0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 64 62 2c  e3VtabUnlock(db,
2a300 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28   pVtab);.    if(
2a310 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
2a320 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
2a330 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
2a340 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  .    if( pOp->p1
2a350 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   && rc==SQLITE_O
2a360 4b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  K ){.      asser
2a370 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41  t( nArg>1 && apA
2a380 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b  rg[0] && (apArg[
2a390 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  0]->flags&MEM_Nu
2a3a0 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ll) );.      db-
2a3b0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77  >lastRowid = row
2a3c0 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  id;.    }.    p-
2a3d0 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 7d 0a  >nChange++;.  }.
2a3e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2a3f0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2a400 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2a410 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54  ..#ifndef  SQLIT
2a420 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
2a430 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GMAS./* Opcode: 
2a440 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20  Pagecount P1 P2 
2a450 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
2a460 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75  e the current nu
2a470 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
2a480 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
2a490 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a  memory cell P2..
2a4a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63  */.case OP_Pagec
2a4b0 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
2a4c0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
2a4d0 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70  lease */.  int p
2a4e0 31 3b 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 0a  1;.  int nPage;.
2a4f0 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
2a500 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
2a510 3b 20 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71  ; .  pPager = sq
2a520 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
2a530 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 29  db->aDb[p1].pBt)
2a540 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2a550 50 61 67 65 72 50 61 67 65 63 6f 75 6e 74 28 70  PagerPagecount(p
2a560 50 61 67 65 72 2c 20 26 6e 50 61 67 65 29 3b 0a  Pager, &nPage);.
2a570 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2a580 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  _OK ){.    pOut-
2a590 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
2a5a0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
2a5b0 3d 20 6e 50 61 67 65 3b 0a 20 20 7d 0a 20 20 62  = nPage;.  }.  b
2a5c0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
2a5d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a5e0 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f 70 63  MIT_TRACE./* Opc
2a5f0 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a 20 2a  ode: Trace * * *
2a600 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74   P4 *.**.** If t
2a610 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65  racing is enable
2a620 64 20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65  d (by the sqlite
2a630 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65 72  3_trace()) inter
2a640 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  face, then.** th
2a650 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63  e UTF-8 string c
2a660 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69  ontained in P4 i
2a670 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65  s emitted on the
2a680 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e   trace callback.
2a690 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 63  .*/.case OP_Trac
2a6a0 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 54 72  e: {.  char *zTr
2a6b0 61 63 65 3b 0a 0a 20 20 7a 54 72 61 63 65 20 3d  ace;..  zTrace =
2a6c0 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
2a6d0 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
2a6e0 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65  l);.  if( zTrace
2a6f0 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
2a700 78 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  xTrace ){.      
2a710 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70  db->xTrace(db->p
2a720 54 72 61 63 65 41 72 67 2c 20 7a 54 72 61 63 65  TraceArg, zTrace
2a730 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20  );.    }.#ifdef 
2a740 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
2a750 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20   if( (db->flags 
2a760 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  & SQLITE_SqlTrac
2a770 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  e)!=0 ){.      s
2a780 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
2a790 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73  f("SQL-trace: %s
2a7a0 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  \n", zTrace);.  
2a7b0 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
2a7c0 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
2a7d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2a7e0 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dif.../* Opcode:
2a7f0 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a   Noop * * * * *.
2a800 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67  **.** Do nothing
2a810 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  .  This instruct
2a820 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65  ion is often use
2a830 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a  ful as a jump.**
2a840 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f   destination..*/
2a850 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63  ./*.** The magic
2a860 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20   Explain opcode 
2a870 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65  are only inserte
2a880 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d  d when explain==
2a890 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74  2 (which.** is t
2a8a0 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45  o say when the E
2a8b0 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
2a8c0 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64  N syntax is used
2a8d0 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  .).** This opcod
2a8e0 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d  e records inform
2a8f0 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f  ation from the o
2a900 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73  ptimizer.  It is
2a910 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   the.** the same
2a920 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68   as a no-op.  Th
2a930 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20  is opcodesnever 
2a940 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61  appears in a rea
2a950 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f  l VM program..*/
2a960 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20  .default: {     
2a970 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
2a980 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61  really OP_Noop a
2a990 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f  nd OP_Explain */
2a9a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a  .  break;.}../**
2a9b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a9c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a9d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a9e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2a9f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54  ***********.** T
2aa00 68 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20  he cases of the 
2aa10 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
2aa20 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65   above this line
2aa30 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69   should all be i
2aa40 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20  ndented.** by 6 
2aa50 73 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65  spaces.  But the
2aa60 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61   left-most 6 spa
2aa70 63 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ces have been re
2aa80 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65  moved to improve
2aa90 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c   the.** readabil
2aaa0 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20  ity.  From this 
2aab0 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74  point on down, t
2aac0 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  he normal indent
2aad0 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a  ation rules are.
2aae0 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a  ** restored..***
2aaf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ab30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20  **********/.    
2ab40 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  }..#ifdef VDBE_P
2ab50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20  ROFILE.    {.   
2ab60 20 20 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d     u64 elapsed =
2ab70 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
2ab80 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20   - start;.      
2ab90 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65  pOp->cycles += e
2aba0 6c 61 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f  lapsed;.      pO
2abb0 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a  p->cnt++;.#if 0.
2abc0 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28          fprintf(
2abd0 73 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20  stdout, "%10llu 
2abe0 22 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20  ", elapsed);.   
2abf0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2ac00 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
2ac10 6f 72 69 67 50 63 2c 20 26 70 2d 3e 61 4f 70 5b  origPc, &p->aOp[
2ac20 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69 66  origPc]);.#endif
2ac30 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
2ac40 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77     /* The follow
2ac50 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f  ing code adds no
2ac60 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74  thing to the act
2ac70 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  ual functionalit
2ac80 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  y.    ** of the 
2ac90 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20  program.  It is 
2aca0 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65  only here for te
2acb0 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67  sting and debugg
2acc0 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74  ing..    ** On t
2acd0 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69  he other hand, i
2ace0 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20  t does burn CPU 
2acf0 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d  cycles every tim
2ad00 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a  e through.    **
2ad10 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c   the evaluator l
2ad20 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20  oop.  So we can 
2ad30 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65  leave it out whe
2ad40 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69  n NDEBUG is defi
2ad50 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e  ned..    */.#ifn
2ad60 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61  def NDEBUG.    a
2ad70 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26 26  ssert( pc>=-1 &&
2ad80 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23   pc<p->nOp );..#
2ad90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2ada0 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74 72  UG.    if( p->tr
2adb0 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ace ){.      if(
2adc0 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74 66   rc!=0 ) fprintf
2add0 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25 64  (p->trace,"rc=%d
2ade0 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69  \n",rc);.      i
2adf0 66 28 20 6f 70 50 72 6f 70 65 72 74 79 20 26 20  f( opProperty & 
2ae00 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45  OPFLG_OUT2_PRERE
2ae10 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
2ae20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
2ae30 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32  ->trace, pOp->p2
2ae40 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d  , pOut);.      }
2ae50 0a 20 20 20 20 20 20 69 66 28 20 6f 70 50 72 6f  .      if( opPro
2ae60 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55  perty & OPFLG_OU
2ae70 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  T3 ){.        re
2ae80 67 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74  gisterTrace(p->t
2ae90 72 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 70  race, pOp->p3, p
2aea0 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Out);.      }.  
2aeb0 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53    }.#endif  /* S
2aec0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23  QLITE_DEBUG */.#
2aed0 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47  endif  /* NDEBUG
2aee0 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20   */.  }  /* The 
2aef0 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b  end of the for(;
2af00 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70  ;) loop the loop
2af10 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65  s through opcode
2af20 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65  s */..  /* If we
2af30 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
2af40 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  t, it means that
2af50 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69   execution is fi
2af60 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a  nished with.  **
2af70 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d   an error of som
2af80 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62  e kind..  */.vdb
2af90 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20  e_error_halt:.  
2afa0 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20  assert( rc );.  
2afb0 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71  p->rc = rc;.  sq
2afc0 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
2afd0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2afe0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
2aff0 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
2b000 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51  d = 1;.  rc = SQ
2b010 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f  LITE_ERROR;..  /
2b020 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * This is the on
2b030 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68  ly way out of th
2b040 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57  is procedure.  W
2b050 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72  e have to.  ** r
2b060 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78  elease the mutex
2b070 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61  es on btrees tha
2b080 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20  t were acquired 
2b090 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e  at the.  ** top.
2b0a0 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a   */.vdbe_return:
2b0b0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d  .  sqlite3BtreeM
2b0c0 75 74 65 78 41 72 72 61 79 4c 65 61 76 65 28 26  utexArrayLeave(&
2b0d0 70 2d 3e 61 4d 75 74 65 78 29 3b 0a 20 20 72 65  p->aMutex);.  re
2b0e0 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a  turn rc;..  /* J
2b0f0 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
2b100 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
2b110 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49  larger than SQLI
2b120 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20  TE_MAX_LENGTH.  
2b130 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  ** is encountere
2b140 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a  d..  */.too_big:
2b150 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
2b160 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2b170 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f 72 20   db, "string or 
2b180 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a  blob too big");.
2b190 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f    rc = SQLITE_TO
2b1a0 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OBIG;.  goto vdb
2b1b0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
2b1c0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2b1d0 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
2b1e0 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65  ails..  */.no_me
2b1f0 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  m:.  db->mallocF
2b200 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c  ailed = 1;.  sql
2b210 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2b220 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2b230 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b  out of memory");
2b240 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  .  rc = SQLITE_N
2b250 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OMEM;.  goto vdb
2b260 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
2b270 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2b280 20 66 6f 72 20 61 6e 20 53 51 4c 49 54 45 5f 4d   for an SQLITE_M
2b290 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 20 20 2a  ISUSE error..  *
2b2a0 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  /.abort_due_to_m
2b2b0 69 73 75 73 65 3a 0a 20 20 72 63 20 3d 20 53 51  isuse:.  rc = SQ
2b2c0 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 2f  LITE_MISUSE;.  /
2b2d0 2a 20 46 61 6c 6c 20 74 68 72 75 20 69 6e 74 6f  * Fall thru into
2b2e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b2f0 72 6f 72 20 2a 2f 0a 0a 20 20 2f 2a 20 4a 75 6d  ror */..  /* Jum
2b300 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e  p to here for an
2b310 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20  y other kind of 
2b320 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68  fatal error.  Th
2b330 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a  e "rc" variable.
2b340 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64    ** should hold
2b350 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65   the error numbe
2b360 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75  r..  */.abort_du
2b370 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73  e_to_error:.  as
2b380 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67  sert( p->zErrMsg
2b390 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d  ==0 );.  if( db-
2b3a0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
2b3b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
2b3c0 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  M;.  if( rc!=SQL
2b3d0 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20  ITE_IOERR_NOMEM 
2b3e0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
2b3f0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2b400 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
2b410 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
2b420 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  );.  }.  goto vd
2b430 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
2b440 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
2b450 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33  e if the sqlite3
2b460 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49  _interrupt() API
2b470 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72   sets the interr
2b480 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20  upt.  ** flag.. 
2b490 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
2b4a0 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73  _interrupt:.  as
2b4b0 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49  sert( db->u1.isI
2b4c0 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20  nterrupted );.  
2b4d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
2b4e0 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d  RRUPT;.  p->rc =
2b4f0 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65   rc;.  sqlite3Se
2b500 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2b510 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
2b520 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
2b530 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  );.  goto vdbe_e
2b540 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a           rror_halt;.}.