/ Hex Artifact Content
Login

Artifact be81532805ee6fc1fe7bd2e1c82cf4a09b7b3061:


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 37 38 33 20 32 30 30 38  e.c,v 1.783 2008
0850: 2f 31 30 2f 32 37 20 31 33 3a 35 39 3a 33 34 20  /10/27 13:59:34 
0860: 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20  danielk1977 Exp 
0870: 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  $.*/.#include "s
0880: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0890: 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23  lude <ctype.h>.#
08a0: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 49 6e 74  include "vdbeInt
08b0: 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .h"../*.** The f
08c0: 6f 6c 6c 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20  ollowing global 
08d0: 76 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72  variable is incr
08e0: 65 6d 65 6e 74 65 64 20 65 76 65 72 79 20 74 69  emented every ti
08f0: 6d 65 20 61 20 63 75 72 73 6f 72 0a 2a 2a 20 6d  me a cursor.** m
0900: 6f 76 65 73 2c 20 65 69 74 68 65 72 20 62 79 20  oves, either by 
0910: 74 68 65 20 4f 50 5f 4d 6f 76 65 58 58 2c 20 4f  the OP_MoveXX, O
0920: 50 5f 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 50 72  P_Next, or OP_Pr
0930: 65 76 20 6f 70 63 6f 64 65 73 2e 20 20 54 68 65  ev opcodes.  The
0940: 20 74 65 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75   test.** procedu
0950: 72 65 73 20 75 73 65 20 74 68 69 73 20 69 6e 66  res use this inf
0960: 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65  ormation to make
0970: 20 73 75 72 65 20 74 68 61 74 20 69 6e 64 69 63   sure that indic
0980: 65 73 20 61 72 65 0a 2a 2a 20 77 6f 72 6b 69 6e  es are.** workin
0990: 67 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68  g correctly.  Th
09a0: 69 73 20 76 61 72 69 61 62 6c 65 20 68 61 73 20  is variable has 
09b0: 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65  no function othe
09c0: 72 20 74 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c  r than to.** hel
09d0: 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f 72  p verify the cor
09e0: 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f  rect operation o
09f0: 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a  f the library..*
0a00: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0a10: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
0a20: 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20 3d 20  _search_count = 
0a30: 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0;.#endif../*.**
0a40: 20 57 68 65 6e 20 74 68 69 73 20 67 6c 6f 62 61   When this globa
0a50: 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 70 6f  l variable is po
0a60: 73 69 74 69 76 65 2c 20 69 74 20 67 65 74 73 20  sitive, it gets 
0a70: 64 65 63 72 65 6d 65 6e 74 65 64 20 6f 6e 63 65  decremented once
0a80: 20 62 65 66 6f 72 65 0a 2a 2a 20 65 61 63 68 20   before.** each 
0a90: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74  instruction in t
0aa0: 68 65 20 56 44 42 45 2e 20 20 57 68 65 6e 20 72  he VDBE.  When r
0ab0: 65 61 63 68 65 73 20 7a 65 72 6f 2c 20 74 68 65  eaches zero, the
0ac0: 20 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65   u1.isInterrupte
0ad0: 64 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68  d.** field of th
0ae0: 65 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  e sqlite3 struct
0af0: 75 72 65 20 69 73 20 73 65 74 20 69 6e 20 6f 72  ure is set in or
0b00: 64 65 72 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  der to simulate 
0b10: 61 6e 64 20 69 6e 74 65 72 72 75 70 74 2e 0a 2a  and interrupt..*
0b20: 2a 0a 2a 2a 20 54 68 69 73 20 66 61 63 69 6c 69  *.** This facili
0b30: 74 79 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ty is used for t
0b40: 65 73 74 69 6e 67 20 70 75 72 70 6f 73 65 73 20  esting purposes 
0b50: 6f 6e 6c 79 2e 20 20 49 74 20 64 6f 65 73 20 6e  only.  It does n
0b60: 6f 74 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 69  ot function.** i
0b70: 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 62 75  n an ordinary bu
0b80: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ild..*/.#ifdef S
0b90: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0ba0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
0bb0: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0bc0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0bd0: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0be0: 6c 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  le is incremente
0bf0: 64 20 65 61 63 68 20 74 79 70 65 20 74 68 65 20  d each type the 
0c00: 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 0a 2a  OP_Sort opcode.*
0c10: 2a 20 69 73 20 65 78 65 63 75 74 65 64 2e 20 20  * is executed.  
0c20: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0c30: 72 65 73 20 75 73 65 20 74 68 69 73 20 69 6e 66  res use this inf
0c40: 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61 6b 65  ormation to make
0c50: 20 73 75 72 65 20 74 68 61 74 0a 2a 2a 20 73 6f   sure that.** so
0c60: 72 74 69 6e 67 20 69 73 20 6f 63 63 75 72 72 69  rting is occurri
0c70: 6e 67 20 6f 72 20 6e 6f 74 20 6f 63 63 75 72 72  ng or not occurr
0c80: 69 6e 67 20 61 74 20 61 70 70 72 6f 70 72 69 61  ing at appropria
0c90: 74 65 20 74 69 6d 65 73 2e 20 20 20 54 68 69 73  te times.   This
0ca0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 68 61 73   variable.** has
0cb0: 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 6f 74 68   no function oth
0cc0: 65 72 20 74 68 61 6e 20 74 6f 20 68 65 6c 70 20  er than to help 
0cd0: 76 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65  verify the corre
0ce0: 63 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20  ct operation of 
0cf0: 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72 79 2e 0a  the.** library..
0d00: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
0d10: 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65  _TEST.int sqlite
0d20: 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 20 3d 20 30  3_sort_count = 0
0d30: 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
0d40: 54 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20  The next global 
0d50: 76 61 72 69 61 62 6c 65 20 72 65 63 6f 72 64 73  variable records
0d60: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
0d70: 20 6c 61 72 67 65 73 74 20 4d 45 4d 5f 42 6c 6f   largest MEM_Blo
0d80: 62 0a 2a 2a 20 6f 72 20 4d 45 4d 5f 53 74 72 20  b.** or MEM_Str 
0d90: 74 68 61 74 20 68 61 73 20 62 65 65 6e 20 75 73  that has been us
0da0: 65 64 20 62 79 20 61 20 56 44 42 45 20 6f 70 63  ed by a VDBE opc
0db0: 6f 64 65 2e 20 20 54 68 65 20 74 65 73 74 20 70  ode.  The test p
0dc0: 72 6f 63 65 64 75 72 65 73 0a 2a 2a 20 75 73 65  rocedures.** use
0dd0: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0de0: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0df0: 68 61 74 20 74 68 65 20 7a 65 72 6f 2d 62 6c 6f  hat the zero-blo
0e00: 62 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a  b functionality.
0e10: 2a 2a 20 69 73 20 77 6f 72 6b 69 6e 67 20 63 6f  ** is working co
0e20: 72 72 65 63 74 6c 79 2e 20 20 20 54 68 69 73 20  rrectly.   This 
0e30: 76 61 72 69 61 62 6c 65 20 68 61 73 20 6e 6f 20  variable has no 
0e40: 66 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74  function other t
0e50: 68 61 6e 20 74 6f 0a 2a 2a 20 68 65 6c 70 20 76  han to.** help v
0e60: 65 72 69 66 79 20 74 68 65 20 63 6f 72 72 65 63  erify the correc
0e70: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  t operation of t
0e80: 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  he library..*/.#
0e90: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
0ea0: 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61  T.int sqlite3_ma
0eb0: 78 5f 62 6c 6f 62 73 69 7a 65 20 3d 20 30 3b 0a  x_blobsize = 0;.
0ec0: 73 74 61 74 69 63 20 76 6f 69 64 20 75 70 64 61  static void upda
0ed0: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 4d 65  teMaxBlobsize(Me
0ee0: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 28 70 2d  m *p){.  if( (p-
0ef0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
0f00: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20  r|MEM_Blob))!=0 
0f10: 26 26 20 70 2d 3e 6e 3e 73 71 6c 69 74 65 33 5f  && p->n>sqlite3_
0f20: 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 20 29 7b 0a  max_blobsize ){.
0f30: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f      sqlite3_max_
0f40: 62 6c 6f 62 73 69 7a 65 20 3d 20 70 2d 3e 6e 3b  blobsize = p->n;
0f50: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  .  }.}.#endif../
0f60: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0f70: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0f80: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0f90: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0fa0: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0fb0: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0fc0: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0fd0: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0fe0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0ff0: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
1000: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
1010: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
1020: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
1030: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
1040: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
1050: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
1060: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
1070: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
1080: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68  /*.** Convert th
1090: 65 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72  e given register
10a0: 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69   into a string i
10b0: 66 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a  f it isn't one.*
10c0: 2a 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72  * already. Retur
10d0: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20  n non-zero if a 
10e0: 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a  malloc() fails..
10f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e  */.#define Strin
1100: 67 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20  gify(P, enc) \. 
1110: 20 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73    if(((P)->flags
1120: 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c  &(MEM_Str|MEM_Bl
1130: 6f 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74  ob))==0 && sqlit
1140: 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
1150: 66 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20  fy(P,enc)) \.   
1160: 20 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b    { goto no_mem;
1170: 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68   }../*.** An eph
1180: 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61  emeral string va
1190: 6c 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62  lue (signified b
11a0: 79 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20  y the MEM_Ephem 
11b0: 66 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a  flag) contains.*
11c0: 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  * a pointer to a
11d0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
11e0: 6f 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68  ocated string wh
11f0: 65 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65  ere some other e
1200: 6e 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70  ntity.** is resp
1210: 6f 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c  onsible for deal
1220: 6c 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74  locating that st
1230: 72 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74  ring.  Because t
1240: 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64  he register.** d
1250: 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20  oes not control 
1260: 74 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d  the string, it m
1270: 69 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20  ight be deleted 
1280: 77 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69  without the regi
1290: 73 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20  ster.** knowing 
12a0: 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  it..**.** This r
12b0: 6f 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20  outine converts 
12c0: 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  an ephemeral str
12d0: 69 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d  ing into a dynam
12e0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
12f0: 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20  .** string that 
1300: 74 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73  the register its
1310: 65 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49  elf controls.  I
1320: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
1330: 74 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e  t.** converts an
1340: 20 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e   MEM_Ephem strin
1350: 67 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79  g into an MEM_Dy
1360: 6e 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65  n string..*/.#de
1370: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1380: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1390: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
13a0: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
13b0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
13c0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
13d0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
13e0: 6d 65 6d 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c  mem;}../*.** Cal
13f0: 6c 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  l sqlite3VdbeMem
1400: 45 78 70 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20  ExpandBlob() on 
1410: 74 68 65 20 73 75 70 70 6c 69 65 64 20 76 61 6c  the supplied val
1420: 75 65 20 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a  ue (type Mem*).*
1430: 2a 20 50 20 69 66 20 72 65 71 75 69 72 65 64 2e  * P if required.
1440: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 61  .*/.#define Expa
1450: 6e 64 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d  ndBlob(P) (((P)-
1460: 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29  >flags&MEM_Zero)
1470: 3f 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45  ?sqlite3VdbeMemE
1480: 78 70 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a  xpandBlob(P):0).
1490: 0a 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20  ./*.** Argument 
14a0: 70 4d 65 6d 20 70 6f 69 6e 74 73 20 61 74 20 61  pMem points at a
14b0: 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 77   register that w
14c0: 69 6c 6c 20 62 65 20 70 61 73 73 65 64 20 74 6f  ill be passed to
14d0: 20 61 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e   a.** user-defin
14e0: 65 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72  ed function or r
14f0: 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75  eturned to the u
1500: 73 65 72 20 61 73 20 74 68 65 20 72 65 73 75 6c  ser as the resul
1510: 74 20 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a  t of a query..**
1520: 20 54 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75   The second argu
1530: 6d 65 6e 74 2c 20 27 64 62 5f 65 6e 63 27 20 69  ment, 'db_enc' i
1540: 73 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64  s the text encod
1550: 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 65 20  ing used by the 
1560: 76 64 62 65 20 66 6f 72 0a 2a 2a 20 72 65 67 69  vdbe for.** regi
1570: 73 74 65 72 20 76 61 72 69 61 62 6c 65 73 2e 20  ster variables. 
1580: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65   This routine se
1590: 74 73 20 74 68 65 20 70 4d 65 6d 2d 3e 65 6e 63  ts the pMem->enc
15a0: 20 61 6e 64 20 70 4d 65 6d 2d 3e 74 79 70 65 0a   and pMem->type.
15b0: 2a 2a 20 76 61 72 69 61 62 6c 65 73 20 75 73 65  ** variables use
15c0: 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
15d0: 5f 76 61 6c 75 65 5f 2a 28 29 20 72 6f 75 74 69  _value_*() routi
15e0: 6e 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  nes..*/.#define 
15f0: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 41 2c  storeTypeInfo(A,
1600: 42 29 20 5f 73 74 6f 72 65 54 79 70 65 49 6e 66  B) _storeTypeInf
1610: 6f 28 41 29 0a 73 74 61 74 69 63 20 76 6f 69 64  o(A).static void
1620: 20 5f 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28   _storeTypeInfo(
1630: 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e  Mem *pMem){.  in
1640: 74 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e  t flags = pMem->
1650: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c 61  flags;.  if( fla
1660: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
1670: 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20  .    pMem->type 
1680: 3d 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20  = SQLITE_NULL;. 
1690: 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c   }.  else if( fl
16a0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
16b0: 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20  .    pMem->type 
16c0: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52  = SQLITE_INTEGER
16d0: 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28  ;.  }.  else if(
16e0: 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61   flags & MEM_Rea
16f0: 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  l ){.    pMem->t
1700: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f  ype = SQLITE_FLO
1710: 41 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  AT;.  }.  else i
1720: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  f( flags & MEM_S
1730: 74 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e  tr ){.    pMem->
1740: 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54 45  type = SQLITE_TE
1750: 58 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  XT;.  }else{.   
1760: 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51   pMem->type = SQ
1770: 4c 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d  LITE_BLOB;.  }.}
1780: 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 70 65 72 74 69  ../*.** Properti
1790: 65 73 20 6f 66 20 6f 70 63 6f 64 65 73 2e 20 20  es of opcodes.  
17a0: 54 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41  The OPFLG_INITIA
17b0: 4c 49 5a 45 52 20 6d 61 63 72 6f 20 69 73 0a 2a  LIZER macro is.*
17c0: 2a 20 63 72 65 61 74 65 64 20 62 79 20 6d 6b 6f  * created by mko
17d0: 70 63 6f 64 65 68 2e 61 77 6b 20 64 75 72 69 6e  pcodeh.awk durin
17e0: 67 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 2e 20 20  g compilation.  
17f0: 44 61 74 61 20 69 73 20 6f 62 74 61 69 6e 65 64  Data is obtained
1800: 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 63 6f 6d  .** from the com
1810: 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ments following 
1820: 74 68 65 20 22 63 61 73 65 20 4f 50 5f 78 78 78  the "case OP_xxx
1830: 78 3a 22 20 73 74 61 74 65 6d 65 6e 74 73 20 69  x:" statements i
1840: 6e 0a 2a 2a 20 74 68 69 73 20 66 69 6c 65 2e 20  n.** this file. 
1850: 20 0a 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73   .*/.static cons
1860: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
1870: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
1880: 20 3d 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c   = OPFLG_INITIAL
1890: 49 5a 45 52 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  IZER;../*.** Ret
18a0: 75 72 6e 20 74 72 75 65 20 69 66 20 61 6e 20 6f  urn true if an o
18b0: 70 63 6f 64 65 20 68 61 73 20 61 6e 79 20 6f 66  pcode has any of
18c0: 20 74 68 65 20 4f 50 46 4c 47 5f 78 78 78 20 70   the OPFLG_xxx p
18d0: 72 6f 70 65 72 74 69 65 73 0a 2a 2a 20 73 70 65  roperties.** spe
18e0: 63 69 66 69 65 64 20 62 79 20 6d 61 73 6b 2e 0a  cified by mask..
18f0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  */.int sqlite3Vd
1900: 62 65 4f 70 63 6f 64 65 48 61 73 50 72 6f 70 65  beOpcodeHasPrope
1910: 72 74 79 28 69 6e 74 20 6f 70 63 6f 64 65 2c 20  rty(int opcode, 
1920: 69 6e 74 20 6d 61 73 6b 29 7b 0a 20 20 61 73 73  int mask){.  ass
1930: 65 72 74 28 20 6f 70 63 6f 64 65 3e 30 20 26 26  ert( opcode>0 &&
1940: 20 6f 70 63 6f 64 65 3c 73 69 7a 65 6f 66 28 6f   opcode<sizeof(o
1950: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 29 20 29  pcodeProperty) )
1960: 3b 0a 20 20 72 65 74 75 72 6e 20 28 6f 70 63 6f  ;.  return (opco
1970: 64 65 50 72 6f 70 65 72 74 79 5b 6f 70 63 6f 64  deProperty[opcod
1980: 65 5d 26 6d 61 73 6b 29 21 3d 30 3b 0a 7d 0a 0a  e]&mask)!=0;.}..
1990: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 63  /*.** Allocate c
19a0: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
19b0: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
19c0: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
19d0: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
19e0: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
19f0: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 43  ory..*/.static C
1a00: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1a10: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1a20: 2c 20 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 0a  , .  int iCur, .
1a30: 20 20 4f 70 20 2a 70 4f 70 2c 0a 20 20 69 6e 74    Op *pOp,.  int
1a40: 20 69 44 62 2c 20 0a 20 20 69 6e 74 20 69 73 42   iDb, .  int isB
1a50: 74 72 65 65 43 75 72 73 6f 72 0a 29 7b 0a 20 20  treeCursor.){.  
1a60: 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65 6d 6f  /* Find the memo
1a70: 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77 69 6c  ry cell that wil
1a80: 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f  l be used to sto
1a90: 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66 20 6d  re the blob of m
1aa0: 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71 75 69  emory.  ** requi
1ab0: 72 65 64 20 66 6f 72 20 74 68 69 73 20 43 75 72  red for this Cur
1ac0: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1ad0: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1ae0: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1af0: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1b00: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1b10: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1b20: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1b30: 20 2a 2a 20 43 75 72 73 6f 72 20 73 74 72 75 63   ** Cursor struc
1b40: 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c  ture for the fol
1b50: 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a  lowing reasons:.
1b60: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f    **.  **   * So
1b70: 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e  metimes cursor n
1b80: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
1b90: 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20  for a couple of 
1ba0: 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20  different.  **  
1bb0: 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61     purposes in a
1bc0: 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54   vdbe program. T
1bd0: 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65  he different use
1be0: 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a  s might require.
1bf0: 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65    **     differe
1c00: 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74  nt sized allocat
1c10: 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  ions. Memory cel
1c20: 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61  ls provide growa
1c30: 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c  ble.  **     all
1c40: 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  ocations..  **. 
1c50: 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69   **   * When usi
1c60: 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  ng ENABLE_MEMORY
1c70: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d  _MANAGEMENT, mem
1c80: 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73  ory cell buffers
1c90: 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65   can.  **     be
1ca0: 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69   freed lazily vi
1cb0: 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65  a the sqlite3_re
1cc0: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41  lease_memory() A
1cd0: 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20  PI. This.  **   
1ce0: 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20    minimizes the 
1cf0: 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63  number of malloc
1d00: 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74   calls made by t
1d10: 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a  he system..  **.
1d20: 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    ** Memory cell
1d30: 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72  s for cursors ar
1d40: 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74  e allocated at t
1d50: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64  he top of the ad
1d60: 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65  dress.  ** space
1d70: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  . Memory cell (p
1d80: 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f  ->nMem) correspo
1d90: 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e  nds to cursor 0.
1da0: 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20   Space for.  ** 
1db0: 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61  cursor 1 is mana
1dc0: 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65  ged by memory ce
1dd0: 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20  ll (p->nMem-1), 
1de0: 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20  etc..  */.  Mem 
1df0: 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pMem = &p->aMem
1e00: 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a  [p->nMem-iCur];.
1e10: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
1e20: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1e30: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 6f 70 63  .  /* If the opc
1e40: 6f 64 65 20 6f 66 20 70 4f 70 20 69 73 20 4f 50  ode of pOp is OP
1e50: 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 2c 20  _SetNumColumns, 
1e60: 74 68 65 6e 20 70 4f 70 2d 3e 70 32 20 63 6f 6e  then pOp->p2 con
1e70: 74 61 69 6e 73 0a 20 20 2a 2a 20 74 68 65 20 6e  tains.  ** the n
1e80: 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
1e90: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 63  in the records c
1ea0: 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the 
1eb0: 74 61 62 6c 65 20 6f 72 0a 20 20 2a 2a 20 69 6e  table or.  ** in
1ec0: 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1ed0: 2e 20 55 73 65 20 74 68 69 73 20 74 6f 20 72 65  . Use this to re
1ee0: 73 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20  serve space for 
1ef0: 74 68 65 20 0a 20 20 2a 2a 20 43 75 72 73 6f 72  the .  ** Cursor
1f00: 2e 61 54 79 70 65 5b 5d 20 61 72 72 61 79 2e 0a  .aType[] array..
1f10: 20 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c    */.  int nFiel
1f20: 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  d = 0;.  if( pOp
1f30: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 74  ->opcode==OP_Set
1f40: 4e 75 6d 43 6f 6c 75 6d 6e 73 20 7c 7c 20 70 4f  NumColumns || pO
1f50: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1f60: 65 6e 45 70 68 65 6d 65 72 61 6c 20 29 7b 0a 20  enEphemeral ){. 
1f70: 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1f80: 3e 70 32 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65  >p2;.  }.  nByte
1f90: 20 3d 20 0a 20 20 20 20 20 20 73 69 7a 65 6f 66   = .      sizeof
1fa0: 28 43 75 72 73 6f 72 29 20 2b 20 0a 20 20 20 20  (Cursor) + .    
1fb0: 20 20 28 69 73 42 74 72 65 65 43 75 72 73 6f 72    (isBtreeCursor
1fc0: 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72  ?sqlite3BtreeCur
1fd0: 73 6f 72 53 69 7a 65 28 29 3a 30 29 20 2b 20 0a  sorSize():0) + .
1fe0: 20 20 20 20 20 20 32 2a 6e 46 69 65 6c 64 2a 73        2*nField*s
1ff0: 69 7a 65 6f 66 28 75 33 32 29 3b 0a 0a 20 20 61  izeof(u32);..  a
2000: 73 73 65 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e  ssert( iCur<p->n
2010: 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
2020: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 29  p->apCsr[iCur] )
2030: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2040: 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70  eFreeCursor(p, p
2050: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a  ->apCsr[iCur]);.
2060: 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75      p->apCsr[iCu
2070: 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  r] = 0;.  }.  if
2080: 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c  ( SQLITE_OK==sql
2090: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
20a0: 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30 29 20  pMem, nByte, 0) 
20b0: 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b  ){.    p->apCsr[
20c0: 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20 28 43  iCur] = pCx = (C
20d0: 75 72 73 6f 72 20 2a 29 70 4d 65 6d 2d 3e 7a 3b  ursor *)pMem->z;
20e0: 0a 20 20 20 20 6d 65 6d 73 65 74 28 70 4d 65 6d  .    memset(pMem
20f0: 2d 3e 7a 2c 20 30 2c 20 6e 42 79 74 65 29 3b 0a  ->z, 0, nByte);.
2100: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
2110: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
2120: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
2130: 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b 0a    if( nField ){.
2140: 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70 65        pCx->aType
2150: 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d 2d   = (u32 *)&pMem-
2160: 3e 7a 5b 73 69 7a 65 6f 66 28 43 75 72 73 6f 72  >z[sizeof(Cursor
2170: 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  )];.    }.    if
2180: 28 20 69 73 42 74 72 65 65 43 75 72 73 6f 72 20  ( isBtreeCursor 
2190: 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 70 43  ){.      pCx->pC
21a0: 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72 73 6f  ursor = (BtCurso
21b0: 72 20 2a 29 26 70 4d 65 6d 2d 3e 7a 5b 73 69 7a  r *)&pMem->z[siz
21c0: 65 6f 66 28 43 75 72 73 6f 72 29 2b 32 2a 6e 46  eof(Cursor)+2*nF
21d0: 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29  ield*sizeof(u32)
21e0: 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  ];.    }.  }.  r
21f0: 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a  eturn pCx;.}../*
2200: 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65  .** Try to conve
2210: 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20  rt a value into 
2220: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
2230: 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63  entation if we c
2240: 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68  an.** do so with
2250: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f  out loss of info
2260: 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rmation.  In oth
2270: 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65  er words, if the
2280: 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73   string.** looks
2290: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
22a0: 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20  convert it into 
22b0: 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74  a number.  If it
22c0: 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f   does not.** loo
22d0: 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c  k like a number,
22e0: 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e   leave it alone.
22f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2300: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2310: 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b  nity(Mem *pRec){
2320: 0a 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c  .  if( (pRec->fl
2330: 61 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c  ags & (MEM_Real|
2340: 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a  MEM_Int))==0 ){.
2350: 20 20 20 20 69 6e 74 20 72 65 61 6c 6e 75 6d 3b      int realnum;
2360: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2370: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
2380: 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20 28  pRec);.    if( (
2390: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
23a0: 53 74 72 29 0a 20 20 20 20 20 20 20 20 20 26 26  Str).         &&
23b0: 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 62 65 72   sqlite3IsNumber
23c0: 28 70 52 65 63 2d 3e 7a 2c 20 26 72 65 61 6c 6e  (pRec->z, &realn
23d0: 75 6d 2c 20 70 52 65 63 2d 3e 65 6e 63 29 20 29  um, pRec->enc) )
23e0: 7b 0a 20 20 20 20 20 20 69 36 34 20 76 61 6c 75  {.      i64 valu
23f0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
2400: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2410: 6e 67 28 70 52 65 63 2c 20 53 51 4c 49 54 45 5f  ng(pRec, SQLITE_
2420: 55 54 46 38 29 3b 0a 20 20 20 20 20 20 69 66 28  UTF8);.      if(
2430: 20 21 72 65 61 6c 6e 75 6d 20 26 26 20 73 71 6c   !realnum && sql
2440: 69 74 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d  ite3Atoi64(pRec-
2450: 3e 7a 2c 20 26 76 61 6c 75 65 29 20 29 7b 0a 20  >z, &value) ){. 
2460: 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e 69         pRec->u.i
2470: 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20   = value;.      
2480: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
2490: 28 70 52 65 63 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pRec, MEM_Int);
24a0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
24b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
24c0: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 52 65 63  eMemRealify(pRec
24d0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
24e0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
24f0: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
2500: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
2510: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
2520: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
2530: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
2540: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
2550: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
2560: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
2570: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
2580: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2590: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
25a0: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
25b0: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
25c0: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
25d0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
25e0: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
25f0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
2600: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
2610: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2620: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
2630: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
2640: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
2650: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
2660: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
2670: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2680: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2690: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
26a0: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
26b0: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
26c0: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
26d0: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
26e0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a  ITE_AFF_NONE:.**
2700: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
2710: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
2720: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
2730: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
2740: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
2750: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
2760: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
2770: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
2780: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2790: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
27a0: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
27b0: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
27c0: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
27d0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
27e0: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
27f0: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2800: 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  TEXT ){.    /* O
2810: 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20  nly attempt the 
2820: 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45  conversion to TE
2830: 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61  XT if there is a
2840: 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61  n integer or rea
2850: 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  l.    ** represe
2860: 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e  ntation (blob an
2870: 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65  d NULL do not ge
2880: 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74  t converted) but
2890: 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a   no string.    *
28a0: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
28b0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
28c0: 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73   0==(pRec->flags
28d0: 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70 52  &MEM_Str) && (pR
28e0: 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52  ec->flags&(MEM_R
28f0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b  eal|MEM_Int)) ){
2900: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
2910: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2920: 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d  Rec, enc);.    }
2930: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
2940: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
2950: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65  EM_Int);.  }else
2960: 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d 53   if( affinity!=S
2970: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29  QLITE_AFF_NONE )
2980: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
2990: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
29a0: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
29b0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
29c0: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
29d0: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
29e0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
29f0: 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70 6c  ERIC );.    appl
2a00: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2a10: 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20  (pRec);.    if( 
2a20: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2a30: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20  M_Real ){.      
2a40: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
2a50: 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29  erAffinity(pRec)
2a60: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2a70: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2a80: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2a90: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2aa0: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2ab0: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2ac0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2ad0: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2ae0: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2af0: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2b00: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2b10: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2b20: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2b30: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2b40: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2b50: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2b60: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2b70: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2b80: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a  e argument..**.*
2b90: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 45 58 50  * This is an EXP
2ba0: 45 52 49 4d 45 4e 54 41 4c 20 61 70 69 20 61 6e  ERIMENTAL api an
2bb0: 64 20 69 73 20 73 75 62 6a 65 63 74 20 74 6f 20  d is subject to 
2bc0: 63 68 61 6e 67 65 20 6f 72 20 72 65 6d 6f 76 61  change or remova
2bd0: 6c 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  l..*/.int sqlite
2be0: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
2bf0: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
2c00: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d  ue *pVal){.  Mem
2c10: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
2c20: 56 61 6c 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65  Val;.  applyNume
2c30: 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65 6d  ricAffinity(pMem
2c40: 29 3b 0a 20 20 73 74 6f 72 65 54 79 70 65 49 6e  );.  storeTypeIn
2c50: 66 6f 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 72  fo(pMem, 0);.  r
2c60: 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65  eturn pMem->type
2c70: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
2c80: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
2c90: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
2ca0: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
2cb0: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
2cc0: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
2cd0: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
2ce0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
2cf0: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2d00: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
2d10: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
2d20: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
2d30: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
2d40: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
2d50: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
2d60: 65 6e 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  enc);.}..#ifdef 
2d70: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
2d80: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
2d90: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2da0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
2db0: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
2dc0: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
2dd0: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
2de0: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
2df0: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
2e00: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
2e10: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
2e20: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
2e30: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
2e40: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
2e50: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
2e60: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
2e70: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
2e80: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
2e90: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
2ea0: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
2eb0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
2ec0: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
2ed0: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
2ee0: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
2ef0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2f00: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
2f10: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
2f20: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
2f30: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
2f40: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
2f50: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
2f60: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
2f70: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
2f80: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
2f90: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
2fa0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
2fb0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
2fc0: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
2fd0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
2fe0: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
2ff0: 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
3000: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3010: 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a  zCsr, "%c", c);.
3020: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 74 72 6c      zCsr += strl
3030: 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71  en(zCsr);.    sq
3040: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3050: 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c  00, zCsr, "%d[",
3060: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a   pMem->n);.    z
3070: 43 73 72 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 43  Csr += strlen(zC
3080: 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  sr);.    for(i=0
3090: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
30a0: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
30b0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
30c0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30  f(100, zCsr, "%0
30d0: 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d  2X", ((int)pMem-
30e0: 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a  >z[i] & 0xFF));.
30f0: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 74        zCsr += st
3100: 72 6c 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20 20  rlen(zCsr);.    
3110: 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  }.    for(i=0; i
3120: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3130: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68  ; i++){.      ch
3140: 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69  ar z = pMem->z[i
3150: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33  ];.      if( z<3
3160: 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43  2 || z>126 ) *zC
3170: 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20  sr++ = '.';.    
3180: 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d    else *zCsr++ =
3190: 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73   z;.    }..    s
31a0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
31b0: 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22  100, zCsr, "]%s"
31c0: 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d  , encnames[pMem-
31d0: 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72  >enc]);.    zCsr
31e0: 20 2b 3d 20 73 74 72 6c 65 6e 28 7a 43 73 72 29   += strlen(zCsr)
31f0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
3200: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
3210: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3220: 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 6c 6c  (100, zCsr,"+%ll
3230: 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 69 29 3b 0a  dz",pMem->u.i);.
3240: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 74        zCsr += st
3250: 72 6c 65 6e 28 7a 43 73 72 29 3b 0a 20 20 20 20  rlen(zCsr);.    
3260: 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c  }.    *zCsr = '\
3270: 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  0';.  }else if( 
3280: 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  f & MEM_Str ){. 
3290: 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20     int j, k;.   
32a0: 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a   zBuf[0] = ' ';.
32b0: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
32c0: 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  Dyn ){.      zBu
32d0: 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20  f[1] = 'z';.    
32e0: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
32f0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45  MEM_Static|MEM_E
3300: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
3310: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3320: 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20  EM_Static ){.   
3330: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27     zBuf[1] = 't'
3340: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3350: 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45  (f & (MEM_Dyn|ME
3360: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
3370: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3380: 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20  & MEM_Ephem ){. 
3390: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
33a0: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
33b0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
33c0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
33d0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
33e0: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73      zBuf[1] = 's
33f0: 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d  ';.    }.    k =
3400: 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   2;.    sqlite3_
3410: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a  snprintf(100, &z
3420: 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d  Buf[k], "%d", pM
3430: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d  em->n);.    k +=
3440: 20 73 74 72 6c 65 6e 28 26 7a 42 75 66 5b 6b 5d   strlen(&zBuf[k]
3450: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
3460: 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28   = '[';.    for(
3470: 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70  j=0; j<15 && j<p
3480: 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20  Mem->n; j++){.  
3490: 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d      u8 c = pMem-
34a0: 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28  >z[j];.      if(
34b0: 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78   c>=0x20 && c<0x
34c0: 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42  7f ){.        zB
34d0: 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20  uf[k++] = c;.   
34e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
34f0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e    zBuf[k++] = '.
3500: 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ';.      }.    }
3510: 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d  .    zBuf[k++] =
3520: 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65   ']';.    sqlite
3530: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26  3_snprintf(100,&
3540: 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65  zBuf[k], encname
3550: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
3560: 20 20 20 6b 20 2b 3d 20 73 74 72 6c 65 6e 28 26     k += strlen(&
3570: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3580: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3590: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
35a0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
35b0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
35c0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
35d0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
35e0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
35f0: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3600: 50 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c  Print(FILE *out,
3610: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20   Mem *p){.  if( 
3620: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  p->flags & MEM_N
3630: 75 6c 6c 20 29 7b 0a 20 20 20 20 66 70 72 69 6e  ull ){.    fprin
3640: 74 66 28 6f 75 74 2c 20 22 20 4e 55 4c 4c 22 29  tf(out, " NULL")
3650: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70  ;.  }else if( (p
3660: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3670: 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d  nt|MEM_Str))==(M
3680: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20  EM_Int|MEM_Str) 
3690: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
36a0: 75 74 2c 20 22 20 73 69 3a 25 6c 6c 64 22 2c 20  ut, " si:%lld", 
36b0: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
36c0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
36d0: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 66  MEM_Int ){.    f
36e0: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 69 3a  printf(out, " i:
36f0: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
3700: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3710: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
3720: 29 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  ){.    fprintf(o
3730: 75 74 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ut, " r:%g", p->
3740: 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  r);.  }else{.   
3750: 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b   char zBuf[200];
3760: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
3770: 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70  MemPrettyPrint(p
3780: 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 70 72  , zBuf);.    fpr
3790: 69 6e 74 66 28 6f 75 74 2c 20 22 20 22 29 3b 0a  intf(out, " ");.
37a0: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
37b0: 20 22 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20   "%s", zBuf);.  
37c0: 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  }.}.static void 
37d0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 46 49  registerTrace(FI
37e0: 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20 69 52 65  LE *out, int iRe
37f0: 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 66 70  g, Mem *p){.  fp
3800: 72 69 6e 74 66 28 6f 75 74 2c 20 22 52 45 47 5b  rintf(out, "REG[
3810: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3820: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3830: 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70 72 69 6e  out, p);.  fprin
3840: 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29 3b 0a 7d  tf(out, "\n");.}
3850: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3860: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 20  SQLITE_DEBUG.#  
3870: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
3880: 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 70 2d  TRACE(R,M) if(p-
3890: 3e 74 72 61 63 65 29 72 65 67 69 73 74 65 72 54  >trace)registerT
38a0: 72 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 52 2c  race(p->trace,R,
38b0: 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  M).#else.#  defi
38c0: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
38d0: 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a  E(R,M).#endif...
38e0: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
38f0: 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69  ILE../* .** hwti
3900: 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e  me.h contains in
3910: 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63  line assembler c
3920: 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e  ode for implemen
3930: 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65  ting .** high-pe
3940: 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67  rformance timing
3950: 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69   routines..*/.#i
3960: 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68  nclude "hwtime.h
3970: 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  "..#endif../*.**
3980: 20 54 68 65 20 43 48 45 43 4b 5f 46 4f 52 5f 49   The CHECK_FOR_I
3990: 4e 54 45 52 52 55 50 54 20 6d 61 63 72 6f 20 64  NTERRUPT macro d
39a0: 65 66 69 6e 65 64 20 68 65 72 65 20 6c 6f 6f 6b  efined here look
39b0: 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 0a  s to see if the.
39c0: 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  ** sqlite3_inter
39d0: 72 75 70 74 28 29 20 72 6f 75 74 69 6e 65 20 68  rupt() routine h
39e0: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 2e 20  as been called. 
39f0: 20 49 66 20 69 74 20 68 61 73 20 62 65 65 6e 2c   If it has been,
3a00: 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63 65 73 73   then.** process
3a10: 69 6e 67 20 6f 66 20 74 68 65 20 56 44 42 45 20  ing of the VDBE 
3a20: 70 72 6f 67 72 61 6d 20 69 73 20 69 6e 74 65 72  program is inter
3a30: 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  rupted..**.** Th
3a40: 69 73 20 6d 61 63 72 6f 20 61 64 64 65 64 20 74  is macro added t
3a50: 6f 20 65 76 65 72 79 20 69 6e 73 74 72 75 63 74  o every instruct
3a60: 69 6f 6e 20 74 68 61 74 20 64 6f 65 73 20 61 20  ion that does a 
3a70: 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 6f  jump in order to
3a80: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20  .** implement a 
3a90: 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74 65 73 74  loop.  This test
3aa0: 20 75 73 65 64 20 74 6f 20 62 65 20 6f 6e 20 65   used to be on e
3ab0: 76 65 72 79 20 73 69 6e 67 6c 65 20 69 6e 73 74  very single inst
3ac0: 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62 75 74 20  ruction,.** but 
3ad0: 74 68 61 74 20 6d 65 61 6e 74 20 77 65 20 6d 6f  that meant we mo
3ae0: 72 65 20 74 65 73 74 69 6e 67 20 74 68 61 74 20  re testing that 
3af0: 77 65 20 6e 65 65 64 65 64 2e 20 20 42 79 20 6f  we needed.  By o
3b00: 6e 6c 79 20 74 65 73 74 69 6e 67 20 74 68 65 0a  nly testing the.
3b10: 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75 6d 70 20  ** flag on jump 
3b20: 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c 20 77 65  instructions, we
3b30: 20 67 65 74 20 61 20 28 73 6d 61 6c 6c 29 20 73   get a (small) s
3b40: 70 65 65 64 20 69 6d 70 72 6f 76 65 6d 65 6e 74  peed improvement
3b50: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 48 45  ..*/.#define CHE
3b60: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
3b70: 20 5c 0a 20 20 20 69 66 28 20 64 62 2d 3e 75 31   \.   if( db->u1
3b80: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
3b90: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
3ba0: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 0a 23  to_interrupt;..#
3bb0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3bc0: 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20 66 69  UG.static int fi
3bd0: 6c 65 45 78 69 73 74 73 28 73 71 6c 69 74 65 33  leExists(sqlite3
3be0: 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72   *db, const char
3bf0: 20 2a 7a 46 69 6c 65 29 7b 0a 20 20 69 6e 74 20   *zFile){.  int 
3c00: 72 65 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  res = 0;.  int r
3c10: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23  c = SQLITE_OK;.#
3c20: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
3c30: 54 0a 20 20 2f 2a 20 49 66 20 77 65 20 61 72 65  T.  /* If we are
3c40: 20 63 75 72 72 65 6e 74 6c 79 20 74 65 73 74 69   currently testi
3c50: 6e 67 20 49 4f 20 65 72 72 6f 72 73 2c 20 74 68  ng IO errors, th
3c60: 65 6e 20 64 6f 20 6e 6f 74 20 63 61 6c 6c 20 4f  en do not call O
3c70: 73 41 63 63 65 73 73 28 29 20 74 6f 0a 20 20 2a  sAccess() to.  *
3c80: 2a 20 74 65 73 74 20 66 6f 72 20 74 68 65 20 70  * test for the p
3c90: 72 65 73 65 6e 63 65 20 6f 66 20 7a 46 69 6c 65  resence of zFile
3ca0: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
3cb0: 65 20 61 6e 79 20 49 4f 20 65 72 72 6f 72 20 74  e any IO error t
3cc0: 68 61 74 0a 20 20 2a 2a 20 6f 63 63 75 72 73 20  hat.  ** occurs 
3cd0: 68 65 72 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  here will not be
3ce0: 20 72 65 70 6f 72 74 65 64 2c 20 63 61 75 73 69   reported, causi
3cf0: 6e 67 20 74 68 65 20 74 65 73 74 20 74 6f 20 66  ng the test to f
3d00: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 65 78 74 65  ail..  */.  exte
3d10: 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 69  rn int sqlite3_i
3d20: 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67 3b  o_error_pending;
3d30: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69  .  if( sqlite3_i
3d40: 6f 5f 65 72 72 6f 72 5f 70 65 6e 64 69 6e 67 3c  o_error_pending<
3d50: 3d 30 20 29 0a 23 65 6e 64 69 66 0a 20 20 20 20  =0 ).#endif.    
3d60: 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63  rc = sqlite3OsAc
3d70: 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a  cess(db->pVfs, z
3d80: 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 41 43 43  File, SQLITE_ACC
3d90: 45 53 53 5f 45 58 49 53 54 53 2c 20 26 72 65 73  ESS_EXISTS, &res
3da0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 72 65 73  );.  return (res
3db0: 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   && rc==SQLITE_O
3dc0: 4b 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  K);.}.#endif../*
3dd0: 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d  .** Execute as m
3de0: 75 63 68 20 6f 66 20 61 20 56 44 42 45 20 70 72  uch of a VDBE pr
3df0: 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e 20  ogram as we can 
3e00: 74 68 65 6e 20 72 65 74 75 72 6e 2e 0a 2a 2a 0a  then return..**.
3e10: 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61  ** sqlite3VdbeMa
3e20: 6b 65 52 65 61 64 79 28 29 20 6d 75 73 74 20 62  keReady() must b
3e30: 65 20 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20  e called before 
3e40: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 20  this routine in 
3e50: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 6c 6f 73  order to.** clos
3e60: 65 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69  e the program wi
3e70: 74 68 20 61 20 66 69 6e 61 6c 20 4f 50 5f 48 61  th a final OP_Ha
3e80: 6c 74 20 61 6e 64 20 74 6f 20 73 65 74 20 75 70  lt and to set up
3e90: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 73 0a 2a   the callbacks.*
3ea0: 2a 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  * and the error 
3eb0: 6d 65 73 73 61 67 65 20 70 6f 69 6e 74 65 72 2e  message pointer.
3ec0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 65 76 65 72 20  .**.** Whenever 
3ed0: 61 20 72 6f 77 20 6f 72 20 72 65 73 75 6c 74 20  a row or result 
3ee0: 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c  data is availabl
3ef0: 65 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  e, this routine 
3f00: 77 69 6c 6c 20 65 69 74 68 65 72 0a 2a 2a 20 69  will either.** i
3f10: 6e 76 6f 6b 65 20 74 68 65 20 72 65 73 75 6c 74  nvoke the result
3f20: 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74 68   callback (if th
3f30: 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20 72  ere is one) or r
3f40: 65 74 75 72 6e 20 77 69 74 68 0a 2a 2a 20 53 51  eturn with.** SQ
3f50: 4c 49 54 45 5f 52 4f 57 2e 0a 2a 2a 0a 2a 2a 20  LITE_ROW..**.** 
3f60: 49 66 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  If an attempt is
3f70: 20 6d 61 64 65 20 74 6f 20 6f 70 65 6e 20 61 20   made to open a 
3f80: 6c 6f 63 6b 65 64 20 64 61 74 61 62 61 73 65 2c  locked database,
3f90: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
3fa0: 6e 65 0a 2a 2a 20 77 69 6c 6c 20 65 69 74 68 65  ne.** will eithe
3fb0: 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 62 75 73  r invoke the bus
3fc0: 79 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 74  y callback (if t
3fd0: 68 65 72 65 20 69 73 20 6f 6e 65 29 20 6f 72 20  here is one) or 
3fe0: 69 74 20 77 69 6c 6c 0a 2a 2a 20 72 65 74 75 72  it will.** retur
3ff0: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a  n SQLITE_BUSY..*
4000: 2a 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72  *.** If an error
4010: 20 6f 63 63 75 72 73 2c 20 61 6e 20 65 72 72 6f   occurs, an erro
4020: 72 20 6d 65 73 73 61 67 65 20 69 73 20 77 72 69  r message is wri
4030: 74 74 65 6e 20 74 6f 20 6d 65 6d 6f 72 79 20 6f  tten to memory o
4040: 62 74 61 69 6e 65 64 0a 2a 2a 20 66 72 6f 6d 20  btained.** from 
4050: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29  sqlite3_malloc()
4060: 20 61 6e 64 20 70 2d 3e 7a 45 72 72 4d 73 67 20   and p->zErrMsg 
4070: 69 73 20 6d 61 64 65 20 74 6f 20 70 6f 69 6e 74  is made to point
4080: 20 74 6f 20 74 68 61 74 20 6d 65 6d 6f 72 79 2e   to that memory.
4090: 0a 2a 2a 20 54 68 65 20 65 72 72 6f 72 20 63 6f  .** The error co
40a0: 64 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  de is stored in 
40b0: 70 2d 3e 72 63 20 61 6e 64 20 74 68 69 73 20 72  p->rc and this r
40c0: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 53  outine returns S
40d0: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
40e0: 2a 2a 20 49 66 20 74 68 65 20 63 61 6c 6c 62 61  ** If the callba
40f0: 63 6b 20 65 76 65 72 20 72 65 74 75 72 6e 73 20  ck ever returns 
4100: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
4110: 68 65 20 70 72 6f 67 72 61 6d 20 65 78 69 74 73  he program exits
4120: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
4130: 20 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20    There will be 
4140: 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  no error message
4150: 20 62 75 74 20 74 68 65 20 70 2d 3e 72 63 20 66   but the p->rc f
4160: 69 65 6c 64 20 69 73 0a 2a 2a 20 73 65 74 20 74  ield is.** set t
4170: 6f 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 61  o SQLITE_ABORT a
4180: 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  nd this routine 
4190: 77 69 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49  will return SQLI
41a0: 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20  TE_ERROR..**.** 
41b0: 41 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  A memory allocat
41c0: 69 6f 6e 20 65 72 72 6f 72 20 63 61 75 73 65 73  ion error causes
41d0: 20 70 2d 3e 72 63 20 74 6f 20 62 65 20 73 65 74   p->rc to be set
41e0: 20 74 6f 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d   to SQLITE_NOMEM
41f0: 20 61 6e 64 20 74 68 69 73 0a 2a 2a 20 72 6f 75   and this.** rou
4200: 74 69 6e 65 20 74 6f 20 72 65 74 75 72 6e 20 53  tine to return S
4210: 51 4c 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a  QLITE_ERROR..**.
4220: 2a 2a 20 4f 74 68 65 72 20 66 61 74 61 6c 20 65  ** Other fatal e
4230: 72 72 6f 72 73 20 72 65 74 75 72 6e 20 53 51 4c  rrors return SQL
4240: 49 54 45 5f 45 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a  ITE_ERROR..**.**
4250: 20 41 66 74 65 72 20 74 68 69 73 20 72 6f 75 74   After this rout
4260: 69 6e 65 20 68 61 73 20 66 69 6e 69 73 68 65 64  ine has finished
4270: 2c 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e  , sqlite3VdbeFin
4280: 61 6c 69 7a 65 28 29 20 73 68 6f 75 6c 64 20 62  alize() should b
4290: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6c 65  e.** used to cle
42a0: 61 6e 20 75 70 20 74 68 65 20 6d 65 73 73 20 74  an up the mess t
42b0: 68 61 74 20 77 61 73 20 6c 65 66 74 20 62 65 68  hat was left beh
42c0: 69 6e 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ind..*/.int sqli
42d0: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
42e0: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
42f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
4300: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
4310: 74 20 70 63 3b 20 20 20 20 20 20 20 20 20 20 20  t pc;           
4320: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
4330: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
4340: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20  */.  Op *pOp;   
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4360: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
4370: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63  tion */.  int rc
4380: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
4390: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
43a0: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
43b0: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
43c0: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
43d0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
43e0: 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64  encoding = ENC(d
43f0: 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64  b);     /* The d
4400: 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67  atabase encoding
4410: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 2c   */.  Mem *pIn1,
4420: 20 2a 70 49 6e 32 2c 20 2a 70 49 6e 33 3b 20 20   *pIn2, *pIn3;  
4430: 20 2f 2a 20 49 6e 70 75 74 20 6f 70 65 72 61 6e   /* Input operan
4440: 64 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75  ds */.  Mem *pOu
4450: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
4460: 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65     /* Output ope
4470: 72 61 6e 64 20 2a 2f 0a 20 20 75 38 20 6f 70 50  rand */.  u8 opP
4480: 72 6f 70 65 72 74 79 3b 0a 20 20 69 6e 74 20 69  roperty;.  int i
4490: 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20  Compare = 0;    
44a0: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
44b0: 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61  of last OP_Compa
44c0: 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  re operation */.
44d0: 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20    int *aPermute 
44e0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
44f0: 50 65 72 6d 75 61 74 69 6f 6e 20 6f 66 20 63 6f  Permuation of co
4500: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
4510: 70 61 72 65 20 2a 2f 0a 23 69 66 64 65 66 20 56  pare */.#ifdef V
4520: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36  DBE_PROFILE.  u6
4530: 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20 20  4 start;        
4540: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55 20           /* CPU 
4550: 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20 73  clock count at s
4560: 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a  tart of opcode *
4570: 2f 0a 20 20 69 6e 74 20 6f 72 69 67 50 63 3b 20  /.  int origPc; 
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4590: 2a 20 50 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  * Program counte
45a0: 72 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70  r at start of op
45b0: 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  code */.#endif.#
45c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
45d0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
45e0: 42 41 43 4b 0a 20 20 69 6e 74 20 6e 50 72 6f 67  BACK.  int nProg
45f0: 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20  ressOps = 0;    
4600: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65    /* Opcodes exe
4610: 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67  cuted since prog
4620: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ress callback. *
4630: 2f 0a 23 65 6e 64 69 66 0a 20 20 55 6e 70 61 63  /.#endif.  Unpac
4640: 6b 65 64 52 65 63 6f 72 64 20 61 54 65 6d 70 52  kedRecord aTempR
4650: 65 63 5b 31 36 5d 3b 20 2f 2a 20 53 70 61 63 65  ec[16]; /* Space
4660: 20 74 6f 20 68 6f 6c 64 20 61 20 74 72 61 6e 73   to hold a trans
4670: 69 65 6e 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ient UnpackedRec
4680: 6f 72 64 20 2a 2f 0a 0a 0a 20 20 61 73 73 65 72  ord */...  asser
4690: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
46a0: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
46b0: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
46c0: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
46d0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
46e0: 3e 6d 61 67 69 63 3d 3d 53 51 4c 49 54 45 5f 4d  >magic==SQLITE_M
46f0: 41 47 49 43 5f 42 55 53 59 20 29 3b 0a 20 20 73  AGIC_BUSY );.  s
4700: 71 6c 69 74 65 33 42 74 72 65 65 4d 75 74 65 78  qlite3BtreeMutex
4710: 41 72 72 61 79 45 6e 74 65 72 28 26 70 2d 3e 61  ArrayEnter(&p->a
4720: 4d 75 74 65 78 29 3b 0a 20 20 69 66 28 20 70 2d  Mutex);.  if( p-
4730: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  >rc==SQLITE_NOME
4740: 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  M ){.    /* This
4750: 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61   happens if a ma
4760: 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20  lloc() inside a 
4770: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
4780: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72  column_text() or
4790: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
47a0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20  column_text16() 
47b0: 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20  failed.  */.    
47c0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
47d0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63  .  assert( p->rc
47e0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
47f0: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ->rc==SQLITE_BUS
4800: 59 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53  Y );.  p->rc = S
4810: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65  QLITE_OK;.  asse
4820: 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d  rt( p->explain==
4830: 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c  0 );.  p->pResul
4840: 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  tSet = 0;.  db->
4850: 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73  busyHandler.nBus
4860: 79 20 3d 20 30 3b 0a 20 20 43 48 45 43 4b 5f 46  y = 0;.  CHECK_F
4870: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
4880: 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
4890: 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 64 65 66  ceSql(p);.#ifdef
48a0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
48b0: 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
48c0: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66  gnMalloc();.  if
48d0: 28 20 70 2d 3e 70 63 3d 3d 30 20 0a 20 20 20 26  ( p->pc==0 .   &
48e0: 26 20 28 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  & ((p->db->flags
48f0: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69   & SQLITE_VdbeLi
4900: 73 74 69 6e 67 29 20 7c 7c 20 66 69 6c 65 45 78  sting) || fileEx
4910: 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f 65  ists(db, "vdbe_e
4920: 78 70 6c 61 69 6e 22 29 29 0a 20 20 29 7b 0a 20  xplain")).  ){. 
4930: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 72     int i;.    pr
4940: 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67 72  intf("VDBE Progr
4950: 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b  am Listing:\n");
4960: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4970: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4980: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
4990: 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Op; i++){.      
49a0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
49b0: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 70  Op(stdout, i, &p
49c0: 2d 3e 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d  ->aOp[i]);.    }
49d0: 0a 20 20 7d 0a 20 20 69 66 28 20 66 69 6c 65 45  .  }.  if( fileE
49e0: 78 69 73 74 73 28 64 62 2c 20 22 76 64 62 65 5f  xists(db, "vdbe_
49f0: 74 72 61 63 65 22 29 20 29 7b 0a 20 20 20 20 70  trace") ){.    p
4a00: 2d 3e 74 72 61 63 65 20 3d 20 73 74 64 6f 75 74  ->trace = stdout
4a10: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45  ;.  }.  sqlite3E
4a20: 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
4a30: 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70  ;.#endif.  for(p
4a40: 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c  c=p->pc; rc==SQL
4a50: 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20  ITE_OK; pc++){. 
4a60: 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 30     assert( pc>=0
4a70: 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b   && pc<p->nOp );
4a80: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
4a90: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
4aa0: 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20   no_mem;.#ifdef 
4ab0: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
4ac0: 20 6f 72 69 67 50 63 20 3d 20 70 63 3b 0a 20 20   origPc = pc;.  
4ad0: 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65    start = sqlite
4ae0: 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69  3Hwtime();.#endi
4af0: 66 0a 20 20 20 20 70 4f 70 20 3d 20 26 70 2d 3e  f.    pOp = &p->
4b00: 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a  aOp[pc];..    /*
4b10: 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63   Only allow trac
4b20: 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45  ing if SQLITE_DE
4b30: 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
4b40: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
4b50: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
4b60: 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20  f( p->trace ){. 
4b70: 20 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29       if( pc==0 )
4b80: 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66  {.        printf
4b90: 28 22 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e  ("VDBE Execution
4ba0: 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20   Trace:\n");.   
4bb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4bc0: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4bd0: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
4be0: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d  e3VdbePrintOp(p-
4bf0: 3e 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29  >trace, pc, pOp)
4c00: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
4c10: 70 2d 3e 74 72 61 63 65 3d 3d 30 20 26 26 20 70  p->trace==0 && p
4c20: 63 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  c==0 ){.      sq
4c30: 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
4c40: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 20 20 20 20  Malloc();.      
4c50: 69 66 28 20 66 69 6c 65 45 78 69 73 74 73 28 64  if( fileExists(d
4c60: 62 2c 20 22 76 64 62 65 5f 73 71 6c 74 72 61 63  b, "vdbe_sqltrac
4c70: 65 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73  e") ){.        s
4c80: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4c90: 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ql(p);.      }. 
4ca0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 6e 64 42       sqlite3EndB
4cb0: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20  enignMalloc();. 
4cc0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
4cd0: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
4ce0: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
4cf0: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
4d00: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
4d10: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
4d20: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
4d30: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
4d40: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
4d50: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
4d60: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
4d70: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4d80: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
4d90: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4da0: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
4db0: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
4dc0: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
4dd0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
4de0: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
4df0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
4e00: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
4e10: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
4e20: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f  S_CALLBACK.    /
4e30: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
4e40: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
4e50: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
4e60: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
4e70: 64 20 6e 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20  d number.    ** 
4e80: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
4e90: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
4ea0: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
4eb0: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
4ec0: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64      ** sqlite3Vd
4ed0: 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63  beExec() or sinc
4ee0: 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20  e last time the 
4ef0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
4f00: 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20  k was called).. 
4f10: 20 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f     ** If the pro
4f20: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
4f30: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
4f40: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
4f50: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
4f60: 20 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63     ** a return c
4f70: 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ode SQLITE_ABORT
4f80: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
4f90: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29   db->xProgress )
4fa0: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  {.      if( db->
4fb0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50  nProgressOps==nP
4fc0: 72 6f 67 72 65 73 73 4f 70 73 20 29 7b 0a 20 20  rogressOps ){.  
4fd0: 20 20 20 20 20 20 69 6e 74 20 70 72 63 3b 0a 20        int prc;. 
4fe0: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
4ff0: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
5000: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
5010: 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
5020: 20 20 20 20 70 72 63 20 3d 64 62 2d 3e 78 50 72      prc =db->xPr
5030: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
5040: 72 65 73 73 41 72 67 29 3b 0a 20 20 20 20 20 20  ressArg);.      
5050: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
5060: 65 74 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f  etyOn(db) ) goto
5070: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
5080: 73 75 73 65 3b 0a 20 20 20 20 20 20 20 20 69 66  suse;.        if
5090: 28 20 70 72 63 21 3d 30 20 29 7b 0a 20 20 20 20  ( prc!=0 ){.    
50a0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
50b0: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
50c0: 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
50d0: 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20  _error_halt;.   
50e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e       }.        n
50f0: 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b  ProgressOps = 0;
5100: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e  .      }.      n
5110: 50 72 6f 67 72 65 73 73 4f 70 73 2b 2b 3b 0a 20  ProgressOps++;. 
5120: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20     }.#endif..   
5130: 20 2f 2a 20 44 6f 20 63 6f 6d 6d 6f 6e 20 73 65   /* Do common se
5140: 74 75 70 20 70 72 6f 63 65 73 73 69 6e 67 20 66  tup processing f
5150: 6f 72 20 61 6e 79 20 6f 70 63 6f 64 65 20 74 68  or any opcode th
5160: 61 74 20 69 73 20 6d 61 72 6b 65 64 0a 20 20 20  at is marked.   
5170: 20 2a 2a 20 77 69 74 68 20 74 68 65 20 22 6f 75   ** with the "ou
5180: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 22 20 74  t2-prerelease" t
5190: 61 67 2e 20 20 53 75 63 68 20 6f 70 63 6f 64 65  ag.  Such opcode
51a0: 73 20 68 61 76 65 20 61 20 73 69 6e 67 6c 65 0a  s have a single.
51b0: 20 20 20 20 2a 2a 20 6f 75 74 70 75 74 20 77 68      ** output wh
51c0: 69 63 68 20 69 73 20 73 70 65 63 69 66 69 65 64  ich is specified
51d0: 20 62 79 20 74 68 65 20 50 32 20 70 61 72 61 6d   by the P2 param
51e0: 65 74 65 72 2e 20 20 54 68 65 20 50 32 20 72 65  eter.  The P2 re
51f0: 67 69 73 74 65 72 0a 20 20 20 20 2a 2a 20 69 73  gister.    ** is
5200: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
5210: 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20  a NULL..    */. 
5220: 20 20 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20     opProperty = 
5230: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70  opcodeProperty[p
5240: 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20  Op->opcode];.   
5250: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5260: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52   & OPFLG_OUT2_PR
5270: 45 52 45 4c 45 41 53 45 29 21 3d 30 20 29 7b 0a  ERELEASE)!=0 ){.
5280: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5290: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
52a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
52b0: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  <=p->nMem );.   
52c0: 20 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d     pOut = &p->aM
52d0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
52e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
52f0: 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c  mReleaseExternal
5300: 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f  (pOut);.      pO
5310: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
5320: 4e 75 6c 6c 3b 0a 20 20 20 20 7d 65 6c 73 65 0a  Null;.    }else.
5330: 20 0a 20 20 20 20 2f 2a 20 44 6f 20 63 6f 6d 6d   .    /* Do comm
5340: 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 6f 70 63  on setup for opc
5350: 6f 64 65 73 20 6d 61 72 6b 65 64 20 77 69 74 68  odes marked with
5360: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
5370: 6f 77 69 6e 67 0a 20 20 20 20 2a 2a 20 63 6f 6d  owing.    ** com
5380: 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 70 72 6f  binations of pro
5390: 70 65 72 74 69 65 73 2e 0a 20 20 20 20 2a 2a 0a  perties..    **.
53a0: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
53b0: 20 69 6e 31 0a 20 20 20 20 2a 2a 20 20 20 20 20   in1.    **     
53c0: 20 20 20 20 20 20 69 6e 31 20 69 6e 32 0a 20 20        in1 in2.  
53d0: 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69    **           i
53e0: 6e 31 20 69 6e 32 20 6f 75 74 33 0a 20 20 20 20  n1 in2 out3.    
53f0: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 69 6e 31  **           in1
5400: 20 69 6e 33 0a 20 20 20 20 2a 2a 0a 20 20 20 20   in3.    **.    
5410: 2a 2a 20 56 61 72 69 61 62 6c 65 73 20 70 49 6e  ** Variables pIn
5420: 31 2c 20 70 49 6e 32 2c 20 61 6e 64 20 70 49 6e  1, pIn2, and pIn
5430: 33 20 61 72 65 20 6d 61 64 65 20 74 6f 20 70 6f  3 are made to po
5440: 69 6e 74 20 74 6f 20 61 70 70 72 6f 70 72 69 61  int to appropria
5450: 74 65 0a 20 20 20 20 2a 2a 20 72 65 67 69 73 74  te.    ** regist
5460: 65 72 73 20 66 6f 72 20 69 6e 70 75 74 73 2e 20  ers for inputs. 
5470: 20 56 61 72 69 61 62 6c 65 20 70 4f 75 74 20 70   Variable pOut p
5480: 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6f 75 74  oints to the out
5490: 70 75 74 20 72 65 67 69 73 74 65 72 2e 0a 20 20  put register..  
54a0: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 6f 70    */.    if( (op
54b0: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
54c0: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
54d0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
54e0: 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1>0 );.      ass
54f0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
5500: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 70  >nMem );.      p
5510: 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
5520: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 20 20 20 20 52  Op->p1];.      R
5530: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5540: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
5550: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5560: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  rty & OPFLG_IN2)
5570: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5580: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5590: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
55a0: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
55b0: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
55c0: 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn2 = &p->aMem[
55d0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20  pOp->p2];.      
55e0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
55f0: 28 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b  (pOp->p2, pIn2);
5600: 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 70  .        if( (op
5610: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5620: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
5630: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5640: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
5650: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5660: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
5670: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4f 75 74  ;.          pOut
5680: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
5690: 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  >p3];.        }.
56a0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
56b0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
56c0: 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20  FLG_IN3)!=0 ){. 
56d0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
56e0: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
56f0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5700: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
5710: 20 20 20 20 20 20 20 20 70 49 6e 33 20 3d 20 26          pIn3 = &
5720: 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
5730: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
5740: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
5750: 2c 20 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 7d  , pIn3);.      }
5760: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
5770: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5780: 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
5790: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
57a0: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
57b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
57c0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  p->nMem );.     
57d0: 20 70 49 6e 32 20 3d 20 26 70 2d 3e 61 4d 65 6d   pIn2 = &p->aMem
57e0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
57f0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5800: 70 4f 70 2d 3e 70 32 2c 20 70 49 6e 32 29 3b 0a  pOp->p2, pIn2);.
5810: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 6f      }else if( (o
5820: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5830: 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN3)!=0 ){.   
5840: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5850: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p3>0 );.      as
5860: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
5870: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
5880: 70 49 6e 33 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pIn3 = &p->aMem[
5890: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
58a0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
58b0: 4f 70 2d 3e 70 33 2c 20 70 49 6e 33 29 3b 0a 20  Op->p3, pIn3);. 
58c0: 20 20 20 7d 0a 0a 20 20 20 20 73 77 69 74 63 68     }..    switch
58d0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
58e0: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
58f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5900: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5910: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5920: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5930: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
5940: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
5950: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5960: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
5970: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
5980: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
5990: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
59a0: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
59b0: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
59c0: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
59d0: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
59e0: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
59f0: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
5a00: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
5a10: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
5a20: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
5a30: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
5a40: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
5a50: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
5a60: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5a70: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
5a80: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
5a90: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
5aa0: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
5ab0: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
5ac0: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
5ad0: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
5ae0: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
5af0: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
5b00: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
5b10: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
5b20: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
5b30: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
5b40: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
5b50: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
5b60: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
5b70: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
5b80: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
5b90: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
5ba0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
5bb0: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
5bc0: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
5bd0: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
5be0: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
5bf0: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
5c00: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
5c10: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
5c20: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
5c30: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
5c40: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
5c50: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
5c60: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
5c70: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
5c80: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
5c90: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
5ca0: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
5cb0: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
5cc0: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
5cd0: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
5ce0: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
5cf0: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
5d00: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
5d10: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
5d20: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
5d30: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
5d40: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
5d50: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
5d60: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
5d70: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
5d80: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
5d90: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
5da0: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
5db0: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
5dc0: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
5dd0: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
5de0: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
5df0: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
5e00: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
5e10: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
5e20: 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20  ut2_prerelease, 
5e30: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
5e40: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
5e50: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
5e60: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
5e70: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
5e80: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
5e90: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
5ea0: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
5eb0: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
5ec0: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
5ed0: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
5ee0: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
5ef0: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
5f00: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
5f10: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
5f20: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
5f30: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
5f40: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
5f50: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
5f60: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
5f70: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
5f80: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
5f90: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
5fa0: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
5fb0: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
5fc0: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
5fd0: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
5fe0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
5ff0: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
6000: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6040: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
6050: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
6060: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
6070: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
6080: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
6090: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
60a0: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
60b0: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
60c0: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
60d0: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
60e0: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
60f0: 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  m..*/.case OP_Go
6100: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
6110: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43    /* jump */.  C
6120: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
6130: 50 54 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e  PT;.  pc = pOp->
6140: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
6150: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6160: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
6170: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
6180: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
6190: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
61a0: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
61b0: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
61c0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
61d0: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
61e0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
61f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
6200: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
6210: 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
6220: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61  ;.  pIn1 = &p->a
6230: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6240: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
6250: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d  lags & MEM_Dyn)=
6260: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
6270: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6280: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b   pIn1->u.i = pc;
6290: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
62a0: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
62b0: 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  ;.  pc = pOp->p2
62c0: 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   - 1;.  break;.}
62d0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65  ../* Opcode:  Re
62e0: 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  turn P1 * * * *.
62f0: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
6300: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6310: 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64  on after the add
6320: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
6330: 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
6340: 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20  Return: {       
6350: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
6360: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6370: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
6380: 0a 20 20 70 63 20 3d 20 70 49 6e 31 2d 3e 75 2e  .  pc = pIn1->u.
6390: 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  i;.  break;.}../
63a0: 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64  * Opcode:  Yield
63b0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
63c0: 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72  * Swap the progr
63d0: 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20  am counter with 
63e0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
63f0: 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ister P1..*/.cas
6400: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 0a 20 20  e OP_Yield: {.  
6410: 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 61 73  int pcDest;.  as
6420: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
6430: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
6440: 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p1<=p->nMem );
6450: 0a 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d  .  pIn1 = &p->aM
6460: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6470: 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
6480: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d  ags & MEM_Dyn)==
6490: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
64a0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
64b0: 70 63 44 65 73 74 20 3d 20 70 49 6e 31 2d 3e 75  pcDest = pIn1->u
64c0: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  .i;.  pIn1->u.i 
64d0: 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52  = pc;.  REGISTER
64e0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
64f0: 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63  pIn1);.  pc = pc
6500: 44 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Dest;.  break;.}
6510: 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  .../* Opcode:  H
6520: 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 2a  alt P1 P2 * P4 *
6530: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
6540: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
6550: 65 6e 20 63 75 72 73 6f 72 73 2c 20 46 69 66 6f  en cursors, Fifo
6560: 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65  s, etc are close
6570: 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  d.** automatical
6580: 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ly..**.** P1 is 
6590: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20  the result code 
65a0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
65b0: 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69  te3_exec(), sqli
65c0: 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20  te3_reset(),.** 
65d0: 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  or sqlite3_final
65e0: 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f  ize().  For a no
65f0: 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20  rmal halt, this 
6600: 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45  should be SQLITE
6610: 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20  _OK (0)..** For 
6620: 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62  errors, it can b
6630: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c  e some other val
6640: 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68  ue.  If P1!=0 th
6650: 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72  en P2 will deter
6660: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
6670: 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61  or not to rollba
6680: 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  ck the current t
6690: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20  ransaction.  Do 
66a0: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  not rollback.** 
66b0: 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20  if P2==OE_Fail. 
66c0: 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  Do the rollback 
66d0: 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  if P2==OE_Rollba
66e0: 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41  ck.  If P2==OE_A
66f0: 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61  bort,.** then ba
6700: 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67  ck out all chang
6710: 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63  es that have occ
6720: 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69  urred during thi
6730: 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74  s execution of t
6740: 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20  he.** VDBE, but 
6750: 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  do not rollback 
6760: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  the transaction.
6770: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73   .**.** If P4 is
6780: 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69   not null then i
6790: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65  t is an error me
67a0: 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a  ssage string..**
67b0: 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20  .** There is an 
67c0: 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20  implied "Halt 0 
67d0: 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  0 0" instruction
67e0: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
67f0: 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20   very end of.** 
6800: 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20  every program.  
6810: 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74  So a jump past t
6820: 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74  he last instruct
6830: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72  ion of the progr
6840: 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d  am.** is the sam
6850: 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48  e as executing H
6860: 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
6870: 48 61 6c 74 3a 20 7b 0a 20 20 70 2d 3e 72 63 20  Halt: {.  p->rc 
6880: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e  = pOp->p1;.  p->
6890: 70 63 20 3d 20 70 63 3b 0a 20 20 70 2d 3e 65 72  pc = pc;.  p->er
68a0: 72 6f 72 41 63 74 69 6f 6e 20 3d 20 70 4f 70 2d  rorAction = pOp-
68b0: 3e 70 32 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  >p2;.  if( pOp->
68c0: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 73 71 6c 69  p4.z ){.    sqli
68d0: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
68e0: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
68f0: 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  s", pOp->p4.z);.
6900: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
6910: 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
6920: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6930: 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d  ITE_BUSY || rc==
6940: 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 69  SQLITE_OK );.  i
6950: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
6960: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
6970: 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
6980: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
6990: 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51   rc = p->rc ? SQ
69a0: 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c  LITE_ERROR : SQL
69b0: 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20  ITE_DONE;.  }.  
69c0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
69d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
69e0: 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20  Integer P1 P2 * 
69f0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32  * *.**.** The 32
6a00: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
6a10: 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e  ue P1 is written
6a20: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
6a30: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
6a40: 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20  teger: {        
6a50: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
6a60: 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66  ase */.  pOut->f
6a70: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6a80: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
6a90: 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p1;.  break;.
6aa0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
6ab0: 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  t64 * P2 * P4 *.
6ac0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
6ad0: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
6ae0: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
6af0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
6b00: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
6b10: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
6b20: 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20  P_Int64: {      
6b30: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
6b40: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
6b50: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36  ert( pOp->p4.pI6
6b60: 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  4!=0 );.  pOut->
6b70: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6b80: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
6b90: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
6ba0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6bb0: 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a  ode: Real * P2 *
6bc0: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
6bd0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
6be0: 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67   64-bit floating
6bf0: 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a   point value..**
6c00: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
6c10: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
6c20: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
6c30: 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eal: {          
6c40: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
6c50: 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72  FLOAT, out2-prer
6c60: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
6c70: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65  ->flags = MEM_Re
6c80: 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73  al;.  assert( !s
6c90: 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70  qlite3IsNaN(*pOp
6ca0: 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20  ->p4.pReal) );. 
6cb0: 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d   pOut->r = *pOp-
6cc0: 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65  >p4.pReal;.  bre
6cd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6ce0: 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a  : String8 * P2 *
6cf0: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 70   P4 *.**.** P4 p
6d00: 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74  oints to a nul t
6d10: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
6d20: 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63  string. This opc
6d30: 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d  ode is transform
6d40: 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 6e 20 4f  ed .** into an O
6d50: 50 5f 53 74 72 69 6e 67 20 62 65 66 6f 72 65 20  P_String before 
6d60: 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66  it is executed f
6d70: 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  or the first tim
6d80: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  e..*/.case OP_St
6d90: 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20  ring8: {        
6da0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
6db0: 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72  TRING, out2-prer
6dc0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
6dd0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
6de0: 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64   );.  pOp->opcod
6df0: 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20  e = OP_String;. 
6e00: 20 70 4f 70 2d 3e 70 31 20 3d 20 73 74 72 6c 65   pOp->p1 = strle
6e10: 6e 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23  n(pOp->p4.z);..#
6e20: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
6e30: 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65  IT_UTF16.  if( e
6e40: 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f  ncoding!=SQLITE_
6e50: 55 54 46 38 20 29 7b 0a 20 20 20 20 73 71 6c 69  UTF8 ){.    sqli
6e60: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
6e70: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
6e80: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
6e90: 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  8, SQLITE_STATIC
6ea0: 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  );.    if( SQLIT
6eb0: 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62  E_OK!=sqlite3Vdb
6ec0: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
6ed0: 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20  pOut, encoding) 
6ee0: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
6ef0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
6f00: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  !=sqlite3VdbeMem
6f10: 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28 70 4f  MakeWriteable(pO
6f20: 75 74 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ut) ) goto no_me
6f30: 6d 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  m;.    pOut->zMa
6f40: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f  lloc = 0;.    pO
6f50: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
6f60: 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70 4f 75  _Static;.    pOu
6f70: 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  t->flags &= ~MEM
6f80: 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20 70 4f  _Dyn;.    if( pO
6f90: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59  p->p4type==P4_DY
6fa0: 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73  NAMIC ){.      s
6fb0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
6fc0: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
6fd0: 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79   }.    pOp->p4ty
6fe0: 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b  pe = P4_DYNAMIC;
6ff0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d  .    pOp->p4.z =
7000: 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f   pOut->z;.    pO
7010: 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b  p->p1 = pOut->n;
7020: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  .    if( pOp->p1
7030: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
7040: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
7050: 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
7060: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
7070: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
7080: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 20  BSIZE(pOut);.   
7090: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
70a0: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
70b0: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
70c0: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
70d0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
70e0: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46  _big;.  }.  /* F
70f0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
7100: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
7110: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
7120: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
7130: 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g P1 P2 * P4 *.*
7140: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
7150: 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67  value P4 of leng
7160: 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73  th P1 (bytes) is
7170: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
7180: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
7190: 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20  OP_String: {    
71a0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
71b0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
71c0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21  sert( pOp->p4.z!
71d0: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  =0 );.  pOut->fl
71e0: 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
71f0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
7200: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70  m;.  pOut->z = p
7210: 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74  Op->p4.z;.  pOut
7220: 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  ->n = pOp->p1;. 
7230: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
7240: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
7250: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
7260: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
7270: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20  /* Opcode: Null 
7280: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
7290: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
72a0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
72b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a  */.case OP_Null:
72c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
72d0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
72e0: 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  */.  break;.}...
72f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
7300: 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c  MIT_BLOB_LITERAL
7310: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62  ./* Opcode: Blob
7320: 20 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a 0a 2a   P1 P2 * P4.**.*
7330: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
7340: 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31   blob of data P1
7350: 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74   bytes long.  St
7360: 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62  ore this.** blob
7370: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
7380: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
7390: 6e 20 69 73 20 6e 6f 74 20 63 6f 64 65 64 20 64  n is not coded d
73a0: 69 72 65 63 74 6c 79 0a 2a 2a 20 62 79 20 74 68  irectly.** by th
73b0: 65 20 63 6f 6d 70 69 6c 65 72 2e 20 49 6e 73 74  e compiler. Inst
73c0: 65 61 64 2c 20 74 68 65 20 63 6f 6d 70 69 6c 65  ead, the compile
73d0: 72 20 6c 61 79 65 72 20 73 70 65 63 69 66 69 65  r layer specifie
73e0: 73 0a 2a 2a 20 61 6e 20 4f 50 5f 48 65 78 42 6c  s.** an OP_HexBl
73f0: 6f 62 20 6f 70 63 6f 64 65 2c 20 77 69 74 68 20  ob opcode, with 
7400: 74 68 65 20 68 65 78 20 73 74 72 69 6e 67 20 72  the hex string r
7410: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
7420: 0a 2a 2a 20 74 68 65 20 62 6c 6f 62 20 61 73 20  .** the blob as 
7430: 50 34 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  P4. This opcode 
7440: 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 74  is transformed t
7450: 6f 20 61 6e 20 4f 50 5f 42 6c 6f 62 0a 2a 2a 20  o an OP_Blob.** 
7460: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20 69  the first time i
7470: 74 20 69 73 20 65 78 65 63 75 74 65 64 2e 0a 2a  t is executed..*
7480: 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20  /.case OP_Blob: 
7490: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
74a0: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
74b0: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
74c0: 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49   pOp->p1 <= SQLI
74d0: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b  TE_MAX_LENGTH );
74e0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
74f0: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
7500: 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31  p->p4.z, pOp->p1
7510: 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d  , 0, 0);.  pOut-
7520: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
7530: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
7540: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
7550: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
7560: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  /* SQLITE_OMIT_B
7570: 4c 4f 42 5f 4c 49 54 45 52 41 4c 20 2a 2f 0a 0a  LOB_LITERAL */..
7580: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
7590: 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ble P1 P2 * * *.
75a0: 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
75b0: 6f 66 20 76 61 72 69 61 62 6c 65 20 50 31 20 69  of variable P1 i
75c0: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72  s written into r
75d0: 65 67 69 73 74 65 72 20 50 32 2e 20 41 20 76 61  egister P2. A va
75e0: 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 61 6e 20  riable is.** an 
75f0: 75 6e 6b 6e 6f 77 6e 20 69 6e 20 74 68 65 20 6f  unknown in the o
7600: 72 69 67 69 6e 61 6c 20 53 51 4c 20 73 74 72 69  riginal SQL stri
7610: 6e 67 20 61 73 20 68 61 6e 64 65 64 20 74 6f 20  ng as handed to 
7620: 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 28  sqlite3_compile(
7630: 29 2e 0a 2a 2a 20 41 6e 79 20 6f 63 63 75 72 72  )..** Any occurr
7640: 65 6e 63 65 20 6f 66 20 74 68 65 20 27 3f 27 20  ence of the '?' 
7650: 63 68 61 72 61 63 74 65 72 20 69 6e 20 74 68 65  character in the
7660: 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 20 69 73   original SQL is
7670: 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 61   considered.** a
7680: 20 76 61 72 69 61 62 6c 65 2e 20 20 56 61 72 69   variable.  Vari
7690: 61 62 6c 65 73 20 69 6e 20 74 68 65 20 53 51 4c  ables in the SQL
76a0: 20 73 74 72 69 6e 67 20 61 72 65 20 6e 75 6d 62   string are numb
76b0: 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 0a  er from left to.
76c0: 2a 2a 20 72 69 67 68 74 20 62 65 67 69 6e 6e 69  ** right beginni
76d0: 6e 67 20 77 69 74 68 20 31 2e 20 20 54 68 65 20  ng with 1.  The 
76e0: 76 61 6c 75 65 73 20 6f 66 20 76 61 72 69 61 62  values of variab
76f0: 6c 65 73 20 61 72 65 20 73 65 74 20 75 73 69 6e  les are set usin
7700: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
7710: 5f 62 69 6e 64 28 29 20 41 50 49 2e 0a 2a 2f 0a  _bind() API..*/.
7720: 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65  case OP_Variable
7730: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
7740: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7750: 20 2a 2f 0a 20 20 69 6e 74 20 6a 20 3d 20 70 4f   */.  int j = pO
7760: 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 4d 65 6d  p->p1 - 1;.  Mem
7770: 20 2a 70 56 61 72 3b 0a 20 20 61 73 73 65 72 74   *pVar;.  assert
7780: 28 20 6a 3e 3d 30 20 26 26 20 6a 3c 70 2d 3e 6e  ( j>=0 && j<p->n
7790: 56 61 72 20 29 3b 0a 0a 20 20 70 56 61 72 20 3d  Var );..  pVar =
77a0: 20 26 70 2d 3e 61 56 61 72 5b 6a 5d 3b 0a 20 20   &p->aVar[j];.  
77b0: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
77c0: 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29  emTooBig(pVar) )
77d0: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
77e0: 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ig;.  }.  sqlite
77f0: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
7800: 6f 70 79 28 70 4f 75 74 2c 20 26 70 2d 3e 61 56  opy(pOut, &p->aV
7810: 61 72 5b 6a 5d 2c 20 4d 45 4d 5f 53 74 61 74 69  ar[j], MEM_Stati
7820: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
7830: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
7840: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7850: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
7860: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
7870: 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73 20  Move the values 
7880: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
7890: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
78a0: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
78b0: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
78c0: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 31  isters P1..P1+P1
78d0: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
78e0: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
78f0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
7900: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
7910: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
7920: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
7930: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 0a 2a 2f  1 to overlap..*/
7940: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
7950: 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63  .  char *zMalloc
7960: 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d  ;.  int n = pOp-
7970: 3e 70 33 3b 0a 20 20 69 6e 74 20 70 31 20 3d 20  >p3;.  int p1 = 
7980: 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20 70  pOp->p1;.  int p
7990: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  2 = pOp->p2;.  a
79a0: 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20  ssert( n>0 );.  
79b0: 61 73 73 65 72 74 28 20 70 31 3e 30 20 29 3b 0a  assert( p1>0 );.
79c0: 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 70    assert( p1+n<p
79d0: 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31  ->nMem );.  pIn1
79e0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 31 5d 3b   = &p->aMem[p1];
79f0: 0a 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20  .  assert( p2>0 
7a00: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 2b  );.  assert( p2+
7a10: 6e 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  n<p->nMem );.  p
7a20: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
7a30: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  2];.  assert( p1
7a40: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
7a50: 70 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 6e  p1 );.  while( n
7a60: 2d 2d 20 29 7b 0a 20 20 20 20 7a 4d 61 6c 6c 6f  -- ){.    zMallo
7a70: 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  c = pOut->zMallo
7a80: 63 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61  c;.    pOut->zMa
7a90: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 73 71  lloc = 0;.    sq
7aa0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
7ab0: 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20  (pOut, pIn1);.  
7ac0: 20 20 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20    pIn1->zMalloc 
7ad0: 3d 20 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52  = zMalloc;.    R
7ae0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32  EGISTER_TRACE(p2
7af0: 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70  ++, pOut);.    p
7b00: 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b  In1++;.    pOut+
7b10: 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
7b20: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
7b30: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
7b40: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79  *.** Make a copy
7b50: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
7b60: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
7b70: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
7b80: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
7b90: 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68   deep copy of th
7ba0: 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c  e value.  A dupl
7bb0: 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65  icate.** is made
7bc0: 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f   of any string o
7bd0: 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e  r blob constant.
7be0: 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43    See also OP_SC
7bf0: 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  opy..*/.case OP_
7c00: 43 6f 70 79 3a 20 7b 0a 20 20 61 73 73 65 72 74  Copy: {.  assert
7c10: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
7c20: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
7c30: 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
7c40: 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  In1 = &p->aMem[p
7c50: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
7c60: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
7c70: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7c80: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
7c90: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
7ca0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
7cb0: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
7cc0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
7cd0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
7ce0: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
7cf0: 68 65 6d 29 3b 0a 20 20 44 65 65 70 68 65 6d 65  hem);.  Deepheme
7d00: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
7d10: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
7d20: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
7d30: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7d40: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
7d50: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61  2 * * *.**.** Ma
7d60: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
7d70: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
7d80: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7d90: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
7da0: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
7db0: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
7dc0: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
7dd0: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
7de0: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
7df0: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
7e00: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
7e10: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
7e20: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
7e30: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
7e40: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
7e50: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
7e60: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
7e70: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
7e80: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
7e90: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
7ea0: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
7eb0: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
7ec0: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
7ed0: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
7ee0: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
7ef0: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
7f00: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
7f10: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
7f20: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
7f30: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
7f40: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
7f50: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73  p->p1>0 );.  ass
7f60: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  ert( pOp->p1<=p-
7f70: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 49 6e 31 20  >nMem );.  pIn1 
7f80: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
7f90: 70 31 5d 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  p1];.  REGISTER_
7fa0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
7fb0: 49 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20  In1);.  assert( 
7fc0: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61  pOp->p2>0 );.  a
7fd0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
7fe0: 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75  p->nMem );.  pOu
7ff0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
8000: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
8010: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
8020: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8030: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
8040: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
8050: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
8060: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
8070: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
8080: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
8090: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
80a0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
80b0: 74 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20  ters P1 through 
80c0: 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20  P1+P2-1 contain 
80d0: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a  a single row of.
80e0: 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73  ** results. This
80f0: 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74   opcode causes t
8100: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
8110: 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e  ) call to termin
8120: 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53  ate.** with an S
8130: 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e  QLITE_ROW return
8140: 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74   code and it set
8150: 73 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33  s up the sqlite3
8160: 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75  _stmt.** structu
8170: 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63  re to provide ac
8180: 63 65 73 73 20 74 6f 20 74 68 65 20 74 6f 70 20  cess to the top 
8190: 50 31 20 76 61 6c 75 65 73 20 61 73 20 74 68 65  P1 values as the
81a0: 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a   result.** row..
81b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
81c0: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
81d0: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
81e0: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
81f0: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
8200: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8210: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
8220: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
8230: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 0a  p2<=p->nMem );..
8240: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
8250: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
8260: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
8270: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
8280: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
8290: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
82a0: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
82b0: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
82c0: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
82d0: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
82e0: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
82f0: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
8300: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
8310: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
8320: 20 20 2a 2a 20 61 73 20 73 69 64 65 20 65 66 66    ** as side eff
8330: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
8340: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
8350: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
8360: 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p1];.  for(i=0;
8370: 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29   i<pOp->p2; i++)
8380: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
8390: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
83a0: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
83b0: 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28 26 70  storeTypeInfo(&p
83c0: 4d 65 6d 5b 69 5d 2c 20 65 6e 63 6f 64 69 6e 67  Mem[i], encoding
83d0: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
83e0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c  TRACE(pOp->p1+i,
83f0: 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a   &pMem[i]);.  }.
8400: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
8410: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
8420: 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75  _mem;..  /* Retu
8430: 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20  rn SQLITE_ROW.  
8440: 2a 2f 0a 20 20 70 2d 3e 6e 43 61 6c 6c 62 61 63  */.  p->nCallbac
8450: 6b 2b 2b 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  k++;.  p->pc = p
8460: 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51  c + 1;.  rc = SQ
8470: 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f  LITE_ROW;.  goto
8480: 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a   vdbe_return;.}.
8490: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63  ./* Opcode: Conc
84a0: 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  at P1 P2 P3 * *.
84b0: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65  **.** Add the te
84c0: 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  xt in register P
84d0: 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  1 onto the end o
84e0: 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a  f the text in.**
84f0: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
8500: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
8510: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
8520: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74  ..** If either t
8530: 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74  he P1 or P2 text
8540: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73   are NULL then s
8550: 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e  tore NULL in P3.
8560: 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32  .**.**   P3 = P2
8570: 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20   || P1.**.** It 
8580: 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50  is illegal for P
8590: 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74  1 and P3 to be t
85a0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
85b0: 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20  . Sometimes,.** 
85c0: 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d  if P3 is the sam
85d0: 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32  e register as P2
85e0: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
85f0: 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20  tion is able.** 
8600: 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70  to avoid a memcp
8610: 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  y()..*/.case OP_
8620: 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20  Concat: {       
8630: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
8640: 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69  K_CONCAT, in1, i
8650: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
8660: 34 20 6e 42 79 74 65 3b 0a 0a 20 20 61 73 73 65  4 nByte;..  asse
8670: 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29  rt( pIn1!=pOut )
8680: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
8690: 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61  lags | pIn2->fla
86a0: 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  gs) & MEM_Null )
86b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
86c0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
86d0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
86e0: 7d 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  }.  ExpandBlob(p
86f0: 49 6e 31 29 3b 0a 20 20 53 74 72 69 6e 67 69 66  In1);.  Stringif
8700: 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
8710: 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  );.  ExpandBlob(
8720: 70 49 6e 32 29 3b 0a 20 20 53 74 72 69 6e 67 69  pIn2);.  Stringi
8730: 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e  fy(pIn2, encodin
8740: 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49  g);.  nByte = pI
8750: 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b  n1->n + pIn2->n;
8760: 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
8770: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
8780: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
8790: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
87a0: 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  ;.  }.  MemSetTy
87b0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
87c0: 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 73 71 6c  _Str);.  if( sql
87d0: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
87e0: 70 4f 75 74 2c 20 6e 42 79 74 65 2b 32 2c 20 70  pOut, nByte+2, p
87f0: 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20  Out==pIn2) ){.  
8800: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
8810: 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70   }.  if( pOut!=p
8820: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
8830: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
8840: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
8850: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
8860: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
8870: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
8880: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
8890: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  ] = 0;.  pOut->z
88a0: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
88b0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
88c0: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
88d0: 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20 70  ->n = nByte;.  p
88e0: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
88f0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
8900: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
8910: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8920: 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20   Opcode: Add P1 
8930: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
8940: 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  Add the value in
8950: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
8960: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
8970: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
8980: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
8990: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
89a0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
89b0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
89c0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
89d0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .*/./* Opcode: M
89e0: 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33  ultiply P1 P2 P3
89f0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75   * *.**.**.** Mu
8a00: 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65  ltiply the value
8a10: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
8a20: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
8a30: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
8a40: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
8a50: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
8a60: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
8a70: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
8a80: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
8a90: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
8aa0: 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32  : Subtract P1 P2
8ab0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75   P3 * *.**.** Su
8ac0: 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  btract the value
8ad0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
8ae0: 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69  from the value i
8af0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
8b00: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
8b10: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
8b20: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
8b30: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
8b40: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
8b50: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
8b60: 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32  de: Divide P1 P2
8b70: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69   P3 * *.**.** Di
8b80: 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69  vide the value i
8b90: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
8ba0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
8bb0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
8bc0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
8bd0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
8be0: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  .  If the value 
8bf0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
8c00: 2a 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  * is zero, then 
8c10: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
8c20: 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  LL..** If either
8c30: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
8c40: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
8c50: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
8c60: 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50  : Remainder P1 P
8c70: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
8c80: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
8c90: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
8ca0: 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74  er division of t
8cb0: 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72  he value in.** r
8cc0: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
8cd0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
8ce0: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
8cf0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50   the result in P
8d00: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
8d10: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
8d20: 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P2 is zero the r
8d30: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
8d40: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
8d50: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
8d60: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
8d70: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
8d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d90: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
8da0: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
8db0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
8dc0: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
8dd0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
8de0: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
8df0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
8e00: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8e20: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
8e30: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
8e40: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
8e50: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
8e60: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
8e70: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
8e80: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
8e90: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
8ea0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8eb0: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
8ec0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
8ed0: 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 61 70 70  int flags;.  app
8ee0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
8ef0: 79 28 70 49 6e 31 29 3b 0a 20 20 61 70 70 6c 79  y(pIn1);.  apply
8f00: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
8f10: 70 49 6e 32 29 3b 0a 20 20 66 6c 61 67 73 20 3d  pIn2);.  flags =
8f20: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
8f30: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
8f40: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  ( (flags & MEM_N
8f50: 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61  ull)!=0 ) goto a
8f60: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
8f70: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20  _is_null;.  if( 
8f80: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
8f90: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
8fa0: 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29  _Int)==MEM_Int )
8fb0: 7b 0a 20 20 20 20 69 36 34 20 61 2c 20 62 3b 0a  {.    i64 a, b;.
8fc0: 20 20 20 20 61 20 3d 20 70 49 6e 31 2d 3e 75 2e      a = pIn1->u.
8fd0: 69 3b 0a 20 20 20 20 62 20 3d 20 70 49 6e 32 2d  i;.    b = pIn2-
8fe0: 3e 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63 68  >u.i;.    switch
8ff0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
9000: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
9010: 64 64 3a 20 20 20 20 20 20 20 20 20 62 20 2b 3d  dd:         b +=
9020: 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   a;       break;
9030: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
9040: 75 62 74 72 61 63 74 3a 20 20 20 20 62 20 2d 3d  ubtract:    b -=
9050: 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   a;       break;
9060: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
9070: 75 6c 74 69 70 6c 79 3a 20 20 20 20 62 20 2a 3d  ultiply:    b *=
9080: 20 61 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b   a;       break;
9090: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
90a0: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
90b0: 20 69 66 28 20 61 3d 3d 30 20 29 20 67 6f 74 6f   if( a==0 ) goto
90c0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
90d0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
90e0: 20 20 20 20 2f 2a 20 44 69 76 69 64 69 6e 67 20      /* Dividing 
90f0: 74 68 65 20 6c 61 72 67 65 73 74 20 70 6f 73 73  the largest poss
9100: 69 62 6c 65 20 6e 65 67 61 74 69 76 65 20 36 34  ible negative 64
9110: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 28 31 3c  -bit integer (1<
9120: 3c 36 33 29 20 62 79 20 0a 20 20 20 20 20 20 20  <63) by .       
9130: 20 2a 2a 20 2d 31 20 72 65 74 75 72 6e 73 20 61   ** -1 returns a
9140: 6e 20 69 6e 74 65 67 65 72 20 74 6f 6f 20 6c 61  n integer too la
9150: 72 67 65 20 74 6f 20 73 74 6f 72 65 20 69 6e 20  rge to store in 
9160: 61 20 36 34 2d 62 69 74 20 64 61 74 61 2d 74 79  a 64-bit data-ty
9170: 70 65 2e 20 4f 6e 0a 20 20 20 20 20 20 20 20 2a  pe. On.        *
9180: 2a 20 73 6f 6d 65 20 61 72 63 68 69 74 65 63 74  * some architect
9190: 75 72 65 73 2c 20 74 68 65 20 76 61 6c 75 65 20  ures, the value 
91a0: 6f 76 65 72 66 6c 6f 77 73 20 74 6f 20 28 31 3c  overflows to (1<
91b0: 3c 36 33 29 2e 20 4f 6e 20 6f 74 68 65 72 73 2c  <63). On others,
91c0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20 53 49  .        ** a SI
91d0: 47 46 50 45 20 69 73 20 69 73 73 75 65 64 2e 20  GFPE is issued. 
91e0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
91f0: 61 74 65 6d 65 6e 74 20 6e 6f 72 6d 61 6c 69 7a  atement normaliz
9200: 65 73 20 74 68 69 73 0a 20 20 20 20 20 20 20 20  es this.        
9210: 2a 2a 20 62 65 68 61 76 69 6f 72 20 73 6f 20 74  ** behavior so t
9220: 68 61 74 20 61 6c 6c 20 61 72 63 68 69 74 65 63  hat all architec
9230: 74 75 72 65 73 20 62 65 68 61 76 65 20 61 73 20  tures behave as 
9240: 69 66 20 69 6e 74 65 67 65 72 20 0a 20 20 20 20  if integer .    
9250: 20 20 20 20 2a 2a 20 6f 76 65 72 66 6c 6f 77 20      ** overflow 
9260: 6f 63 63 75 72 72 65 64 2e 0a 20 20 20 20 20 20  occurred..      
9270: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28    */.        if(
9280: 20 61 3d 3d 2d 31 20 26 26 20 62 3d 3d 53 4d 41   a==-1 && b==SMA
9290: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 61 20  LLEST_INT64 ) a 
92a0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 20 2f  = 1;.        b /
92b0: 3d 20 61 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = a;.        bre
92c0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
92d0: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
92e0: 20 20 20 20 20 69 66 28 20 61 3d 3d 30 20 29 20       if( a==0 ) 
92f0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
9300: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
9310: 20 20 20 20 20 20 20 20 69 66 28 20 61 3d 3d 2d          if( a==-
9320: 31 20 29 20 61 20 3d 20 31 3b 0a 20 20 20 20 20  1 ) a = 1;.     
9330: 20 20 20 62 20 25 3d 20 61 3b 0a 20 20 20 20 20     b %= a;.     
9340: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
9350: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
9360: 2d 3e 75 2e 69 20 3d 20 62 3b 0a 20 20 20 20 4d  ->u.i = b;.    M
9370: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
9380: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
9390: 7d 65 6c 73 65 7b 0a 20 20 20 20 64 6f 75 62 6c  }else{.    doubl
93a0: 65 20 61 2c 20 62 3b 0a 20 20 20 20 61 20 3d 20  e a, b;.    a = 
93b0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
93c0: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20  alue(pIn1);.    
93d0: 62 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  b = sqlite3VdbeR
93e0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
93f0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
9400: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
9410: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
9420: 20 20 20 20 20 20 62 20 2b 3d 20 61 3b 20 20 20        b += a;   
9430: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9440: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
9450: 74 3a 20 20 20 20 62 20 2d 3d 20 61 3b 20 20 20  t:    b -= a;   
9460: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9470: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
9480: 79 3a 20 20 20 20 62 20 2a 3d 20 61 3b 20 20 20  y:    b *= a;   
9490: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
94a0: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
94b0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61   {.        if( a
94c0: 3d 3d 30 2e 30 20 29 20 67 6f 74 6f 20 61 72 69  ==0.0 ) goto ari
94d0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
94e0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
94f0: 62 20 2f 3d 20 61 3b 0a 20 20 20 20 20 20 20 20  b /= a;.        
9500: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
9510: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
9520: 20 20 20 20 20 20 20 20 69 36 34 20 69 61 20 3d          i64 ia =
9530: 20 28 69 36 34 29 61 3b 0a 20 20 20 20 20 20 20   (i64)a;.       
9540: 20 69 36 34 20 69 62 20 3d 20 28 69 36 34 29 62   i64 ib = (i64)b
9550: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 61  ;.        if( ia
9560: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
9570: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9580: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
9590: 28 20 69 61 3d 3d 2d 31 20 29 20 69 61 20 3d 20  ( ia==-1 ) ia = 
95a0: 31 3b 0a 20 20 20 20 20 20 20 20 62 20 3d 20 69  1;.        b = i
95b0: 62 20 25 20 69 61 3b 0a 20 20 20 20 20 20 20 20  b % ia;.        
95c0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
95d0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
95e0: 69 74 65 33 49 73 4e 61 4e 28 62 29 20 29 7b 0a  ite3IsNaN(b) ){.
95f0: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
9600: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
9610: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
9620: 70 4f 75 74 2d 3e 72 20 3d 20 62 3b 0a 20 20 20  pOut->r = b;.   
9630: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
9640: 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pOut, MEM_Real);
9650: 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 20  .    if( (flags 
9660: 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
9670: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
9680: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
9690: 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a  ty(pOut);.    }.
96a0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72    }.  break;..ar
96b0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
96c0: 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74  is_null:.  sqlit
96d0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
96e0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
96f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
9700: 6f 6c 6c 53 65 71 20 2a 20 2a 20 50 34 0a 2a 2a  ollSeq * * P4.**
9710: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
9720: 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71  ter to a CollSeq
9730: 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20   struct. If the 
9740: 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75  next call to a u
9750: 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  ser function.** 
9760: 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c  or aggregate cal
9770: 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  ls sqlite3GetFun
9780: 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73  cCollSeq(), this
9790: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
97a0: 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72  nce will.** be r
97b0: 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73  eturned. This is
97c0: 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69   used by the bui
97d0: 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78  lt-in min(), max
97e0: 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a  () and nullif().
97f0: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
9800: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
9810: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d  e used by the im
9820: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
9830: 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e  the aforemention
9840: 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  ed functions.** 
9850: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
9860: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
9870: 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f  ce set by this o
9880: 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61  pcode is not ava
9890: 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63  ilable.** public
98a0: 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65 72  ly, only to user
98b0: 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69 6e   functions defin
98c0: 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a 2f  ed in func.c..*/
98d0: 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71  .case OP_CollSeq
98e0: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
98f0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
9900: 4c 4c 53 45 51 20 29 3b 0a 20 20 62 72 65 61 6b  LLSEQ );.  break
9910: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9920: 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50  Function P1 P2 P
9930: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 49 6e  3 P4 P5.**.** In
9940: 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63  voke a user func
9950: 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f  tion (P4 is a po
9960: 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63 74  inter to a Funct
9970: 69 6f 6e 20 73 74 72 75 63 74 75 72 65 20 74 68  ion structure th
9980: 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68  at.** defines th
9990: 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68  e function) with
99a0: 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61   P5 arguments ta
99b0: 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
99c0: 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63  r P2 and.** succ
99d0: 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73  essors.  The res
99e0: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
99f0: 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
9a00: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
9a10: 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73   Register P3 mus
9a20: 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20  t not be one of 
9a30: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70  the function inp
9a40: 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  uts..**.** P1 is
9a50: 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73   a 32-bit bitmas
9a60: 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  k indicating whe
9a70: 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68  ther or not each
9a80: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
9a90: 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61   .** function wa
9aa0: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20  s determined to 
9ab0: 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63  be constant at c
9ac0: 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20  ompile time. If 
9ad0: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
9ae0: 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61  ument was consta
9af0: 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66  nt then bit 0 of
9b00: 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73   P1 is set. This
9b10: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
9b20: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
9b30: 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63   meta data assoc
9b40: 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65  iated with a use
9b50: 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  r function argum
9b60: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ent using the.**
9b70: 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78   sqlite3_set_aux
9b80: 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62  data() API may b
9b90: 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65  e safely retaine
9ba0: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
9bb0: 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  .** invocation o
9bc0: 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  f this opcode..*
9bd0: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41  *.** See also: A
9be0: 67 67 53 74 65 70 20 61 6e 64 20 41 67 67 46 69  ggStep and AggFi
9bf0: 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  nal.*/.case OP_F
9c00: 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74  unction: {.  int
9c10: 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b   i;.  Mem *pArg;
9c20: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
9c30: 78 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65  xt ctx;.  sqlite
9c40: 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b  3_value **apVal;
9c50: 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e  .  int n = pOp->
9c60: 70 35 3b 0a 0a 20 20 61 70 56 61 6c 20 3d 20 70  p5;..  apVal = p
9c70: 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72  ->apArg;.  asser
9c80: 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30  t( apVal || n==0
9c90: 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e   );..  assert( n
9ca0: 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
9cb0: 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
9cc0: 70 2d 3e 6e 4d 65 6d 29 20 29 3b 0a 20 20 61 73  p->nMem) );.  as
9cd0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
9ce0: 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
9cf0: 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
9d00: 20 70 41 72 67 20 3d 20 26 70 2d 3e 61 4d 65 6d   pArg = &p->aMem
9d10: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72  [pOp->p2];.  for
9d20: 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
9d30: 70 41 72 67 2b 2b 29 7b 0a 20 20 20 20 61 70 56  pArg++){.    apV
9d40: 61 6c 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20  al[i] = pArg;.  
9d50: 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28    storeTypeInfo(
9d60: 70 41 72 67 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pArg, encoding);
9d70: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
9d80: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 41 72  ACE(pOp->p2, pAr
9d90: 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  g);.  }..  asser
9da0: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
9db0: 50 34 5f 46 55 4e 43 44 45 46 20 7c 7c 20 70 4f  P4_FUNCDEF || pO
9dc0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 44  p->p4type==P4_VD
9dd0: 42 45 46 55 4e 43 20 29 3b 0a 20 20 69 66 28 20  BEFUNC );.  if( 
9de0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
9df0: 46 55 4e 43 44 45 46 20 29 7b 0a 20 20 20 20 63  FUNCDEF ){.    c
9e00: 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
9e10: 70 34 2e 70 46 75 6e 63 3b 0a 20 20 20 20 63 74  p4.pFunc;.    ct
9e20: 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 30 3b  x.pVdbeFunc = 0;
9e30: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 74  .  }else{.    ct
9e40: 78 2e 70 56 64 62 65 46 75 6e 63 20 3d 20 28 56  x.pVdbeFunc = (V
9e50: 64 62 65 46 75 6e 63 2a 29 70 4f 70 2d 3e 70 34  dbeFunc*)pOp->p4
9e60: 2e 70 56 64 62 65 46 75 6e 63 3b 0a 20 20 20 20  .pVdbeFunc;.    
9e70: 63 74 78 2e 70 46 75 6e 63 20 3d 20 63 74 78 2e  ctx.pFunc = ctx.
9e80: 70 56 64 62 65 46 75 6e 63 2d 3e 70 46 75 6e 63  pVdbeFunc->pFunc
9e90: 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
9ea0: 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
9eb0: 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p3<=p->nMem )
9ec0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61  ;.  pOut = &p->a
9ed0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
9ee0: 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45  ctx.s.flags = ME
9ef0: 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e  M_Null;.  ctx.s.
9f00: 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 73  db = db;.  ctx.s
9f10: 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78  .xDel = 0;.  ctx
9f20: 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
9f30: 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
9f40: 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
9f50: 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
9f60: 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
9f70: 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72    ** the pointer
9f80: 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20   to ctx.s so in 
9f90: 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75  case the user-fu
9fa0: 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20  nction can use. 
9fb0: 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20   ** the already 
9fc0: 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
9fd0: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f   instead of allo
9fe0: 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65  cating a new one
9ff0: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
a000: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74 78  VdbeMemMove(&ctx
a010: 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65 6d  .s, pOut);.  Mem
a020: 53 65 74 54 79 70 65 46 6c 61 67 28 26 63 74 78  SetTypeFlag(&ctx
a030: 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
a040: 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20    ctx.isError = 
a050: 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
a060: 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  nc->flags & SQLI
a070: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
a080: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
a090: 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20  pOp>p->aOp );.  
a0a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
a0b0: 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ].p4type==P4_COL
a0c0: 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65  LSEQ );.    asse
a0d0: 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
a0e0: 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
a0f0: 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20  ;.    ctx.pColl 
a100: 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f  = pOp[-1].p4.pCo
a110: 6c 6c 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  ll;.  }.  if( sq
a120: 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
a130: 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
a140: 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
a150: 20 28 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46   (*ctx.pFunc->xF
a160: 75 6e 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70  unc)(&ctx, n, ap
a170: 56 61 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Val);.  if( sqli
a180: 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
a190: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
a1a0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
a1b0: 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61  x.s);.    goto a
a1c0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
a1d0: 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  se;.  }.  if( db
a1e0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
a1f0: 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68  {.    /* Even th
a200: 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20  ough a malloc() 
a210: 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20  has failed, the 
a220: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
a230: 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65  f the.    ** use
a240: 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68  r function may h
a250: 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71  ave called an sq
a260: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58  lite3_result_XXX
a270: 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20  () function.    
a280: 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76  ** to return a v
a290: 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77  alue. The follow
a2a0: 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65  ing call release
a2b0: 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a  s any resources.
a2c0: 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65      ** associate
a2d0: 64 20 77 69 74 68 20 73 75 63 68 20 61 20 76 61  d with such a va
a2e0: 6c 75 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  lue..    **.    
a2f0: 2a 2a 20 4e 6f 74 65 3a 20 4d 61 79 62 65 20 4d  ** Note: Maybe M
a300: 65 6d 52 65 6c 65 61 73 65 28 29 20 73 68 6f 75  emRelease() shou
a310: 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 69 66 20  ld be called if 
a320: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
a330: 29 0a 20 20 20 20 2a 2a 20 66 61 69 6c 73 20 61  ).    ** fails a
a340: 6c 73 6f 20 28 74 68 65 20 69 66 28 2e 2e 2e 29  lso (the if(...)
a350: 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65   statement above
a360: 29 2e 20 42 75 74 20 69 66 20 70 65 6f 70 6c 65  ). But if people
a370: 20 61 72 65 0a 20 20 20 20 2a 2a 20 6d 69 73 75   are.    ** misu
a380: 73 69 6e 67 20 73 71 6c 69 74 65 2c 20 74 68 65  sing sqlite, the
a390: 79 20 68 61 76 65 20 62 69 67 67 65 72 20 70 72  y have bigger pr
a3a0: 6f 62 6c 65 6d 73 20 74 68 61 6e 20 61 20 6c 65  oblems than a le
a3b0: 61 6b 65 64 20 76 61 6c 75 65 2e 0a 20 20 20 20  aked value..    
a3c0: 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
a3d0: 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74  beMemRelease(&ct
a3e0: 78 2e 73 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e  x.s);.    goto n
a3f0: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_mem;.  }..  /*
a400: 20 49 66 20 61 6e 79 20 61 75 78 69 6c 69 61 72   If any auxiliar
a410: 79 20 64 61 74 61 20 66 75 6e 63 74 69 6f 6e 73  y data functions
a420: 20 68 61 76 65 20 62 65 65 6e 20 63 61 6c 6c 65   have been calle
a430: 64 20 62 79 20 74 68 69 73 20 75 73 65 72 20 66  d by this user f
a440: 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20 69 6d  unction,.  ** im
a450: 6d 65 64 69 61 74 65 6c 79 20 63 61 6c 6c 20 74  mediately call t
a460: 68 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 6f  he destructor fo
a470: 72 20 61 6e 79 20 6e 6f 6e 2d 73 74 61 74 69 63  r any non-static
a480: 20 76 61 6c 75 65 73 2e 0a 20 20 2a 2f 0a 20 20   values..  */.  
a490: 69 66 28 20 63 74 78 2e 70 56 64 62 65 46 75 6e  if( ctx.pVdbeFun
a4a0: 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
a4b0: 56 64 62 65 44 65 6c 65 74 65 41 75 78 44 61 74  VdbeDeleteAuxDat
a4c0: 61 28 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2c  a(ctx.pVdbeFunc,
a4d0: 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 70   pOp->p1);.    p
a4e0: 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63  Op->p4.pVdbeFunc
a4f0: 20 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63   = ctx.pVdbeFunc
a500: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  ;.    pOp->p4typ
a510: 65 20 3d 20 50 34 5f 56 44 42 45 46 55 4e 43 3b  e = P4_VDBEFUNC;
a520: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68  .  }..  /* If th
a530: 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  e function retur
a540: 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68  ned an error, th
a550: 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  row an exception
a560: 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73   */.  if( ctx.is
a570: 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c  Error ){.    sql
a580: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
a590: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
a5a0: 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
a5b0: 75 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29  ue_text(&ctx.s))
a5c0: 3b 0a 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69  ;.    rc = ctx.i
a5d0: 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  sError;.  }..  /
a5e0: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
a5f0: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
a600: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
a610: 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  P3 */.  sqlite3V
a620: 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
a630: 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69  g(&ctx.s, encodi
a640: 6e 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ng);.  sqlite3Vd
a650: 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20  beMemMove(pOut, 
a660: 26 63 74 78 2e 73 29 3b 0a 20 20 69 66 28 20 73  &ctx.s);.  if( s
a670: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
a680: 42 69 67 28 70 4f 75 74 29 20 29 7b 0a 20 20 20  Big(pOut) ){.   
a690: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
a6a0: 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52   }.  REGISTER_TR
a6b0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
a6c0: 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
a6d0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
a6e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a6f0: 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50  Opcode: BitAnd P
a700: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
a710: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
a720: 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76  ise AND of the v
a730: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
a740: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
a750: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
a760: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
a770: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
a780: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
a790: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
a7a0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
a7b0: 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33  : BitOr P1 P2 P3
a7c0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
a7d0: 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20  the bit-wise OR 
a7e0: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
a7f0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
a800: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
a810: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
a820: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
a830: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
a840: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
a850: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
a860: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c  * Opcode: ShiftL
a870: 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  eft P1 P2 P3 * *
a880: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
a890: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
a8a0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
a8b0: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
a8c0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
a8d0: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
a8e0: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
a8f0: 65 67 69 73 65 72 20 50 31 2e 0a 2a 2a 20 53 74  egiser P1..** St
a900: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
a910: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
a920: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
a930: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
a940: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
a950: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
a960: 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33  ftRight P1 P2 P3
a970: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74   * *.**.** Shift
a980: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
a990: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
a9a0: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
a9b0: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
a9c0: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
a9d0: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
a9e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
a9f0: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
aa00: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
aa10: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
aa20: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
aa30: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
aa40: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
aa50: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
aa60: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
aa70: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
aa80: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
aa90: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aab0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
aac0: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
aad0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
aae0: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
aaf0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ab00: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
ab10: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
ab20: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
ab30: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
ab40: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
ab50: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
ab60: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 61 2c 20  ut3 */.  i64 a, 
ab70: 62 3b 0a 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  b;..  if( (pIn1-
ab80: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
ab90: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
aba0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
abb0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
abc0: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
abd0: 20 20 7d 0a 20 20 61 20 3d 20 73 71 6c 69 74 65    }.  a = sqlite
abe0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
abf0: 6e 32 29 3b 0a 20 20 62 20 3d 20 73 71 6c 69 74  n2);.  b = sqlit
ac00: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
ac10: 49 6e 31 29 3b 0a 20 20 73 77 69 74 63 68 28 20  In1);.  switch( 
ac20: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
ac30: 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74 41 6e     case OP_BitAn
ac40: 64 3a 20 20 20 20 20 20 61 20 26 3d 20 62 3b 20  d:      a &= b; 
ac50: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
ac60: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
ac70: 20 20 20 20 61 20 7c 3d 20 62 3b 20 20 20 20 20      a |= b;     
ac80: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
ac90: 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20  OP_ShiftLeft:   
aca0: 61 20 3c 3c 3d 20 62 3b 20 20 20 20 62 72 65 61  a <<= b;    brea
acb0: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
acc0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
acd0: 63 6f 64 65 3d 3d 4f 50 5f 53 68 69 66 74 52 69  code==OP_ShiftRi
ace0: 67 68 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20  ght );.         
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad00: 61 20 3e 3e 3d 20 62 3b 20 20 20 20 62 72 65 61  a >>= b;    brea
ad10: 6b 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  k;.  }.  pOut->u
ad20: 2e 69 20 3d 20 61 3b 0a 20 20 4d 65 6d 53 65 74  .i = a;.  MemSet
ad30: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
ad40: 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
ad50: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
ad60: 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20  AddImm  P1 P2 * 
ad70: 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74  * *.** .** Add t
ad80: 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74  he constant P2 t
ad90: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
ada0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54  egister P1..** T
adb0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77  he result is alw
adc0: 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ays an integer..
add0: 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61  **.** To force a
ade0: 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62  ny register to b
adf0: 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75  e an integer, ju
ae00: 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73  st add 0..*/.cas
ae10: 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20  e OP_AddImm: {  
ae20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
ae30: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
ae40: 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
ae50: 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  In1);.  pIn1->u.
ae60: 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  i += pOp->p2;.  
ae70: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ae80: 6f 64 65 3a 20 46 6f 72 63 65 49 6e 74 20 50 31  ode: ForceInt P1
ae90: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
aea0: 20 43 6f 6e 76 65 72 74 20 76 61 6c 75 65 20 69   Convert value i
aeb0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  n register P1 in
aec0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  to an integer.  
aed0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 0a 2a 2a  If the value .**
aee0: 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 6e 75   in P1 is not nu
aef0: 6d 65 72 69 63 20 28 6d 65 61 6e 69 6e 67 20 74  meric (meaning t
af00: 68 61 74 20 69 73 20 69 73 20 61 20 4e 55 4c 4c  hat is is a NULL
af10: 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61   or a string tha
af20: 74 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 6c 6f  t.** does not lo
af30: 6f 6b 20 6c 69 6b 65 20 61 6e 20 69 6e 74 65 67  ok like an integ
af40: 65 72 20 6f 72 20 66 6c 6f 61 74 69 6e 67 20 70  er or floating p
af50: 6f 69 6e 74 20 6e 75 6d 62 65 72 29 20 74 68 65  oint number) the
af60: 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e  n.** jump to P2.
af70: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
af80: 6e 20 50 31 20 69 73 20 6e 75 6d 65 72 69 63 20  n P1 is numeric 
af90: 74 68 65 6e 0a 2a 2a 20 63 6f 6e 76 65 72 74 20  then.** convert 
afa0: 69 74 20 69 6e 74 6f 20 74 68 65 20 6c 65 61 73  it into the leas
afb0: 74 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69  t integer that i
afc0: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
afd0: 72 20 65 71 75 61 6c 20 74 6f 20 69 74 73 0a 2a  r equal to its.*
afe0: 2a 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  * current value 
aff0: 69 66 20 50 33 3d 3d 30 2c 20 6f 72 20 74 6f 20  if P3==0, or to 
b000: 74 68 65 20 6c 65 61 73 74 20 69 6e 74 65 67 65  the least intege
b010: 72 20 74 68 61 74 20 69 73 20 73 74 72 69 63 74  r that is strict
b020: 6c 79 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68  ly.** greater th
b030: 61 6e 20 69 74 73 20 63 75 72 72 65 6e 74 20 76  an its current v
b040: 61 6c 75 65 20 69 66 20 50 33 3d 3d 31 2e 0a 2a  alue if P3==1..*
b050: 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 72 63 65 49  /.case OP_ForceI
b060: 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
b070: 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
b080: 0a 20 20 69 36 34 20 76 3b 0a 20 20 61 70 70 6c  .  i64 v;.  appl
b090: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
b0a0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
b0b0: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
b0c0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
b0d0: 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
b0e0: 5f 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a 20 20  _Real))==0 ){.  
b0f0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
b100: 20 31 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   1;.    break;. 
b110: 20 7d 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66   }.  if( pIn1->f
b120: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
b130: 7b 0a 20 20 20 20 76 20 3d 20 70 49 6e 31 2d 3e  {.    v = pIn1->
b140: 75 2e 69 20 2b 20 28 70 4f 70 2d 3e 70 33 21 3d  u.i + (pOp->p3!=
b150: 30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  0);.  }else{.   
b160: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
b170: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
b180: 29 3b 0a 20 20 20 20 76 20 3d 20 28 73 71 6c 69  );.    v = (sqli
b190: 74 65 33 5f 69 6e 74 36 34 29 70 49 6e 31 2d 3e  te3_int64)pIn1->
b1a0: 72 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 31 2d  r;.    if( pIn1-
b1b0: 3e 72 3e 28 64 6f 75 62 6c 65 29 76 20 29 20 76  >r>(double)v ) v
b1c0: 2b 2b 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ++;.    if( pOp-
b1d0: 3e 70 33 20 26 26 20 70 49 6e 31 2d 3e 72 3d 3d  >p3 && pIn1->r==
b1e0: 28 64 6f 75 62 6c 65 29 76 20 29 20 76 2b 2b 3b  (double)v ) v++;
b1f0: 0a 20 20 7d 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  .  }.  pIn1->u.i
b200: 20 3d 20 76 3b 0a 20 20 4d 65 6d 53 65 74 54 79   = v;.  MemSetTy
b210: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
b220: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
b230: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  }../* Opcode: Mu
b240: 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20  stBeInt P1 P2 * 
b250: 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65  * *.** .** Force
b260: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b270: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
b280: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
b290: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
b2a0: 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P1 is not an int
b2b0: 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20  eger and cannot 
b2c0: 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
b2d0: 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  o an integer.** 
b2e0: 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73  without data los
b2f0: 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  s, then jump imm
b300: 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20  ediately to P2, 
b310: 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72  or if P2==0.** r
b320: 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d  aise an SQLITE_M
b330: 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f  ISMATCH exceptio
b340: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  n..*/.case OP_Mu
b350: 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20  stBeInt: {      
b360: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
b370: 6e 31 20 2a 2f 0a 20 20 61 70 70 6c 79 41 66 66  n1 */.  applyAff
b380: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
b390: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
b3a0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28  encoding);.  if(
b3b0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
b3c0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
b3d0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
b3e0: 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
b3f0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b  SQLITE_MISMATCH;
b400: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
b410: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
b420: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b430: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
b440: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  1;.    }.  }else
b450: 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
b460: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49  Flag(pIn1, MEM_I
b470: 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
b480: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
b490: 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20  RealAffinity P1 
b4a0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  * * * *.**.** If
b4b0: 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c   register P1 hol
b4c0: 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f  ds an integer co
b4d0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65  nvert it to a re
b4e0: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20  al value..**.** 
b4f0: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
b500: 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74  sed when extract
b510: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
b520: 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68  from a column th
b530: 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61  at.** has REAL a
b540: 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63  ffinity.  Such c
b550: 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79  olumn values may
b560: 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64   still be stored
b570: 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c   as.** integers,
b580: 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63   for space effic
b590: 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72  iency, but after
b5a0: 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77   extraction we w
b5b0: 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68  ant them.** to h
b5c0: 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20  ave only a real 
b5d0: 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
b5e0: 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20  P_RealAffinity: 
b5f0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
b600: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69     /* in1 */.  i
b610: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
b620: 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20   MEM_Int ){.    
b630: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
b640: 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  alify(pIn1);.  }
b650: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
b660: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b670: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
b680: 20 54 6f 54 65 78 74 20 50 31 20 2a 20 2a 20 2a   ToText P1 * * *
b690: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
b6a0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b6b0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 65  ster P1 to be te
b6c0: 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  xt..** If the va
b6d0: 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20  lue is numeric, 
b6e0: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
b6f0: 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68 65  string using the
b700: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
b710: 66 20 70 72 69 6e 74 66 28 29 2e 20 20 42 6c 6f  f printf().  Blo
b720: 62 20 76 61 6c 75 65 73 20 61 72 65 20 75 6e 63  b values are unc
b730: 68 61 6e 67 65 64 20 61 6e 64 0a 2a 2a 20 61 72  hanged and.** ar
b740: 65 20 61 66 74 65 72 77 61 72 64 73 20 73 69 6d  e afterwards sim
b750: 70 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20  ply interpreted 
b760: 61 73 20 74 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41  as text..**.** A
b770: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
b780: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
b790: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
b7a0: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
b7b0: 0a 63 61 73 65 20 4f 50 5f 54 6f 54 65 78 74 3a  .case OP_ToText:
b7c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
b7d0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b7e0: 4b 5f 54 4f 5f 54 45 58 54 2c 20 69 6e 31 20 2a  K_TO_TEXT, in1 *
b7f0: 2f 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  /.  if( pIn1->fl
b800: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
b810: 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74   break;.  assert
b820: 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f  ( MEM_Str==(MEM_
b830: 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49  Blob>>3) );.  pI
b840: 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49  n1->flags |= (pI
b850: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c  n1->flags&MEM_Bl
b860: 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41  ob)>>3;.  applyA
b870: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
b880: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65  LITE_AFF_TEXT, e
b890: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d  ncoding);.  rc =
b8a0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
b8b0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
b8c0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  1->flags & MEM_S
b8d0: 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  tr || db->malloc
b8e0: 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31  Failed );.  pIn1
b8f0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
b900: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
b910: 4d 5f 42 6c 6f 62 29 3b 0a 20 20 55 50 44 41 54  M_Blob);.  UPDAT
b920: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
b930: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
b940: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 42  ../* Opcode: ToB
b950: 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  lob P1 * * * *.*
b960: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
b970: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b980: 20 50 31 20 74 6f 20 62 65 20 61 20 42 4c 4f 42   P1 to be a BLOB
b990: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
b9a0: 65 20 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f  e is numeric, co
b9b0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74  nvert it to a st
b9c0: 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a 2a 20 53  ring first..** S
b9d0: 74 72 69 6e 67 73 20 61 72 65 20 73 69 6d 70 6c  trings are simpl
b9e0: 79 20 72 65 69 6e 74 65 72 70 72 65 74 65 64 20  y reinterpreted 
b9f0: 61 73 20 62 6c 6f 62 73 20 77 69 74 68 20 6e 6f  as blobs with no
ba00: 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f 20 74 68   change.** to th
ba10: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
ba20: 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  a..**.** A NULL 
ba30: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
ba40: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
ba50: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
ba60: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
ba70: 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20 20 20 20  OP_ToBlob: {    
ba80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ba90: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 42   same as TK_TO_B
baa0: 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66  LOB, in1 */.  if
bab0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
bac0: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
bad0: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
bae0: 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
baf0: 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ==0 ){.    apply
bb00: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
bb10: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
bb20: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61  encoding);.    a
bb30: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
bb40: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
bb50: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
bb60: 20 29 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74   );.  }.  MemSet
bb70: 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d  TypeFlag(pIn1, M
bb80: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 55 50 44 41  EM_Blob);.  UPDA
bb90: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
bba0: 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pIn1);.  break;.
bbb0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f  }../* Opcode: To
bbc0: 4e 75 6d 65 72 69 63 20 50 31 20 2a 20 2a 20 2a  Numeric P1 * * *
bbd0: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
bbe0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bbf0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 6e 75  ster P1 to be nu
bc00: 6d 65 72 69 63 20 28 65 69 74 68 65 72 20 61 6e  meric (either an
bc10: 0a 2a 2a 20 69 6e 74 65 67 65 72 20 6f 72 20 61  .** integer or a
bc20: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
bc30: 6e 75 6d 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74  number.).** If t
bc40: 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74  he value is text
bc50: 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f   or blob, try to
bc60: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
bc70: 6e 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65  n using the.** e
bc80: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f  quivalent of ato
bc90: 69 28 29 20 6f 72 20 61 74 6f 66 28 29 20 61 6e  i() or atof() an
bca0: 64 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20  d store 0 if no 
bcb0: 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20  such conversion 
bcc0: 0a 2a 2a 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  .** is possible.
bcd0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
bce0: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
bcf0: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
bd00: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
bd10: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
bd20: 5f 54 6f 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20  _ToNumeric: {   
bd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bd40: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
bd50: 4e 55 4d 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a  NUMERIC, in1 */.
bd60: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
bd70: 67 73 20 26 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  gs & (MEM_Null|M
bd80: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
bd90: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
bda0: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6d 65 72 69  te3VdbeMemNumeri
bdb0: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
bdc0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
bdd0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
bde0: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
bdf0: 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20  e: ToInt P1 * * 
be00: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
be10: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
be20: 69 73 74 65 72 20 50 31 20 62 65 20 61 6e 20 69  ister P1 be an i
be30: 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a 2a 20 54  nteger.  If.** T
be40: 68 65 20 76 61 6c 75 65 20 69 73 20 63 75 72 72  he value is curr
be50: 65 6e 74 6c 79 20 61 20 72 65 61 6c 20 6e 75 6d  ently a real num
be60: 62 65 72 2c 20 64 72 6f 70 20 69 74 73 20 66 72  ber, drop its fr
be70: 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 2e 0a 2a  actional part..*
be80: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
be90: 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20  s text or blob, 
bea0: 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69  try to convert i
beb0: 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
bec0: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
bed0: 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28  ivalent of atoi(
bee0: 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69 66  ) and store 0 if
bef0: 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73   no such convers
bf00: 69 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e  ion is possible.
bf10: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
bf20: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
bf30: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
bf40: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
bf50: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
bf60: 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  _ToInt: {       
bf70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
bf80: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49 4e 54 2c  me as TK_TO_INT,
bf90: 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 28 70   in1 */.  if( (p
bfa0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
bfb0: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
bfc0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
bfd0: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
bfe0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
bff0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
c000: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
c010: 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a  ode: ToReal P1 *
c020: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
c030: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
c040: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
c050: 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  e a floating poi
c060: 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66  nt number..** If
c070: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
c080: 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67  rrently an integ
c090: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a  er, convert it..
c0a0: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
c0b0: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
c0c0: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
c0d0: 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
c0e0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
c0f0: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
c100: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30  () and store 0.0
c110: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
c120: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
c130: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
c140: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
c150: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
c160: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
c170: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
c180: 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20   OP_ToReal: {   
c190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c1a0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
c1b0: 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  REAL, in1 */.  i
c1c0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c1d0: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
c1e0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
c1f0: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
c200: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c210: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
c220: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a  TE_OMIT_CAST */.
c230: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50  ./* Opcode: Lt P
c240: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c250: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
c260: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c270: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
c280: 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31  f reg(P3)<reg(P1
c290: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
c2a0: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a  o address P2.  .
c2b0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
c2c0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
c2d0: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  it of P5 is set 
c2e0: 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50  and either reg(P
c2f0: 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29  1) or.** reg(P3)
c300: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
c310: 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66  ke the jump.  If
c320: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
c330: 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69  IFNULL .** bit i
c340: 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c  s clear then fal
c350: 6c 20 74 68 72 75 20 69 66 20 65 69 74 68 65 72  l thru if either
c360: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
c370: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
c380: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
c390: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
c3a0: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
c3b0: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
c3c0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
c3d0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
c3e0: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
c3f0: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
c400: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
c410: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
c420: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
c430: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
c440: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
c450: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
c460: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
c470: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
c480: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
c490: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
c4a0: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
c4b0: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
c4c0: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
c4d0: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
c4e0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
c4f0: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
c500: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
c510: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
c520: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
c530: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
c540: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
c550: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
c560: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
c570: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
c580: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
c590: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
c5a0: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
c5b0: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
c5c0: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
c5d0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
c5e0: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
c5f0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
c600: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
c610: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
c620: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
c630: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
c640: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
c650: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
c660: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
c670: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
c680: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
c690: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
c6a0: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
c6b0: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
c6c0: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
c6d0: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
c6e0: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
c6f0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
c700: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
c710: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
c720: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
c730: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
c740: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
c750: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
c760: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
c770: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
c780: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
c790: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
c7a0: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
c7b0: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
c7c0: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
c7d0: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
c7e0: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
c7f0: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
c800: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
c810: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f  egister P2..*/./
c820: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
c830: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
c840: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
c850: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
c860: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
c870: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
c880: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
c890: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
c8a0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
c8b0: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
c8c0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
c8d0: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
c8e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
c8f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
c900: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c910: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
c920: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
c930: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
c940: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
c950: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
c960: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
c970: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
c980: 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65  re equal..** See
c990: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
c9a0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
c9b0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
c9c0: 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50   Opcode: Le P1 P
c9d0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
c9e0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
c9f0: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
ca00: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
ca10: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
ca20: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
ca30: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
ca40: 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P3 is less than 
ca50: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
ca60: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
ca70: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
ca80: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
ca90: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
caa0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
cab0: 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32  Opcode: Gt P1 P2
cac0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
cad0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
cae0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
caf0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
cb00: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
cb10: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
cb20: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
cb30: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
cb40: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
cb50: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
cb60: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
cb70: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
cb80: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
cb90: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
cba0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
cbb0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
cbc0: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
cbd0: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
cbe0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
cbf0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
cc00: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
cc10: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
cc20: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
cc30: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
cc40: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
cc50: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
cc60: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
cc70: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
cc80: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a  ..*/.case OP_Eq:
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cca0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c  * same as TK_EQ,
ccb0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
ccc0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20  */.case OP_Ne:  
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cce0: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a  same as TK_NE, j
ccf0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
cd00: 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20  .case OP_Lt:    
cd10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cd20: 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d  me as TK_LT, jum
cd30: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
cd40: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20  ase OP_Le:      
cd50: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cd60: 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c   as TK_LE, jump,
cd70: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
cd80: 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20  e OP_Gt:        
cd90: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
cda0: 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69  s TK_GT, jump, i
cdb0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
cdc0: 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20  OP_Ge: {        
cdd0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cde0: 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GE, jump, in1
cdf0: 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 66  , in3 */.  int f
ce00: 6c 61 67 73 3b 0a 20 20 69 6e 74 20 72 65 73 3b  lags;.  int res;
ce10: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
ce20: 3b 0a 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e  ;..  flags = pIn
ce30: 31 2d 3e 66 6c 61 67 73 7c 70 49 6e 33 2d 3e 66  1->flags|pIn3->f
ce40: 6c 61 67 73 3b 0a 0a 20 20 69 66 28 20 66 6c 61  lags;..  if( fla
ce50: 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  gs&MEM_Null ){. 
ce60: 20 20 20 2f 2a 20 49 66 20 65 69 74 68 65 72 20     /* If either 
ce70: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
ce80: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
ce90: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
cea0: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
ceb0: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
cec0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
ced0: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
cee0: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70    */.    if( pOp
cef0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
cf00: 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 70  OREP2 ){.      p
cf10: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
cf20: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 4d  Op->p2];.      M
cf30: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
cf40: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
cf50: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
cf60: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
cf70: 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  t);.    }else if
cf80: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
cf90: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
cfa0: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
cfb0: 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2-1;.    }.   
cfc0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 61   break;.  }..  a
cfd0: 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
cfe0: 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
cff0: 41 53 4b 3b 0a 20 20 69 66 28 20 61 66 66 69 6e  ASK;.  if( affin
d000: 69 74 79 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ity ){.    apply
d010: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 61  Affinity(pIn1, a
d020: 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e  ffinity, encodin
d030: 67 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66  g);.    applyAff
d040: 69 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69  inity(pIn3, affi
d050: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
d060: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
d070: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
d080: 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e  COLLSEQ || pOp->
d090: 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20  p4.pColl==0 );. 
d0a0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
d0b0: 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  );.  ExpandBlob(
d0c0: 70 49 6e 33 29 3b 0a 20 20 72 65 73 20 3d 20 73  pIn3);.  res = s
d0d0: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
d0e0: 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70  (pIn3, pIn1, pOp
d0f0: 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 73  ->p4.pColl);.  s
d100: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
d110: 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f  de ){.    case O
d120: 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Eq:    res = r
d130: 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es==0;     break
d140: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65  ;.    case OP_Ne
d150: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d  :    res = res!=
d160: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
d170: 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20    case OP_Lt:   
d180: 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20   res = res<0;   
d190: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
d1a0: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73  se OP_Le:    res
d1b0: 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62   = res<=0;     b
d1c0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
d1d0: 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Gt:    res = r
d1e0: 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es>0;      break
d1f0: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
d200: 20 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d       res = res>=
d210: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
d220: 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  }..  if( pOp->p5
d230: 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
d240: 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20  2 ){.    pOut = 
d250: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
d260: 5d 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ];.    MemSetTyp
d270: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
d280: 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Int);.    pOut->
d290: 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52  u.i = res;.    R
d2a0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
d2b0: 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
d2c0: 7d 65 6c 73 65 20 69 66 28 20 72 65 73 20 29 7b  }else if( res ){
d2d0: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
d2e0: 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2-1;.  }.  break
d2f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d300: 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20  Permutation * * 
d310: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  * P4 *.**.** Set
d320: 20 74 68 65 20 70 65 72 6d 75 61 74 69 6f 6e 20   the permuation 
d330: 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43  used by the OP_C
d340: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20  ompare operator 
d350: 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a  to be the array.
d360: 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  ** of integers i
d370: 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n P4..**.** The 
d380: 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f  permutation is o
d390: 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20  nly valid until 
d3a0: 74 68 65 20 6e 65 78 74 20 4f 50 5f 50 65 72 6d  the next OP_Perm
d3b0: 75 74 61 74 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70  utation, OP_Comp
d3c0: 61 72 65 2c 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c  are,.** OP_Halt,
d3d0: 20 6f 72 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77   or OP_ResultRow
d3e0: 2e 20 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65  .  Typically the
d3f0: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20   OP_Permutation 
d400: 73 68 6f 75 6c 64 20 6f 63 63 75 72 0a 2a 2a 20  should occur.** 
d410: 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f  immediately prio
d420: 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70  r to the OP_Comp
d430: 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  are..*/.case OP_
d440: 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
d450: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
d460: 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
d470: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
d480: 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
d490: 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70  Permute = pOp->p
d4a0: 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.ai;.  break;.}
d4b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
d4c0: 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
d4d0: 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65   *.**.** Compare
d4e0: 20 74 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72   to vectors of r
d4f0: 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28  egisters in reg(
d500: 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31  P1)..reg(P1+P3-1
d510: 29 20 28 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 6f  ) (all this.** o
d520: 6e 65 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72  ne "A") and in r
d530: 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50  eg(P2)..reg(P2+P
d540: 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76  3-1) ("B").  Sav
d550: 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a  e the result of.
d560: 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
d570: 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65  n for use by the
d580: 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e   next OP_Jump in
d590: 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34  struct..**.** P4
d5a0: 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
d5b0: 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
d5c0: 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
d5d0: 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
d5e0: 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
d5f0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
d600: 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
d610: 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
d620: 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
d630: 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
d640: 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
d650: 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
d660: 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
d670: 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
d680: 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
d690: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
d6a0: 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
d6b0: 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
d6c0: 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
d6d0: 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
d6e0: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
d6f0: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
d700: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
d710: 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 20  pare: {.  int n 
d720: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 6e 74  = pOp->p3;.  int
d730: 20 69 2c 20 70 31 2c 20 70 32 3b 0a 20 20 63 6f   i, p1, p2;.  co
d740: 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  nst KeyInfo *pKe
d750: 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
d760: 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
d770: 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
d780: 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
d790: 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
d7a0: 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  p1;.  assert( p1
d7b0: 3e 30 20 26 26 20 70 31 2b 6e 2d 31 3c 70 2d 3e  >0 && p1+n-1<p->
d7c0: 6e 4d 65 6d 20 29 3b 0a 20 20 70 32 20 3d 20 70  nMem );.  p2 = p
d7d0: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
d7e0: 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 2d 31  ( p2>0 && p2+n-1
d7f0: 3c 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 66 6f  <p->nMem );.  fo
d800: 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
d810: 7b 0a 20 20 20 20 69 6e 74 20 69 64 78 20 3d 20  {.    int idx = 
d820: 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d  aPermute ? aPerm
d830: 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ute[i] : i;.    
d840: 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
d850: 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
d860: 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
d870: 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
d880: 20 20 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20      int bRev;   
d890: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66         /* True f
d8a0: 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f  or DESCENDING so
d8b0: 72 74 20 6f 72 64 65 72 20 2a 2f 0a 20 20 20 20  rt order */.    
d8c0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
d8d0: 31 2b 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b  1+idx, &p->aMem[
d8e0: 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
d8f0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
d900: 69 64 78 2c 20 26 70 2d 3e 61 4d 65 6d 5b 70 32  idx, &p->aMem[p2
d910: 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65  +idx]);.    asse
d920: 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e  rt( i<pKeyInfo->
d930: 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  nField );.    pC
d940: 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
d950: 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
d960: 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ev = pKeyInfo->a
d970: 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20  SortOrder[i];.  
d980: 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c    iCompare = sql
d990: 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26  ite3MemCompare(&
d9a0: 70 2d 3e 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c  p->aMem[p1+idx],
d9b0: 20 26 70 2d 3e 61 4d 65 6d 5b 70 32 2b 69 64 78   &p->aMem[p2+idx
d9c0: 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
d9d0: 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
d9e0: 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
d9f0: 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
da00: 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
da10: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
da20: 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
da30: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
da40: 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
da50: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
da60: 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
da70: 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
da80: 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
da90: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
daa0: 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
dab0: 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
dac0: 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
dad0: 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
dae0: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
daf0: 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
db00: 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
db10: 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
db20: 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
db30: 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
db40: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
db50: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
db60: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
db70: 3e 70 31 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p1 - 1;.  }else
db80: 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
db90: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
dba0: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
dbb0: 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  e{.    pc = pOp-
dbc0: 3e 70 33 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p3 - 1;.  }.  b
dbd0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
dbe0: 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
dbf0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
dc00: 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
dc10: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
dc20: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
dc30: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
dc40: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
dc50: 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
dc60: 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
dc70: 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
dc80: 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
dc90: 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
dca0: 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
dcb0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
dcc0: 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
dcd0: 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
dce0: 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
dcf0: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
dd00: 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
dd10: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
dd20: 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
dd30: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
dd40: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
dd50: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
dd60: 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
dd70: 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
dd80: 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
dd90: 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
dda0: 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
ddb0: 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
ddc0: 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
ddd0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
dde0: 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
ddf0: 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
de00: 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
de10: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
de20: 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
de30: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
de40: 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
de50: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
de60: 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
de70: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
de80: 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
de90: 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
dea0: 2c 20 76 32 3b 20 20 20 20 2f 2a 20 30 3d 3d 46  , v2;    /* 0==F
deb0: 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
dec0: 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
ded0: 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 70 49 6e 31  L */..  if( pIn1
dee0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
def0: 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32  ll ){.    v1 = 2
df00: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
df10: 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  1 = sqlite3VdbeI
df20: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
df30: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 49 6e 32  ;.  }.  if( pIn2
df40: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
df50: 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32  ll ){.    v2 = 2
df60: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
df70: 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  2 = sqlite3VdbeI
df80: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30  ntValue(pIn2)!=0
df90: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
dfa0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
dfb0: 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
dfc0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
dfd0: 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
dfe0: 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
dff0: 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
e000: 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
e010: 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
e020: 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
e030: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
e040: 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
e050: 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
e060: 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
e070: 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
e080: 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
e090: 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20    if( v1==2 ){. 
e0a0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
e0b0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
e0c0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
e0d0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a  pOut->u.i = v1;.
e0e0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
e0f0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
e100: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
e110: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
e120: 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  t P1 * * * *.**.
e130: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
e140: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e150: 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
e160: 61 6e 20 76 61 6c 75 65 2e 20 20 52 65 70 6c 61  an value.  Repla
e170: 63 65 20 69 74 0a 2a 2a 20 77 69 74 68 20 69 74  ce it.** with it
e180: 73 20 63 6f 6d 70 6c 65 6d 65 6e 74 2e 20 20 49  s complement.  I
e190: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
e1a0: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
e1b0: 4c 4c 20 69 74 73 20 76 61 6c 75 65 0a 2a 2a 20  LL its value.** 
e1c0: 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f  is unchanged..*/
e1d0: 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20  .case OP_Not: { 
e1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e1f0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
e200: 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20 70  , in1 */.  if( p
e210: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e220: 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 20 20  _Null ) break;  
e230: 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 74 6f  /* Do nothing to
e240: 20 4e 55 4c 4c 73 20 2a 2f 0a 20 20 73 71 6c 69   NULLs */.  sqli
e250: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
e260: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
e270: 6e 31 2d 3e 75 2e 69 20 3d 20 21 70 49 6e 31 2d  n1->u.i = !pIn1-
e280: 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  >u.i;.  assert( 
e290: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
e2a0: 49 6e 74 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Int );.  break;.
e2b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
e2c0: 74 4e 6f 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tNot P1 * * * *.
e2d0: 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
e2e0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
e2f0: 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e  egister P1 as an
e300: 20 69 6e 74 65 67 65 72 2e 20 20 52 65 70 6c 61   integer.  Repla
e310: 63 65 20 69 74 0a 2a 2a 20 77 69 74 68 20 69 74  ce it.** with it
e320: 73 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e  s ones-complemen
e330: 74 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  t.  If the value
e340: 20 69 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 4e   is originally N
e350: 55 4c 4c 2c 20 6c 65 61 76 65 0a 2a 2a 20 69 74  ULL, leave.** it
e360: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 63   unchanged..*/.c
e370: 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
e380: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e390: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
e3a0: 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 66 28 20  T, in1 */.  if( 
e3b0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
e3c0: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 20  M_Null ) break; 
e3d0: 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 74   /* Do nothing t
e3e0: 6f 20 4e 55 4c 4c 73 20 2a 2f 0a 20 20 73 71 6c  o NULLs */.  sql
e3f0: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
e400: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
e410: 49 6e 31 2d 3e 75 2e 69 20 3d 20 7e 70 49 6e 31  In1->u.i = ~pIn1
e420: 2d 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  ->u.i;.  assert(
e430: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
e440: 5f 49 6e 74 20 29 3b 0a 20 20 62 72 65 61 6b 3b  _Int );.  break;
e450: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
e460: 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
e470: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
e480: 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
e490: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
e4a0: 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  rue.  The value 
e4b0: 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  is.** is conside
e4c0: 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69  red true if it i
e4d0: 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f  s numeric and no
e4e0: 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  n-zero.  If the 
e4f0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
e500: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
e510: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
e520: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 2f 2a 20 4f  is true..*/./* O
e530: 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20  pcode: IfNot P1 
e540: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
e550: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
e560: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
e570: 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e  ter P1 is False.
e580: 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 0a 2a    The value is.*
e590: 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
e5a0: 74 72 75 65 20 69 66 20 69 74 20 68 61 73 20 61  true if it has a
e5b0: 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
e5c0: 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
e5d0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
e5e0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
e5f0: 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20   the jump if P3 
e600: 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 63 61 73 65  is true..*/.case
e610: 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
e620: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
e630: 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
e640: 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
e650: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
e660: 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 69   */.  int c;.  i
e670: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
e680: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
e690: 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   c = pOp->p3;.  
e6a0: 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51  }else{.#ifdef SQ
e6b0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
e6c0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d  NG_POINT.    c =
e6d0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
e6e0: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 23 65 6c 73  alue(pIn1);.#els
e6f0: 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  e.    c = sqlite
e700: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
e710: 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69  In1)!=0.0;.#endi
e720: 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  f.    if( pOp->o
e730: 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20  pcode==OP_IfNot 
e740: 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20  ) c = !c;.  }.  
e750: 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20  if( c ){.    pc 
e760: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
e770: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
e780: 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50  Opcode: IsNull P
e790: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
e7a0: 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
e7b0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
e7c0: 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c  ister P1 is NULL
e7d0: 2e 20 20 49 66 20 50 33 20 69 73 20 67 72 65 61  .  If P3 is grea
e7e0: 74 65 72 0a 2a 2a 20 74 68 61 6e 20 7a 65 72 6f  ter.** than zero
e7f0: 2c 20 74 68 65 6e 20 63 68 65 63 6b 20 61 6c 6c  , then check all
e800: 20 76 61 6c 75 65 73 20 72 65 67 28 50 31 29 2c   values reg(P1),
e810: 20 72 65 67 28 50 31 2b 31 29 2c 20 0a 2a 2a 20   reg(P1+1), .** 
e820: 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2c 20  reg(P1+2), ..., 
e830: 72 65 67 28 50 31 2b 50 33 2d 31 29 2e 0a 2a 2f  reg(P1+P3-1)..*/
e840: 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a  .case OP_IsNull:
e850: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
e860: 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55   same as TK_ISNU
e870: 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
e880: 0a 20 20 69 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e  .  int n = pOp->
e890: 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p3;.  assert( pO
e8a0: 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p3==0 || pOp-
e8b0: 3e 70 31 3e 30 20 29 3b 0a 20 20 64 6f 7b 0a 20  >p1>0 );.  do{. 
e8c0: 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
e8d0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
e8e0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  =0 ){.      pc =
e8f0: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
e900: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
e910: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
e920: 77 68 69 6c 65 28 20 2d 2d 6e 20 3e 20 30 20 29  while( --n > 0 )
e930: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e940: 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c   Opcode: NotNull
e950: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
e960: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
e970: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e980: 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
e990: 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
e9a0: 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
e9b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
e9c0: 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
e9d0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
e9e0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
e9f0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
ea00: 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
ea10: 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
ea20: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ea30: 64 65 3a 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e  de: SetNumColumn
ea40: 73 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  s * P2 * * *.**.
ea50: 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 73  ** This opcode s
ea60: 65 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ets the number o
ea70: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68  f columns for th
ea80: 65 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  e cursor opened 
ea90: 62 79 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  by the.** follow
eaa0: 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ing instruction 
eab0: 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  to P2..**.** An 
eac0: 4f 50 5f 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73  OP_SetNumColumns
ead0: 20 69 73 20 6f 6e 6c 79 20 75 73 65 66 75 6c 20   is only useful 
eae0: 69 66 20 69 74 20 6f 63 63 75 72 73 20 69 6d 6d  if it occurs imm
eaf0: 65 64 69 61 74 65 6c 79 20 62 65 66 6f 72 65 20  ediately before 
eb00: 0a 2a 2a 20 6f 6e 65 20 6f 66 20 74 68 65 20 66  .** one of the f
eb10: 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73  ollowing opcodes
eb20: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  :.**.**     Open
eb30: 52 65 61 64 0a 2a 2a 20 20 20 20 20 4f 70 65 6e  Read.**     Open
eb40: 57 72 69 74 65 0a 2a 2a 20 20 20 20 20 4f 70 65  Write.**     Ope
eb50: 6e 50 73 65 75 64 6f 0a 2a 2a 0a 2a 2a 20 49 66  nPseudo.**.** If
eb60: 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
eb70: 70 63 6f 64 65 20 69 73 20 74 6f 20 62 65 20 65  pcode is to be e
eb80: 78 65 63 75 74 65 64 20 6f 6e 20 61 20 63 75 72  xecuted on a cur
eb90: 73 6f 72 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69  sor, then.** thi
eba0: 73 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65  s opcode must be
ebb0: 20 70 72 65 73 65 6e 74 20 69 6d 6d 65 64 69 61   present immedia
ebc0: 74 65 6c 79 20 62 65 66 6f 72 65 20 74 68 65 20  tely before the 
ebd0: 6f 70 63 6f 64 65 20 74 68 61 74 0a 2a 2a 20 6f  opcode that.** o
ebe0: 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 2e  pens the cursor.
ebf0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 4e  .*/.case OP_SetN
ec00: 75 6d 43 6f 6c 75 6d 6e 73 3a 20 7b 0a 20 20 62  umColumns: {.  b
ec10: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
ec20: 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32  de: Column P1 P2
ec30: 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
ec40: 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74  nterpret the dat
ec50: 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  a that cursor P1
ec60: 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20   points to as a 
ec70: 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20  structure built 
ec80: 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b  using.** the Mak
ec90: 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
eca0: 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d  ion.  (See the M
ecb0: 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
ecc0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a   for additional.
ecd0: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
ece0: 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20  bout the format 
ecf0: 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45  of the data.)  E
ed00: 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68  xtract the P2-th
ed10: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20   column.** from 
ed20: 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66  this record.  If
ed30: 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20   there are less 
ed40: 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20  that (P2+1) .** 
ed50: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65  values in the re
ed60: 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20  cord, extract a 
ed70: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
ed80: 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20  value extracted 
ed90: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
eda0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
edb0: 49 66 20 74 68 65 20 4b 65 79 41 73 44 61 74 61  If the KeyAsData
edc0: 20 6f 70 63 6f 64 65 20 68 61 73 20 70 72 65 76   opcode has prev
edd0: 69 6f 75 73 6c 79 20 65 78 65 63 75 74 65 64 20  iously executed 
ede0: 6f 6e 20 74 68 69 73 20 63 75 72 73 6f 72 2c 20  on this cursor, 
edf0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 66 69 65 6c  then the.** fiel
ee00: 64 20 6d 69 67 68 74 20 62 65 20 65 78 74 72 61  d might be extra
ee10: 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6b 65  cted from the ke
ee20: 79 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68  y rather than th
ee30: 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  e data..**.** If
ee40: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
ee50: 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20  ains fewer than 
ee60: 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20  P2 fields, then 
ee70: 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20  extract a NULL. 
ee80: 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50   Or,.** if the P
ee90: 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  4 argument is a 
eea0: 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76  P4_MEM use the v
eeb0: 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61  alue of the P4 a
eec0: 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68  rgument as.** th
eed0: 65 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 63 61 73  e result..*/.cas
eee0: 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
eef0: 20 75 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65   u32 payloadSize
ef00: 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  ;   /* Number of
ef10: 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
ef20: 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31  cord */.  int p1
ef30: 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 20 2f 2a 20   = pOp->p1;  /* 
ef40: 50 31 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  P1 value of the 
ef50: 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  opcode */.  int 
ef60: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 20 20 2f  p2 = pOp->p2;  /
ef70: 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * column number 
ef80: 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20  to retrieve */. 
ef90: 20 43 75 72 73 6f 72 20 2a 70 43 20 3d 20 30 3b   Cursor *pC = 0;
efa0: 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
efb0: 63 75 72 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72  cursor */.  char
efc0: 20 2a 7a 52 65 63 3b 20 20 20 20 20 20 20 20 2f   *zRec;        /
efd0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d  * Pointer to com
efe0: 70 6c 65 74 65 20 72 65 63 6f 72 64 2d 64 61 74  plete record-dat
eff0: 61 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  a */.  BtCursor 
f000: 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65  *pCrsr;   /* The
f010: 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f   BTree cursor */
f020: 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20 20  .  u32 *aType;  
f030: 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b 69        /* aType[i
f040: 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65  ] holds the nume
f050: 72 69 63 20 74 79 70 65 20 6f 66 20 74 68 65 20  ric type of the 
f060: 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
f070: 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20   u32 *aOffset;  
f080: 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69      /* aOffset[i
f090: 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73  ] is offset to s
f0a0: 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72  tart of data for
f0b0: 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   i-th column */.
f0c0: 20 20 75 33 32 20 6e 46 69 65 6c 64 3b 20 20 20    u32 nField;   
f0d0: 20 20 20 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f       /* number o
f0e0: 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
f0f0: 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
f100: 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  len;           /
f110: 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  * The length of 
f120: 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64  the serialized d
f130: 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ata for the colu
f140: 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  mn */.  int i;  
f150: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
f160: 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
f170: 63 68 61 72 20 2a 7a 44 61 74 61 3b 20 20 20 20  char *zData;    
f180: 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
f190: 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
f1a0: 65 63 6f 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  ecoded */.  Mem 
f1b0: 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
f1c0: 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
f1d0: 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
f1e0: 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
f1f0: 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
f200: 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
f210: 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
f220: 6f 64 65 64 20 2a 2f 0a 0a 20 20 73 4d 65 6d 2e  oded */..  sMem.
f230: 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 73 4d 65  flags = 0;.  sMe
f240: 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 73 4d 65 6d  m.db = 0;.  sMem
f250: 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  .zMalloc = 0;.  
f260: 61 73 73 65 72 74 28 20 70 31 3c 70 2d 3e 6e 43  assert( p1<p->nC
f270: 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
f280: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
f290: 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
f2a0: 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70   );.  pDest = &p
f2b0: 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
f2c0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
f2d0: 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c  g(pDest, MEM_Nul
f2e0: 6c 29 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62  l);..  /* This b
f2f0: 6c 6f 63 6b 20 73 65 74 73 20 74 68 65 20 76 61  lock sets the va
f300: 72 69 61 62 6c 65 20 70 61 79 6c 6f 61 64 53 69  riable payloadSi
f310: 7a 65 20 74 6f 20 62 65 20 74 68 65 20 74 6f 74  ze to be the tot
f320: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a  al number of.  *
f330: 2a 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72  * bytes in the r
f340: 65 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ecord..  **.  **
f350: 20 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20   zRec is set to 
f360: 62 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  be the complete 
f370: 74 65 78 74 20 6f 66 20 74 68 65 20 72 65 63 6f  text of the reco
f380: 72 64 20 69 66 20 69 74 20 69 73 20 61 76 61 69  rd if it is avai
f390: 6c 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20  lable..  ** The 
f3a0: 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20  complete record 
f3b0: 74 65 78 74 20 69 73 20 61 6c 77 61 79 73 20 61  text is always a
f3c0: 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 73 65  vailable for pse
f3d0: 75 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20  udo-tables.  ** 
f3e0: 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 73  If the record is
f3f0: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 63 75 72   stored in a cur
f400: 73 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74  sor, the complet
f410: 65 20 72 65 63 6f 72 64 20 74 65 78 74 0a 20 20  e record text.  
f420: 2a 2a 20 6d 69 67 68 74 20 62 65 20 61 76 61 69  ** might be avai
f430: 6c 61 62 6c 65 20 69 6e 20 74 68 65 20 20 70 43  lable in the  pC
f440: 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 4f  ->aRow cache.  O
f450: 72 20 69 74 20 6d 69 67 68 74 20 6e 6f 74 20 62  r it might not b
f460: 65 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 64  e..  ** If the d
f470: 61 74 61 20 69 73 20 75 6e 61 76 61 69 6c 61 62  ata is unavailab
f480: 6c 65 2c 20 20 7a 52 65 63 20 69 73 20 73 65 74  le,  zRec is set
f490: 20 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20   to NULL..  **. 
f4a0: 20 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70   ** We also comp
f4b0: 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ute the number o
f4c0: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
f4d0: 20 72 65 63 6f 72 64 2e 20 20 46 6f 72 20 63 75   record.  For cu
f4e0: 72 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20  rsors,.  ** the 
f4f0: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
f500: 73 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  s is stored in t
f510: 68 65 20 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64  he Cursor.nField
f520: 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20   element..  */. 
f530: 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
f540: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
f550: 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53  !=0 );.#ifndef S
f560: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
f570: 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74  ALTABLE.  assert
f580: 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
f590: 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20  r==0 );.#endif. 
f5a0: 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72   if( pC->pCursor
f5b0: 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  !=0 ){.    /* Th
f5c0: 65 20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72  e record is stor
f5d0: 65 64 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a  ed in a B-Tree *
f5e0: 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
f5f0: 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
f600: 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  to(pC);.    if( 
f610: 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
f620: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
f630: 20 20 7a 52 65 63 20 3d 20 30 3b 0a 20 20 20 20    zRec = 0;.    
f640: 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
f650: 73 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  sor;.    if( pC-
f660: 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
f670: 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
f680: 30 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  0;.    }else if(
f690: 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
f6a0: 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  ==p->cacheCtr ){
f6b0: 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69  .      payloadSi
f6c0: 7a 65 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64  ze = pC->payload
f6d0: 53 69 7a 65 3b 0a 20 20 20 20 20 20 7a 52 65 63  Size;.      zRec
f6e0: 20 3d 20 28 63 68 61 72 2a 29 70 43 2d 3e 61 52   = (char*)pC->aR
f6f0: 6f 77 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  ow;.    }else if
f700: 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b  ( pC->isIndex ){
f710: 0a 20 20 20 20 20 20 69 36 34 20 70 61 79 6c 6f  .      i64 paylo
f720: 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20 20  adSize64;.      
f730: 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
f740: 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c  ize(pCrsr, &payl
f750: 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20  oadSize64);.    
f760: 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20    payloadSize = 
f770: 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20  payloadSize64;. 
f780: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f790: 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
f7a0: 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
f7b0: 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 7d  loadSize);.    }
f7c0: 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 43  .    nField = pC
f7d0: 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73  ->nField;.  }els
f7e0: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
f7f0: 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29  C->pseudoTable )
f800: 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63  ;.    /* The rec
f810: 6f 72 64 20 69 73 20 74 68 65 20 73 6f 6c 65 20  ord is the sole 
f820: 65 6e 74 72 79 20 6f 66 20 61 20 70 73 65 75 64  entry of a pseud
f830: 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 70  o-table */.    p
f840: 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
f850: 3e 6e 44 61 74 61 3b 0a 20 20 20 20 7a 52 65 63  >nData;.    zRec
f860: 20 3d 20 70 43 2d 3e 70 44 61 74 61 3b 0a 20 20   = pC->pData;.  
f870: 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
f880: 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
f890: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 61 79  .    assert( pay
f8a0: 6c 6f 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a  loadSize==0 || z
f8b0: 52 65 63 21 3d 30 20 29 3b 0a 20 20 20 20 6e 46  Rec!=0 );.    nF
f8c0: 69 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c  ield = pC->nFiel
f8d0: 64 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 30  d;.    pCrsr = 0
f8e0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70  ;.  }..  /* If p
f8f0: 61 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c  ayloadSize is 0,
f900: 20 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65   then just store
f910: 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28   a NULL */.  if(
f920: 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20   payloadSize==0 
f930: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
f940: 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  Dest->flags&MEM_
f950: 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f  Null );.    goto
f960: 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
f970: 20 20 7d 0a 20 20 69 66 28 20 70 61 79 6c 6f 61    }.  if( payloa
f980: 64 53 69 7a 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  dSize>db->aLimit
f990: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
f9a0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
f9b0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
f9c0: 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e 46 69    assert( p2<nFi
f9d0: 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61  eld );..  /* Rea
f9e0: 64 20 61 6e 64 20 70 61 72 73 65 20 74 68 65 20  d and parse the 
f9f0: 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20 20 53  table header.  S
fa00: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  tore the results
fa10: 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a 20 20   of the parse.  
fa20: 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f  ** into the reco
fa30: 72 64 20 68 65 61 64 65 72 20 63 61 63 68 65 20  rd header cache 
fa40: 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 63 75  fields of the cu
fa50: 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79  rsor..  */.  aTy
fa60: 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a  pe = pC->aType;.
fa70: 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53    if( pC->cacheS
fa80: 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43  tatus==p->cacheC
fa90: 74 72 20 29 7b 0a 20 20 20 20 61 4f 66 66 73 65  tr ){.    aOffse
faa0: 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b  t = pC->aOffset;
fab0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 75 38  .  }else{.    u8
fac0: 20 2a 7a 49 64 78 3b 20 20 20 20 20 20 20 20 2f   *zIdx;        /
fad0: 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 68 65 61  * Index into hea
fae0: 64 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 2a 7a  der */.    u8 *z
faf0: 45 6e 64 48 64 72 3b 20 20 20 20 20 2f 2a 20 50  EndHdr;     /* P
fb00: 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20  ointer to first 
fb10: 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68  byte after the h
fb20: 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 75 33 32  eader */.    u32
fb30: 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a   offset;      /*
fb40: 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   Offset into the
fb50: 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 6e 74   data */.    int
fb60: 20 73 7a 48 64 72 53 7a 3b 20 20 20 20 20 2f 2a   szHdrSz;     /*
fb70: 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   Size of the hea
fb80: 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61  der size field a
fb90: 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72  t start of recor
fba0: 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 76 61  d */.    int ava
fbb0: 69 6c 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  il;       /* Num
fbc0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
fbd0: 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a  available data *
fbe0: 2f 0a 0a 20 20 20 20 61 73 73 65 72 74 28 61 54  /..    assert(aT
fbf0: 79 70 65 29 3b 0a 20 20 20 20 70 43 2d 3e 61 4f  ype);.    pC->aO
fc00: 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20  ffset = aOffset 
fc10: 3d 20 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  = &aType[nField]
fc20: 3b 0a 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61  ;.    pC->payloa
fc30: 64 53 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53  dSize = payloadS
fc40: 69 7a 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  ize;.    pC->cac
fc50: 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
fc60: 63 68 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20  cheCtr;..    /* 
fc70: 46 69 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d  Figure out how m
fc80: 61 6e 79 20 62 79 74 65 73 20 61 72 65 20 69 6e  any bytes are in
fc90: 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
fca0: 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20     if( zRec ){. 
fcb0: 20 20 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65       zData = zRe
fcc0: 63 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  c;.    }else{.  
fcd0: 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e      if( pC->isIn
fce0: 64 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  dex ){.        z
fcf0: 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71  Data = (char*)sq
fd00: 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74  lite3BtreeKeyFet
fd10: 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
fd20: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
fd30: 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
fd40: 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74  (char*)sqlite3Bt
fd50: 72 65 65 44 61 74 61 46 65 74 63 68 28 70 43 72  reeDataFetch(pCr
fd60: 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20  sr, &avail);.   
fd70: 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66     }.      /* If
fd80: 20 4b 65 79 46 65 74 63 68 28 29 2f 44 61 74 61   KeyFetch()/Data
fd90: 46 65 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20  Fetch() managed 
fda0: 74 6f 20 67 65 74 20 74 68 65 20 65 6e 74 69 72  to get the entir
fdb0: 65 20 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20  e payload,.     
fdc0: 20 2a 2a 20 73 61 76 65 20 74 68 65 20 70 61 79   ** save the pay
fdd0: 6c 6f 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e  load in the pC->
fde0: 61 52 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61  aRow cache.  Tha
fdf0: 74 20 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66  t will save us f
fe00: 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76  rom.      ** hav
fe10: 69 6e 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69  ing to make addi
fe20: 74 69 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20  tional calls to 
fe30: 66 65 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e  fetch the conten
fe40: 74 20 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20  t portion of.   
fe50: 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64     ** the record
fe60: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
fe70: 20 69 66 28 20 61 76 61 69 6c 3e 3d 70 61 79 6c   if( avail>=payl
fe80: 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
fe90: 20 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b     zRec = zData;
fea0: 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
feb0: 77 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a  w = (u8*)zData;.
fec0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
fed0: 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
fee0: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
fef0: 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
ff00: 6f 77 69 6e 67 20 61 73 73 65 72 74 20 69 73 20  owing assert is 
ff10: 74 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73 65  true in all case
ff20: 73 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20 20  s accept when.  
ff30: 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73    ** the databas
ff40: 65 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20  e file has been 
ff50: 63 6f 72 72 75 70 74 65 64 20 65 78 74 65 72 6e  corrupted extern
ff60: 61 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20  ally..    **    
ff70: 61 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30 20  assert( zRec!=0 
ff80: 7c 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61  || avail>=payloa
ff90: 64 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d  dSize || avail>=
ffa0: 39 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64  9 ); */.    szHd
ffb0: 72 53 7a 20 3d 20 67 65 74 56 61 72 69 6e 74 33  rSz = getVarint3
ffc0: 32 28 28 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66  2((u8*)zData, of
ffd0: 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 54  fset);..    /* T
ffe0: 68 65 20 4b 65 79 46 65 74 63 68 28 29 20 6f 72  he KeyFetch() or
fff0: 20 44 61 74 61 46 65 74 63 68 28 29 20 61 62 6f   DataFetch() abo
10000 76 65 20 61 72 65 20 66 61 73 74 20 61 6e 64 20  ve are fast and 
10010 77 69 6c 6c 20 67 65 74 20 74 68 65 20 65 6e 74  will get the ent
10020 69 72 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72  ire.    ** recor
10030 64 20 68 65 61 64 65 72 20 69 6e 20 6d 6f 73 74  d header in most
10040 20 63 61 73 65 73 2e 20 20 42 75 74 20 74 68 65   cases.  But the
10050 79 20 77 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67  y will fail to g
10060 65 74 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a  et the complete.
10070 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68 65      ** record he
10080 61 64 65 72 20 69 66 20 74 68 65 20 72 65 63 6f  ader if the reco
10090 72 64 20 68 65 61 64 65 72 20 64 6f 65 73 20 6e  rd header does n
100a0 6f 74 20 66 69 74 20 6f 6e 20 61 20 73 69 6e 67  ot fit on a sing
100b0 6c 65 20 70 61 67 65 0a 20 20 20 20 2a 2a 20 69  le page.    ** i
100c0 6e 20 74 68 65 20 42 2d 54 72 65 65 2e 20 20 57  n the B-Tree.  W
100d0 68 65 6e 20 74 68 61 74 20 68 61 70 70 65 6e 73  hen that happens
100e0 2c 20 75 73 65 20 73 71 6c 69 74 65 33 56 64 62  , use sqlite3Vdb
100f0 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20  eMemFromBtree() 
10100 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71 75 69 72  to.    ** acquir
10110 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68  e the complete h
10120 65 61 64 65 72 20 74 65 78 74 2e 0a 20 20 20 20  eader text..    
10130 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a 52 65 63  */.    if( !zRec
10140 20 26 26 20 61 76 61 69 6c 3c 6f 66 66 73 65 74   && avail<offset
10150 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66   ){.      sMem.f
10160 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  lags = 0;.      
10170 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20  sMem.db = 0;.   
10180 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
10190 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
101a0 70 43 72 73 72 2c 20 30 2c 20 6f 66 66 73 65 74  pCrsr, 0, offset
101b0 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26  , pC->isIndex, &
101c0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66 28  sMem);.      if(
101d0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
101e0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  {.        goto o
101f0 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
10200 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74      }.      zDat
10210 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  a = sMem.z;.    
10220 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20  }.    zEndHdr = 
10230 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6f 66 66  (u8 *)&zData[off
10240 73 65 74 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d  set];.    zIdx =
10250 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a   (u8 *)&zData[sz
10260 48 64 72 53 7a 5d 3b 0a 0a 20 20 20 20 2f 2a 20  HdrSz];..    /* 
10270 53 63 61 6e 20 74 68 65 20 68 65 61 64 65 72 20  Scan the header 
10280 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20 66 69  and use it to fi
10290 6c 6c 20 69 6e 20 74 68 65 20 61 54 79 70 65 5b  ll in the aType[
102a0 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 5d 0a  ] and aOffset[].
102b0 20 20 20 20 2a 2a 20 61 72 72 61 79 73 2e 20 20      ** arrays.  
102c0 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20 63 6f  aType[i] will co
102d0 6e 74 61 69 6e 20 74 68 65 20 74 79 70 65 20 69  ntain the type i
102e0 6e 74 65 67 65 72 20 66 6f 72 20 74 68 65 20 69  nteger for the i
102f0 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d  -th.    ** colum
10300 6e 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d  n and aOffset[i]
10310 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68   will contain th
10320 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
10330 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 20 20  e beginning.    
10340 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
10350 20 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66   to the start of
10360 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
10370 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a 20 20  e i-th column.  
10380 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30    */.    for(i=0
10390 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  ; i<nField; i++)
103a0 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78  {.      if( zIdx
103b0 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20 20 20  <zEndHdr ){.    
103c0 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
103d0 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 20   offset;.       
103e0 20 7a 49 64 78 20 2b 3d 20 67 65 74 56 61 72 69   zIdx += getVari
103f0 6e 74 33 32 28 7a 49 64 78 2c 20 61 54 79 70 65  nt32(zIdx, aType
10400 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 6f 66  [i]);.        of
10410 66 73 65 74 20 2b 3d 20 73 71 6c 69 74 65 33 56  fset += sqlite3V
10420 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
10430 28 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20 20 20  (aType[i]);.    
10440 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
10450 20 2f 2a 20 49 66 20 69 20 69 73 20 6c 65 73 73   /* If i is less
10460 20 74 68 61 74 20 6e 46 69 65 6c 64 2c 20 74 68   that nField, th
10470 65 6e 20 74 68 65 72 65 20 61 72 65 20 6c 65 73  en there are les
10480 73 20 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73  s fields in this
10490 0a 20 20 20 20 20 20 20 20 2a 2a 20 72 65 63 6f  .        ** reco
104a0 72 64 20 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f  rd than SetNumCo
104b0 6c 75 6d 6e 73 20 69 6e 64 69 63 61 74 65 64 20  lumns indicated 
104c0 74 68 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e  there are column
104d0 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20  s in the.       
104e0 20 2a 2a 20 74 61 62 6c 65 2e 20 53 65 74 20 74   ** table. Set t
104f0 68 65 20 6f 66 66 73 65 74 20 66 6f 72 20 61 6e  he offset for an
10500 79 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20  y extra columns 
10510 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 0a 20  not present in. 
10520 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65         ** the re
10530 63 6f 72 64 20 74 6f 20 30 2e 20 54 68 69 73 20  cord to 0. This 
10540 74 65 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77  tells code below
10550 20 74 6f 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c   to store a NULL
10560 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 73 74  .        ** inst
10570 65 61 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69  ead of deseriali
10580 7a 69 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f  zing a value fro
10590 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  m the record..  
105a0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
105b0 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b   aOffset[i] = 0;
105c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
105d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
105e0 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
105f0 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20  .    sMem.flags 
10600 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20  = MEM_Null;..   
10610 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65 20 72   /* If we have r
10620 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20  ead more header 
10630 64 61 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f  data than was co
10640 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68  ntained in the h
10650 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72  eader,.    ** or
10660 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74   if the end of t
10670 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70  he last field ap
10680 70 65 61 72 73 20 74 6f 20 62 65 20 70 61 73 74  pears to be past
10690 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
106a0 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f      ** record, o
106b0 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
106c0 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
106d0 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66  ppears to be bef
106e0 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20  ore the end.    
106f0 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  ** of the record
10700 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64   (when all field
10710 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e  s present), then
10720 20 77 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c   we must be deal
10730 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68  ing .    ** with
10740 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
10750 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ase..    */.    
10760 69 66 28 20 7a 49 64 78 3e 7a 45 6e 64 48 64 72  if( zIdx>zEndHdr
10770 20 7c 7c 20 6f 66 66 73 65 74 3e 70 61 79 6c 6f   || offset>paylo
10780 61 64 53 69 7a 65 20 0a 20 20 20 20 20 7c 7c 20  adSize .     || 
10790 28 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26  (zIdx==zEndHdr &
107a0 26 20 6f 66 66 73 65 74 21 3d 70 61 79 6c 6f 61  & offset!=payloa
107b0 64 53 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20  dSize) ){.      
107c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
107d0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
107e0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
107f0 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  ut;.    }.  }.. 
10800 20 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6c 75   /* Get the colu
10810 6d 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  mn information. 
10820 49 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69  If aOffset[p2] i
10830 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
10840 20 0a 20 20 2a 2a 20 64 65 73 65 72 69 61 6c 69   .  ** deseriali
10850 7a 65 20 74 68 65 20 76 61 6c 75 65 20 66 72 6f  ze the value fro
10860 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 20 49 66  m the record. If
10870 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20   aOffset[p2] is 
10880 7a 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20  zero,.  ** then 
10890 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65 6e  there are not en
108a0 6f 75 67 68 20 66 69 65 6c 64 73 20 69 6e 20 74  ough fields in t
108b0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 73 61 74  he record to sat
108c0 69 73 66 79 20 74 68 65 0a 20 20 2a 2a 20 72 65  isfy the.  ** re
108d0 71 75 65 73 74 2e 20 20 49 6e 20 74 68 69 73 20  quest.  In this 
108e0 63 61 73 65 2c 20 73 65 74 20 74 68 65 20 76 61  case, set the va
108f0 6c 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50  lue NULL or to P
10900 34 20 69 66 20 50 34 20 69 73 0a 20 20 2a 2a 20  4 if P4 is.  ** 
10910 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d  a pointer to a M
10920 65 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a  em object..  */.
10930 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 70 32    if( aOffset[p2
10940 5d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ] ){.    assert(
10950 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
10960 3b 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29  ;.    if( zRec )
10970 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
10980 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74  dbeMemReleaseExt
10990 65 72 6e 61 6c 28 70 44 65 73 74 29 3b 0a 20 20  ernal(pDest);.  
109a0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
109b0 65 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29 26  erialGet((u8 *)&
109c0 7a 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d  zRec[aOffset[p2]
109d0 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44  ], aType[p2], pD
109e0 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  est);.    }else{
109f0 0a 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c  .      len = sql
10a00 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
10a10 70 65 4c 65 6e 28 61 54 79 70 65 5b 70 32 5d 29  peLen(aType[p2])
10a20 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
10a30 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d  dbeMemMove(&sMem
10a40 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  , pDest);.      
10a50 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
10a60 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72  MemFromBtree(pCr
10a70 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c  sr, aOffset[p2],
10a80 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65   len, pC->isInde
10a90 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  x, &sMem);.     
10aa0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
10ab0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
10ac0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
10ad0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
10ae0 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a  zData = sMem.z;.
10af0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10b00 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 2a 29  eSerialGet((u8*)
10b10 7a 44 61 74 61 2c 20 61 54 79 70 65 5b 70 32 5d  zData, aType[p2]
10b20 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 0a  , pDest);.    }.
10b30 20 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d      pDest->enc =
10b40 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c   encoding;.  }el
10b50 73 65 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  se{.    if( pOp-
10b60 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20  >p4type==P4_MEM 
10b70 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
10b80 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
10b90 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70  py(pDest, pOp->p
10ba0 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74  4.pMem, MEM_Stat
10bb0 69 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ic);.    }else{.
10bc0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 44        assert( pD
10bd0 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e  est->flags&MEM_N
10be0 75 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ull );.    }.  }
10bf0 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 64 79 6e  ..  /* If we dyn
10c00 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
10c10 65 64 20 73 70 61 63 65 20 74 6f 20 68 6f 6c 64  ed space to hold
10c20 20 74 68 65 20 64 61 74 61 20 28 69 6e 20 74 68   the data (in th
10c30 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  e.  ** sqlite3Vd
10c40 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29  beMemFromBtree()
10c50 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68 65   call above) the
10c60 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74 72  n transfer contr
10c70 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a 2a 20  ol of that.  ** 
10c80 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
10c90 63 61 74 65 64 20 73 70 61 63 65 20 6f 76 65 72  cated space over
10ca0 20 74 6f 20 74 68 65 20 70 44 65 73 74 20 73 74   to the pDest st
10cb0 72 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20 54 68  ructure..  ** Th
10cc0 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d 65  is prevents a me
10cd0 6d 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a  mory copy..  */.
10ce0 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c    if( sMem.zMall
10cf0 6f 63 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  oc ){.    assert
10d00 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a  ( sMem.z==sMem.z
10d10 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 61 73  Malloc );.    as
10d20 73 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66  sert( !(pDest->f
10d30 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20  lags & MEM_Dyn) 
10d40 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  );.    assert( !
10d50 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20  (pDest->flags & 
10d60 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
10d70 72 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d  r)) || pDest->z=
10d80 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 70  =sMem.z );.    p
10d90 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  Dest->flags &= ~
10da0 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53  (MEM_Ephem|MEM_S
10db0 74 61 74 69 63 29 3b 0a 20 20 20 20 70 44 65 73  tatic);.    pDes
10dc0 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
10dd0 54 65 72 6d 3b 0a 20 20 20 20 70 44 65 73 74 2d  Term;.    pDest-
10de0 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20  >z = sMem.z;.   
10df0 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20   pDest->zMalloc 
10e00 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a  = sMem.zMalloc;.
10e10 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69    }..  rc = sqli
10e20 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72  te3VdbeMemMakeWr
10e30 69 74 65 61 62 6c 65 28 70 44 65 73 74 29 3b 0a  iteable(pDest);.
10e40 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a  .op_column_out:.
10e50 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
10e60 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20  BSIZE(pDest);.  
10e70 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
10e80 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
10e90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10ea0 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20  pcode: Affinity 
10eb0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
10ec0 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74  ** Apply affinit
10ed0 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f  ies to a range o
10ee0 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73  f P2 registers s
10ef0 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e  tarting with P1.
10f00 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73  .**.** P4 is a s
10f10 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
10f20 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
10f30 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63  . The nth charac
10f40 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
10f50 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
10f60 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
10f70 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
10f80 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
10f90 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  th.** memory cel
10fa0 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a  l in the range..
10fb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e  */.case OP_Affin
10fc0 69 74 79 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ity: {.  char *z
10fd0 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
10fe0 70 34 2e 7a 3b 0a 20 20 4d 65 6d 20 2a 70 44 61  p4.z;.  Mem *pDa
10ff0 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ta0 = &p->aMem[p
11000 4f 70 2d 3e 70 31 5d 3b 0a 20 20 4d 65 6d 20 2a  Op->p1];.  Mem *
11010 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
11020 70 4f 70 2d 3e 70 32 2d 31 5d 3b 0a 20 20 4d 65  pOp->p2-1];.  Me
11030 6d 20 2a 70 52 65 63 3b 0a 0a 20 20 66 6f 72 28  m *pRec;..  for(
11040 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
11050 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
11060 29 7b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  ){.    ExpandBlo
11070 62 28 70 52 65 63 29 3b 0a 20 20 20 20 61 70 70  b(pRec);.    app
11080 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c  lyAffinity(pRec,
11090 20 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d   zAffinity[pRec-
110a0 70 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e  pData0], encodin
110b0 67 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  g);.  }.  break;
110c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
110d0 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
110e0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f  P3 P4 *.**.** Co
110f0 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65  nvert P2 registe
11100 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  rs beginning wit
11110 68 20 50 31 20 69 6e 74 6f 20 61 20 73 69 6e 67  h P1 into a sing
11120 6c 65 20 65 6e 74 72 79 0a 2a 2a 20 73 75 69 74  le entry.** suit
11130 61 62 6c 65 20 66 6f 72 20 75 73 65 20 61 73 20  able for use as 
11140 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e  a data record in
11150 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c   a database tabl
11160 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a  e or as a key.**
11170 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54   in an index.  T
11180 68 65 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68  he details of th
11190 65 20 66 6f 72 6d 61 74 20 61 72 65 20 69 72 72  e format are irr
111a0 65 6c 65 76 61 6e 74 20 61 73 20 6c 6f 6e 67 20  elevant as long 
111b0 61 73 0a 2a 2a 20 74 68 65 20 4f 50 5f 43 6f 6c  as.** the OP_Col
111c0 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
111d0 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
111e0 20 6c 61 74 65 72 2e 0a 2a 2a 20 52 65 66 65 72   later..** Refer
111f0 20 74 6f 20 73 6f 75 72 63 65 20 63 6f 64 65 20   to source code 
11200 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 74 68 65  comments for the
11210 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20   details of the 
11220 72 65 63 6f 72 64 0a 2a 2a 20 66 6f 72 6d 61 74  record.** format
11230 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  ..**.** P4 may b
11240 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  e a string that 
11250 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
11260 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20   long.  The nth 
11270 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
11280 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
11290 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
112a0 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
112b0 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
112c0 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c   the nth.** fiel
112d0 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
112e0 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61  ey..**.** The ma
112f0 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61  pping from chara
11300 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79  cter to affinity
11310 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65   is given by the
11320 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20   SQLITE_AFF_.** 
11330 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69  macros defined i
11340 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a  n sqliteInt.h..*
11350 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55  *.** If P4 is NU
11360 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65  LL then all inde
11370 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68  x fields have th
11380 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e  e affinity NONE.
11390 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65  .*/.case OP_Make
113a0 52 65 63 6f 72 64 3a 20 7b 0a 20 20 2f 2a 20 41  Record: {.  /* A
113b0 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f  ssuming the reco
113c0 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69  rd contains N fi
113d0 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64  elds, the record
113e0 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20   format looks.  
113f0 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20  ** like this:.  
11400 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  **.  ** --------
11410 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11420 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11430 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11440 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11450 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65  .  ** | hdr-size
11460 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65   | type 0 | type
11470 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20   1 | ... | type 
11480 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e  N-1 | data0 | ..
11490 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a  . | data N-1 | .
114a0 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
114b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
114e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
114f0 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20  **.  ** Data(0) 
11500 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  is taken from re
11510 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61  gister P1.  Data
11520 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72  (1) comes from r
11530 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a  egister P1+1.  *
11540 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a  * and so froth..
11550 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74    **.  ** Each t
11560 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76  ype field is a v
11570 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69  arint representi
11580 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79  ng the serial ty
11590 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20  pe of the .  ** 
115a0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61  corresponding da
115b0 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20  ta element (see 
115c0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
115d0 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20  lType()). The.  
115e0 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c  ** hdr-size fiel
115f0 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69  d is also a vari
11600 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
11610 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
11620 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f  beginning.  ** o
11630 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
11640 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 75 38  data0..  */.  u8
11650 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20   *zNewRecord;   
11660 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72       /* A buffer
11670 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74   to hold the dat
11680 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  a for the new re
11690 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  cord */.  Mem *p
116a0 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  Rec;            
116b0 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f   /* The new reco
116c0 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74  rd */.  u64 nDat
116d0 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f  a = 0;         /
116e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
116f0 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
11700 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 20 3d 20  */.  int nHdr = 
11710 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  0;          /* N
11720 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
11730 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
11740 2f 0a 20 20 75 36 34 20 6e 42 79 74 65 20 3d 20  /.  u64 nByte = 
11750 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61  0;         /* Da
11760 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65  ta space require
11770 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72  d for this recor
11780 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f  d */.  int nZero
11790 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
117a0 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
117b0 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
117c0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
117d0 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b  /.  int nVarint;
117e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
117f0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
11800 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75   a varint */.  u
11810 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20  32 serial_type; 
11820 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69        /* Type fi
11830 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  eld */.  Mem *pD
11840 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20  ata0;           
11850 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74  /* First field t
11860 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e  o be combined in
11870 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  to the record */
11880 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20  .  Mem *pLast;  
11890 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
118a0 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72  t field of the r
118b0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
118c0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20  Field;          
118d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66    /* Number of f
118e0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
118f0 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ord */.  char *z
11900 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  Affinity;       
11910 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
11920 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72  string for the r
11930 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66  ecord */.  int f
11940 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
11950 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74    /* File format
11960 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f   to use for enco
11970 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  ding */.  int i;
11980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11990 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69   /* Space used i
119a0 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 2a  n zNewRecord[] *
119b0 2f 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  /..  nField = pO
119c0 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69  p->p1;.  zAffini
119d0 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
119e0 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
119f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20  >0 && pOp->p2>0 
11a00 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c  && pOp->p2+nFiel
11a10 64 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  d<=p->nMem );.  
11a20 70 44 61 74 61 30 20 3d 20 26 70 2d 3e 61 4d 65  pData0 = &p->aMe
11a30 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69  m[nField];.  nFi
11a40 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  eld = pOp->p2;. 
11a50 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30   pLast = &pData0
11a60 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69  [nField-1];.  fi
11a70 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d  le_format = p->m
11a80 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
11a90 74 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68  t;..  /* Loop th
11aa0 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e  rough the elemen
11ab0 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b  ts that will mak
11ac0 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20  e up the record 
11ad0 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f  to figure.  ** o
11ae0 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63  ut how much spac
11af0 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  e is required fo
11b00 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
11b10 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52 65  ..  */.  for(pRe
11b20 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d  c=pData0; pRec<=
11b30 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 0a  pLast; pRec++){.
11b40 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 20      int len;.   
11b50 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29   if( zAffinity )
11b60 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
11b70 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66  inity(pRec, zAff
11b80 69 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61  inity[pRec-pData
11b90 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  0], encoding);. 
11ba0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65     }.    if( pRe
11bb0 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72  c->flags&MEM_Zer
11bc0 6f 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29  o && pRec->n>0 )
11bd0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
11be0 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
11bf0 28 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20  (pRec);.    }.  
11c00 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
11c10 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
11c20 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
11c30 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65  _format);.    le
11c40 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
11c50 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72  erialTypeLen(ser
11c60 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e  ial_type);.    n
11c70 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20  Data += len;.   
11c80 20 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33   nHdr += sqlite3
11c90 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
11ca0 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20  _type);.    if( 
11cb0 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
11cc0 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
11cd0 2f 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72  /* Only pure zer
11ce0 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63  o-filled BLOBs c
11cf0 61 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74  an be input to t
11d00 68 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20  his Opcode..    
11d10 20 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61    ** We do not a
11d20 6c 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20  llow blobs with 
11d30 61 20 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a  a prefix and a z
11d40 65 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e  ero-filled tail.
11d50 20 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20   */.      nZero 
11d60 2b 3d 20 70 52 65 63 2d 3e 75 2e 69 3b 0a 20 20  += pRec->u.i;.  
11d70 20 20 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20    }else if( len 
11d80 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d  ){.      nZero =
11d90 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20   0;.    }.  }.. 
11da0 20 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74   /* Add the init
11db0 69 61 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e  ial header varin
11dc0 74 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20  t and total the 
11dd0 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b  size */.  nHdr +
11de0 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69  = nVarint = sqli
11df0 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
11e00 72 29 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e  r);.  if( nVarin
11e10 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  t<sqlite3VarintL
11e20 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20  en(nHdr) ){.    
11e30 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
11e40 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
11e50 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42  -nZero;.  if( nB
11e60 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  yte>db->aLimit[S
11e70 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
11e80 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
11e90 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
11ea0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
11eb0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
11ec0 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61   has a buffer la
11ed0 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74  rge enough to st
11ee0 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65  ore .  ** the ne
11ef0 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75  w record. The ou
11f00 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70  tput register (p
11f10 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61  Op->p3) is not a
11f20 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62  llowed to.  ** b
11f30 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70  e one of the inp
11f40 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65  ut registers (be
11f50 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77  cause the follow
11f60 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  ing call to.  **
11f70 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
11f80 72 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62  row() could clob
11f90 62 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65  ber the value be
11fa0 66 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29  fore it is used)
11fb0 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
11fc0 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31   pOp->p3<pOp->p1
11fd0 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
11fe0 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a  ->p1+pOp->p2 );.
11ff0 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
12000 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
12010 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
12020 47 72 6f 77 28 70 4f 75 74 2c 20 6e 42 79 74 65  Grow(pOut, nByte
12030 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  , 0) ){.    goto
12040 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a   no_mem;.  }.  z
12050 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20  NewRecord = (u8 
12060 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a  *)pOut->z;..  /*
12070 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72   Write the recor
12080 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61  d */.  i = putVa
12090 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72  rint32(zNewRecor
120a0 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28  d, nHdr);.  for(
120b0 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65  pRec=pData0; pRe
120c0 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b  c<=pLast; pRec++
120d0 29 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79  ){.    serial_ty
120e0 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
120f0 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
12100 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20   file_format);. 
12110 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e     i += putVarin
12120 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  t32(&zNewRecord[
12130 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  i], serial_type)
12140 3b 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c  ;      /* serial
12150 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66   type */.  }.  f
12160 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
12170 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
12180 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c  c++){  /* serial
12190 20 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b   data */.    i +
121a0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
121b0 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f  ialPut(&zNewReco
121c0 72 64 5b 69 5d 2c 20 6e 42 79 74 65 2d 69 2c 20  rd[i], nByte-i, 
121d0 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
121e0 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  t);.  }.  assert
121f0 28 20 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( i==nByte );.. 
12200 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
12210 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
12220 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74  ->nMem );.  pOut
12230 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20 70  ->n = nByte;.  p
12240 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
12250 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b  _Blob | MEM_Dyn;
12260 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20  .  pOut->xDel = 
12270 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29  0;.  if( nZero )
12280 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
12290 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75  = nZero;.    pOu
122a0 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
122b0 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  Zero;.  }.  pOut
122c0 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
122d0 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
122e0 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
122f0 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74  r converted to t
12300 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45  ext */.  REGISTE
12310 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
12320 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45   pOut);.  UPDATE
12330 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
12340 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
12350 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 61 74  ./* Opcode: Stat
12360 65 6d 65 6e 74 20 50 31 20 2a 20 2a 20 2a 20 2a  ement P1 * * * *
12370 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 6e 20  .**.** Begin an 
12380 69 6e 64 69 76 69 64 75 61 6c 20 73 74 61 74 65  individual state
12390 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
123a0 20 77 68 69 63 68 20 69 73 20 70 61 72 74 20 6f   which is part o
123b0 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 74 72  f a larger.** tr
123c0 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68 69 73  ansaction.  This
123d0 20 69 73 20 6e 65 65 64 65 64 20 73 6f 20 74 68   is needed so th
123e0 61 74 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  at the statement
123f0 0a 2a 2a 20 63 61 6e 20 62 65 20 72 6f 6c 6c 65  .** can be rolle
12400 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
12410 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
12420 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
12430 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
12440 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 54 68  transaction.  Th
12450 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
12460 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 75 74  saction will aut
12470 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 63 6f  omatically.** co
12480 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44  mmit when the VD
12490 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20  BE halts..**.** 
124a0 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
124b0 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75  connection is cu
124c0 72 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f 63  rrently in autoc
124d0 6f 6d 6d 69 74 20 6d 6f 64 65 20 28 74 68 61 74  ommit mode (that
124e0 20 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 2c 20   .** is to say, 
124f0 69 66 20 69 74 20 69 73 20 69 6e 20 62 65 74 77  if it is in betw
12500 65 65 6e 20 42 45 47 49 4e 20 61 6e 64 20 43 4f  een BEGIN and CO
12510 4d 4d 49 54 29 0a 2a 2a 20 61 6e 64 20 69 66 20  MMIT).** and if 
12520 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74 68  there are no oth
12530 65 72 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  er active statem
12540 65 6e 74 73 20 6f 6e 20 74 68 65 20 73 61 6d 65  ents on the same
12550 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
12560 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  nection, then th
12570 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
12580 61 20 6e 6f 2d 6f 70 2e 20 20 4e 6f 20 73 74 61  a no-op.  No sta
12590 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
125a0 6f 6e 0a 2a 2a 20 69 73 20 6e 65 65 64 65 64 20  on.** is needed 
125b0 73 69 6e 63 65 20 61 6e 79 20 65 72 72 6f 72 20  since any error 
125c0 63 61 6e 20 75 73 65 20 74 68 65 20 6e 6f 72 6d  can use the norm
125d0 61 6c 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63  al ROLLBACK proc
125e0 65 73 73 20 74 6f 0a 2a 2a 20 75 6e 64 6f 20 63  ess to.** undo c
125f0 68 61 6e 67 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  hanges..**.** If
12600 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
12610 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
12620 74 65 64 2c 20 74 68 65 6e 20 61 20 73 74 61 74  ted, then a stat
12630 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 20 66 69  ement journal fi
12640 6c 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 61 6c  le.** will be al
12650 6c 6f 63 61 74 65 64 20 61 6e 64 20 69 6e 69 74  located and init
12660 69 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  ialized..**.** T
12670 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  he statement is 
12680 62 65 67 75 6e 20 6f 6e 20 74 68 65 20 64 61 74  begun on the dat
12690 61 62 61 73 65 20 66 69 6c 65 20 77 69 74 68 20  abase file with 
126a0 69 6e 64 65 78 20 50 31 2e 20 20 54 68 65 20 6d  index P1.  The m
126b0 61 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  ain.** database 
126c0 66 69 6c 65 20 68 61 73 20 61 6e 20 69 6e 64 65  file has an inde
126d0 78 20 6f 66 20 30 20 61 6e 64 20 74 68 65 20 66  x of 0 and the f
126e0 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
126f0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 0a 2a 2a  porary tables.**
12700 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
12710 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53   1..*/.case OP_S
12720 74 61 74 65 6d 65 6e 74 3a 20 7b 0a 20 20 69 66  tatement: {.  if
12730 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
12740 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76  ==0 || db->activ
12750 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20  eVdbeCnt>1 ){.  
12760 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
12770 31 3b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42  1;.    Btree *pB
12780 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  t;.    assert( i
12790 3e 3d 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62  >=0 && i<db->nDb
127a0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
127b0 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 21 3d  db->aDb[i].pBt!=
127c0 30 20 29 3b 0a 20 20 20 20 70 42 74 20 3d 20 64  0 );.    pBt = d
127d0 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20  b->aDb[i].pBt;. 
127e0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
127f0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
12800 28 70 42 74 29 20 29 3b 0a 20 20 20 20 61 73 73  (pBt) );.    ass
12810 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
12820 73 6b 20 26 20 28 31 3c 3c 69 29 29 21 3d 30 20  sk & (1<<i))!=0 
12830 29 3b 0a 20 20 20 20 69 66 28 20 21 73 71 6c 69  );.    if( !sqli
12840 74 65 33 42 74 72 65 65 49 73 49 6e 53 74 6d 74  te3BtreeIsInStmt
12850 28 70 42 74 29 20 29 7b 0a 20 20 20 20 20 20 72  (pBt) ){.      r
12860 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
12870 42 65 67 69 6e 53 74 6d 74 28 70 42 74 29 3b 0a  BeginStmt(pBt);.
12880 20 20 20 20 20 20 70 2d 3e 6f 70 65 6e 65 64 53        p->openedS
12890 74 61 74 65 6d 65 6e 74 20 3d 20 31 3b 0a 20 20  tatement = 1;.  
128a0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
128b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
128c0 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20  utoCommit P1 P2 
128d0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
128e0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74  the database aut
128f0 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f  o-commit flag to
12900 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66   P1 (1 or 0). If
12910 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c   P2 is true, rol
12920 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75  l.** back any cu
12930 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62  rrently active b
12940 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tree transaction
12950 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  s. If there are 
12960 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d  any active.** VM
12970 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68  s (apart from th
12980 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 74 68  is one), then th
12990 65 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c 4c  e COMMIT or ROLL
129a0 42 41 43 4b 20 73 74 61 74 65 6d 65 6e 74 20 66  BACK statement f
129b0 61 69 6c 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ails..**.** This
129c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75   instruction cau
129d0 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61  ses the VM to ha
129e0 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  lt..*/.case OP_A
129f0 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 75  utoCommit: {.  u
12a00 38 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  8 i = pOp->p1;. 
12a10 20 75 38 20 72 6f 6c 6c 62 61 63 6b 20 3d 20 70   u8 rollback = p
12a20 4f 70 2d 3e 70 32 3b 0a 0a 20 20 61 73 73 65 72  Op->p2;..  asser
12a30 74 28 20 69 3d 3d 31 20 7c 7c 20 69 3d 3d 30 20  t( i==1 || i==0 
12a40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
12a50 31 20 7c 7c 20 72 6f 6c 6c 62 61 63 6b 3d 3d 30  1 || rollback==0
12a60 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 64   );..  assert( d
12a70 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
12a80 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
12a90 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
12aa0 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a 20 20 69  s active */..  i
12ab0 66 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  f( db->activeVdb
12ac0 65 43 6e 74 3e 31 20 26 26 20 69 20 26 26 20 21  eCnt>1 && i && !
12ad0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
12ae0 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
12af0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
12b00 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
12b10 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 6f 74   or ROLLBACK, ot
12b20 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20  her VMs are.    
12b30 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67  ** still running
12b40 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74  , and a transact
12b50 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72  ion is active, r
12b60 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
12b70 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a  ndicating.    **
12b80 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20   that the other 
12b90 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
12ba0 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f  e first. .    */
12bb0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
12bc0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
12bd0 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 25  g, db, "cannot %
12be0 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  s transaction - 
12bf0 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
12c00 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
12c10 67 72 65 73 73 22 2c 0a 20 20 20 20 20 20 20 20  gress",.        
12c20 72 6f 6c 6c 62 61 63 6b 20 3f 20 22 72 6f 6c 6c  rollback ? "roll
12c30 62 61 63 6b 22 20 3a 20 22 63 6f 6d 6d 69 74 22  back" : "commit"
12c40 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
12c50 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73  TE_ERROR;.  }els
12c60 65 20 69 66 28 20 69 21 3d 64 62 2d 3e 61 75 74  e if( i!=db->aut
12c70 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69  oCommit ){.    i
12c80 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20  f( pOp->p2 ){.  
12c90 20 20 20 20 61 73 73 65 72 74 28 20 69 3d 3d 31      assert( i==1
12ca0 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
12cb0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29  3RollbackAll(db)
12cc0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
12cd0 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
12ce0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
12cf0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 69 3b  >autoCommit = i;
12d00 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
12d10 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
12d20 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
12d30 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
12d40 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  ;.        db->au
12d50 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 2d 69 3b 0a  toCommit = 1-i;.
12d60 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
12d70 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
12d80 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76  ;.        goto v
12d90 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
12da0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
12db0 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
12dc0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
12dd0 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
12de0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
12df0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
12e00 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
12e10 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
12e20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
12e30 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
12e40 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20  zErrMsg, db,.   
12e50 20 20 20 20 20 28 21 69 29 3f 22 63 61 6e 6e 6f       (!i)?"canno
12e60 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
12e70 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
12e80 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
12e90 20 20 20 20 20 20 28 72 6f 6c 6c 62 61 63 6b 29        (rollback)
12ea0 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
12eb0 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
12ec0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ee0 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
12ef0 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
12f00 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
12f10 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
12f20 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
12f30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
12f40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
12f50 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 2a 20  saction P1 P2 * 
12f60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20  * *.**.** Begin 
12f70 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  a transaction.  
12f80 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  The transaction 
12f90 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f 6d 6d  ends when a Comm
12fa0 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b 0a 2a  it or Rollback.*
12fb0 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e 63 6f  * opcode is enco
12fc0 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65 6e 64  untered.  Depend
12fd0 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20 43 4f  ing on the ON CO
12fe0 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67 2c 20  NFLICT setting, 
12ff0 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  the.** transacti
13000 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65  on might also be
13010 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69 66 20   rolled back if 
13020 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  an error is enco
13030 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  untered..**.** P
13040 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
13050 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
13060 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
13070 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
13080 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
13090 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
130a0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
130b0 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
130c0 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
130d0 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
130e0 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
130f0 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
13100 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
13110 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
13120 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f  *.** If P2 is no
13130 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77  n-zero, then a w
13140 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
13150 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 41 20   is started.  A 
13160 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20 69 73  RESERVED lock is
13170 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20  .** obtained on 
13180 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
13190 65 20 77 68 65 6e 20 61 20 77 72 69 74 65 2d 74  e when a write-t
131a0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
131b0 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20 6f 74  arted.  No.** ot
131c0 68 65 72 20 70 72 6f 63 65 73 73 20 63 61 6e 20  her process can 
131d0 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20 77 72  start another wr
131e0 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
131f0 77 68 69 6c 65 20 74 68 69 73 20 74 72 61 6e 73  while this trans
13200 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75 6e 64  action is.** und
13210 65 72 77 61 79 2e 20 20 53 74 61 72 74 69 6e 67  erway.  Starting
13220 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
13230 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61 74 65  tion also create
13240 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
13250 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69 74 65  rnal. A.** write
13260 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73   transaction mus
13270 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66  t be started bef
13280 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ore any changes 
13290 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 74  can be made to t
132a0 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  he.** database. 
132b0 20 49 66 20 50 32 20 69 73 20 32 20 6f 72 20 67   If P2 is 2 or g
132c0 72 65 61 74 65 72 20 74 68 65 6e 20 61 6e 20 45  reater then an E
132d0 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73  XCLUSIVE lock is
132e0 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65 64 0a 2a   also obtained.*
132f0 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a  * on the file..*
13300 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65  *.** If P2 is ze
13310 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d  ro, then a read-
13320 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
13330 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
13340 20 66 69 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f   file..*/.case O
13350 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b  P_Transaction: {
13360 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e  .  int i = pOp->
13370 70 31 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  p1;.  Btree *pBt
13380 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
13390 30 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 20 29  0 && i<db->nDb )
133a0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
133b0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
133c0 69 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74 20  i))!=0 );.  pBt 
133d0 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  = db->aDb[i].pBt
133e0 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a  ;..  if( pBt ){.
133f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
13400 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
13410 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  pBt, pOp->p2);. 
13420 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
13430 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
13440 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
13450 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
13460 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
13470 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
13480 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  rn;.    }.    if
13490 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
134a0 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 45  && rc!=SQLITE_RE
134b0 41 44 4f 4e 4c 59 20 2f 2a 20 26 26 20 72 63 21  ADONLY /* && rc!
134c0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 2a 2f 20  =SQLITE_BUSY */ 
134d0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
134e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
134f0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
13500 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13510 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
13520 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
13530 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
13540 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
13550 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
13560 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
13570 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 30 20  er P2..** P3==0 
13580 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
13590 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 31 20 69 73  rsion.  P3==1 is
135a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
135b0 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 32 20 69  rmat..** P3==2 i
135c0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
135d0 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
135e0 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
135f0 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
13600 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
13610 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
13620 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
13630 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
13640 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
13650 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  tables..**.** If
13660 20 50 31 20 69 73 20 6e 65 67 61 74 69 76 65 2c   P1 is negative,
13670 20 74 68 65 6e 20 74 68 69 73 20 69 73 20 61 20   then this is a 
13680 72 65 71 75 65 73 74 20 74 6f 20 72 65 61 64 20  request to read 
13690 74 68 65 20 73 69 7a 65 20 6f 66 20 61 0a 2a 2a  the size of a.**
136a0 20 64 61 74 61 62 61 73 65 73 20 66 72 65 65 2d   databases free-
136b0 6c 69 73 74 2e 20 50 33 20 6d 75 73 74 20 62 65  list. P3 must be
136c0 20 73 65 74 20 74 6f 20 31 20 69 6e 20 74 68 69   set to 1 in thi
136d0 73 20 63 61 73 65 2e 20 54 68 65 20 61 63 74 75  s case. The actu
136e0 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 61  al.** database a
136f0 63 63 65 73 73 65 64 20 69 73 20 28 28 50 31 2b  ccessed is ((P1+
13700 31 29 2a 2d 31 29 2e 20 46 6f 72 20 65 78 61 6d  1)*-1). For exam
13710 70 6c 65 2c 20 61 20 50 31 20 70 61 72 61 6d 65  ple, a P1 parame
13720 74 65 72 20 6f 66 20 2d 31 0a 2a 2a 20 63 6f 72  ter of -1.** cor
13730 72 65 73 70 6f 6e 64 73 20 74 6f 20 64 61 74 61  responds to data
13740 62 61 73 65 20 30 20 28 22 6d 61 69 6e 22 29 2c  base 0 ("main"),
13750 20 61 20 50 31 20 6f 66 20 2d 32 20 69 73 20 64   a P1 of -2 is d
13760 61 74 61 62 61 73 65 20 31 20 28 22 74 65 6d 70  atabase 1 ("temp
13770 22 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ")..**.** There 
13780 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
13790 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
137a0 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
137b0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
137c0 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
137d0 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
137e0 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
137f0 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
13800 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
13810 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
13820 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
13830 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
13840 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
13850 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
13860 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  int iDb = pOp->p
13870 31 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  1;.  int iCookie
13880 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 0a 20 20 61   = pOp->p3;..  a
13890 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53  ssert( pOp->p3<S
138a0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
138b0 54 41 20 29 3b 0a 20 20 69 66 28 20 69 44 62 3c  TA );.  if( iDb<
138c0 30 20 29 7b 0a 20 20 20 20 69 44 62 20 3d 20 28  0 ){.    iDb = (
138d0 2d 31 2a 28 69 44 62 2b 31 29 29 3b 0a 20 20 20  -1*(iDb+1));.   
138e0 20 69 43 6f 6f 6b 69 65 20 2a 3d 20 2d 31 3b 0a   iCookie *= -1;.
138f0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 69 44    }.  assert( iD
13900 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
13910 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
13920 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42   db->aDb[iDb].pB
13930 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
13940 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
13950 26 20 28 31 3c 3c 69 44 62 29 29 21 3d 30 20 29  & (1<<iDb))!=0 )
13960 3b 0a 20 20 2f 2a 20 54 68 65 20 69 6e 64 65 78  ;.  /* The index
13970 69 6e 67 20 6f 66 20 6d 65 74 61 20 76 61 6c 75  ing of meta valu
13980 65 73 20 61 74 20 74 68 65 20 73 63 68 65 6d 61  es at the schema
13990 20 6c 61 79 65 72 20 69 73 20 6f 66 66 20 62 79   layer is off by
139a0 20 6f 6e 65 20 66 72 6f 6d 0a 20 20 2a 2a 20 74   one from.  ** t
139b0 68 65 20 69 6e 64 65 78 69 6e 67 20 69 6e 20 74  he indexing in t
139c0 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
139d0 20 54 68 65 20 62 74 72 65 65 20 63 6f 6e 73 69   The btree consi
139e0 64 65 72 73 20 6d 65 74 61 5b 30 5d 20 74 6f 0a  ders meta[0] to.
139f0 20 20 2a 2a 20 62 65 20 74 68 65 20 6e 75 6d 62    ** be the numb
13a00 65 72 20 6f 66 20 66 72 65 65 20 70 61 67 65 73  er of free pages
13a10 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
13a20 20 28 61 20 72 65 61 64 2d 6f 6e 6c 79 20 76 61   (a read-only va
13a30 6c 75 65 29 0a 20 20 2a 2a 20 61 6e 64 20 6d 65  lue).  ** and me
13a40 74 61 5b 31 5d 20 74 6f 20 62 65 20 74 68 65 20  ta[1] to be the 
13a50 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 20 20  schema cookie.  
13a60 54 68 65 20 73 63 68 65 6d 61 20 6c 61 79 65 72  The schema layer
13a70 20 63 6f 6e 73 69 64 65 72 73 0a 20 20 2a 2a 20   considers.  ** 
13a80 6d 65 74 61 5b 31 5d 20 74 6f 20 62 65 20 74 68  meta[1] to be th
13a90 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e  e schema cookie.
13aa0 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
13ab0 73 68 69 66 74 20 74 68 65 20 69 6e 64 65 78 0a  shift the index.
13ac0 20 20 2a 2a 20 62 79 20 6f 6e 65 20 69 6e 20 74    ** by one in t
13ad0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
13ae0 74 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 72  tement..  */.  r
13af0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
13b00 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
13b10 69 44 62 5d 2e 70 42 74 2c 20 31 20 2b 20 69 43  iDb].pBt, 1 + iC
13b20 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69  ookie, (u32 *)&i
13b30 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  Meta);.  pOut->u
13b40 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 4d 65  .i = iMeta;.  Me
13b50 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
13b60 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62  t, MEM_Int);.  b
13b70 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
13b80 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31  de: SetCookie P1
13b90 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
13ba0 20 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65   Write the conte
13bb0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
13bc0 33 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61  3 (interpreted a
13bd0 73 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a  s an integer).**
13be0 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d   into cookie num
13bf0 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61  ber P2 of databa
13c00 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 30 20  se P1..** P2==0 
13c10 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
13c20 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 31 20 69 73  rsion.  P2==1 is
13c30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
13c40 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 32 20 69  rmat..** P2==2 i
13c50 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
13c60 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
13c70 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
13c80 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
13c90 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
13ca0 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
13cb0 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
13cc0 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
13cd0 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
13ce0 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
13cf0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
13d00 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
13d10 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
13d20 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
13d30 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
13d40 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a  {       /* in3 *
13d50 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  /.  Db *pDb;.  a
13d60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
13d70 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
13d80 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
13d90 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
13da0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
13db0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
13dc0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70  treeMask & (1<<p
13dd0 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20  Op->p1))!=0 );. 
13de0 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
13df0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
13e00 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
13e10 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
13e20 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
13e30 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f  n3);.  /* See no
13e40 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73  te about index s
13e50 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65  hifting on OP_Re
13e60 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63  adCookie */.  rc
13e70 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55   = sqlite3BtreeU
13e80 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70  pdateMeta(pDb->p
13e90 42 74 2c 20 31 2b 70 4f 70 2d 3e 70 32 2c 20 28  Bt, 1+pOp->p2, (
13ea0 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  int)pIn3->u.i);.
13eb0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
13ec0 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20   ){.    /* When 
13ed0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
13ee0 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72  e changes, recor
13ef0 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65  d the new cookie
13f00 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20   internally */. 
13f10 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
13f20 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d  >schema_cookie =
13f30 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn3->u.i;.    
13f40 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
13f50 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
13f60 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
13f70 4f 70 2d 3e 70 32 3d 3d 31 20 29 7b 0a 20 20 20  Op->p2==1 ){.   
13f80 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
13f90 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
13fa0 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
13fb0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
13fc0 66 6f 72 6d 61 74 20 3d 20 70 49 6e 33 2d 3e 75  format = pIn3->u
13fd0 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  .i;.  }.  if( pO
13fe0 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
13ff0 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
14000 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
14010 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
14020 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
14030 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
14040 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
14050 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
14060 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
14070 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
14080 64 62 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  db);.  }.  break
14090 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
140a0 56 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31 20  VerifyCookie P1 
140b0 50 32 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b  P2 *.**.** Check
140c0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c   the value of gl
140d0 6f 62 61 6c 20 64 61 74 61 62 61 73 65 20 70 61  obal database pa
140e0 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30  rameter number 0
140f0 20 28 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20   (the.** schema 
14100 76 65 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b  version) and mak
14110 65 20 73 75 72 65 20 69 74 20 69 73 20 65 71 75  e sure it is equ
14120 61 6c 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 50  al to P2.  .** P
14130 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
14140 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69  e number which i
14150 73 20 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e  s 0 for the main
14160 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
14170 2a 20 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20  * and 1 for the 
14180 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d  file holding tem
14190 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e  porary tables an
141a0 64 20 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75  d some higher nu
141b0 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69  mber.** for auxi
141c0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73 2e  liary databases.
141d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69  .**.** The cooki
141e0 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61  e changes its va
141f0 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  lue whenever the
14200 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
14210 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69   changes..** Thi
14220 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75  s operation is u
14230 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68  sed to detect wh
14240 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b  en that the cook
14250 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ie has changed.*
14260 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63  * and that the c
14270 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e  urrent process n
14280 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74  eeds to reread t
14290 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a  he schema..**.**
142a0 20 45 69 74 68 65 72 20 61 20 74 72 61 6e 73 61   Either a transa
142b0 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68  ction needs to h
142c0 61 76 65 20 62 65 65 6e 20 73 74 61 72 74 65 64  ave been started
142d0 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e   or an OP_Open n
142e0 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78  eeds.** to be ex
142f0 65 63 75 74 65 64 20 28 74 6f 20 65 73 74 61 62  ecuted (to estab
14300 6c 69 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b  lish a read lock
14310 29 20 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70  ) before this op
14320 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b  code is.** invok
14330 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
14340 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20  erifyCookie: {. 
14350 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 42 74   int iMeta;.  Bt
14360 72 65 65 20 2a 70 42 74 3b 0a 20 20 61 73 73 65  ree *pBt;.  asse
14370 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
14380 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
14390 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
143a0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
143b0 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
143c0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
143d0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
143e0 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
143f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
14400 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
14410 31 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  1, (u32 *)&iMeta
14420 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
14430 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
14440 20 20 20 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20      iMeta = 0;. 
14450 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
14460 49 54 45 5f 4f 4b 20 26 26 20 69 4d 65 74 61 21  ITE_OK && iMeta!
14470 3d 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20  =pOp->p2 ){.    
14480 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
14490 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
144a0 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
144b0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
144c0 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
144d0 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
144e0 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
144f0 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
14500 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
14510 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
14520 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
14530 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
14540 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
14550 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
14560 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
14570 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
14580 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
14590 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
145a0 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
145b0 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
145c0 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
145d0 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
145e0 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
145f0 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
14600 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
14610 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
14620 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
14630 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
14640 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
14650 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
14660 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
14670 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
14680 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
14690 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
146a0 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
146b0 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
146c0 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
146d0 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
146e0 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
146f0 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
14700 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
14710 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
14720 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
14730 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
14740 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
14750 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
14760 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
14770 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
14780 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
14790 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
147a0 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
147b0 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
147c0 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
147d0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
147e0 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
147f0 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
14800 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
14810 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
14820 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d   pOp->p1);.    }
14830 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  ..    sqlite3Exp
14840 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
14850 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 72  ments(db);.    r
14860 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  c = SQLITE_SCHEM
14870 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  A;.  }.  break;.
14880 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
14890 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
148a0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  P4 P5.**.** Open
148b0 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72   a read-only cur
148c0 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61  sor for the data
148d0 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65  base table whose
148e0 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a   root page is.**
148f0 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73   P2 in a databas
14900 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74  e file.  The dat
14910 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65  abase file is de
14920 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20  termined by P3. 
14930 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20  .** P3==0 means 
14940 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
14950 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74  e, P3==1 means t
14960 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
14970 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61   for .** tempora
14980 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50  ry tables, and P
14990 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74  3>1 means used t
149a0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
149b0 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74   attached.** dat
149c0 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65  abase.  Give the
149d0 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69   new cursor an i
149e0 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e  dentifier of P1.
149f0 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75    The P1.** valu
14a00 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63  es need not be c
14a10 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c  ontiguous but al
14a20 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75  l P1 values shou
14a30 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65  ld be small inte
14a40 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61  gers..** It is a
14a50 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74  n error for P1 t
14a60 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a  o be negative..*
14a70 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
14a80 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  en use the conte
14a90 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
14aa0 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61  2 as the root pa
14ab0 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76  ge, not.** the v
14ac0 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c  alue of P2 itsel
14ad0 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77  f..**.** There w
14ae0 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f  ill be a read lo
14af0 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ck on the databa
14b00 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72  se whenever ther
14b10 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20  e is an.** open 
14b20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20  cursor.  If the 
14b30 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c  database was unl
14b40 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74  ocked prior to t
14b50 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  his instruction.
14b60 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c  ** then a read l
14b70 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20  ock is acquired 
14b80 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20  as part of this 
14b90 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20  instruction.  A 
14ba0 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c  read.** lock all
14bb0 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73  ows other proces
14bc0 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20  ses to read the 
14bd0 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f  database but pro
14be0 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74  hibits.** any ot
14bf0 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d  her process from
14c00 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64   modifying the d
14c10 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65  atabase.  The re
14c20 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65  ad lock is.** re
14c30 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20  leased when all 
14c40 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73  cursors are clos
14c50 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73  ed.  If this ins
14c60 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74  truction attempt
14c70 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65  s.** to get a re
14c80 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c  ad lock but fail
14c90 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65  s, the script te
14ca0 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e  rminates with an
14cb0 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
14cc0 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  error code..**.*
14cd0 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69  * The P4 value i
14ce0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
14cf0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
14d00 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
14d10 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 61  the.** content a
14d20 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  nd collating seq
14d30 75 65 6e 63 65 20 6f 66 20 69 6e 64 69 63 65 73  uence of indices
14d40 2e 20 20 50 34 20 69 73 20 4e 55 4c 4c 20 66 6f  .  P4 is NULL fo
14d50 72 20 63 75 72 73 6f 72 73 0a 2a 2a 20 74 68 61  r cursors.** tha
14d60 74 20 61 72 65 20 6e 6f 74 20 70 6f 69 6e 74 69  t are not pointi
14d70 6e 67 20 74 6f 20 69 6e 64 69 63 65 73 2e 0a 2a  ng to indices..*
14d80 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
14d90 65 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f  enWrite..*/./* O
14da0 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65  pcode: OpenWrite
14db0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
14dc0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
14dd0 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e  d/write cursor n
14de0 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74  amed P1 on the t
14df0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
14e00 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  ose root.** page
14e10 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50   is P2.  Or if P
14e20 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e  5!=0 use the con
14e30 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
14e40 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a   P2 to find the.
14e50 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a  ** root page..**
14e60 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
14e70 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
14e80 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
14e90 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65  ture that define
14ea0 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74  s the.** content
14eb0 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73   and collating s
14ec0 65 71 75 65 6e 63 65 20 6f 66 20 69 6e 64 69 63  equence of indic
14ed0 65 73 2e 20 20 50 34 20 69 73 20 4e 55 4c 4c 20  es.  P4 is NULL 
14ee0 66 6f 72 20 63 75 72 73 6f 72 73 0a 2a 2a 20 74  for cursors.** t
14ef0 68 61 74 20 61 72 65 20 6e 6f 74 20 70 6f 69 6e  hat are not poin
14f00 74 69 6e 67 20 74 6f 20 69 6e 64 69 63 65 73 2e  ting to indices.
14f10 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
14f20 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75  ruction works ju
14f30 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64  st like OpenRead
14f40 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
14f50 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
14f60 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74  .** in read/writ
14f70 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67  e mode.  For a g
14f80 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72  iven table, ther
14f90 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20  e can be one or 
14fa0 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a  more read-only.*
14fb0 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73  * cursors or a s
14fc0 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65  ingle read/write
14fd0 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20   cursor but not 
14fe0 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  both..**.** See 
14ff0 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a  also OpenRead..*
15000 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  /.case OP_OpenRe
15010 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
15020 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 69  Write: {.  int i
15030 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e   = pOp->p1;.  in
15040 74 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  t p2 = pOp->p2;.
15050 20 20 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d    int iDb = pOp-
15060 3e 70 33 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  >p3;.  int wrFla
15070 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
15080 20 20 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a    Cursor *pCur;.
15090 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 0a 20 20    Db *pDb;.  .  
150a0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
150b0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
150c0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
150d0 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69  treeMask & (1<<i
150e0 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62  Db))!=0 );.  pDb
150f0 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d   = &db->aDb[iDb]
15100 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42  ;.  pX = pDb->pB
15110 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21  t;.  assert( pX!
15120 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
15130 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
15140 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46  Write ){.    wrF
15150 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 69 66 28  lag = 1;.    if(
15160 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
15170 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e  ile_format < p->
15180 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
15190 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  at ){.      p->m
151a0 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
151b0 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  t = pDb->pSchema
151c0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20  ->file_format;. 
151d0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
151e0 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20    wrFlag = 0;.  
151f0 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  }.  if( pOp->p5 
15200 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
15210 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  2>0 );.    asser
15220 74 28 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  t( p2<=p->nMem )
15230 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 70 2d  ;.    pIn2 = &p-
15240 3e 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 73  >aMem[p2];.    s
15250 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
15260 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
15270 20 20 20 70 32 20 3d 20 70 49 6e 32 2d 3e 75 2e     p2 = pIn2->u.
15280 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  i;.    assert( p
15290 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20 61 73  2>=2 );.  }.  as
152a0 73 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a 20 20  sert( i>=0 );.  
152b0 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
152c0 75 72 73 6f 72 28 70 2c 20 69 2c 20 26 70 4f 70  ursor(p, i, &pOp
152d0 5b 2d 31 5d 2c 20 69 44 62 2c 20 31 29 3b 0a 20  [-1], iDb, 1);. 
152e0 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67   if( pCur==0 ) g
152f0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
15300 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  ur->nullRow = 1;
15310 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
15320 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70  treeCursor(pX, p
15330 32 2c 20 77 72 46 6c 61 67 2c 20 70 4f 70 2d 3e  2, wrFlag, pOp->
15340 70 34 2e 70 2c 20 70 43 75 72 2d 3e 70 43 75 72  p4.p, pCur->pCur
15350 73 6f 72 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  sor);.  if( pOp-
15360 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
15370 4e 46 4f 20 29 7b 0a 20 20 20 20 70 43 75 72 2d  NFO ){.    pCur-
15380 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  >pKeyInfo = pOp-
15390 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
153a0 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
153b0 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64  ->enc = ENC(p->d
153c0 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
153d0 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20   pCur->pKeyInfo 
153e0 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63  = 0;.  }.  switc
153f0 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73  h( rc ){.    cas
15400 65 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 7b  e SQLITE_BUSY: {
15410 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70  .      p->pc = p
15420 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  c;.      p->rc =
15430 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
15440 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  Y;.      goto vd
15450 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
15460 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
15470 5f 4f 4b 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74  _OK: {.      int
15480 20 66 6c 61 67 73 20 3d 20 73 71 6c 69 74 65 33   flags = sqlite3
15490 42 74 72 65 65 46 6c 61 67 73 28 70 43 75 72 2d  BtreeFlags(pCur-
154a0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
154b0 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b   /* Sanity check
154c0 69 6e 67 2e 20 20 4f 6e 6c 79 20 74 68 65 20 6c  ing.  Only the l
154d0 6f 77 65 72 20 66 6f 75 72 20 62 69 74 73 20 6f  ower four bits o
154e0 66 20 74 68 65 20 66 6c 61 67 73 20 62 79 74 65  f the flags byte
154f0 20 73 68 6f 75 6c 64 0a 20 20 20 20 20 20 2a 2a   should.      **
15500 20 62 65 20 75 73 65 64 2e 20 20 42 69 74 20 33   be used.  Bit 3
15510 20 28 6d 61 73 6b 20 30 78 30 38 29 20 69 73 20   (mask 0x08) is 
15520 75 6e 70 72 65 64 69 63 74 61 62 6c 65 2e 20 20  unpredictable.  
15530 54 68 65 20 6c 6f 77 65 72 20 33 20 62 69 74 73  The lower 3 bits
15540 0a 20 20 20 20 20 20 2a 2a 20 28 6d 61 73 6b 20  .      ** (mask 
15550 30 78 30 37 29 20 73 68 6f 75 6c 64 20 62 65 20  0x07) should be 
15560 65 69 74 68 65 72 20 35 20 28 69 6e 74 6b 65 79  either 5 (intkey
15570 2b 6c 65 61 66 64 61 74 61 20 66 6f 72 20 74 61  +leafdata for ta
15580 62 6c 65 73 29 20 6f 72 0a 20 20 20 20 20 20 2a  bles) or.      *
15590 2a 20 32 20 28 7a 65 72 6f 64 61 74 61 20 66 6f  * 2 (zerodata fo
155a0 72 20 69 6e 64 69 63 65 73 29 2e 20 20 49 66 20  r indices).  If 
155b0 74 68 65 73 65 20 63 6f 6e 64 69 74 69 6f 6e 73  these conditions
155c0 20 61 72 65 20 6e 6f 74 20 6d 65 74 20 69 74 20   are not met it 
155d0 63 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 6e 6c  can.      ** onl
155e0 79 20 6d 65 61 6e 20 74 68 61 74 20 77 65 20 61  y mean that we a
155f0 72 65 20 64 65 61 6c 69 6e 67 20 77 69 74 68 20  re dealing with 
15600 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
15610 73 65 20 66 69 6c 65 0a 20 20 20 20 20 20 2a 2f  se file.      */
15620 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
15630 73 20 26 20 30 78 66 30 29 21 3d 30 20 7c 7c 20  s & 0xf0)!=0 || 
15640 28 28 66 6c 61 67 73 20 26 20 30 78 30 37 29 21  ((flags & 0x07)!
15650 3d 35 20 26 26 20 28 66 6c 61 67 73 20 26 20 30  =5 && (flags & 0
15660 78 30 37 29 21 3d 32 29 20 29 7b 0a 20 20 20 20  x07)!=2) ){.    
15670 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
15680 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
15690 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
156a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
156b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 75       }.      pCu
156c0 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 28 66 6c  r->isTable = (fl
156d0 61 67 73 20 26 20 42 54 52 45 45 5f 49 4e 54 4b  ags & BTREE_INTK
156e0 45 59 29 21 3d 30 3b 0a 20 20 20 20 20 20 70 43  EY)!=0;.      pC
156f0 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d 20 28 66  ur->isIndex = (f
15700 6c 61 67 73 20 26 20 42 54 52 45 45 5f 5a 45 52  lags & BTREE_ZER
15710 4f 44 41 54 41 29 21 3d 30 3b 0a 20 20 20 20 20  ODATA)!=0;.     
15720 20 2f 2a 20 49 66 20 50 34 3d 3d 30 20 69 74 20   /* If P4==0 it 
15730 6d 65 61 6e 73 20 77 65 20 61 72 65 20 65 78 70  means we are exp
15740 65 63 74 65 64 20 74 6f 20 6f 70 65 6e 20 61 20  ected to open a 
15750 74 61 62 6c 65 2e 20 20 49 66 20 50 34 21 3d 30  table.  If P4!=0
15760 20 74 68 65 6e 0a 20 20 20 20 20 20 2a 2a 20 77   then.      ** w
15770 65 20 65 78 70 65 63 74 20 74 6f 20 62 65 20 6f  e expect to be o
15780 70 65 6e 69 6e 67 20 61 6e 20 69 6e 64 65 78 2e  pening an index.
15790 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74    If this is not
157a0 20 77 68 61 74 20 68 61 70 70 65 6e 65 64 2c 0a   what happened,.
157b0 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
157c0 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6f  e database is co
157d0 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2f 0a 20  rrupt.      */. 
157e0 20 20 20 20 20 69 66 28 20 28 70 43 75 72 2d 3e       if( (pCur->
157f0 69 73 54 61 62 6c 65 20 26 26 20 70 4f 70 2d 3e  isTable && pOp->
15800 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
15810 46 4f 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 70  FO).       || (p
15820 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 26 26 20  Cur->isIndex && 
15830 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f  pOp->p4type!=P4_
15840 4b 45 59 49 4e 46 4f 29 20 29 7b 0a 20 20 20 20  KEYINFO) ){.    
15850 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
15860 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
15870 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
15880 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
15890 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
158a0 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
158b0 73 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a  se SQLITE_EMPTY:
158c0 20 7b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69   {.      pCur->i
158d0 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34  sTable = pOp->p4
158e0 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f  type!=P4_KEYINFO
158f0 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 69 73  ;.      pCur->is
15900 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e 69  Index = !pCur->i
15910 73 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 70 43  sTable;.      pC
15920 75 72 2d 3e 70 43 75 72 73 6f 72 20 3d 20 30 3b  ur->pCursor = 0;
15930 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
15940 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 62 72 65  TE_OK;.      bre
15950 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 65  ak;.    }.    de
15960 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 67  fault: {.      g
15970 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
15980 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
15990 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
159a0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68   Opcode: OpenEph
159b0 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50  emeral P1 P2 * P
159c0 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  4 *.**.** Open a
159d0 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
159e0 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
159f0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
15a00 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
15a10 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
15a20 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
15a30 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
15a40 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
15a50 74 72 61 6e 73 69 65 6e 74 20 6f 72 20 76 69 72  transient or vir
15a60 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73  tual.** table is
15a70 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74   deleted automat
15a80 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20  ically when the 
15a90 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64  cursor is closed
15aa0 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
15ab0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
15ac0 6d 6e 73 20 69 6e 20 74 68 65 20 76 69 72 74 75  mns in the virtu
15ad0 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  al table..** The
15ae0 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74   cursor points t
15af0 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20  o a BTree table 
15b00 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20  if P4==0 and to 
15b10 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a  a BTree index.**
15b20 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e   if P4 is not 0.
15b30 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e    If P4 is not N
15b40 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74  ULL, it points t
15b50 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  o a KeyInfo stru
15b60 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65  cture.** that de
15b70 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74  fines the format
15b80 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20   of keys in the 
15b90 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  index..**.** Thi
15ba0 73 20 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e 63  s opcode was onc
15bb0 65 20 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d  e called OpenTem
15bc0 70 2e 20 20 42 75 74 20 74 68 61 74 20 63 72 65  p.  But that cre
15bd0 61 74 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f  ated.** confusio
15be0 6e 20 62 65 63 61 75 73 65 20 74 68 65 20 74 65  n because the te
15bf0 72 6d 20 22 74 65 6d 70 20 74 61 62 6c 65 22 2c  rm "temp table",
15c00 20 6d 69 67 68 74 20 72 65 66 65 72 20 65 69 74   might refer eit
15c10 68 65 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50  her.** to a TEMP
15c20 20 74 61 62 6c 65 20 61 74 20 74 68 65 20 53 51   table at the SQ
15c30 4c 20 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61  L level, or to a
15c40 20 74 61 62 6c 65 20 6f 70 65 6e 65 64 20 62 79   table opened by
15c50 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  .** this opcode.
15c60 20 20 54 68 65 6e 20 74 68 69 73 20 6f 70 63 6f    Then this opco
15c70 64 65 20 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e  de was call Open
15c80 56 69 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a  Virtual.  But.**
15c90 20 74 68 61 74 20 63 72 65 61 74 65 64 20 63 6f   that created co
15ca0 6e 66 75 73 69 6f 6e 20 77 69 74 68 20 74 68 65  nfusion with the
15cb0 20 77 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74   whole virtual-t
15cc0 61 62 6c 65 20 69 64 65 61 2e 0a 2a 2f 0a 63 61  able idea..*/.ca
15cd0 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  se OP_OpenEpheme
15ce0 72 61 6c 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d  ral: {.  int i =
15cf0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73   pOp->p1;.  Curs
15d00 6f 72 20 2a 70 43 78 3b 0a 20 20 73 74 61 74 69  or *pCx;.  stati
15d10 63 20 63 6f 6e 73 74 20 69 6e 74 20 6f 70 65 6e  c const int open
15d20 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53  Flags = .      S
15d30 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57  QLITE_OPEN_READW
15d40 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  RITE |.      SQL
15d50 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20  ITE_OPEN_CREATE 
15d60 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
15d70 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a  PEN_EXCLUSIVE |.
15d80 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
15d90 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20  N_DELETEONCLOSE 
15da0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
15db0 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42  PEN_TRANSIENT_DB
15dc0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d  ;..  assert( i>=
15dd0 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
15de0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 69  ocateCursor(p, i
15df0 2c 20 70 4f 70 2c 20 2d 31 2c 20 31 29 3b 0a 20  , pOp, -1, 1);. 
15e00 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
15e10 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
15e20 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
15e30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
15e40 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20 30 2c  eeFactory(db, 0,
15e50 20 31 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55   1, SQLITE_DEFAU
15e60 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53 49  LT_TEMP_CACHE_SI
15e70 5a 45 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 0a 20  ZE, openFlags,. 
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e90 20 20 20 20 20 20 20 20 20 20 26 70 43 78 2d 3e            &pCx->
15ea0 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  pBt);.  if( rc==
15eb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
15ec0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
15ed0 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78  eeBeginTrans(pCx
15ee0 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20  ->pBt, 1);.  }. 
15ef0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
15f00 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  OK ){.    /* If 
15f10 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
15f20 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63  x is required, c
15f30 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c  reate it by call
15f40 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  ing.    ** sqlit
15f50 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
15f60 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54  le() with the BT
15f70 52 45 45 5f 5a 45 52 4f 44 41 54 41 20 66 6c 61  REE_ZERODATA fla
15f80 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
15f90 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
15fa0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
15fb0 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
15fc0 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
15fd0 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
15fe0 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
15ff0 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
16000 61 6e 20 49 4e 54 4b 45 59 20 74 61 62 6c 65 29  an INTKEY table)
16010 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
16020 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
16030 6f 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70  o ){.      int p
16040 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72  gno;.      asser
16050 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
16060 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20  P4_KEYINFO );.  
16070 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
16080 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
16090 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f  (pCx->pBt, &pgno
160a0 2c 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41  , BTREE_ZERODATA
160b0 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63  ); .      if( rc
160c0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
160d0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
160e0 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54  gno==MASTER_ROOT
160f0 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63  +1 );.        rc
16100 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
16110 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
16120 70 67 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20  pgno, 1, .      
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16140 20 20 20 20 20 20 20 20 20 20 28 4b 65 79 49 6e            (KeyIn
16150 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  fo*)pOp->p4.z, p
16160 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
16170 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
16180 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
16190 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20  eyInfo;.        
161a0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65  pCx->pKeyInfo->e
161b0 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b  nc = ENC(p->db);
161c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
161d0 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b  Cx->isTable = 0;
161e0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
161f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
16200 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
16210 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  Bt, MASTER_ROOT,
16220 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72   1, 0, pCx->pCur
16230 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d  sor);.      pCx-
16240 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
16250 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69    }.  }.  pCx->i
16260 73 49 6e 64 65 78 20 3d 20 21 70 43 78 2d 3e 69  sIndex = !pCx->i
16270 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b  sTable;.  break;
16280 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
16290 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
162a0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  * * *.**.** Open
162b0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
162c0 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
162d0 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
162e0 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
162f0 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
16300 20 20 41 6e 79 20 61 74 74 65 6d 70 74 20 74 6f    Any attempt to
16310 20 77 72 69 74 65 20 61 20 73 65 63 6f 6e 64 20   write a second 
16320 72 6f 77 20 6f 66 20 64 61 74 61 20 63 61 75 73  row of data caus
16330 65 73 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  es the.** first 
16340 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65  row to be delete
16350 64 2e 20 20 41 6c 6c 20 64 61 74 61 20 69 73 20  d.  All data is 
16360 64 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65  deleted when the
16370 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6c   cursor is.** cl
16380 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73  osed..**.** A ps
16390 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74  eudo-table creat
163a0 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
163b0 65 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72 20  e is useful for 
163c0 68 6f 6c 64 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  holding the.** N
163d0 45 57 20 6f 72 20 4f 4c 44 20 74 61 62 6c 65 73  EW or OLD tables
163e0 20 69 6e 20 61 20 74 72 69 67 67 65 72 2e 20 20   in a trigger.  
163f0 41 6c 73 6f 20 75 73 65 64 20 74 6f 20 68 6f 6c  Also used to hol
16400 64 20 74 68 65 20 61 20 73 69 6e 67 6c 65 0a 2a  d the a single.*
16410 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f  * row output fro
16420 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20  m the sorter so 
16430 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e  that the row can
16440 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69   be decomposed i
16450 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61  nto.** individua
16460 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20  l columns using 
16470 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
16480 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e  code..**.** When
16490 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 65 78   OP_Insert is ex
164a0 65 63 75 74 65 64 20 74 6f 20 69 6e 73 65 72 74  ecuted to insert
164b0 20 61 20 72 6f 77 20 69 6e 20 74 6f 20 74 68 65   a row in to the
164c0 20 70 73 65 75 64 6f 20 74 61 62 6c 65 2c 0a 2a   pseudo table,.*
164d0 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
164e0 6c 65 20 63 75 72 73 6f 72 20 6d 61 79 20 6f 72  le cursor may or
164f0 20 6d 61 79 20 6e 6f 74 20 6d 61 6b 65 20 69 74   may not make it
16500 27 73 20 6f 77 6e 20 63 6f 70 79 20 6f 66 20 74  's own copy of t
16510 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 72  he.** original r
16520 6f 77 20 64 61 74 61 2e 20 49 66 20 50 32 20 69  ow data. If P2 i
16530 73 20 30 2c 20 74 68 65 6e 20 74 68 65 20 70 73  s 0, then the ps
16540 65 75 64 6f 2d 74 61 62 6c 65 20 77 69 6c 6c 20  eudo-table will 
16550 63 6f 70 79 20 74 68 65 0a 2a 2a 20 6f 72 69 67  copy the.** orig
16560 69 6e 61 6c 20 72 6f 77 20 64 61 74 61 2e 20 4f  inal row data. O
16570 74 68 65 72 77 69 73 65 2c 20 61 20 70 6f 69 6e  therwise, a poin
16580 74 65 72 20 74 6f 20 74 68 65 20 6f 72 69 67 69  ter to the origi
16590 6e 61 6c 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 0a  nal memory cell.
165a0 2a 2a 20 69 73 20 73 74 6f 72 65 64 2e 20 49 6e  ** is stored. In
165b0 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20   this case, the 
165c0 76 64 62 65 20 70 72 6f 67 72 61 6d 20 6d 75 73  vdbe program mus
165d0 74 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  t ensure that th
165e0 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c  e .** memory cel
165f0 6c 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  l containing the
16600 20 72 6f 77 20 64 61 74 61 20 69 73 20 6e 6f 74   row data is not
16610 20 6f 76 65 72 77 72 69 74 74 65 6e 20 75 6e 74   overwritten unt
16620 69 6c 20 74 68 65 0a 2a 2a 20 70 73 65 75 64 6f  il the.** pseudo
16630 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64   table is closed
16640 20 28 6f 72 20 61 20 6e 65 77 20 72 6f 77 20 69   (or a new row i
16650 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
16660 69 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  it)..*/.case OP_
16670 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20  OpenPseudo: {.  
16680 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
16690 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  .  Cursor *pCx;.
166a0 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29    assert( i>=0 )
166b0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
166c0 74 65 43 75 72 73 6f 72 28 70 2c 20 69 2c 20 26  teCursor(p, i, &
166d0 70 4f 70 5b 2d 31 5d 2c 20 2d 31 2c 20 30 29 3b  pOp[-1], -1, 0);
166e0 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
166f0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
16700 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
16710 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54 61  .  pCx->pseudoTa
16720 62 6c 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  ble = 1;.  pCx->
16730 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65  ephemPseudoTable
16740 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43   = pOp->p2;.  pC
16750 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
16760 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d    pCx->isIndex =
16770 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
16780 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65  /* Opcode: Close
16790 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
167a0 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  * Close a cursor
167b0 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
167c0 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31  ed as P1.  If P1
167d0 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65   is not.** curre
167e0 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20  ntly open, this 
167f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
16800 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
16810 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 69 6e  OP_Close: {.  in
16820 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  t i = pOp->p1;. 
16830 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
16840 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b   i<p->nCursor );
16850 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  .  sqlite3VdbeFr
16860 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
16870 70 43 73 72 5b 69 5d 29 3b 0a 20 20 70 2d 3e 61  pCsr[i]);.  p->a
16880 70 43 73 72 5b 69 5d 20 3d 20 30 3b 0a 20 20 62  pCsr[i] = 0;.  b
16890 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
168a0 64 65 3a 20 4d 6f 76 65 47 65 20 50 31 20 50 32  de: MoveGe P1 P2
168b0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49   P3 P4 *.**.** I
168c0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
168d0 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
168e0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
168f0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
16900 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
16910 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
16920 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
16930 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
16940 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
16950 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
16960 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
16970 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
16980 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
16990 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
169a0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
169b0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
169c0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
169d0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
169e0 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
169f0 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
16a00 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
16a10 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
16a20 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
16a30 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
16a40 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
16a50 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  * greater than o
16a60 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
16a70 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
16a80 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
16a90 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20   to P2..**.** A 
16aa0 73 70 65 63 69 61 6c 20 66 65 61 74 75 72 65 20  special feature 
16ab0 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 28  of this opcode (
16ac0 61 6e 64 20 64 69 66 66 65 72 65 6e 74 20 66 72  and different fr
16ad0 6f 6d 20 74 68 65 0a 2a 2a 20 72 65 6c 61 74 65  om the.** relate
16ae0 64 20 4f 50 5f 4d 6f 76 65 47 74 2c 20 4f 50 5f  d OP_MoveGt, OP_
16af0 4d 6f 76 65 4c 74 2c 20 61 6e 64 20 4f 50 5f 4d  MoveLt, and OP_M
16b00 6f 76 65 4c 65 29 20 69 73 20 74 68 61 74 20 69  oveLe) is that i
16b10 66 20 50 32 20 69 73 0a 2a 2a 20 7a 65 72 6f 20  f P2 is.** zero 
16b20 61 6e 64 20 50 31 20 69 73 20 61 6e 20 53 51 4c  and P1 is an SQL
16b30 20 74 61 62 6c 65 20 28 61 20 62 2d 74 72 65 65   table (a b-tree
16b40 20 77 69 74 68 20 69 6e 74 65 67 65 72 20 6b 65   with integer ke
16b50 79 73 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ys) then.** the 
16b60 73 65 65 6b 20 69 73 20 64 65 66 65 72 72 65 64  seek is deferred
16b70 20 75 6e 74 69 6c 20 69 74 20 69 73 20 61 63 74   until it is act
16b80 75 61 6c 6c 79 20 6e 65 65 64 65 64 2e 20 20 49  ually needed.  I
16b90 74 20 6d 69 67 68 74 20 62 65 0a 2a 2a 20 74 68  t might be.** th
16ba0 65 20 63 61 73 65 20 74 68 61 74 20 74 68 65 20  e case that the 
16bb0 63 75 72 73 6f 72 20 69 73 20 6e 65 76 65 72 20  cursor is never 
16bc0 61 63 63 65 73 73 65 64 2e 20 20 42 79 20 64 65  accessed.  By de
16bd0 66 65 72 72 69 6e 67 20 74 68 65 0a 2a 2a 20 73  ferring the.** s
16be0 65 65 6b 2c 20 77 65 20 61 76 6f 69 64 20 75 6e  eek, we avoid un
16bf0 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 73 2e  necessary seeks.
16c00 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
16c10 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
16c20 2c 20 44 69 73 74 69 6e 63 74 2c 20 4d 6f 76 65  , Distinct, Move
16c30 4c 74 2c 20 4d 6f 76 65 47 74 2c 20 4d 6f 76 65  Lt, MoveGt, Move
16c40 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
16c50 20 4d 6f 76 65 47 74 20 50 31 20 50 32 20 50 33   MoveGt P1 P2 P3
16c60 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63   P4 *.**.** If c
16c70 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
16c80 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
16c90 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
16ca0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
16cb0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 69 6e 74   .** use the int
16cc0 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
16cd0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
16ce0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
16cf0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
16d00 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
16d10 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
16d20 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
16d30 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
16d40 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
16d50 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
16d60 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
16d70 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
16d80 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
16d90 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
16da0 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
16db0 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
16dc0 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
16dd0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
16de0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67  are no records g
16df0 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20  reater than .** 
16e00 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
16e10 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
16e20 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
16e30 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
16e40 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
16e50 73 74 69 6e 63 74 2c 20 4d 6f 76 65 4c 74 2c 20  stinct, MoveLt, 
16e60 4d 6f 76 65 47 65 2c 20 4d 6f 76 65 4c 65 0a 2a  MoveGe, MoveLe.*
16e70 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76  /./* Opcode: Mov
16e80 65 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20  eLt P1 P2 P3 P4 
16e90 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  * .**.** If curs
16ea0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
16eb0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
16ec0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
16ed0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
16ee0 2a 20 75 73 65 20 74 68 65 20 69 6e 74 65 67 65  * use the intege
16ef0 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
16f00 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
16f10 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
16f20 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
16f30 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
16f40 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
16f50 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
16f60 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
16f70 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
16f80 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
16f90 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
16fa0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
16fb0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
16fc0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
16fd0 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
16fe0 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
16ff0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
17000 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
17010 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
17020 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
17030 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
17040 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
17050 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
17060 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
17070 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 4d 6f  nd, Distinct, Mo
17080 76 65 47 74 2c 20 4d 6f 76 65 47 65 2c 20 4d 6f  veGt, MoveGe, Mo
17090 76 65 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  veLe.*/./* Opcod
170a0 65 3a 20 4d 6f 76 65 4c 65 20 50 31 20 50 32 20  e: MoveLe P1 P2 
170b0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  P3 P4 *.**.** If
170c0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
170d0 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
170e0 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
170f0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
17100 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 69  ), .** use the i
17110 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
17120 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
17130 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
17140 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
17150 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
17160 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
17170 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
17180 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
17190 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
171a0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
171b0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
171c0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
171d0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
171e0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
171f0 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
17200 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
17210 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
17220 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
17230 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
17240 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
17250 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
17260 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
17270 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
17280 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
17290 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
172a0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
172b0 44 69 73 74 69 6e 63 74 2c 20 4d 6f 76 65 47 74  Distinct, MoveGt
172c0 2c 20 4d 6f 76 65 47 65 2c 20 4d 6f 76 65 4c 74  , MoveGe, MoveLt
172d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65  .*/.case OP_Move
172e0 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Lt:         /* j
172f0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
17300 20 4f 50 5f 4d 6f 76 65 4c 65 3a 20 20 20 20 20   OP_MoveLe:     
17310 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
17320 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65   */.case OP_Move
17330 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Ge:         /* j
17340 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
17350 20 4f 50 5f 4d 6f 76 65 47 74 3a 20 7b 20 20 20   OP_MoveGt: {   
17360 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
17370 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f   */.  int i = pO
17380 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f 72 20  p->p1;.  Cursor 
17390 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
173a0 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75  i>=0 && i<p->nCu
173b0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
173c0 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61 73  ->apCsr[i];.  as
173d0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
173e0 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72   if( pC->pCursor
173f0 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72  !=0 ){.    int r
17400 65 73 2c 20 6f 63 3b 0a 20 20 20 20 6f 63 20 3d  es, oc;.    oc =
17410 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
17420 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
17430 30 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  0;.    if( pC->i
17440 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  sTable ){.      
17450 69 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74  i64 iKey = sqlit
17460 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
17470 49 6e 33 29 3b 0a 20 20 20 20 20 20 69 66 28 20  In3);.      if( 
17480 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
17490 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
174a0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4d 6f  p->opcode==OP_Mo
174b0 76 65 47 65 20 29 3b 0a 20 20 20 20 20 20 20 20  veGe );.        
174c0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
174d0 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 20   = iKey;.       
174e0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
174f0 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 70  d = 0;.        p
17500 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
17510 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62  o = 1;.        b
17520 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
17530 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
17540 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
17550 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
17560 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30   0, (u64)iKey, 0
17570 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
17580 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17590 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
175a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
175b0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
175c0 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64     pC->lastRowid
175d0 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 70   = iKey;.      p
175e0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
175f0 3d 20 72 65 73 3d 3d 30 3b 0a 20 20 20 20 7d 65  = res==0;.    }e
17600 6c 73 65 7b 0a 20 20 20 20 20 20 55 6e 70 61 63  lse{.      Unpac
17610 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 20  kedRecord r;.   
17620 20 20 20 69 6e 74 20 6e 46 69 65 6c 64 20 3d 20     int nField = 
17630 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 20  pOp->p4.i;.     
17640 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
17650 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
17660 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
17670 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20  nField>0 );.    
17680 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
17690 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
176a0 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 6e 46     r.nField = nF
176b0 69 65 6c 64 3b 0a 20 20 20 20 20 20 69 66 28 20  ield;.      if( 
176c0 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 47 74 20 7c 7c  oc==OP_MoveGt ||
176d0 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c 65 20 29   oc==OP_MoveLe )
176e0 7b 0a 20 20 20 20 20 20 20 20 72 2e 66 6c 61 67  {.        r.flag
176f0 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43  s = UNPACKED_INC
17700 52 4b 45 59 3b 0a 20 20 20 20 20 20 7d 65 6c 73  RKEY;.      }els
17710 65 7b 0a 20 20 20 20 20 20 20 20 72 2e 66 6c 61  e{.        r.fla
17720 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  gs = 0;.      }.
17730 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26        r.aMem = &
17740 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  p->aMem[pOp->p3]
17750 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
17760 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
17770 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
17780 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  sor, &r, 0, 0, &
17790 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
177a0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
177b0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
177c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
177d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
177e0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
177f0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
17800 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
17810 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
17820 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
17830 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
17840 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
17850 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
17860 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
17870 0a 20 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  .    if( oc==OP_
17880 4d 6f 76 65 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50  MoveGe || oc==OP
17890 5f 4d 6f 76 65 47 74 20 29 7b 0a 20 20 20 20 20  _MoveGt ){.     
178a0 20 69 66 28 20 72 65 73 3c 30 20 29 7b 0a 20 20   if( res<0 ){.  
178b0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
178c0 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
178d0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
178e0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
178f0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
17900 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17910 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
17920 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
17930 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
17940 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
17950 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
17960 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
17970 28 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c 74 20  ( oc==OP_MoveLt 
17980 7c 7c 20 6f 63 3d 3d 4f 50 5f 4d 6f 76 65 4c 65  || oc==OP_MoveLe
17990 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65   );.      if( re
179a0 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s>=0 ){.        
179b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
179c0 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43  ePrevious(pC->pC
179d0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
179e0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
179f0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
17a00 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17a10 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72  r;.        pC->r
17a20 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
17a30 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
17a40 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67        /* res mig
17a50 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62  ht be negative b
17a60 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
17a70 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63   is empty.  Chec
17a80 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a 2a 20  k to.        ** 
17a90 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74  see if this is t
17aa0 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 20  he case..       
17ab0 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 73 20   */.        res 
17ac0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f  = sqlite3BtreeEo
17ad0 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  f(pC->pCursor);.
17ae0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
17af0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
17b00 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 72  2>0 );.    if( r
17b10 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  es ){.      pc =
17b20 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
17b30 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20    }.  }else if( 
17b40 21 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  !pC->pseudoTable
17b50 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
17b60 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 74 74  happens when att
17b70 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e 20  empting to open 
17b80 74 68 65 20 73 71 6c 69 74 65 33 5f 6d 61 73 74  the sqlite3_mast
17b90 65 72 20 74 61 62 6c 65 0a 20 20 20 20 2a 2a 20  er table.    ** 
17ba0 66 6f 72 20 72 65 61 64 20 61 63 63 65 73 73 20  for read access 
17bb0 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45  returns SQLITE_E
17bc0 4d 50 54 59 2e 20 49 6e 20 74 68 69 73 20 63 61  MPTY. In this ca
17bd0 73 65 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a  se always.    **
17be0 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 28   take the jump (
17bf0 73 69 6e 63 65 20 74 68 65 72 65 20 61 72 65 20  since there are 
17c00 6e 6f 20 72 65 63 6f 72 64 73 20 69 6e 20 74 68  no records in th
17c10 65 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  e table)..    */
17c20 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
17c30 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
17c40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
17c50 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  : Found P1 P2 P3
17c60 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73   * *.**.** Regis
17c70 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
17c80 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
17c90 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
17ca0 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a  P1 is an index..
17cb0 2a 2a 20 49 66 20 61 6e 20 65 6e 74 72 79 20 74  ** If an entry t
17cc0 68 61 74 20 6d 61 74 63 68 65 73 20 74 68 65 20  hat matches the 
17cd0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
17ce0 72 20 70 33 20 65 78 69 73 74 73 20 69 6e 20 50  r p3 exists in P
17cf0 31 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  1 then.** jump t
17d00 6f 20 50 32 2e 20 20 49 66 20 74 68 65 20 50 33  o P2.  If the P3
17d10 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20   value does not 
17d20 6d 61 74 63 68 20 61 6e 79 20 65 6e 74 72 79 20  match any entry 
17d30 69 6e 20 50 31 0a 2a 2a 20 74 68 65 6e 20 66 61  in P1.** then fa
17d40 6c 6c 20 74 68 72 75 2e 20 20 54 68 65 20 50 31  ll thru.  The P1
17d50 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
17d60 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
17d70 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 0a 2a  matching entry.*
17d80 2a 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  * if it exists..
17d90 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
17da0 75 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  uction is used t
17db0 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
17dc0 49 4e 20 6f 70 65 72 61 74 6f 72 20 77 68 65 72  IN operator wher
17dd0 65 20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d 68 61  e the.** left-ha
17de0 6e 64 20 73 69 64 65 20 69 73 20 61 20 53 45 4c  nd side is a SEL
17df0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
17e00 50 31 20 6d 61 79 20 62 65 20 61 20 74 72 75 65  P1 may be a true
17e10 20 69 6e 64 65 78 2c 20 6f 72 20 69 74 0a 2a 2a   index, or it.**
17e20 20 6d 61 79 20 62 65 20 61 20 74 65 6d 70 6f 72   may be a tempor
17e30 61 72 79 20 69 6e 64 65 78 20 74 68 61 74 20 68  ary index that h
17e40 6f 6c 64 73 20 74 68 65 20 72 65 73 75 6c 74 73  olds the results
17e50 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 0a 2a   of the SELECT.*
17e60 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 20 54  * statement.   T
17e70 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
17e80 69 73 20 61 6c 73 6f 20 75 73 65 64 20 74 6f 20  is also used to 
17e90 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
17ea0 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
17eb0 64 20 69 6e 20 53 45 4c 45 43 54 20 73 74 61 74  d in SELECT stat
17ec0 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
17ed0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
17ee0 68 65 63 6b 73 20 69 66 20 69 6e 64 65 78 20 50  hecks if index P
17ef0 31 20 63 6f 6e 74 61 69 6e 73 20 61 20 72 65 63  1 contains a rec
17f00 6f 72 64 20 66 6f 72 20 77 68 69 63 68 20 0a 2a  ord for which .*
17f10 2a 20 74 68 65 20 66 69 72 73 74 20 4e 20 73 65  * the first N se
17f20 72 69 61 6c 69 7a 65 64 20 76 61 6c 75 65 73 20  rialized values 
17f30 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68  exactly match th
17f40 65 20 4e 20 73 65 72 69 61 6c 69 7a 65 64 20 76  e N serialized v
17f50 61 6c 75 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  alues.** in the 
17f60 72 65 63 6f 72 64 20 69 6e 20 72 65 67 69 73 74  record in regist
17f70 65 72 20 50 33 2c 20 77 68 65 72 65 20 4e 20 69  er P3, where N i
17f80 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
17f90 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 0a  er of values in.
17fa0 2a 2a 20 74 68 65 20 50 33 20 72 65 63 6f 72 64  ** the P3 record
17fb0 20 28 74 68 65 20 50 33 20 72 65 63 6f 72 64 20   (the P3 record 
17fc0 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  is a prefix of t
17fd0 68 65 20 50 31 20 72 65 63 6f 72 64 29 2e 20 0a  he P1 record). .
17fe0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
17ff0 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71  NotFound, IsUniq
18000 75 65 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f  ue, NotExists.*/
18010 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
18020 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  ound P1 P2 P3 * 
18030 2a 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  *.**.** Register
18040 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
18050 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
18060 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 50 31 20  MakeRecord.  P1 
18070 69 73 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 2e 20  is.** an index. 
18080 20 49 66 20 6e 6f 20 65 6e 74 72 79 20 65 78 69   If no entry exi
18090 73 74 73 20 69 6e 20 50 31 20 74 68 61 74 20 6d  sts in P1 that m
180a0 61 74 63 68 65 73 20 74 68 65 20 62 6c 6f 62 20  atches the blob 
180b0 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20  then jump.** to 
180c0 50 32 2e 20 20 49 66 20 61 6e 20 65 6e 74 72 79  P2.  If an entry
180d0 20 64 6f 65 73 20 65 78 69 73 74 69 6e 67 2c 20   does existing, 
180e0 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20 54  fall through.  T
180f0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
18100 74 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t.** pointing to
18110 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
18120 6d 61 74 63 68 65 73 2e 0a 2a 2a 0a 2a 2a 20 53  matches..**.** S
18130 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
18140 4e 6f 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69  NotExists, IsUni
18150 71 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  que.*/.case OP_N
18160 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f  otFound:       /
18170 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
18180 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20  ase OP_Found: { 
18190 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
181a0 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  in3 */.  int i =
181b0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 6e 74 20   pOp->p1;.  int 
181c0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
181d0 30 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b  0;.  Cursor *pC;
181e0 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
181f0 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
18200 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
18210 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20  apCsr[i]!=0 );. 
18220 20 69 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70   if( (pC = p->ap
18230 43 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72  Csr[i])->pCursor
18240 21 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 72  !=0 ){.    int r
18250 65 73 3b 0a 20 20 20 20 55 6e 70 61 63 6b 65 64  es;.    Unpacked
18260 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b  Record *pIdxKey;
18270 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ..    assert( pC
18280 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
18290 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
182a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
182b0 6f 62 20 29 3b 0a 20 20 20 20 70 49 64 78 4b 65  ob );.    pIdxKe
182c0 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  y = sqlite3VdbeR
182d0 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e  ecordUnpack(pC->
182e0 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e  pKeyInfo, pIn3->
182f0 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 0a 20 20 20 20  n, pIn3->z,.    
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 20 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65    aTempRec, size
18330 6f 66 28 61 54 65 6d 70 52 65 63 29 29 3b 0a 20  of(aTempRec));. 
18340 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d     if( pIdxKey==
18350 30 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  0 ){.      goto 
18360 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
18370 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
18380 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20  e==OP_Found ){. 
18390 20 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66 6c       pIdxKey->fl
183a0 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44 5f  ags |= UNPACKED_
183b0 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
183c0 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
183d0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
183e0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
183f0 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c  sor, pIdxKey, 0,
18400 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 73   0, &res);.    s
18410 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
18420 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70  UnpackedRecord(p
18430 49 64 78 4b 65 79 29 3b 0a 20 20 20 20 69 66 28  IdxKey);.    if(
18440 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
18450 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  {.      break;. 
18460 20 20 20 7d 0a 20 20 20 20 61 6c 72 65 61 64 79     }.    already
18470 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30  Exists = (res==0
18480 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  );.    pC->defer
18490 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
184a0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
184b0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
184c0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
184d0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
184e0 64 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c 72  d ){.    if( alr
184f0 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20  eadyExists ) pc 
18500 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
18510 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20   }else{.    if( 
18520 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29  !alreadyExists )
18530 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
18540 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
18550 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
18560 55 6e 69 71 75 65 20 50 31 20 50 32 20 50 33 20  Unique P1 P2 P3 
18570 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  P4 *.**.** The P
18580 33 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61  3 register conta
18590 69 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72  ins an integer r
185a0 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 20 43  ecord number.  C
185b0 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 72 65 63 6f  all this.** reco
185c0 72 64 20 6e 75 6d 62 65 72 20 52 2e 20 20 54 68  rd number R.  Th
185d0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 63 6f  e P4 register co
185e0 6e 74 61 69 6e 73 20 61 6e 20 69 6e 64 65 78 20  ntains an index 
185f0 6b 65 79 20 63 72 65 61 74 65 64 0a 2a 2a 20 75  key created.** u
18600 73 69 6e 67 20 4d 61 6b 65 52 65 63 6f 72 64 2e  sing MakeRecord.
18610 20 20 43 61 6c 6c 20 69 74 20 4b 2e 0a 2a 2a 0a    Call it K..**.
18620 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65  ** P1 is an inde
18630 78 2e 20 20 53 6f 20 69 74 20 68 61 73 20 6e 6f  x.  So it has no
18640 20 64 61 74 61 20 61 6e 64 20 69 74 73 20 6b 65   data and its ke
18650 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 0a  y consists of a.
18660 2a 2a 20 72 65 63 6f 72 64 20 67 65 6e 65 72 61  ** record genera
18670 74 65 64 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65  ted by OP_MakeRe
18680 63 6f 72 64 20 77 68 65 72 65 20 74 68 65 20 6c  cord where the l
18690 61 73 74 20 66 69 65 6c 64 20 69 73 20 74 68 65  ast field is the
186a0 20 0a 2a 2a 20 72 6f 77 69 64 20 6f 66 20 74 68   .** rowid of th
186b0 65 20 65 6e 74 72 79 20 74 68 61 74 20 74 68 65  e entry that the
186c0 20 69 6e 64 65 78 20 72 65 66 65 72 73 20 74 6f   index refers to
186d0 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73 20 69 6e  ..** .** This in
186e0 73 74 72 75 63 74 69 6f 6e 20 61 73 6b 73 20 69  struction asks i
186f0 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65 6e  f there is an en
18700 74 72 79 20 69 6e 20 50 31 20 77 68 65 72 65 20  try in P1 where 
18710 74 68 65 0a 2a 2a 20 66 69 65 6c 64 73 20 6d 61  the.** fields ma
18720 74 63 68 65 73 20 4b 20 62 75 74 20 74 68 65 20  tches K but the 
18730 72 6f 77 69 64 20 69 73 20 64 69 66 66 65 72 65  rowid is differe
18740 6e 74 20 66 72 6f 6d 20 52 2e 0a 2a 2a 20 49 66  nt from R..** If
18750 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
18760 68 20 65 6e 74 72 79 2c 20 74 68 65 6e 20 74 68  h entry, then th
18770 65 72 65 20 69 73 20 61 6e 20 69 6d 6d 65 64 69  ere is an immedi
18780 61 74 65 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50  ate.** jump to P
18790 32 2e 20 20 49 66 20 61 6e 79 20 65 6e 74 72 79  2.  If any entry
187a0 20 64 6f 65 73 20 65 78 69 73 74 20 77 68 65 72   does exist wher
187b0 65 20 74 68 65 20 69 6e 64 65 78 20 73 74 72 69  e the index stri
187c0 6e 67 0a 2a 2a 20 6d 61 74 63 68 65 73 20 4b 20  ng.** matches K 
187d0 62 75 74 20 74 68 65 20 72 65 63 6f 72 64 20 6e  but the record n
187e0 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 52 2c 20  umber is not R, 
187f0 74 68 65 6e 20 74 68 65 20 72 65 63 6f 72 64 0a  then the record.
18800 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ** number for th
18810 61 74 20 65 6e 74 72 79 20 69 73 20 77 72 69 74  at entry is writ
18820 74 65 6e 20 69 6e 74 6f 20 50 33 20 61 6e 64 20  ten into P3 and 
18830 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73  control.** falls
18840 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
18850 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
18860 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
18870 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 74 45  : NotFound, NotE
18880 78 69 73 74 73 2c 20 46 6f 75 6e 64 0a 2a 2f 0a  xists, Found.*/.
18890 63 61 73 65 20 4f 50 5f 49 73 55 6e 69 71 75 65  case OP_IsUnique
188a0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
188b0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
188c0 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20   i = pOp->p1;.  
188d0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42  Cursor *pCx;.  B
188e0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
188f0 20 20 4d 65 6d 20 2a 70 4b 3b 0a 20 20 69 36 34    Mem *pK;.  i64
18900 20 52 3b 0a 0a 20 20 2f 2a 20 50 6f 70 20 74 68   R;..  /* Pop th
18910 65 20 76 61 6c 75 65 20 52 20 6f 66 66 20 74 68  e value R off th
18920 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61  e top of the sta
18930 63 6b 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  ck.  */.  assert
18940 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
18950 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73  4_INT32 );.  ass
18960 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30  ert( pOp->p4.i>0
18970 20 26 26 20 70 4f 70 2d 3e 70 34 2e 69 3c 3d 70   && pOp->p4.i<=p
18980 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4b 20 3d  ->nMem );.  pK =
18990 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
189a0 34 2e 69 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  4.i];.  sqlite3V
189b0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
189c0 28 70 49 6e 33 29 3b 0a 20 20 52 20 3d 20 70 49  (pIn3);.  R = pI
189d0 6e 33 2d 3e 75 2e 69 3b 0a 20 20 61 73 73 65 72  n3->u.i;.  asser
189e0 74 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e  t( i>=0 && i<p->
189f0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 78  nCursor );.  pCx
18a00 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a   = p->apCsr[i];.
18a10 20 20 61 73 73 65 72 74 28 20 70 43 78 21 3d 30    assert( pCx!=0
18a20 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
18a30 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  x->pCursor;.  if
18a40 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a 20 20  ( pCrsr!=0 ){.  
18a50 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 69    int res;.    i
18a60 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
18a70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
18a80 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 74   record number t
18a90 68 61 74 20 6d 61 74 63 68 65 73 20 4b 20 2a 2f  hat matches K */
18aa0 0a 20 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63  .    UnpackedRec
18ab0 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 20 20 20  ord *pIdxKey;   
18ac0 2f 2a 20 55 6e 70 61 63 6b 65 64 20 76 65 72 73  /* Unpacked vers
18ad0 69 6f 6e 20 6f 66 20 50 34 20 2a 2f 0a 0a 20 20  ion of P4 */..  
18ae0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 4b    /* Make sure K
18af0 20 69 73 20 61 20 73 74 72 69 6e 67 20 61 6e 64   is a string and
18b00 20 6d 61 6b 65 20 7a 4b 65 79 20 70 6f 69 6e 74   make zKey point
18b10 20 74 6f 20 4b 0a 20 20 20 20 2a 2f 0a 20 20 20   to K.    */.   
18b20 20 61 73 73 65 72 74 28 20 70 4b 2d 3e 66 6c 61   assert( pK->fla
18b30 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
18b40 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73  .    pIdxKey = s
18b50 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
18b60 55 6e 70 61 63 6b 28 70 43 78 2d 3e 70 4b 65 79  Unpack(pCx->pKey
18b70 49 6e 66 6f 2c 20 70 4b 2d 3e 6e 2c 20 70 4b 2d  Info, pK->n, pK-
18b80 3e 7a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  >z,.            
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 20 20 20 20 20 20 20 20 20 61 54 65 6d 70 52            aTempR
18bb0 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70  ec, sizeof(aTemp
18bc0 52 65 63 29 29 3b 0a 20 20 20 20 69 66 28 20 70  Rec));.    if( p
18bd0 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20  IdxKey==0 ){.   
18be0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
18bf0 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65      }.    pIdxKe
18c00 79 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41  y->flags |= UNPA
18c10 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49  CKED_IGNORE_ROWI
18c20 44 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 61 72 63  D;..    /* Searc
18c30 68 20 66 6f 72 20 61 6e 20 65 6e 74 72 79 20 69  h for an entry i
18c40 6e 20 50 31 20 77 68 65 72 65 20 61 6c 6c 20 62  n P1 where all b
18c50 75 74 20 74 68 65 20 6c 61 73 74 20 72 6f 77 69  ut the last rowi
18c60 64 20 6d 61 74 63 68 20 4b 0a 20 20 20 20 2a 2a  d match K.    **
18c70 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
18c80 73 75 63 68 20 65 6e 74 72 79 2c 20 6a 75 6d 70  such entry, jump
18c90 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
18ca0 50 32 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  P2..    */.    a
18cb0 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66 65  ssert( pCx->defe
18cc0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
18cd0 0a 20 20 20 20 70 43 78 2d 3e 63 61 63 68 65 53  .    pCx->cacheS
18ce0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
18cf0 41 4c 45 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  ALE;.    rc = sq
18d00 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
18d10 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
18d20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
18d30 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
18d40 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
18d50 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
18d60 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65  DeleteUnpackedRe
18d70 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20  cord(pIdxKey);. 
18d80 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
18d90 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
18da0 20 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3c    }.    if( res<
18db0 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
18dc0 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
18dd0 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
18de0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
18df0 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
18e00 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
18e10 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
18e20 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  eteUnpackedRecor
18e30 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20 20 20  d(pIdxKey);.    
18e40 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
18e50 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20   }.    }.    rc 
18e60 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
18e70 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 78 2c 20  KeyCompare(pCx, 
18e80 70 49 64 78 4b 65 79 2c 20 26 72 65 73 29 3b 20  pIdxKey, &res); 
18e90 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
18ea0 44 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65  DeleteUnpackedRe
18eb0 63 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20  cord(pIdxKey);. 
18ec0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
18ed0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
18ee0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
18ef0 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b      if( res>0 ){
18f00 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
18f10 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 62  >p2 - 1;.      b
18f20 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  reak;.    }..   
18f30 20 2f 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e   /* At this poin
18f40 74 2c 20 70 43 72 73 72 20 69 73 20 70 6f 69 6e  t, pCrsr is poin
18f50 74 69 6e 67 20 74 6f 20 61 6e 20 65 6e 74 72 79  ting to an entry
18f60 20 69 6e 20 50 31 20 77 68 65 72 65 20 61 6c 6c   in P1 where all
18f70 20 62 75 74 0a 20 20 20 20 2a 2a 20 74 68 65 20   but.    ** the 
18f80 66 69 6e 61 6c 20 65 6e 74 72 79 20 28 74 68 65  final entry (the
18f90 20 72 6f 77 69 64 29 20 6d 61 74 63 68 65 73 20   rowid) matches 
18fa0 4b 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65  K.  Check to see
18fb0 20 69 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 66   if the.    ** f
18fc0 69 6e 61 6c 20 72 6f 77 69 64 20 63 6f 6c 75 6d  inal rowid colum
18fd0 6e 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66  n is different f
18fe0 72 6f 6d 20 52 2e 20 20 49 66 20 69 74 20 65 71  rom R.  If it eq
18ff0 75 61 6c 73 20 52 20 74 68 65 6e 20 6a 75 6d 70  uals R then jump
19000 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74  .    ** immediat
19010 65 6c 79 20 74 6f 20 50 32 2e 0a 20 20 20 20 2a  ely to P2..    *
19020 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
19030 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 70  e3VdbeIdxRowid(p
19040 43 72 73 72 2c 20 26 76 29 3b 0a 20 20 20 20 69  Crsr, &v);.    i
19050 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
19060 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
19070 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19080 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
19090 20 76 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20 70   v==R ){.      p
190a0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
190b0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
190c0 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20    }..    /* The 
190d0 66 69 6e 61 6c 20 76 61 72 69 6e 74 20 6f 66 20  final varint of 
190e0 74 68 65 20 6b 65 79 20 69 73 20 64 69 66 66 65  the key is diffe
190f0 72 65 6e 74 20 66 72 6f 6d 20 52 2e 20 20 53 74  rent from R.  St
19100 6f 72 65 20 69 74 20 62 61 63 6b 0a 20 20 20 20  ore it back.    
19110 2a 2a 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ** into register
19120 20 52 33 2e 20 20 28 54 68 65 20 72 65 63 6f 72   R3.  (The recor
19130 64 20 6e 75 6d 62 65 72 20 6f 66 20 61 6e 20 65  d number of an e
19140 6e 74 72 79 20 74 68 61 74 20 76 69 6f 6c 61 74  ntry that violat
19150 65 73 0a 20 20 20 20 2a 2a 20 61 20 55 4e 49 51  es.    ** a UNIQ
19160 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 29 0a  UE constraint.).
19170 20 20 20 20 2a 2f 0a 20 20 20 20 70 49 6e 33 2d      */.    pIn3-
19180 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 61 73  >u.i = v;.    as
19190 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
191a0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 7d  s&MEM_Int );.  }
191b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
191c0 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74  Opcode: NotExist
191d0 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
191e0 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f 6e  *.** Use the con
191f0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
19200 20 50 33 20 61 73 20 61 20 69 6e 74 65 67 65 72   P3 as a integer
19210 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63 6f   key.  If a reco
19220 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61 74  rd .** with that
19230 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65 78   key does not ex
19240 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66 20  ist in table of 
19250 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  P1, then jump to
19260 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20   P2. .** If the 
19270 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69 73  record does exis
19280 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
19290 75 2e 20 20 54 68 65 20 63 75 72 73 6f 72 20 69  u.  The cursor i
192a0 73 20 6c 65 66 74 20 0a 2a 2a 20 70 6f 69 6e 74  s left .** point
192b0 69 6e 67 20 74 6f 20 74 68 65 20 72 65 63 6f 72  ing to the recor
192c0 64 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  d if it exists..
192d0 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72  **.** The differ
192e0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 69  ence between thi
192f0 73 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  s operation and 
19300 4e 6f 74 46 6f 75 6e 64 20 69 73 20 74 68 61 74  NotFound is that
19310 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69   this.** operati
19320 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 65 20 6b  on assumes the k
19330 65 79 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  ey is an integer
19340 20 61 6e 64 20 74 68 61 74 20 50 31 20 69 73 20   and that P1 is 
19350 61 20 74 61 62 6c 65 20 77 68 65 72 65 61 73 0a  a table whereas.
19360 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20 61 73 73 75  ** NotFound assu
19370 6d 65 73 20 6b 65 79 20 69 73 20 61 20 62 6c 6f  mes key is a blo
19380 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72  b constructed fr
19390 6f 6d 20 4d 61 6b 65 52 65 63 6f 72 64 20 61 6e  om MakeRecord an
193a0 64 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 69 6e  d.** P1 is an in
193b0 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  dex..**.** See a
193c0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
193d0 6f 75 6e 64 2c 20 49 73 55 6e 69 71 75 65 0a 2a  ound, IsUnique.*
193e0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
193f0 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  sts: {        /*
19400 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
19410 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  int i = pOp->p1;
19420 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  .  Cursor *pC;. 
19430 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
19440 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ;.  assert( i>=0
19450 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
19460 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
19470 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a  >apCsr[i]!=0 );.
19480 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 28    if( (pCrsr = (
19490 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d  pC = p->apCsr[i]
194a0 29 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29  )->pCursor)!=0 )
194b0 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20  {.    int res;. 
194c0 20 20 20 75 36 34 20 69 4b 65 79 3b 0a 20 20 20     u64 iKey;.   
194d0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
194e0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
194f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d  ;.    assert( p-
19500 3e 61 70 43 73 72 5b 69 5d 2d 3e 69 73 54 61 62  >apCsr[i]->isTab
19510 6c 65 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  le );.    iKey =
19520 20 69 6e 74 54 6f 4b 65 79 28 70 49 6e 33 2d 3e   intToKey(pIn3->
19530 75 2e 69 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  u.i);.    rc = s
19540 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
19550 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
19560 20 30 2c 20 69 4b 65 79 2c 20 30 2c 26 72 65 73   0, iKey, 0,&res
19570 29 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52  );.    pC->lastR
19580 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  owid = pIn3->u.i
19590 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  ;.    pC->rowidI
195a0 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 3b  sValid = res==0;
195b0 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
195c0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
195d0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
195e0 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 2f 2a 20  E_STALE;.    /* 
195f0 72 65 73 20 6d 69 67 68 74 20 62 65 20 75 6e 69  res might be uni
19600 6e 69 74 69 61 6c 69 7a 65 64 20 69 66 20 72 63  nitialized if rc
19610 21 3d 53 51 4c 49 54 45 5f 4f 4b 2e 20 20 42 75  !=SQLITE_OK.  Bu
19620 74 20 69 66 20 72 63 21 3d 53 51 4c 49 54 45 5f  t if rc!=SQLITE_
19630 4f 4b 0a 20 20 20 20 2a 2a 20 70 72 6f 63 65 73  OK.    ** proces
19640 73 69 6e 67 20 69 73 20 61 62 6f 75 74 20 74 6f  sing is about to
19650 20 61 62 6f 72 74 20 73 6f 20 77 65 20 72 65 61   abort so we rea
19660 6c 6c 79 20 64 6f 20 6e 6f 74 20 63 61 72 65 20  lly do not care 
19670 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 20  whether or not. 
19680 20 20 20 2a 2a 20 74 68 65 20 66 6f 6c 6c 6f 77     ** the follow
19690 69 6e 67 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  ing jump is take
196a0 6e 2e 20 20 28 49 6e 20 6f 74 68 65 72 20 77 6f  n.  (In other wo
196b0 72 64 73 2c 20 64 6f 20 6e 6f 74 20 73 74 72 65  rds, do not stre
196c0 73 73 20 6f 76 65 72 0a 20 20 20 20 2a 2a 20 74  ss over.    ** t
196d0 68 65 20 65 72 72 6f 72 20 74 68 61 74 20 76 61  he error that va
196e0 6c 67 72 69 6e 64 20 73 6f 6d 65 74 69 6d 65 73  lgrind sometimes
196f0 20 73 68 6f 77 73 20 6f 6e 20 74 68 65 20 6e 65   shows on the ne
19700 78 74 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65  xt statement whe
19710 6e 0a 20 20 20 20 2a 2a 20 72 75 6e 6e 69 6e 67  n.    ** running
19720 20 69 6f 65 72 72 2e 74 65 73 74 20 61 6e 64 20   ioerr.test and 
19730 73 69 6d 69 6c 61 72 20 66 61 69 6c 75 72 65 2d  similar failure-
19740 72 65 63 6f 76 65 72 79 20 74 65 73 74 20 73 63  recovery test sc
19750 72 69 70 74 73 2e 29 20 2a 2f 0a 20 20 20 20 69  ripts.) */.    i
19760 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20  f( res!=0 ){.   
19770 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
19780 2d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72  - 1;.      asser
19790 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
197a0 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a  lid==0 );.    }.
197b0 20 20 7d 65 6c 73 65 20 69 66 28 20 21 70 43 2d    }else if( !pC-
197c0 3e 70 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a  >pseudoTable ){.
197d0 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70      /* This happ
197e0 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74 65  ens when an atte
197f0 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72 65  mpt to open a re
19800 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65  ad cursor on the
19810 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 5f   .    ** sqlite_
19820 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72 65 74  master table ret
19830 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54  urns SQLITE_EMPT
19840 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  Y..    */.    as
19850 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
19860 65 20 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f  e );.    pc = pO
19870 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61  p->p2 - 1;.    a
19880 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
19890 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20  IsValid==0 );.  
198a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
198b0 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63   Opcode: Sequenc
198c0 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
198d0 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
198e0 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
198f0 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
19900 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
19910 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
19920 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
19930 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
19940 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
19950 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
19960 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
19970 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
19980 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
19990 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
199a0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
199b0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
199c0 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  /.  int i = pOp-
199d0 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
199e0 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72  >=0 && i<p->nCur
199f0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
19a00 20 70 2d 3e 61 70 43 73 72 5b 69 5d 21 3d 30 20   p->apCsr[i]!=0 
19a10 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
19a20 20 70 2d 3e 61 70 43 73 72 5b 69 5d 2d 3e 73 65   p->apCsr[i]->se
19a30 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 4d 65 6d 53  qCount++;.  MemS
19a40 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
19a50 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
19a60 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
19a70 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50  e: NewRowid P1 P
19a80 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47  2 P3 * *.**.** G
19a90 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72  et a new integer
19aa0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
19ab0 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75  a.k.a "rowid") u
19ac0 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74  sed as the key t
19ad0 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  o a table..** Th
19ae0 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  e record number 
19af0 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
19b00 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20  y used as a key 
19b10 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
19b20 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75  ** table that cu
19b30 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
19b40 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f  o.  The new reco
19b50 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69  rd number is wri
19b60 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20  tten.** written 
19b70 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
19b80 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68  **.** If P3>0 th
19b90 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73  en P3 is a regis
19ba0 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ter that holds t
19bb0 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
19bc0 6f 75 73 6c 79 0a 2a 2a 20 67 65 6e 65 72 61 74  ously.** generat
19bd0 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
19be0 2e 20 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64  .  No new record
19bf0 20 6e 75 6d 62 65 72 73 20 61 72 65 20 61 6c 6c   numbers are all
19c00 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 0a  owed to be less.
19c10 2a 2a 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c  ** than this val
19c20 75 65 2e 20 20 57 68 65 6e 20 74 68 69 73 20 76  ue.  When this v
19c30 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73  alue reaches its
19c40 20 6d 61 78 69 6d 75 6d 2c 20 61 20 53 51 4c 49   maximum, a SQLI
19c50 54 45 5f 46 55 4c 4c 0a 2a 2a 20 65 72 72 6f 72  TE_FULL.** error
19c60 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 20   is generated.  
19c70 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  The P3 register 
19c80 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
19c90 74 68 65 20 67 65 6e 65 72 61 74 65 64 0a 2a 2a  the generated.**
19ca0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
19cb0 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69   This P3 mechani
19cc0 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65  sm is used to he
19cd0 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  lp implement the
19ce0 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .** AUTOINCREMEN
19cf0 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61  T feature..*/.ca
19d00 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20  se OP_NewRowid: 
19d10 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
19d20 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
19d30 2f 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d  /.  int i = pOp-
19d40 3e 70 31 3b 0a 20 20 69 36 34 20 76 20 3d 20 30  >p1;.  i64 v = 0
19d50 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a  ;.  Cursor *pC;.
19d60 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26    assert( i>=0 &
19d70 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  & i<p->nCursor )
19d80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
19d90 70 43 73 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20  pCsr[i]!=0 );.  
19da0 69 66 28 20 28 70 43 20 3d 20 70 2d 3e 61 70 43  if( (pC = p->apC
19db0 73 72 5b 69 5d 29 2d 3e 70 43 75 72 73 6f 72 3d  sr[i])->pCursor=
19dc0 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  =0 ){.    /* The
19dd0 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61   zero initializa
19de0 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c  tion above is al
19df0 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64  l that is needed
19e00 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
19e10 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77   /* The next row
19e20 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d  id or record num
19e30 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74  ber (different t
19e40 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d  erms for the sam
19e50 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20  e.    ** thing) 
19e60 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61  is obtained in a
19e70 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69   two-step algori
19e80 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  thm..    **.    
19e90 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65  ** First we atte
19ea0 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
19eb0 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
19ec0 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f   rowid and add o
19ed0 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61  ne.    ** to tha
19ee0 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c  t.  But if the l
19ef0 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
19f00 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79  rowid is already
19f10 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20   the maximum.   
19f20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74   ** positive int
19f30 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f  eger, we have to
19f40 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
19f50 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20   the second.    
19f60 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63  ** probabilistic
19f70 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a   algorithm.    *
19f80 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63  *.    ** The sec
19f90 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ond algorithm is
19fa0 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77   to select a row
19fb0 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  id at random and
19fc0 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69   see if.    ** i
19fd0 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  t already exists
19fe0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
19ff0 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  If it does not e
1a000 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20  xist, we have.  
1a010 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20    ** succeeded. 
1a020 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72   If the random r
1a030 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c  owid does exist,
1a040 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77   we select a new
1a050 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20   one.    ** and 
1a060 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f  try again, up to
1a070 20 31 30 30 30 20 74 69 6d 65 73 2e 0a 20 20 20   1000 times..   
1a080 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 6f 72 20 61   **.    ** For a
1a090 20 74 61 62 6c 65 20 77 69 74 68 20 6c 65 73 73   table with less
1a0a0 20 74 68 61 6e 20 32 20 62 69 6c 6c 69 6f 6e 20   than 2 billion 
1a0b0 65 6e 74 72 69 65 73 2c 20 74 68 65 20 70 72 6f  entries, the pro
1a0c0 62 61 62 69 6c 69 74 79 0a 20 20 20 20 2a 2a 20  bability.    ** 
1a0d0 6f 66 20 6e 6f 74 20 66 69 6e 64 69 6e 67 20 61  of not finding a
1a0e0 20 75 6e 75 73 65 64 20 72 6f 77 69 64 20 69 73   unused rowid is
1a0f0 20 61 62 6f 75 74 20 31 2e 30 65 2d 33 30 30 2e   about 1.0e-300.
1a100 20 20 54 68 69 73 20 69 73 20 61 20 0a 20 20 20    This is a .   
1a110 20 2a 2a 20 6e 6f 6e 2d 7a 65 72 6f 20 70 72 6f   ** non-zero pro
1a120 62 61 62 69 6c 69 74 79 2c 20 62 75 74 20 69 74  bability, but it
1a130 20 69 73 20 73 74 69 6c 6c 20 76 61 6e 69 73 68   is still vanish
1a140 69 6e 67 6c 79 20 73 6d 61 6c 6c 20 61 6e 64 20  ingly small and 
1a150 73 68 6f 75 6c 64 0a 20 20 20 20 2a 2a 20 6e 65  should.    ** ne
1a160 76 65 72 20 63 61 75 73 65 20 61 20 70 72 6f 62  ver cause a prob
1a170 6c 65 6d 2e 20 20 59 6f 75 20 61 72 65 20 6d 75  lem.  You are mu
1a180 63 68 2c 20 6d 75 63 68 20 6d 6f 72 65 20 6c 69  ch, much more li
1a190 6b 65 6c 79 20 74 6f 20 68 61 76 65 20 61 0a 20  kely to have a. 
1a1a0 20 20 20 2a 2a 20 68 61 72 64 77 61 72 65 20 66     ** hardware f
1a1b0 61 69 6c 75 72 65 20 74 68 61 6e 20 66 6f 72 20  ailure than for 
1a1c0 74 68 69 73 20 61 6c 67 6f 72 69 74 68 6d 20 74  this algorithm t
1a1d0 6f 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 0a 20  o fail..    **. 
1a1e0 20 20 20 2a 2a 20 54 68 65 20 61 6e 61 6c 79 73     ** The analys
1a1f0 69 73 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f  is in the previo
1a200 75 73 20 70 61 72 61 67 72 61 70 68 20 61 73 73  us paragraph ass
1a210 75 6d 65 73 20 74 68 61 74 20 79 6f 75 20 68 61  umes that you ha
1a220 76 65 20 61 20 67 6f 6f 64 0a 20 20 20 20 2a 2a  ve a good.    **
1a230 20 73 6f 75 72 63 65 20 6f 66 20 72 61 6e 64 6f   source of rando
1a240 6d 20 6e 75 6d 62 65 72 73 2e 20 20 49 73 20 61  m numbers.  Is a
1a250 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
1a260 6e 20 6c 69 6b 65 20 6c 72 61 6e 64 34 38 28 29  n like lrand48()
1a270 0a 20 20 20 20 2a 2a 20 67 6f 6f 64 20 65 6e 6f  .    ** good eno
1a280 75 67 68 3f 20 20 4d 61 79 62 65 2e 20 4d 61 79  ugh?  Maybe. May
1a290 62 65 20 6e 6f 74 2e 20 49 74 27 73 20 68 61 72  be not. It's har
1a2a0 64 20 74 6f 20 6b 6e 6f 77 20 77 68 65 74 68 65  d to know whethe
1a2b0 72 20 74 68 65 72 65 0a 20 20 20 20 2a 2a 20 6d  r there.    ** m
1a2c0 69 67 68 74 20 62 65 20 73 75 62 74 6c 65 20 62  ight be subtle b
1a2d0 75 67 73 20 69 73 20 73 6f 6d 65 20 69 6d 70 6c  ugs is some impl
1a2e0 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20 6c  ementations of l
1a2f0 72 61 6e 64 34 38 28 29 20 74 68 61 74 0a 20 20  rand48() that.  
1a300 20 20 2a 2a 20 63 6f 75 6c 64 20 63 61 75 73 65    ** could cause
1a310 20 70 72 6f 62 6c 65 6d 73 2e 20 54 6f 20 61 76   problems. To av
1a320 6f 69 64 20 75 6e 63 65 72 74 61 69 6e 74 79 2c  oid uncertainty,
1a330 20 53 51 4c 69 74 65 20 75 73 65 73 20 69 74 73   SQLite uses its
1a340 20 6f 77 6e 20 0a 20 20 20 20 2a 2a 20 72 61 6e   own .    ** ran
1a350 64 6f 6d 20 6e 75 6d 62 65 72 20 67 65 6e 65 72  dom number gener
1a360 61 74 6f 72 20 62 61 73 65 64 20 6f 6e 20 74 68  ator based on th
1a370 65 20 52 43 34 20 61 6c 67 6f 72 69 74 68 6d 2e  e RC4 algorithm.
1a380 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
1a390 6f 20 70 72 6f 6d 6f 74 65 20 6c 6f 63 61 6c 69  o promote locali
1a3a0 74 79 20 6f 66 20 72 65 66 65 72 65 6e 63 65 20  ty of reference 
1a3b0 66 6f 72 20 72 65 70 65 74 69 74 69 76 65 20 69  for repetitive i
1a3c0 6e 73 65 72 74 73 2c 20 74 68 65 0a 20 20 20 20  nserts, the.    
1a3d0 2a 2a 20 66 69 72 73 74 20 66 65 77 20 61 74 74  ** first few att
1a3e0 65 6d 70 74 73 20 61 74 20 63 68 6f 6f 73 69 6e  empts at choosin
1a3f0 67 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  g a random rowid
1a400 20 70 69 63 6b 20 76 61 6c 75 65 73 20 6a 75 73   pick values jus
1a410 74 20 61 20 6c 69 74 74 6c 65 0a 20 20 20 20 2a  t a little.    *
1a420 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  * larger than th
1a430 65 20 70 72 65 76 69 6f 75 73 20 72 6f 77 69 64  e previous rowid
1a440 2e 20 20 54 68 69 73 20 68 61 73 20 62 65 65 6e  .  This has been
1a450 20 73 68 6f 77 6e 20 65 78 70 65 72 69 6d 65 6e   shown experimen
1a460 74 61 6c 6c 79 0a 20 20 20 20 2a 2a 20 74 6f 20  tally.    ** to 
1a470 64 6f 75 62 6c 65 20 74 68 65 20 73 70 65 65 64  double the speed
1a480 20 6f 66 20 74 68 65 20 43 4f 50 59 20 6f 70 65   of the COPY ope
1a490 72 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20  ration..    */. 
1a4a0 20 20 20 69 6e 74 20 72 65 73 2c 20 72 78 3d 53     int res, rx=S
1a4b0 51 4c 49 54 45 5f 4f 4b 2c 20 63 6e 74 3b 0a 20  QLITE_OK, cnt;. 
1a4c0 20 20 20 69 36 34 20 78 3b 0a 20 20 20 20 63 6e     i64 x;.    cn
1a4d0 74 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 28  t = 0;.    if( (
1a4e0 73 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67  sqlite3BtreeFlag
1a4f0 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 26 28  s(pC->pCursor)&(
1a500 42 54 52 45 45 5f 49 4e 54 4b 45 59 7c 42 54 52  BTREE_INTKEY|BTR
1a510 45 45 5f 5a 45 52 4f 44 41 54 41 29 29 20 21 3d  EE_ZERODATA)) !=
1a520 0a 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45  .          BTREE
1a530 5f 49 4e 54 4b 45 59 20 29 7b 0a 20 20 20 20 20  _INTKEY ){.     
1a540 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
1a550 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
1a560 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a570 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1a580 20 20 20 20 61 73 73 65 72 74 28 20 28 73 71 6c      assert( (sql
1a590 69 74 65 33 42 74 72 65 65 46 6c 61 67 73 28 70  ite3BtreeFlags(p
1a5a0 43 2d 3e 70 43 75 72 73 6f 72 29 20 26 20 42 54  C->pCursor) & BT
1a5b0 52 45 45 5f 49 4e 54 4b 45 59 29 21 3d 30 20 29  REE_INTKEY)!=0 )
1a5c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 73  ;.    assert( (s
1a5d0 71 6c 69 74 65 33 42 74 72 65 65 46 6c 61 67 73  qlite3BtreeFlags
1a5e0 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 26 20  (pC->pCursor) & 
1a5f0 42 54 52 45 45 5f 5a 45 52 4f 44 41 54 41 29 3d  BTREE_ZERODATA)=
1a600 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  =0 );..#ifdef SQ
1a610 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44  LITE_32BIT_ROWID
1a620 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
1a630 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66  ROWID 0x7fffffff
1a640 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f  .#else.    /* So
1a650 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d  me compilers com
1a660 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73  plain about cons
1a670 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72  tants of the for
1a680 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  m 0x7fffffffffff
1a690 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68  ffff..    ** Oth
1a6a0 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
1a6b0 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66  ut 0x7ffffffffff
1a6c0 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66  ffffffLL.  The f
1a6d0 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73  ollowing macro s
1a6e0 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70  eems.    ** to p
1a6f0 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74  rovide the const
1a700 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67  ant while making
1a710 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68   all compilers h
1a720 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20  appy..    */.#  
1a730 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
1a740 44 20 20 28 20 28 28 28 75 36 34 29 30 78 37 66  D  ( (((u64)0x7f
1a750 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
1a760 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
1a770 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
1a780 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
1a790 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 69 66  owid ){.      if
1a7a0 28 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56  ( pC->nextRowidV
1a7b0 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  alid ){.        
1a7c0 76 20 3d 20 70 43 2d 3e 6e 65 78 74 52 6f 77 69  v = pC->nextRowi
1a7d0 64 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  d;.      }else{.
1a7e0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1a7f0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
1a800 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1a810 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
1a820 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1a830 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
1a840 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a850 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1a860 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
1a870 20 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 0a           v = 1;.
1a880 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1a890 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1a8a0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
1a8b0 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
1a8c0 20 20 20 20 20 20 20 20 20 76 20 3d 20 6b 65 79           v = key
1a8d0 54 6f 49 6e 74 28 76 29 3b 0a 20 20 20 20 20 20  ToInt(v);.      
1a8e0 20 20 20 20 69 66 28 20 76 3d 3d 4d 41 58 5f 52      if( v==MAX_R
1a8f0 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20  OWID ){.        
1a900 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f      pC->useRando
1a910 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20  mRowid = 1;.    
1a920 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1a930 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20           v++;.  
1a940 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a950 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66    }.      }..#if
1a960 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1a970 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
1a980 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33       if( pOp->p3
1a990 20 29 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 20   ){.        Mem 
1a9a0 2a 70 4d 65 6d 3b 0a 20 20 20 20 20 20 20 20 61  *pMem;.        a
1a9b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
1a9c0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
1a9d0 6e 4d 65 6d 20 29 3b 20 2f 2a 20 50 33 20 69 73  nMem ); /* P3 is
1a9e0 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1a9f0 63 65 6c 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  cell */.        
1aa00 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pMem = &p->aMem[
1aa10 70 4f 70 2d 3e 70 33 5d 3b 0a 09 52 45 47 49 53  pOp->p3];..REGIS
1aa20 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
1aa30 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  3, pMem);.      
1aa40 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1aa50 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29  Integerify(pMem)
1aa60 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1aa70 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
1aa80 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20   MEM_Int)!=0 ); 
1aa90 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64   /* mem(P3) hold
1aaa0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a  s an integer */.
1aab0 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d          if( pMem
1aac0 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44  ->u.i==MAX_ROWID
1aad0 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f   || pC->useRando
1aae0 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
1aaf0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1ab00 46 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 20 20  FULL;.          
1ab10 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ab20 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
1ab30 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 76   }.        if( v
1ab40 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a  <pMem->u.i+1 ){.
1ab50 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d            v = pM
1ab60 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
1ab70 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
1ab80 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Mem->u.i = v;.  
1ab90 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
1aba0 20 20 20 20 69 66 28 20 76 3c 4d 41 58 5f 52 4f      if( v<MAX_RO
1abb0 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 70  WID ){.        p
1abc0 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c 69  C->nextRowidVali
1abd0 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 70  d = 1;.        p
1abe0 43 2d 3e 6e 65 78 74 52 6f 77 69 64 20 3d 20 76  C->nextRowid = v
1abf0 2b 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  +1;.      }else{
1ac00 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6e 65 78  .        pC->nex
1ac10 74 52 6f 77 69 64 56 61 6c 69 64 20 3d 20 30 3b  tRowidValid = 0;
1ac20 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1ac30 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61     if( pC->useRa
1ac40 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
1ac50 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1ac60 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 53 51 4c  p3==0 );  /* SQL
1ac70 49 54 45 5f 46 55 4c 4c 20 6d 75 73 74 20 68 61  ITE_FULL must ha
1ac80 76 65 20 6f 63 63 75 72 72 65 64 20 70 72 69 6f  ve occurred prio
1ac90 72 20 74 6f 20 74 68 69 73 20 2a 2f 0a 20 20 20  r to this */.   
1aca0 20 20 20 76 20 3d 20 64 62 2d 3e 70 72 69 6f 72     v = db->prior
1acb0 4e 65 77 52 6f 77 69 64 3b 0a 20 20 20 20 20 20  NewRowid;.      
1acc0 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64  cnt = 0;.      d
1acd0 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63  o{.        if( c
1ace0 6e 74 3d 3d 30 20 26 26 20 28 76 26 30 78 66 66  nt==0 && (v&0xff
1acf0 66 66 66 66 29 3d 3d 76 20 29 7b 0a 20 20 20 20  ffff)==v ){.    
1ad00 20 20 20 20 20 20 76 2b 2b 3b 0a 20 20 20 20 20        v++;.     
1ad10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1ad20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64      sqlite3_rand
1ad30 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29  omness(sizeof(v)
1ad40 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 20  , &v);.         
1ad50 20 69 66 28 20 63 6e 74 3c 35 20 29 20 76 20 26   if( cnt<5 ) v &
1ad60 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20  = 0xffffff;.    
1ad70 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
1ad80 28 20 76 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ( v==0 ) continu
1ad90 65 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20 69  e;.        x = i
1ada0 6e 74 54 6f 4b 65 79 28 76 29 3b 0a 20 20 20 20  ntToKey(v);.    
1adb0 20 20 20 20 72 78 20 3d 20 73 71 6c 69 74 65 33      rx = sqlite3
1adc0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1add0 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1ade0 20 30 2c 20 28 75 36 34 29 78 2c 20 30 2c 20 26   0, (u64)x, 0, &
1adf0 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 63 6e  res);.        cn
1ae00 74 2b 2b 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c  t++;.      }whil
1ae10 65 28 20 63 6e 74 3c 31 30 30 20 26 26 20 72 78  e( cnt<100 && rx
1ae20 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
1ae30 65 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64  es==0 );.      d
1ae40 62 2d 3e 70 72 69 6f 72 4e 65 77 52 6f 77 69 64  b->priorNewRowid
1ae50 20 3d 20 76 3b 0a 20 20 20 20 20 20 69 66 28 20   = v;.      if( 
1ae60 72 78 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rx==SQLITE_OK &&
1ae70 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
1ae80 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
1ae90 55 4c 4c 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  ULL;.        got
1aea0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1aeb0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
1aec0 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69    }.    pC->rowi
1aed0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1aee0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1aef0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1af00 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1af10 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1af20 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
1af30 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
1af40 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1af50 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
1af60 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
1af70 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1af80 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65  **.** Write an e
1af90 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61  ntry into the ta
1afa0 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31  ble of cursor P1
1afb0 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69  .  A new entry i
1afc0 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20  s.** created if 
1afd0 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61  it doesn't alrea
1afe0 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20  dy exist or the 
1aff0 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73  data for an exis
1b000 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73  ting.** entry is
1b010 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54   overwritten.  T
1b020 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76  he data is the v
1b030 61 6c 75 65 20 73 74 6f 72 65 64 20 72 65 67 69  alue stored regi
1b040 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
1b050 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
1b060 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1b070 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
1b080 74 0a 2a 2a 20 62 65 20 61 6e 20 69 6e 74 65 67  t.** be an integ
1b090 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  er..**.** If the
1b0a0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
1b0b0 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
1b0c0 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
1b0d0 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
1b0e0 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
1b0f0 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20  otherwise not). 
1b100 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
1b110 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66  ASTROWID flag of
1b120 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74   P5 is set,.** t
1b130 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f  hen rowid is sto
1b140 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65  red for subseque
1b150 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65  nt return by the
1b160 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74  .** sqlite3_last
1b170 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
1b180 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77  function (otherw
1b190 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69  ise it is unmodi
1b1a0 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 61 72  fied)..**.** Par
1b1b0 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
1b1c0 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20  int to a string 
1b1d0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
1b1e0 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a  able-name, or.**
1b1f0 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
1b200 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   it is not NULL,
1b210 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
1b220 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74  -hook .** (sqlit
1b230 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
1b240 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66  ck) is invoked f
1b250 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
1b260 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
1b270 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
1b280 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
1b290 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
1b2a0 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
1b2b0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
1b2c0 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
1b2d0 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
1b2e0 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
1b2f0 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
1b300 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
1b310 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
1b320 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
1b330 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
1b340 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
1b350 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
1b360 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
1b370 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
1b380 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
1b390 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
1b3a0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1b3b0 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
1b3c0 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
1b3d0 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
1b3e0 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
1b3f0 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
1b400 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73  ..*/.case OP_Ins
1b410 65 72 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44  ert: {.  Mem *pD
1b420 61 74 61 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ata = &p->aMem[p
1b430 4f 70 2d 3e 70 32 5d 3b 0a 20 20 4d 65 6d 20 2a  Op->p2];.  Mem *
1b440 70 4b 65 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pKey = &p->aMem[
1b450 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 69 36 34  pOp->p3];..  i64
1b460 20 69 4b 65 79 3b 20 20 20 2f 2a 20 54 68 65 20   iKey;   /* The 
1b470 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72  integer ROWID or
1b480 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63   key for the rec
1b490 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
1b4a0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d 20  ed */.  int i = 
1b4b0 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f  pOp->p1;.  Curso
1b4c0 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
1b4d0 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1b4e0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1b4f0 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1b500 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1b510 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1b520 75 72 73 6f 72 21 3d 30 20 7c 7c 20 70 43 2d 3e  ursor!=0 || pC->
1b530 70 73 65 75 64 6f 54 61 62 6c 65 20 29 3b 0a 20  pseudoTable );. 
1b540 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
1b550 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1b560 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1b570 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47  isTable );.  REG
1b580 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1b590 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 52  >p2, pData);.  R
1b5a0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
1b5b0 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 0a 20  p->p3, pKey);.. 
1b5c0 20 69 4b 65 79 20 3d 20 69 6e 74 54 6f 4b 65 79   iKey = intToKey
1b5d0 28 70 4b 65 79 2d 3e 75 2e 69 29 3b 0a 20 20 69  (pKey->u.i);.  i
1b5e0 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
1b5f0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
1b600 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
1b610 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
1b620 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
1b630 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 70  b->lastRowid = p
1b640 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20  Key->u.i;.  if( 
1b650 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c  pC->nextRowidVal
1b660 69 64 20 26 26 20 70 4b 65 79 2d 3e 75 2e 69 3e  id && pKey->u.i>
1b670 3d 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 20 29  =pC->nextRowid )
1b680 7b 0a 20 20 20 20 70 43 2d 3e 6e 65 78 74 52 6f  {.    pC->nextRo
1b690 77 69 64 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  widValid = 0;.  
1b6a0 7d 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  }.  if( pData->f
1b6b0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
1b6c0 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20  ){.    pData->z 
1b6d0 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e  = 0;.    pData->
1b6e0 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n = 0;.  }else{.
1b6f0 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
1b700 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
1b710 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
1b720 0a 20 20 7d 0a 20 20 69 66 28 20 70 43 2d 3e 70  .  }.  if( pC->p
1b730 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20 20  seudoTable ){.  
1b740 20 20 69 66 28 20 21 70 43 2d 3e 65 70 68 65 6d    if( !pC->ephem
1b750 50 73 65 75 64 6f 54 61 62 6c 65 20 29 7b 0a 20  PseudoTable ){. 
1b760 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
1b770 65 65 28 64 62 2c 20 70 43 2d 3e 70 44 61 74 61  ee(db, pC->pData
1b780 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  );.    }.    pC-
1b790 3e 69 4b 65 79 20 3d 20 69 4b 65 79 3b 0a 20 20  >iKey = iKey;.  
1b7a0 20 20 70 43 2d 3e 6e 44 61 74 61 20 3d 20 70 44    pC->nData = pD
1b7b0 61 74 61 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20  ata->n;.    if( 
1b7c0 70 44 61 74 61 2d 3e 7a 3d 3d 70 44 61 74 61 2d  pData->z==pData-
1b7d0 3e 7a 4d 61 6c 6c 6f 63 20 7c 7c 20 70 43 2d 3e  >zMalloc || pC->
1b7e0 65 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65  ephemPseudoTable
1b7f0 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 70 44   ){.      pC->pD
1b800 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a  ata = pData->z;.
1b810 20 20 20 20 20 20 69 66 28 20 21 70 43 2d 3e 65        if( !pC->e
1b820 70 68 65 6d 50 73 65 75 64 6f 54 61 62 6c 65 20  phemPseudoTable 
1b830 29 7b 0a 20 20 20 20 20 20 20 20 70 44 61 74 61  ){.        pData
1b840 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
1b850 44 79 6e 3b 0a 20 20 20 20 20 20 20 20 70 44 61  Dyn;.        pDa
1b860 74 61 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ta->flags |= MEM
1b870 5f 45 70 68 65 6d 3b 0a 20 20 20 20 20 20 20 20  _Ephem;.        
1b880 70 44 61 74 61 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d  pData->zMalloc =
1b890 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
1b8a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 2d  }else{.      pC-
1b8b0 3e 70 44 61 74 61 20 3d 20 73 71 6c 69 74 65 33  >pData = sqlite3
1b8c0 4d 61 6c 6c 6f 63 28 20 70 43 2d 3e 6e 44 61 74  Malloc( pC->nDat
1b8d0 61 2b 32 20 29 3b 0a 20 20 20 20 20 20 69 66 28  a+2 );.      if(
1b8e0 20 21 70 43 2d 3e 70 44 61 74 61 20 29 20 67 6f   !pC->pData ) go
1b8f0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20  to no_mem;.     
1b900 20 6d 65 6d 63 70 79 28 70 43 2d 3e 70 44 61 74   memcpy(pC->pDat
1b910 61 2c 20 70 44 61 74 61 2d 3e 7a 2c 20 70 43 2d  a, pData->z, pC-
1b920 3e 6e 44 61 74 61 29 3b 0a 20 20 20 20 20 20 70  >nData);.      p
1b930 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61  C->pData[pC->nDa
1b940 74 61 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  ta] = 0;.      p
1b950 43 2d 3e 70 44 61 74 61 5b 70 43 2d 3e 6e 44 61  C->pData[pC->nDa
1b960 74 61 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 7d  ta+1] = 0;.    }
1b970 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
1b980 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
1b990 20 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 0a 20 20     int nZero;.  
1b9a0 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
1b9b0 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
1b9c0 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70  .      nZero = p
1b9d0 44 61 74 61 2d 3e 75 2e 69 3b 0a 20 20 20 20 7d  Data->u.i;.    }
1b9e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 5a 65 72  else{.      nZer
1b9f0 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  o = 0;.    }.   
1ba00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1ba10 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75  eeInsert(pC->pCu
1ba20 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20  rsor, 0, iKey,. 
1ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba40 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61             pData
1ba50 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e  ->z, pData->n, n
1ba60 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20  Zero,.          
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba80 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c    pOp->p5 & OPFL
1ba90 41 47 5f 41 50 50 45 4e 44 29 3b 0a 20 20 7d 0a  AG_APPEND);.  }.
1baa0 20 20 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73    .  pC->rowidIs
1bab0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d  Valid = 0;.  pC-
1bac0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1bad0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
1bae0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
1baf0 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  TALE;..  /* Invo
1bb00 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
1bb10 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
1bb20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  */.  if( rc==SQL
1bb30 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55  ITE_OK && db->xU
1bb40 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
1bb50 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
1bb60 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
1bb70 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
1bb80 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20  iDb].zName;.    
1bb90 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c  const char *zTbl
1bba0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
1bbb0 20 20 69 6e 74 20 6f 70 20 3d 20 28 28 70 4f 70    int op = ((pOp
1bbc0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
1bbd0 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
1bbe0 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
1bbf0 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73  _INSERT);.    as
1bc00 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1bc10 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70  e );.    db->xUp
1bc20 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
1bc30 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c  >pUpdateArg, op,
1bc40 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79   zDb, zTbl, iKey
1bc50 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1bc60 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d  C->iDb>=0 );.  }
1bc70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1bc80 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
1bc90 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
1bca0 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63  * Delete the rec
1bcb0 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65  ord at which the
1bcc0 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75   P1 cursor is cu
1bcd0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
1bce0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73  ..**.** The curs
1bcf0 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20  or will be left 
1bd00 70 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68  pointing at eith
1bd10 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74  er the next or t
1bd20 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72  he previous.** r
1bd30 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62  ecord in the tab
1bd40 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66  le. If it is lef
1bd50 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
1bd60 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74  e next record, t
1bd70 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20  hen.** the next 
1bd80 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
1bd90 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70   will be a no-op
1bda0 2e 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f  .  Hence it is O
1bdb0 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61  K to delete.** a
1bdc0 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74   record from wit
1bdd0 68 69 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70  hin an Next loop
1bde0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
1bdf0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
1be00 61 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c  ag of P2 is set,
1be10 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68   then the row ch
1be20 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a  ange count is.**
1be30 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
1be40 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a  herwise not)..**
1be50 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20  .** P1 must not 
1be60 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  be pseudo-table.
1be70 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61    It has to be a
1be80 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68   real table with
1be90 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  .** multiple row
1bea0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  s..**.** If P4 i
1beb0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
1bec0 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20   it is the name 
1bed0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
1bee0 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74  t P1 is.** point
1bef0 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64  ing to.  The upd
1bf00 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65  ate hook will be
1bf10 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20   invoked, if it 
1bf20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34  exists..** If P4
1bf30 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65   is not NULL the
1bf40 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  n the P1 cursor 
1bf50 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70  must have been p
1bf60 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69  ositioned.** usi
1bf70 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70  ng OP_NotFound p
1bf80 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67  rior to invoking
1bf90 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
1bfa0 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a  .case OP_Delete:
1bfb0 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20 70 4f 70   {.  int i = pOp
1bfc0 2d 3e 70 31 3b 0a 20 20 69 36 34 20 69 4b 65 79  ->p1;.  i64 iKey
1bfd0 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a  ;.  Cursor *pC;.
1bfe0 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20  .  assert( i>=0 
1bff0 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  && i<p->nCursor 
1c000 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1c010 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  sr[i];.  assert(
1c020 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1c030 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1c040 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76  =0 );  /* Only v
1c050 61 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61  alid for real ta
1c060 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74  bles, no pseudot
1c070 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  ables */..  /* I
1c080 66 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  f the update-hoo
1c090 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65  k will be invoke
1c0a0 64 2c 20 73 65 74 20 69 4b 65 79 20 74 6f 20 74  d, set iKey to t
1c0b0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0a  he rowid of the.
1c0c0 20 20 2a 2a 20 72 6f 77 20 62 65 69 6e 67 20 64    ** row being d
1c0d0 65 6c 65 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69  eleted..  */.  i
1c0e0 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  f( db->xUpdateCa
1c0f0 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
1c100 34 2e 7a 20 29 7b 0a 20 20 20 20 61 73 73 65 72  4.z ){.    asser
1c110 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1c120 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1c130 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 29  ->rowidIsValid )
1c140 3b 20 20 2f 2a 20 6c 61 73 74 52 6f 77 69 64 20  ;  /* lastRowid 
1c150 73 65 74 20 62 79 20 70 72 65 76 69 6f 75 73 20  set by previous 
1c160 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20  OP_NotFound */. 
1c170 20 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61     iKey = pC->la
1c180 73 74 52 6f 77 69 64 3b 0a 20 20 7d 0a 0a 20 20  stRowid;.  }..  
1c190 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
1c1a0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
1c1b0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
1c1c0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1c1d0 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 73 71 6c  rror;.  rc = sql
1c1e0 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
1c1f0 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
1c200 70 43 2d 3e 6e 65 78 74 52 6f 77 69 64 56 61 6c  pC->nextRowidVal
1c210 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  id = 0;.  pC->ca
1c220 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1c230 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
1c240 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
1c250 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
1c260 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
1c270 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
1c280 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
1c290 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
1c2a0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
1c2b0 2a 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70  *zDb = db->aDb[p
1c2c0 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
1c2d0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
1c2e0 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
1c2f0 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
1c300 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
1c310 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
1c320 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62  DELETE, zDb, zTb
1c330 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
1c340 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
1c350 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   );.  }.  if( pO
1c360 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p2 & OPFLAG_N
1c370 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
1c380 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  nge++;.  break;.
1c390 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
1c3a0 73 65 74 43 6f 75 6e 74 20 50 31 20 2a 20 2a 0a  setCount P1 * *.
1c3b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1c3c0 65 20 72 65 73 65 74 73 20 74 68 65 20 56 4d 73  e resets the VMs
1c3d0 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
1c3e0 20 63 6f 75 6e 74 65 72 20 74 6f 20 30 2e 20 49   counter to 0. I
1c3f0 66 20 50 31 20 69 73 20 74 72 75 65 2c 0a 2a 2a  f P1 is true,.**
1c400 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
1c410 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
1c420 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
1c430 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
1c440 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
1c450 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
1c460 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
1c470 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
1c480 33 5f 63 68 61 6e 67 65 73 28 29 29 0a 2a 2a 20  3_changes()).** 
1c490 62 65 66 6f 72 65 20 69 74 20 69 73 20 72 65 73  before it is res
1c4a0 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
1c4b0 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
1c4c0 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rams..*/.case OP
1c4d0 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20  _ResetCount: {. 
1c4e0 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
1c4f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
1c500 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
1c510 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 7d 0a 20  >nChange);.  }. 
1c520 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
1c530 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1c540 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
1c550 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1c560 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
1c570 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
1c580 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66  plete row data f
1c590 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
1c5a0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
1c5b0 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
1c5c0 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74  he data.  .** It
1c5d0 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20   is just copied 
1c5e0 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
1c5f0 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
1c600 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
1c610 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
1c620 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  file..**.** If t
1c630 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
1c640 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
1c650 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
1c660 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
1c670 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
1c680 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
1c690 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  able..*/./* Opco
1c6a0 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32  de: RowKey P1 P2
1c6b0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
1c6c0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
1c6d0 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
1c6e0 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72   row key for cur
1c6f0 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
1c700 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
1c710 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
1c720 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20  a.  .** The key 
1c730 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  is copied onto t
1c740 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 65  he P3 register e
1c750 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
1c760 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
1c770 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1c780 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
1c790 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
1c7a0 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
1c7b0 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
1c7c0 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
1c7d0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
1c7e0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1c7f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65  */.case OP_RowKe
1c800 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  y:.case OP_RowDa
1c810 74 61 3a 20 7b 0a 20 20 69 6e 74 20 69 20 3d 20  ta: {.  int i = 
1c820 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73 6f  pOp->p1;.  Curso
1c830 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
1c840 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20  r *pCrsr;.  u32 
1c850 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d  n;..  pOut = &p-
1c860 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  >aMem[pOp->p2];.
1c870 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20  .  /* Note that 
1c880 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61  RowKey and RowDa
1c890 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78  ta are really ex
1c8a0 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69  actly the same i
1c8b0 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20  nstruction */.  
1c8c0 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20  assert( i>=0 && 
1c8d0 69 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  i<p->nCursor );.
1c8e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1c8f0 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
1c900 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70  ->isTable || pOp
1c910 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77  ->opcode==OP_Row
1c920 4b 65 79 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Key );.  assert(
1c930 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20   pC->isIndex || 
1c940 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1c950 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
1c960 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1c970 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c  assert( pC->null
1c980 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Row==0 );.  asse
1c990 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
1c9a0 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ble==0 );.  asse
1c9b0 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1c9c0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
1c9d0 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72  pC->pCursor;.  r
1c9e0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
1c9f0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
1ca00 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1ca10 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1ca20 72 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ror;.  if( pC->i
1ca30 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 69 36  sIndex ){.    i6
1ca40 34 20 6e 36 34 3b 0a 20 20 20 20 61 73 73 65 72  4 n64;.    asser
1ca50 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20  t( !pC->isTable 
1ca60 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  );.    sqlite3Bt
1ca70 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72  reeKeySize(pCrsr
1ca80 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 69 66 28  , &n64);.    if(
1ca90 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b   n64>db->aLimit[
1caa0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
1cab0 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
1cac0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
1cad0 7d 0a 20 20 20 20 6e 20 3d 20 6e 36 34 3b 0a 20  }.    n = n64;. 
1cae0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
1caf0 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65  te3BtreeDataSize
1cb00 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20  (pCrsr, &n);.   
1cb10 20 69 66 28 20 6e 3e 64 62 2d 3e 61 4c 69 6d 69   if( n>db->aLimi
1cb20 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
1cb30 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
1cb40 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
1cb50 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73 71    }.  }.  if( sq
1cb60 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77  lite3VdbeMemGrow
1cb70 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a  (pOut, n, 0) ){.
1cb80 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
1cb90 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  .  }.  pOut->n =
1cba0 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   n;.  MemSetType
1cbb0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42  Flag(pOut, MEM_B
1cbc0 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  lob);.  if( pC->
1cbd0 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 72  isIndex ){.    r
1cbe0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1cbf0 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  Key(pCrsr, 0, n,
1cc00 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c   pOut->z);.  }el
1cc10 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
1cc20 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43  ite3BtreeData(pC
1cc30 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
1cc40 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >z);.  }.  pOut-
1cc50 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
1cc60 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
1cc70 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
1cc80 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f   cast to text */
1cc90 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
1cca0 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
1ccb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1ccc0 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32  ode: Rowid P1 P2
1ccd0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f   * * *.**.** Sto
1cce0 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  re in register P
1ccf0 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
1cd00 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66  ch is the key of
1cd10 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
1cd20 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63   that.** P1 is c
1cd30 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74  urrently point t
1cd40 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  o..*/.case OP_Ro
1cd50 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
1cd60 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1cd70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1cd80 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  nt i = pOp->p1;.
1cd90 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20    Cursor *pC;.  
1cda0 69 36 34 20 76 3b 0a 0a 20 20 61 73 73 65 72 74  i64 v;..  assert
1cdb0 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1cdc0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1cdd0 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
1cde0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1cdf0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1ce00 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1ce10 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  pC);.  if( rc ) 
1ce20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ce30 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
1ce40 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1ce50 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c  ){.    v = pC->l
1ce60 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d 65 6c 73  astRowid;.  }els
1ce70 65 20 69 66 28 20 70 43 2d 3e 70 73 65 75 64 6f  e if( pC->pseudo
1ce80 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 76 20 3d  Table ){.    v =
1ce90 20 6b 65 79 54 6f 49 6e 74 28 70 43 2d 3e 69 4b   keyToInt(pC->iK
1cea0 65 79 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ey);.  }else if(
1ceb0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
1cec0 20 20 20 20 2f 2a 20 4c 65 61 76 65 20 74 68 65      /* Leave the
1ced0 20 72 6f 77 69 64 20 73 65 74 20 74 6f 20 61 20   rowid set to a 
1cee0 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 62 72 65 61  NULL */.    brea
1cef0 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  k;.  }else{.    
1cf00 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
1cf10 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  sor!=0 );.    sq
1cf20 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
1cf30 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
1cf40 76 29 3b 0a 20 20 20 20 76 20 3d 20 6b 65 79 54  v);.    v = keyT
1cf50 6f 49 6e 74 28 76 29 3b 0a 20 20 7d 0a 20 20 70  oInt(v);.  }.  p
1cf60 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
1cf70 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
1cf80 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
1cf90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1cfa0 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
1cfb0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
1cfc0 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
1cfd0 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
1cfe0 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
1cff0 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
1d000 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
1d010 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
1d020 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
1d030 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
1d040 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
1d050 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
1d060 20 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70    int i = pOp->p
1d070 31 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b  1;.  Cursor *pC;
1d080 0a 0a 20 20 61 73 73 65 72 74 28 20 69 3e 3d 30  ..  assert( i>=0
1d090 20 26 26 20 69 3c 70 2d 3e 6e 43 75 72 73 6f 72   && i<p->nCursor
1d0a0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1d0b0 43 73 72 5b 69 5d 3b 0a 20 20 61 73 73 65 72 74  Csr[i];.  assert
1d0c0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
1d0d0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1d0e0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1d0f0 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 43 2d 3e   = 0;.  if( pC->
1d100 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73  pCursor ){.    s
1d110 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
1d120 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73  Cursor(pC->pCurs
1d130 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
1d140 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1d150 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Last P1 P2 * * *
1d160 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
1d170 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
1d180 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65   or Column or Ne
1d190 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  xt instruction f
1d1a0 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
1d1b0 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74  efer to the last
1d1c0 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
1d1d0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
1d1e0 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
1d1f0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1d200 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
1d210 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
1d220 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
1d230 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
1d240 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
1d250 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
1d260 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
1d270 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
1d280 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
1d290 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61  n..*/.case OP_La
1d2a0 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  st: {        /* 
1d2b0 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 69 20  jump */.  int i 
1d2c0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72  = pOp->p1;.  Cur
1d2d0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1d2e0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
1d2f0 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
1d300 28 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e  ( i>=0 && i<p->n
1d310 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1d320 20 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20   p->apCsr[i];.  
1d330 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1d340 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
1d350 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
1d360 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
1d370 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d380 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72 65  eLast(pCrsr, &re
1d390 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
1d3a0 77 20 3d 20 72 65 73 3b 0a 20 20 70 43 2d 3e 64  w = res;.  pC->d
1d3b0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1d3c0 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
1d3d0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1d3e0 4c 45 3b 0a 20 20 69 66 28 20 72 65 73 20 26 26  LE;.  if( res &&
1d3f0 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20   pOp->p2>0 ){.  
1d400 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1d410 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
1d420 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
1d430 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Sort P1 P2 * * *
1d440 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1d450 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20  de does exactly 
1d460 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61  the same thing a
1d470 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65  s OP_Rewind exce
1d480 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e  pt that.** it in
1d490 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f  crements an undo
1d4a0 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20  cumented global 
1d4b0 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f  variable used fo
1d4c0 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a  r testing..**.**
1d4d0 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f   Sorting is acco
1d4e0 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74  mplished by writ
1d4f0 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f  ing records into
1d500 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78   a sorting index
1d510 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64  ,.** then rewind
1d520 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61  ing that index a
1d530 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61  nd playing it ba
1d540 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e  ck from beginnin
1d550 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65  g to.** end.  We
1d560 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74   use the OP_Sort
1d570 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20   opcode instead 
1d580 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20  of OP_Rewind to 
1d590 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64  do the.** rewind
1d5a0 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20  ing so that the 
1d5b0 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
1d5c0 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e  will be incremen
1d5d0 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65  ted and.** regre
1d5e0 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20  ssion tests can 
1d5f0 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
1d600 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74  r or not the opt
1d610 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72  imizer is.** cor
1d620 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e  rectly optimizin
1d630 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a  g out sorts..*/.
1d640 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20  case OP_Sort: { 
1d650 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
1d660 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1d670 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
1d680 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73  ort_count++;.  s
1d690 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
1d6a0 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20  unt--;.#endif.  
1d6b0 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
1d6c0 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
1d6d0 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61  RT-1]++;.  /* Fa
1d6e0 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
1d6f0 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f  OP_Rewind */.}./
1d700 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64  * Opcode: Rewind
1d710 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1d720 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
1d730 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
1d740 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
1d750 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
1d760 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
1d770 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e   to the first en
1d780 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
1d790 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
1d7a0 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
1d7b0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
1d7c0 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
1d7d0 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
1d7e0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
1d7f0 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
1d800 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1d810 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
1d820 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
1d830 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
1d840 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
1d850 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e  */.case OP_Rewin
1d860 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
1d870 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 69 20 3d  ump */.  int i =
1d880 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72 73   pOp->p1;.  Curs
1d890 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1d8a0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
1d8b0 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
1d8c0 20 69 3e 3d 30 20 26 26 20 69 3c 70 2d 3e 6e 43   i>=0 && i<p->nC
1d8d0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1d8e0 70 2d 3e 61 70 43 73 72 5b 69 5d 3b 0a 20 20 61  p->apCsr[i];.  a
1d8f0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1d900 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20 70    if( (pCrsr = p
1d910 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29  C->pCursor)!=0 )
1d920 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1d930 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
1d940 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
1d950 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65 73  C->atFirst = res
1d960 3d 3d 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  ==0;.    pC->def
1d970 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1d980 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1d990 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1d9a0 4c 45 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  LE;.  }else{.   
1d9b0 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20   res = 1;.  }.  
1d9c0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 72 65  pC->nullRow = re
1d9d0 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  s;.  assert( pOp
1d9e0 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
1d9f0 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66  2<p->nOp );.  if
1da00 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
1da10 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1da20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1da30 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50  * Opcode: Next P
1da40 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1da50 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20   Advance cursor 
1da60 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
1da70 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74  ints to the next
1da80 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
1da90 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
1daa0 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
1dab0 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b  re are no more k
1dac0 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
1dad0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
1dae0 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
1daf0 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
1db00 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
1db10 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73  rsor advance was
1db20 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
1db30 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1db40 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1db50 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
1db60 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74   be for a real t
1db70 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
1db80 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
1db90 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a 2a  See also: Prev.*
1dba0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
1dbb0 76 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  v P1 P2 * * *.**
1dbc0 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73  .** Back up curs
1dbd0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
1dbe0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
1dbf0 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61  revious key/data
1dc00 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
1dc10 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
1dc20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
1dc30 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c  previous key/val
1dc40 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
1dc50 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
1dc60 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
1dc70 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
1dc80 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62   if the cursor b
1dc90 61 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73  ackup was succes
1dca0 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
1dcb0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1dcc0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
1dcd0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
1dce0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
1dcf0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
1dd00 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  e..*/.case OP_Pr
1dd10 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev:          /* 
1dd20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
1dd30 4e 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Next: {        /
1dd40 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43 75 72 73  * jump */.  Curs
1dd50 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
1dd60 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
1dd70 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f 46   res;..  CHECK_F
1dd80 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  OR_INTERRUPT;.  
1dd90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1dda0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1ddb0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1ddc0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1ddd0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d  >p1];.  if( pC==
1dde0 30 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20  0 ){.    break; 
1ddf0 20 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23   /* See ticket #
1de00 32 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70 43  2273 */.  }.  pC
1de10 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
1de20 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
1de30 73 72 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  sr );.  res = 1;
1de40 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
1de50 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
1de60 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e   );.  rc = pOp->
1de70 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74 20  opcode==OP_Next 
1de80 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  ? sqlite3BtreeNe
1de90 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 20  xt(pCrsr, &res) 
1dea0 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
1deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dec0 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
1ded0 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65 73  ious(pCrsr, &res
1dee0 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
1def0 20 3d 20 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61   = res;.  pC->ca
1df00 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1df10 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72  E_STALE;.  if( r
1df20 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  es==0 ){.    pc 
1df30 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1df40 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
1df50 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
1df60 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65  ->p5-1]++;.#ifde
1df70 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1df80 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
1df90 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1dfa0 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64  .  }.  pC->rowid
1dfb0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62  IsValid = 0;.  b
1dfc0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1dfd0 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
1dfe0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1dff0 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c   Register P2 hol
1e000 64 73 20 61 20 53 51 4c 20 69 6e 64 65 78 20 6b  ds a SQL index k
1e010 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
1e020 65 0a 2a 2a 20 4d 61 6b 65 49 64 78 52 65 63 20  e.** MakeIdxRec 
1e030 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
1e040 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
1e050 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
1e060 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e  to the index P1.
1e070 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65    Data for the e
1e080 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a  ntry is nil..**.
1e090 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20  ** P3 is a flag 
1e0a0 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20  that provides a 
1e0b0 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72  hint to the b-tr
1e0c0 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68  ee layer that th
1e0d0 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20  is.** insert is 
1e0e0 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20  likely to be an 
1e0f0 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  append..**.** Th
1e100 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
1e110 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e  nly works for in
1e120 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69  dices.  The equi
1e130 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
1e140 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73  on.** for tables
1e150 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a   is OP_Insert..*
1e160 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73  /.case OP_IdxIns
1e170 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ert: {        /*
1e180 20 69 6e 32 20 2a 2f 0a 20 20 69 6e 74 20 69 20   in2 */.  int i 
1e190 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43 75 72  = pOp->p1;.  Cur
1e1a0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
1e1b0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 61 73  sor *pCrsr;.  as
1e1c0 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1e1d0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1e1e0 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1e1f0 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  [i]!=0 );.  asse
1e200 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  rt( pIn2->flags 
1e210 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
1e220 69 66 28 20 28 70 43 72 73 72 20 3d 20 28 70 43  if( (pCrsr = (pC
1e230 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d   = p->apCsr[i])-
1e240 3e 70 43 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a  >pCursor)!=0 ){.
1e250 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1e260 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
1e270 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
1e280 62 28 70 49 6e 32 29 3b 0a 20 20 20 20 69 66 28  b(pIn2);.    if(
1e290 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1e2a0 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 4b 65 79  {.      int nKey
1e2b0 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20   = pIn2->n;.    
1e2c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b    const char *zK
1e2d0 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20  ey = pIn2->z;.  
1e2e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e2f0 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 72 73  BtreeInsert(pCrs
1e300 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22  r, zKey, nKey, "
1e310 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33  ", 0, 0, pOp->p3
1e320 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1e330 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1e340 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  eto==0 );.      
1e350 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1e360 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
1e370 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
1e380 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1e390 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20  IdxDelete P1 P2 
1e3a0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P3 * *.**.** The
1e3b0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72   content of P3 r
1e3c0 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
1e3d0 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32  g at register P2
1e3e0 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61   form.** an unpa
1e3f0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1e400 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f  This opcode remo
1e410 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66  ves that entry f
1e420 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65  rom the .** inde
1e430 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  x opened by curs
1e440 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  or P1..*/.case O
1e450 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20  P_IdxDelete: {. 
1e460 20 69 6e 74 20 69 20 3d 20 70 4f 70 2d 3e 70 31   int i = pOp->p1
1e470 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 3b 0a  ;.  Cursor *pC;.
1e480 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1e490 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  r;.  assert( pOp
1e4a0 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p3>0 );.  asse
1e4b0 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  rt( pOp->p2>0 &&
1e4c0 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33   pOp->p2+pOp->p3
1e4d0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 61  <=p->nMem );.  a
1e4e0 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
1e4f0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1e500 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
1e510 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28  r[i]!=0 );.  if(
1e520 20 28 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20   (pCrsr = (pC = 
1e530 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43  p->apCsr[i])->pC
1e540 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20  ursor)!=0 ){.   
1e550 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 55 6e   int res;.    Un
1e560 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1e570 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1e580 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1e590 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 70 4f     r.nField = pO
1e5a0 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61  p->p3;.    r.fla
1e5b0 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e 61 4d  gs = 0;.    r.aM
1e5c0 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
1e5d0 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 72 63 20 3d  p->p2];.    rc =
1e5e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1e5f0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1e600 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
1e610 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  s);.    if( rc==
1e620 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
1e630 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
1e640 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
1e650 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 20  lete(pCrsr);.   
1e660 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
1e670 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1e680 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  o==0 );.    pC->
1e690 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1e6a0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
1e6b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1e6c0 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50  code: IdxRowid P
1e6d0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1e6e0 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
1e6f0 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
1e700 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
1e710 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
1e720 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
1e730 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
1e740 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
1e750 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
1e760 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
1e770 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
1e780 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
1e790 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
1e7a0 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
1e7b0 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
1e7c0 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
1e7d0 2c 20 4d 61 6b 65 49 64 78 52 65 63 2e 0a 2a 2f  , MakeIdxRec..*/
1e7e0 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
1e7f0 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
1e800 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
1e810 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 20  ease */.  int i 
1e820 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 42 74 43  = pOp->p1;.  BtC
1e830 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1e840 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
1e850 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
1e860 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1e870 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
1e880 72 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28  r[i]!=0 );.  if(
1e890 20 28 70 43 72 73 72 20 3d 20 28 70 43 20 3d 20   (pCrsr = (pC = 
1e8a0 70 2d 3e 61 70 43 73 72 5b 69 5d 29 2d 3e 70 43  p->apCsr[i])->pC
1e8b0 75 72 73 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20  ursor)!=0 ){.   
1e8c0 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 20   i64 rowid;..   
1e8d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
1e8e0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
1e8f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
1e900 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
1e910 20 20 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c      if( !pC->nul
1e920 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 72 63  lRow ){.      rc
1e930 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
1e940 78 52 6f 77 69 64 28 70 43 72 73 72 2c 20 26 72  xRowid(pCrsr, &r
1e950 6f 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28  owid);.      if(
1e960 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1e970 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
1e980 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1e990 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
1e9a0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
1e9b0 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
1e9c0 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20        pOut->u.i 
1e9d0 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
1e9e0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1e9f0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
1ea00 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1ea10 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
1ea20 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
1ea30 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
1ea40 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
1ea50 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
1ea60 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49  t omits the ROWI
1ea70 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  D.  Compare this
1ea80 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
1ea90 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
1eaa0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
1eab0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
1eac0 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
1ead0 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
1eae0 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
1eaf0 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
1eb00 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
1eb10 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1eb20 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
1eb30 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1eb40 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
1eb50 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1eb60 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1eb70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
1eb80 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74   non-zero then t
1eb90 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20  he key value is 
1eba0 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20  increased by an 
1ebb0 65 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f  epsilon .** prio
1ebc0 72 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  r to the compari
1ebd0 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20  son.  This make 
1ebe0 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20  the opcode work 
1ebf0 6c 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70  like IdxGT excep
1ec00 74 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65  t.** that if the
1ec10 20 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74   key from regist
1ec20 65 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69  er P3 is a prefi
1ec30 78 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20  x of the key in 
1ec40 74 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74  the cursor,.** t
1ec50 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c  he result is fal
1ec60 73 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f  se whereas it wo
1ec70 75 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68  uld be true with
1ec80 20 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70   IdxGT..*/./* Op
1ec90 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50  code: IdxLT P1 P
1eca0 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
1ecb0 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
1ecc0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
1ecd0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
1ece0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1ecf0 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
1ed00 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
1ed10 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
1ed20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
1ed30 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
1ed40 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
1ed50 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
1ed60 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
1ed70 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
1ed80 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
1ed90 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
1eda0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
1edb0 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
1edc0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
1edd0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
1ede0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
1edf0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
1ee00 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
1ee10 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
1ee20 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
1ee30 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
1ee40 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20  on prior .** to 
1ee50 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
1ee60 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20   This makes the 
1ee70 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
1ee80 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20   IdxLE..*/.case 
1ee90 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
1eea0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1eeb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
1eec0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
1eed0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
1eee0 20 69 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 43   i= pOp->p1;.  C
1eef0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
1ef00 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
1ef10 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1ef20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1ef30 5b 69 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  [i]!=0 );.  if( 
1ef40 28 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 69  (pC = p->apCsr[i
1ef50 5d 29 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  ])->pCursor!=0 )
1ef60 7b 0a 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20  {.    int res;. 
1ef70 20 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72     UnpackedRecor
1ef80 64 20 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  d r;.    assert(
1ef90 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1efa0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73  eto==0 );.    as
1efb0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1efc0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29   || pOp->p5==1 )
1efd0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
1efe0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1eff0 54 33 32 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65  T32 );.    r.pKe
1f000 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1f010 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1f020 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1f030 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
1f040 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73  ){.      r.flags
1f050 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52   = UNPACKED_INCR
1f060 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f 49  KEY | UNPACKED_I
1f070 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20 20 20  GNORE_ROWID;.   
1f080 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e   }else{.      r.
1f090 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44  flags = UNPACKED
1f0a0 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20  _IGNORE_ROWID;. 
1f0b0 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20     }.    r.aMem 
1f0c0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
1f0d0 70 33 5d 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  p3];.    rc = sq
1f0e0 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
1f0f0 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26  ompare(pC, &r, &
1f100 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
1f110 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
1f120 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72 65 73  xLT ){.      res
1f130 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d 65 6c   = -res;.    }el
1f140 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
1f150 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1f160 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20 20 20  P_IdxGE );.     
1f170 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   res++;.    }.  
1f180 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20    if( res>0 ){. 
1f190 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
1f1a0 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a 20 20  2 - 1 ;.    }.  
1f1b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1f1c0 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
1f1d0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1f1e0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
1f1f0 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
1f200 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
1f210 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
1f220 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
1f230 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
1f240 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
1f250 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
1f260 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
1f270 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1f280 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
1f290 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
1f2a0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
1f2b0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
1f2c0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
1f2d0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
1f2e0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1f2f0 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
1f300 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
1f310 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
1f320 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
1f330 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
1f340 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
1f350 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
1f360 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
1f370 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1f380 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
1f390 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
1f3a0 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
1f3b0 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
1f3c0 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
1f3d0 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
1f3e0 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
1f3f0 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
1f400 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
1f410 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
1f420 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
1f430 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
1f440 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
1f450 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
1f460 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
1f470 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
1f480 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
1f490 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
1f4a0 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
1f4b0 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
1f4c0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1f4d0 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
1f4e0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1f4f0 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
1f500 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
1f510 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
1f520 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1f530 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1f540 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
1f550 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
1f560 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
1f570 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
1f580 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
1f590 20 69 6e 74 20 69 43 6e 74 3b 0a 23 69 66 6e 64   int iCnt;.#ifnd
1f5a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1f5b0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 56 64  IRTUALTABLE.  Vd
1f5c0 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 43 6e  be *pVdbe;.  iCn
1f5d0 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64  t = 0;.  for(pVd
1f5e0 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56  be=db->pVdbe; pV
1f5f0 64 62 65 3b 20 70 56 64 62 65 3d 70 56 64 62 65  dbe; pVdbe=pVdbe
1f600 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66  ->pNext){.    if
1f610 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d  ( pVdbe->magic==
1f620 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26  VDBE_MAGIC_RUN &
1f630 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d  & pVdbe->inVtabM
1f640 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65  ethod<2 && pVdbe
1f650 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20 20 20  ->pc>=0 ){.     
1f660 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20   iCnt++;.    }. 
1f670 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20   }.#else.  iCnt 
1f680 3d 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  = db->activeVdbe
1f690 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  Cnt;.#endif.  if
1f6a0 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20  ( iCnt>1 ){.    
1f6b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
1f6c0 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72  ED;.    p->error
1f6d0 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72  Action = OE_Abor
1f6e0 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
1f6f0 69 6e 74 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  int iDb = pOp->p
1f700 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  3;.    assert( i
1f710 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73  Cnt==1 );.    as
1f720 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
1f730 61 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21  ask & (1<<iDb))!
1f740 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =0 );.    rc = s
1f750 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
1f760 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
1f770 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
1f780 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 4d 65  &iMoved);.    Me
1f790 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
1f7a0 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20  t, MEM_Int);.   
1f7b0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f   pOut->u.i = iMo
1f7c0 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ved;.#ifndef SQL
1f7d0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
1f7e0 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  UUM.    if( rc==
1f7f0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f  SQLITE_OK && iMo
1f800 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ved!=0 ){.      
1f810 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
1f820 6f 76 65 64 28 26 64 62 2d 3e 61 44 62 5b 69 44  oved(&db->aDb[iD
1f830 62 5d 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d  b], iMoved, pOp-
1f840 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  >p1);.    }.#end
1f850 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
1f860 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
1f870 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a  ear P1 P2 P3.**.
1f880 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
1f890 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61  ntents of the da
1f8a0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
1f8b0 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
1f8c0 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20   page.** in the 
1f8d0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
1f8e0 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42   given by P1.  B
1f8f0 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72  ut, unlike Destr
1f900 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65  oy, do not.** re
1f910 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f  move the table o
1f920 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65  r index from the
1f930 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
1f940 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
1f950 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69  being clear is i
1f960 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
1f970 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d  ase file if P2==
1f980 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20  0.  If.** P2==1 
1f990 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
1f9a0 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
1f9b0 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
1f9c0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
1f9d0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
1f9e0 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
1f9f0 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
1fa00 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
1fa10 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
1fa20 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  3 value is non-z
1fa30 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61  ero, then the ta
1fa40 62 6c 65 20 72 65 66 65 72 65 64 20 74 6f 20 6d  ble refered to m
1fa50 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74  ust be an.** int
1fa60 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51  key table (an SQ
1fa70 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20  L table, not an 
1fa80 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20  index). In this 
1fa90 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61  case the row cha
1faa0 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73  nge .** count is
1fab0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
1fac0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
1fad0 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
1fae0 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a  being cleared. .
1faf0 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61  ** If P3 is grea
1fb00 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74  ter than zero, t
1fb10 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74  hen the value st
1fb20 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1fb30 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69   P3 is.** also i
1fb40 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
1fb50 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
1fb60 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
1fb70 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a  ing cleared..**.
1fb80 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73  ** See also: Des
1fb90 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  troy.*/.case OP_
1fba0 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e  Clear: {.  int n
1fbb0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73  Change = 0;.  as
1fbc0 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
1fbd0 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e 70  ask & (1<<pOp->p
1fbe0 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  2))!=0 );.  rc =
1fbf0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
1fc00 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
1fc10 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
1fc20 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
1fc30 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
1fc40 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
1fc50 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
1fc60 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
1fc70 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
1fc80 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
1fc90 20 20 20 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e     p->aMem[pOp->
1fca0 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
1fcb0 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
1fcc0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1fcd0 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65  ode: CreateTable
1fce0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1fcf0 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
1fd00 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d  w table in the m
1fd10 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1fd20 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
1fd30 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
1fd40 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
1fd50 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
1fd60 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
1fd70 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
1fd80 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
1fd90 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
1fda0 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
1fdb0 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
1fdc0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65  .**.** The diffe
1fdd0 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
1fde0 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64  table and an ind
1fdf0 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20 74  ex is this:  A t
1fe00 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76  able must.** hav
1fe10 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67  e a 4-byte integ
1fe20 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68  er key and can h
1fe30 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64 61  ave arbitrary da
1fe40 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a  ta.  An index.**
1fe50 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61 72   has an arbitrar
1fe60 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74  y key but no dat
1fe70 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  a..**.** See als
1fe80 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a  o: CreateIndex.*
1fe90 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  /./* Opcode: Cre
1fea0 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a  ateIndex P1 P2 *
1feb0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63   * *.**.** Alloc
1fec0 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20  ate a new index 
1fed0 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
1fee0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
1fef0 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
1ff00 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
1ff10 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
1ff20 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
1ff30 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
1ff40 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
1ff50 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
1ff60 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
1ff70 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
1ff80 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
1ff90 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
1ffa0 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61  n on OP_CreateTa
1ffb0 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ble for addition
1ffc0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
1ffd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
1ffe0 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20  eIndex:         
1fff0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
20000 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50  lease */.case OP
20010 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20  _CreateTable: { 
20020 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
20030 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
20040 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74   int pgno;.  int
20050 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44   flags;.  Db *pD
20060 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
20070 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
20080 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
20090 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
200a0 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d  eMask & (1<<pOp-
200b0 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44  >p1))!=0 );.  pD
200c0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
200d0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
200e0 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
200f0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
20100 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
20110 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
20120 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
20130 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
20140 20 42 54 52 45 45 5f 4c 45 41 46 44 41 54 41 7c   BTREE_LEAFDATA|
20150 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20  BTREE_INTKEY;.  
20160 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73  }else{.    flags
20170 20 3d 20 42 54 52 45 45 5f 5a 45 52 4f 44 41 54   = BTREE_ZERODAT
20180 41 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  A;.  }.  rc = sq
20190 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
201a0 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
201b0 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
201c0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
201d0 4f 4b 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  OK ){.    pOut->
201e0 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 20 20  u.i = pgno;.    
201f0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
20200 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
20210 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
20220 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53  * Opcode: ParseS
20230 63 68 65 6d 61 20 50 31 20 50 32 20 2a 20 50 34  chema P1 P2 * P4
20240 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e   *.**.** Read an
20250 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72  d parse all entr
20260 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ies from the SQL
20270 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
20280 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a   of database P1.
20290 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68  ** that match th
202a0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50  e WHERE clause P
202b0 34 2e 20 20 50 32 20 69 73 20 74 68 65 20 22 66  4.  P2 is the "f
202c0 6f 72 63 65 22 20 66 6c 61 67 2e 20 20 20 41 6c  orce" flag.   Al
202d0 77 61 79 73 20 64 6f 0a 2a 2a 20 74 68 65 20 70  ways do.** the p
202e0 61 72 73 69 6e 67 20 69 66 20 50 32 20 69 73 20  arsing if P2 is 
202f0 74 72 75 65 2e 20 20 49 66 20 50 32 20 69 73 20  true.  If P2 is 
20300 66 61 6c 73 65 2c 20 74 68 65 6e 20 74 68 69 73  false, then this
20310 20 72 6f 75 74 69 6e 65 20 69 73 20 61 0a 2a 2a   routine is a.**
20320 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 73 63   no-op if the sc
20330 68 65 6d 61 20 69 73 20 6e 6f 74 20 63 75 72 72  hema is not curr
20340 65 6e 74 6c 79 20 6c 6f 61 64 65 64 2e 20 20 49  ently loaded.  I
20350 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
20360 66 20 50 32 0a 2a 2a 20 69 73 20 66 61 6c 73 65  f P2.** is false
20370 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53  , the SQLITE_MAS
20380 54 45 52 20 74 61 62 6c 65 20 69 73 20 6f 6e 6c  TER table is onl
20390 79 20 70 61 72 73 65 64 20 69 66 20 74 68 65 20  y parsed if the 
203a0 72 65 73 74 20 6f 66 20 74 68 65 0a 2a 2a 20 73  rest of the.** s
203b0 63 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64 79  chema is already
203c0 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20 74 68 65   loaded into the
203d0 20 73 79 6d 62 6f 6c 20 74 61 62 6c 65 2e 0a 2a   symbol table..*
203e0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
203f0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72   invokes the par
20400 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  ser to create a 
20410 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68  new virtual mach
20420 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e  ine,.** then run
20430 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61  s the new virtua
20440 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69  l machine.  It i
20450 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72  s thus a re-entr
20460 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  ant opcode..*/.c
20470 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65  ase OP_ParseSche
20480 6d 61 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 53  ma: {.  char *zS
20490 71 6c 3b 0a 20 20 69 6e 74 20 69 44 62 20 3d 20  ql;.  int iDb = 
204a0 70 4f 70 2d 3e 70 31 3b 0a 20 20 63 6f 6e 73 74  pOp->p1;.  const
204b0 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a   char *zMaster;.
204c0 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44    InitData initD
204d0 61 74 61 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ata;..  assert( 
204e0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
204f0 2d 3e 6e 44 62 20 29 3b 0a 20 20 69 66 28 20 21  ->nDb );.  if( !
20500 70 4f 70 2d 3e 70 32 20 26 26 20 21 44 62 48 61  pOp->p2 && !DbHa
20510 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44  sProperty(db, iD
20520 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  b, DB_SchemaLoad
20530 65 64 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  ed) ){.    break
20540 3b 0a 20 20 7d 0a 20 20 7a 4d 61 73 74 65 72 20  ;.  }.  zMaster 
20550 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69  = SCHEMA_TABLE(i
20560 44 62 29 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e  Db);.  initData.
20570 64 62 20 3d 20 64 62 3b 0a 20 20 69 6e 69 74 44  db = db;.  initD
20580 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ata.iDb = pOp->p
20590 31 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 70 7a  1;.  initData.pz
205a0 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72  ErrMsg = &p->zEr
205b0 72 4d 73 67 3b 0a 20 20 7a 53 71 6c 20 3d 20 73  rMsg;.  zSql = s
205c0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
205d0 2c 0a 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e  ,.     "SELECT n
205e0 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
205f0 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
20600 57 48 45 52 45 20 25 73 22 2c 0a 20 20 20 20 20  WHERE %s",.     
20610 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61  db->aDb[iDb].zNa
20620 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70  me, zMaster, pOp
20630 2d 3e 70 34 2e 7a 29 3b 0a 20 20 69 66 28 20 7a  ->p4.z);.  if( z
20640 53 71 6c 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Sql==0 ) goto no
20650 5f 6d 65 6d 3b 0a 20 20 28 76 6f 69 64 29 73 71  _mem;.  (void)sq
20660 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
20670 62 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62  b);.  assert( db
20680 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29  ->init.busy==0 )
20690 3b 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  ;.  db->init.bus
206a0 79 20 3d 20 31 3b 0a 20 20 69 6e 69 74 44 61 74  y = 1;.  initDat
206b0 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
206c0 3b 0a 20 20 61 73 73 65 72 74 28 20 21 64 62 2d  ;.  assert( !db-
206d0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
206e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
206f0 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73  exec(db, zSql, s
20700 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
20710 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30  ck, &initData, 0
20720 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
20730 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e  ITE_OK ) rc = in
20740 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 73 71 6c  itData.rc;.  sql
20750 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
20760 53 71 6c 29 3b 0a 20 20 64 62 2d 3e 69 6e 69 74  Sql);.  db->init
20770 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 28 76 6f  .busy = 0;.  (vo
20780 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74 79  id)sqlite3Safety
20790 4f 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63  On(db);.  if( rc
207a0 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
207b0 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
207c0 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20  m;.  }.  break; 
207d0 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   .}..#if !define
207e0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
207f0 41 4c 59 5a 45 29 20 26 26 20 21 64 65 66 69 6e  ALYZE) && !defin
20800 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
20810 41 52 53 45 52 29 0a 2f 2a 20 4f 70 63 6f 64 65  ARSER)./* Opcode
20820 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50  : LoadAnalysis P
20830 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
20840 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f  Read the sqlite_
20850 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20  stat1 table for 
20860 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
20870 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  load the content
20880 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
20890 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72  e into the inter
208a0 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74  nal index hash t
208b0 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c  able.  This will
208c0 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e   cause.** the an
208d0 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65  alysis to be use
208e0 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67  d when preparing
208f0 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
20900 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65  queries..*/.case
20910 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73   OP_LoadAnalysis
20920 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 20 3d 20  : {.  int iDb = 
20930 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
20940 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
20950 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63  <db->nDb );.  rc
20960 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73   = sqlite3Analys
20970 69 73 4c 6f 61 64 28 64 62 2c 20 69 44 62 29 3b  isLoad(db, iDb);
20980 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
20990 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
209a0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
209b0 4c 59 5a 45 29 20 26 26 20 21 64 65 66 69 6e 65  LYZE) && !define
209c0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
209d0 52 53 45 52 29 20 20 2a 2f 0a 0a 2f 2a 20 4f 70  RSER)  */../* Op
209e0 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20  code: DropTable 
209f0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
20a00 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
20a10 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
20a20 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
20a30 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
20a40 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ** the table nam
20a50 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
20a60 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
20a70 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61  alled after a ta
20a80 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ble.** is droppe
20a90 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
20aa0 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
20ab0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
20ac0 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
20ad0 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
20ae0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
20af0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
20b00 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74  Table: {.  sqlit
20b10 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
20b20 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e  eTable(db, pOp->
20b30 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
20b40 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
20b50 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78  pcode: DropIndex
20b60 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
20b70 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
20b80 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
20b90 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
20ba0 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
20bb0 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61  .** the index na
20bc0 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
20bd0 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
20be0 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20  called after an 
20bf0 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70  index.** is drop
20c00 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ped in order to 
20c10 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
20c20 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
20c30 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
20c40 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
20c50 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
20c60 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
20c70 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
20c80 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
20c90 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
20ca0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
20cb0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
20cc0 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
20cd0 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
20ce0 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
20cf0 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
20d00 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
20d10 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
20d20 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
20d30 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
20d40 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
20d50 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
20d60 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
20d70 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72  is dropped in or
20d80 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
20d90 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
20da0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
20db0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
20dc0 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
20dd0 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
20de0 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72  e OP_DropTrigger
20df0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
20e00 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
20e10 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ger(db, pOp->p1,
20e20 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
20e30 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
20e40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
20e50 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a  TEGRITY_CHECK./*
20e60 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69   Opcode: Integri
20e70 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20  tyCk P1 P2 P3 * 
20e80 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61  P5.**.** Do an a
20e90 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63  nalysis of the c
20ea0 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61  urrently open da
20eb0 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69  tabase.  Store i
20ec0 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  n.** register P1
20ed0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20   the text of an 
20ee0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65  error message de
20ef0 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f  scribing any pro
20f00 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20  blems..** If no 
20f10 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75  problems are fou
20f20 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  nd, store a NULL
20f30 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
20f40 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
20f50 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
20f60 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
20f70 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72  er of allowed er
20f80 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74  rors..** At most
20f90 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20   reg(P3) errors 
20fa0 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64  will be reported
20fb0 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
20fc0 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69  rds, the analysi
20fd0 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20  s stops as soon 
20fe0 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72  as reg(P1) error
20ff0 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20  s are .** seen. 
21000 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61   Reg(P1) is upda
21010 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d  ted with the num
21020 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
21030 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  maining..**.** T
21040 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
21050 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  bers of all tabl
21060 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
21070 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a  se are integer.*
21080 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28  * stored in reg(
21090 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20  P1), reg(P1+1), 
210a0 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20  reg(P1+2), .... 
210b0 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61   There are P2 ta
210c0 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a  bles.** total..*
210d0 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
210e0 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63  t zero, the chec
210f0 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65  k is done on the
21100 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
21110 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74  ase.** file, not
21120 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
21130 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
21140 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
21150 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
21160 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68  the integrity_ch
21170 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63  eck pragma..*/.c
21180 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79  ase OP_Integrity
21190 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f  Ck: {.  int nRoo
211a0 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t;      /* Numbe
211b0 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63  r of tables to c
211c0 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f  heck.  (Number o
211d0 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a  f root pages.) *
211e0 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20  /.  int *aRoot; 
211f0 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
21200 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73  rootpage numbers
21210 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62   for tables to b
21220 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69  e checked */.  i
21230 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f  nt j;          /
21240 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
21250 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
21260 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21270 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64   errors reported
21280 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
21290 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
212a0 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72   the error repor
212b0 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72  t */.  Mem *pnEr
212c0 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  r;     /* Regist
212d0 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b  er keeping track
212e0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
212f0 6e 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f  ning */.  .  nRo
21300 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ot = pOp->p2;.  
21310 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20  assert( nRoot>0 
21320 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c  );.  aRoot = sql
21330 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
21340 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a  db, sizeof(int)*
21350 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69  (nRoot+1) );.  i
21360 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f  f( aRoot==0 ) go
21370 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73  to no_mem;.  ass
21380 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
21390 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
213a0 65 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  em );.  pnErr = 
213b0 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  &p->aMem[pOp->p3
213c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  ];.  assert( (pn
213d0 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Err->flags & MEM
213e0 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Int)!=0 );.  as
213f0 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
21400 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
21410 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
21420 20 20 70 49 6e 31 20 3d 20 26 70 2d 3e 61 4d 65    pIn1 = &p->aMe
21430 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
21440 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20  r(j=0; j<nRoot; 
21450 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b  j++){.    aRoot[
21460 6a 5d 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  j] = sqlite3Vdbe
21470 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a  IntValue(&pIn1[j
21480 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b  ]);.  }.  aRoot[
21490 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  j] = 0;.  assert
214a0 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44  ( pOp->p5<db->nD
214b0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
214c0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
214d0 31 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20  1<<pOp->p5))!=0 
214e0 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
214f0 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
21500 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
21510 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c  >p5].pBt, aRoot,
21520 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20   nRoot,.        
21530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21540 20 20 20 20 20 20 20 20 20 70 6e 45 72 72 2d 3e           pnErr->
21550 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73  u.i, &nErr);.  s
21560 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
21570 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72   aRoot);.  pnErr
21580 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20  ->u.i -= nErr;. 
21590 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
215a0 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
215b0 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
215c0 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
215d0 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
215e0 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
215f0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
21600 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
21610 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20  MemSetStr(pIn1, 
21620 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
21630 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  F8, sqlite3_free
21640 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
21650 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
21660 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
21670 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
21680 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
21690 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
216a0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
216b0 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
216c0 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  K */../* Opcode:
216d0 20 46 69 66 6f 57 72 69 74 65 20 50 31 20 2a 20   FifoWrite P1 * 
216e0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
216f0 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 66 72  e the integer fr
21700 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 20 69  om register P1 i
21710 6e 74 6f 20 74 68 65 20 46 69 66 6f 2e 0a 2a 2f  nto the Fifo..*/
21720 0a 63 61 73 65 20 4f 50 5f 46 69 66 6f 57 72 69  .case OP_FifoWri
21730 74 65 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  te: {        /* 
21740 69 6e 31 20 2a 2f 0a 20 20 70 2d 3e 73 46 69 66  in1 */.  p->sFif
21750 6f 2e 64 62 20 3d 20 64 62 3b 0a 20 20 69 66 28  o.db = db;.  if(
21760 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 66 6f   sqlite3VdbeFifo
21770 50 75 73 68 28 26 70 2d 3e 73 46 69 66 6f 2c 20  Push(&p->sFifo, 
21780 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
21790 6c 75 65 28 70 49 6e 31 29 29 3d 3d 53 51 4c 49  lue(pIn1))==SQLI
217a0 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
217b0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
217c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
217d0 4f 70 63 6f 64 65 3a 20 46 69 66 6f 52 65 61 64  Opcode: FifoRead
217e0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
217f0 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65  ** Attempt to re
21800 61 64 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  ad a single inte
21810 67 65 72 20 66 72 6f 6d 20 74 68 65 20 46 69 66  ger from the Fif
21820 6f 2e 20 20 53 74 6f 72 65 20 74 68 61 74 0a 2a  o.  Store that.*
21830 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  * integer in reg
21840 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 0a 2a 2a  ister P1..** .**
21850 20 49 66 20 74 68 65 20 46 69 66 6f 20 69 73 20   If the Fifo is 
21860 65 6d 70 74 79 20 6a 75 6d 70 20 74 6f 20 50 32  empty jump to P2
21870 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 69 66  ..*/.case OP_Fif
21880 6f 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 20  oRead: {        
21890 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 43 48   /* jump */.  CH
218a0 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
218b0 54 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  T;.  assert( pOp
218c0 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
218d0 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  1<=p->nMem );.  
218e0 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
218f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 4d 65 6d 53  pOp->p1];.  MemS
21900 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
21910 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 69 66 28   MEM_Int);.  if(
21920 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 66 6f   sqlite3VdbeFifo
21930 50 6f 70 28 26 70 2d 3e 73 46 69 66 6f 2c 20 26  Pop(&p->sFifo, &
21940 70 4f 75 74 2d 3e 75 2e 69 29 3d 3d 53 51 4c 49  pOut->u.i)==SQLI
21950 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 70  TE_DONE ){.    p
21960 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
21970 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
21980 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21990 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 2f 2a 20  OMIT_TRIGGER./* 
219a0 4f 70 63 6f 64 65 3a 20 43 6f 6e 74 65 78 74 50  Opcode: ContextP
219b0 75 73 68 20 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a  ush * * * .**.**
219c0 20 53 61 76 65 20 74 68 65 20 63 75 72 72 65 6e   Save the curren
219d0 74 20 56 64 62 65 20 63 6f 6e 74 65 78 74 20 73  t Vdbe context s
219e0 75 63 68 20 74 68 61 74 20 69 74 20 63 61 6e 20  uch that it can 
219f0 62 65 20 72 65 73 74 6f 72 65 64 20 62 79 20 61  be restored by a
21a00 20 43 6f 6e 74 65 78 74 50 6f 70 0a 2a 2a 20 6f   ContextPop.** o
21a10 70 63 6f 64 65 2e 20 54 68 65 20 63 6f 6e 74 65  pcode. The conte
21a20 78 74 20 73 74 6f 72 65 73 20 74 68 65 20 6c 61  xt stores the la
21a30 73 74 20 69 6e 73 65 72 74 20 72 6f 77 20 69 64  st insert row id
21a40 2c 20 74 68 65 20 6c 61 73 74 20 73 74 61 74 65  , the last state
21a50 6d 65 6e 74 20 63 68 61 6e 67 65 0a 2a 2a 20 63  ment change.** c
21a60 6f 75 6e 74 2c 20 61 6e 64 20 74 68 65 20 63 75  ount, and the cu
21a70 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20  rrent statement 
21a80 63 68 61 6e 67 65 20 63 6f 75 6e 74 2e 0a 2a 2f  change count..*/
21a90 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 74 65 78 74  .case OP_Context
21aa0 50 75 73 68 3a 20 7b 0a 20 20 69 6e 74 20 69 20  Push: {.  int i 
21ab0 3d 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63  = p->contextStac
21ac0 6b 54 6f 70 2b 2b 3b 0a 20 20 43 6f 6e 74 65 78  kTop++;.  Contex
21ad0 74 20 2a 70 43 6f 6e 74 65 78 74 3b 0a 0a 20 20  t *pContext;..  
21ae0 61 73 73 65 72 74 28 20 69 3e 3d 30 20 29 3b 0a  assert( i>=0 );.
21af0 20 20 2f 2a 20 46 49 58 20 4d 45 3a 20 54 68 69    /* FIX ME: Thi
21b00 73 20 73 68 6f 75 6c 64 20 62 65 20 61 6c 6c 6f  s should be allo
21b10 63 61 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  cated as part of
21b20 20 74 68 65 20 76 64 62 65 20 61 74 20 63 6f 6d   the vdbe at com
21b30 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 20 20 69  pile-time */.  i
21b40 66 28 20 69 3e 3d 70 2d 3e 63 6f 6e 74 65 78 74  f( i>=p->context
21b50 53 74 61 63 6b 44 65 70 74 68 20 29 7b 0a 20 20  StackDepth ){.  
21b60 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63    p->contextStac
21b70 6b 44 65 70 74 68 20 3d 20 69 2b 31 3b 0a 20 20  kDepth = i+1;.  
21b80 20 20 70 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63    p->contextStac
21b90 6b 20 3d 20 73 71 6c 69 74 65 33 44 62 52 65 61  k = sqlite3DbRea
21ba0 6c 6c 6f 63 4f 72 46 72 65 65 28 64 62 2c 20 70  llocOrFree(db, p
21bb0 2d 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 2c 0a  ->contextStack,.
21bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21be0 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66            sizeof
21bf0 28 43 6f 6e 74 65 78 74 29 2a 28 69 2b 31 29 29  (Context)*(i+1))
21c00 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 63 6f 6e  ;.    if( p->con
21c10 74 65 78 74 53 74 61 63 6b 3d 3d 30 20 29 20 67  textStack==0 ) g
21c20 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
21c30 20 20 70 43 6f 6e 74 65 78 74 20 3d 20 26 70 2d    pContext = &p-
21c40 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 5b 69 5d  >contextStack[i]
21c50 3b 0a 20 20 70 43 6f 6e 74 65 78 74 2d 3e 6c 61  ;.  pContext->la
21c60 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
21c70 73 74 52 6f 77 69 64 3b 0a 20 20 70 43 6f 6e 74  stRowid;.  pCont
21c80 65 78 74 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70  ext->nChange = p
21c90 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 43 6f  ->nChange;.  pCo
21ca0 6e 74 65 78 74 2d 3e 73 46 69 66 6f 20 3d 20 70  ntext->sFifo = p
21cb0 2d 3e 73 46 69 66 6f 3b 0a 20 20 73 71 6c 69 74  ->sFifo;.  sqlit
21cc0 65 33 56 64 62 65 46 69 66 6f 49 6e 69 74 28 26  e3VdbeFifoInit(&
21cd0 70 2d 3e 73 46 69 66 6f 2c 20 64 62 29 3b 0a 20  p->sFifo, db);. 
21ce0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
21cf0 63 6f 64 65 3a 20 43 6f 6e 74 65 78 74 50 6f 70  code: ContextPop
21d00 20 2a 20 2a 20 2a 20 0a 2a 2a 0a 2a 2a 20 52 65   * * * .**.** Re
21d10 73 74 6f 72 65 20 74 68 65 20 56 64 62 65 20 63  store the Vdbe c
21d20 6f 6e 74 65 78 74 20 74 6f 20 74 68 65 20 73 74  ontext to the st
21d30 61 74 65 20 69 74 20 77 61 73 20 69 6e 20 77 68  ate it was in wh
21d40 65 6e 20 63 6f 6e 74 65 78 74 50 75 73 68 20 77  en contextPush w
21d50 61 73 20 6c 61 73 74 0a 2a 2a 20 65 78 65 63 75  as last.** execu
21d60 74 65 64 2e 20 54 68 65 20 63 6f 6e 74 65 78 74  ted. The context
21d70 20 73 74 6f 72 65 73 20 74 68 65 20 6c 61 73 74   stores the last
21d80 20 69 6e 73 65 72 74 20 72 6f 77 20 69 64 2c 20   insert row id, 
21d90 74 68 65 20 6c 61 73 74 20 73 74 61 74 65 6d 65  the last stateme
21da0 6e 74 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75  nt.** change cou
21db0 6e 74 2c 20 61 6e 64 20 74 68 65 20 63 75 72 72  nt, and the curr
21dc0 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20 63 68  ent statement ch
21dd0 61 6e 67 65 20 63 6f 75 6e 74 2e 0a 2a 2f 0a 63  ange count..*/.c
21de0 61 73 65 20 4f 50 5f 43 6f 6e 74 65 78 74 50 6f  ase OP_ContextPo
21df0 70 3a 20 7b 0a 20 20 43 6f 6e 74 65 78 74 20 2a  p: {.  Context *
21e00 70 43 6f 6e 74 65 78 74 20 3d 20 26 70 2d 3e 63  pContext = &p->c
21e10 6f 6e 74 65 78 74 53 74 61 63 6b 5b 2d 2d 70 2d  ontextStack[--p-
21e20 3e 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f 70  >contextStackTop
21e30 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ];.  assert( p->
21e40 63 6f 6e 74 65 78 74 53 74 61 63 6b 54 6f 70 3e  contextStackTop>
21e50 3d 30 20 29 3b 0a 20 20 64 62 2d 3e 6c 61 73 74  =0 );.  db->last
21e60 52 6f 77 69 64 20 3d 20 70 43 6f 6e 74 65 78 74  Rowid = pContext
21e70 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  ->lastRowid;.  p
21e80 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 43 6f 6e  ->nChange = pCon
21e90 74 65 78 74 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20  text->nChange;. 
21ea0 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 66 6f   sqlite3VdbeFifo
21eb0 43 6c 65 61 72 28 26 70 2d 3e 73 46 69 66 6f 29  Clear(&p->sFifo)
21ec0 3b 0a 20 20 70 2d 3e 73 46 69 66 6f 20 3d 20 70  ;.  p->sFifo = p
21ed0 43 6f 6e 74 65 78 74 2d 3e 73 46 69 66 6f 3b 0a  Context->sFifo;.
21ee0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
21ef0 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
21f00 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
21f10 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
21f20 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
21f30 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  REMENT./* Opcode
21f40 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a  : MemMax P1 P2 *
21f50 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74   * *.**.** Set t
21f60 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
21f70 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d  ster P1 to the m
21f80 61 78 69 6d 75 6d 20 6f 66 20 69 74 73 20 63 75  aximum of its cu
21f90 72 72 65 6e 74 20 76 61 6c 75 65 0a 2a 2a 20 61  rrent value.** a
21fa0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
21fb0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
21fc0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
21fd0 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
21fe0 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
21ff0 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
22000 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
22010 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
22020 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
22030 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a     /* in1, in2 *
22040 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  /.  sqlite3VdbeM
22050 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
22060 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
22070 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
22080 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In2);.  if( pIn1
22090 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29  ->u.i<pIn2->u.i)
220a0 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
220b0 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d  = pIn2->u.i;.  }
220c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
220d0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
220e0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  T_AUTOINCREMENT 
220f0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  */../* Opcode: I
22100 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a  fPos P1 P2 * * *
22110 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
22120 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
22130 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
22140 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  er, jump to P2..
22150 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
22160 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
22170 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
22180 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
22190 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
221a0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
221b0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
221c0 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
221d0 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
221e0 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
221f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
22200 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  n1 */.  assert( 
22210 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
22220 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e  Int );.  if( pIn
22230 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20  1->u.i>0 ){.    
22240 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
22250 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
22260 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
22270 4e 65 67 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Neg P1 P2 * * *.
22280 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  **.** If the val
22290 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
222a0 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a  1 is less than z
222b0 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ero, jump to P2.
222c0 20 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c   .**.** It is il
222d0 6c 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69  legal to use thi
222e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
222f0 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
22300 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e   does.** not con
22310 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
22320 20 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66    An assertion f
22330 61 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74  ault will result
22340 20 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a   if you try..*/.
22350 63 61 73 65 20 4f 50 5f 49 66 4e 65 67 3a 20 7b  case OP_IfNeg: {
22360 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
22370 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
22380 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
22390 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70  M_Int );.  if( p
223a0 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20  In1->u.i<0 ){.  
223b0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
223c0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
223d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
223e0 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
223f0 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20   *.**.** If the 
22400 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
22410 72 20 50 31 20 69 73 20 65 78 61 63 74 6c 79 20  r P1 is exactly 
22420 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  0, jump to P2. .
22430 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
22440 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
22450 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
22460 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
22470 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
22480 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
22490 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
224a0 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
224b0 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
224c0 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20  se OP_IfZero: { 
224d0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
224e0 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
224f0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
22500 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
22510 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20  n1->u.i==0 ){.  
22520 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
22530 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
22540 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22550 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
22560 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
22570 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
22580 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
22590 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
225a0 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
225b0 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
225c0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
225d0 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
225e0 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
225f0 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
22600 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73  tion.  Use regis
22610 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65  ter.** P3 as the
22620 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
22630 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
22640 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
22650 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
22660 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
22670 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ssors..*/.case O
22680 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
22690 6e 74 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  nt n = pOp->p5;.
226a0 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
226b0 70 4d 65 6d 2c 20 2a 70 52 65 63 3b 0a 20 20 73  pMem, *pRec;.  s
226c0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
226d0 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
226e0 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20  lue **apVal;..  
226f0 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a  assert( n>=0 );.
22700 20 20 70 52 65 63 20 3d 20 26 70 2d 3e 61 4d 65    pRec = &p->aMe
22710 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70  m[pOp->p2];.  ap
22720 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Val = p->apArg;.
22730 20 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20    assert( apVal 
22740 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72  || n==0 );.  for
22750 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20  (i=0; i<n; i++, 
22760 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 70 56  pRec++){.    apV
22770 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20  al[i] = pRec;.  
22780 20 20 73 74 6f 72 65 54 79 70 65 49 6e 66 6f 28    storeTypeInfo(
22790 70 52 65 63 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pRec, encoding);
227a0 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63  .  }.  ctx.pFunc
227b0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
227c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
227d0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
227e0 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 63  <=p->nMem );.  c
227f0 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d  tx.pMem = pMem =
22800 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
22810 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b  3];.  pMem->n++;
22820 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d  .  ctx.s.flags =
22830 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78   MEM_Null;.  ctx
22840 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e  .s.z = 0;.  ctx.
22850 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  s.zMalloc = 0;. 
22860 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b   ctx.s.xDel = 0;
22870 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62  .  ctx.s.db = db
22880 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20  ;.  ctx.isError 
22890 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c  = 0;.  ctx.pColl
228a0 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e   = 0;.  if( ctx.
228b0 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53  pFunc->flags & S
228c0 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
228d0 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65 72  OLL ){.    asser
228e0 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b  t( pOp>p->aOp );
228f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
22900 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f  [-1].p4type==P4_
22910 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61  COLLSEQ );.    a
22920 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
22930 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
22940 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f  q );.    ctx.pCo
22950 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  ll = pOp[-1].p4.
22960 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74  pColl;.  }.  (ct
22970 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28  x.pFunc->xStep)(
22980 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b  &ctx, n, apVal);
22990 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72  .  if( ctx.isErr
229a0 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  or ){.    sqlite
229b0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
229c0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
229d0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
229e0 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20  text(&ctx.s));. 
229f0 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
22a00 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ror;.  }.  sqlit
22a10 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
22a20 28 26 63 74 78 2e 73 29 3b 0a 20 20 62 72 65 61  (&ctx.s);.  brea
22a30 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22a40 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20   AggFinal P1 P2 
22a50 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65  * P4 *.**.** Exe
22a60 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
22a70 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
22a80 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
22a90 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
22aa0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
22ab0 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
22ac0 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
22ad0 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
22ae0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
22af0 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
22b00 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
22b10 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
22b20 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
22b30 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
22b40 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
22b50 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
22b60 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
22b70 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
22b80 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
22b90 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
22ba0 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
22bb0 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
22bc0 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
22bd0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
22be0 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
22bf0 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
22c00 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
22c10 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
22c20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
22c30 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
22c40 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
22c50 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
22c60 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
22c70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22c80 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
22c90 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d  =p->nMem );.  pM
22ca0 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f  em = &p->aMem[pO
22cb0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
22cc0 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
22cd0 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f   ~(MEM_Null|MEM_
22ce0 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63  Agg))==0 );.  rc
22cf0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
22d00 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
22d10 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
22d20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
22d30 5f 45 52 52 4f 52 20 29 7b 0a 20 20 20 20 73 71  _ERROR ){.    sq
22d40 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
22d50 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
22d60 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
22d70 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b  lue_text(pMem));
22d80 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
22d90 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
22da0 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29  (pMem, encoding)
22db0 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
22dc0 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20  LOBSIZE(pMem);. 
22dd0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
22de0 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20  MemTooBig(pMem) 
22df0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
22e00 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
22e10 3b 0a 7d 0a 0a 0a 23 69 66 20 21 64 65 66 69 6e  ;.}...#if !defin
22e20 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
22e30 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e  ACUUM) && !defin
22e40 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
22e50 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65  TTACH)./* Opcode
22e60 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a  : Vacuum * * * *
22e70 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20   *.**.** Vacuum 
22e80 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
22e90 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ase.  This opcod
22ea0 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68  e will cause oth
22eb0 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61  er virtual.** ma
22ec0 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65  chines to be cre
22ed0 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49  ated and run.  I
22ee0 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c  t may not be cal
22ef0 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a  led from within.
22f00 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** a transaction
22f10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63  ..*/.case OP_Vac
22f20 75 75 6d 3a 20 7b 0a 20 20 69 66 28 20 73 71 6c  uum: {.  if( sql
22f30 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64 62  ite3SafetyOff(db
22f40 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
22f50 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 20 0a 20  ue_to_misuse; . 
22f60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e   rc = sqlite3Run
22f70 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d  Vacuum(&p->zErrM
22f80 73 67 2c 20 64 62 29 3b 0a 20 20 69 66 28 20 73  sg, db);.  if( s
22f90 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
22fa0 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  b) ) goto abort_
22fb0 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20  due_to_misuse;. 
22fc0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
22fd0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
22fe0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
22ff0 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65  ACUUM)./* Opcode
23000 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20  : IncrVacuum P1 
23010 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
23020 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20  erform a single 
23030 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72  step of the incr
23040 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70  emental vacuum p
23050 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74  rocedure on.** t
23060 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20  he P1 database. 
23070 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61  If the vacuum ha
23080 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70  s finished, jump
23090 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a   to instruction.
230a0 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  ** P2. Otherwise
230b0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
230c0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
230d0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
230e0 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b  OP_IncrVacuum: {
230f0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
23100 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
23110 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
23120 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
23130 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
23140 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
23150 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70 2d 3e  Mask & (1<<pOp->
23160 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
23170 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
23180 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
23190 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
231a0 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69  Vacuum(pBt);.  i
231b0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
231c0 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  NE ){.    pc = p
231d0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
231e0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
231f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
23200 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
23210 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
23220 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
23230 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
23240 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65  ements to become
23250 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70   expired. An exp
23260 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
23270 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  * fails with an 
23280 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51  error code of SQ
23290 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69  LITE_SCHEMA if i
232a0 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75 74  t is ever execut
232b0 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69  ed .** (via sqli
232c0 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20  te3_step())..** 
232d0 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
232e0 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
232f0 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
23300 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
23310 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
23320 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
23330 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
23340 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66  statement is aff
23350 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20  ected. .*/.case 
23360 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
23370 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
23380 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
23390 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
233a0 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
233b0 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
233c0 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
233d0 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
233e0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
233f0 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
23400 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
23410 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f   P3 P4 *.**.** O
23420 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
23430 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
23440 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
23450 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
23460 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
23470 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
23480 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
23490 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 20  **.** If P1 is  
234a0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
234b0 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c   database in sql
234c0 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68  ite3.aDb[] of th
234d0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e  e database.** on
234e0 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20   which the lock 
234f0 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20  is acquired.  A 
23500 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61  readlock is obta
23510 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72  ined if P3==0 or
23520 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b  .** a write lock
23530 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a   if P3==1..**.**
23540 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P2 contains the
23550 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
23560 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e  e table to lock.
23570 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69  .**.** P4 contai
23580 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
23590 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
235a0 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b  table being lock
235b0 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  ed. This is only
235c0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65  .** used to gene
235d0 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65  rate an error me
235e0 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63  ssage if the loc
235f0 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61  k cannot be obta
23600 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
23610 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20  _TableLock: {.  
23620 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
23630 3b 20 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c  ; .  u8 isWriteL
23640 6f 63 6b 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  ock = pOp->p3;. 
23650 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26   assert( p1>=0 &
23660 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  & p1<db->nDb );.
23670 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
23680 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 31  reeMask & (1<<p1
23690 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))!=0 );.  asser
236a0 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  t( isWriteLock==
236b0 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b  0 || isWriteLock
236c0 3d 3d 31 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==1 );.  rc = sq
236d0 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61  lite3BtreeLockTa
236e0 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ble(db->aDb[p1].
236f0 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73  pBt, pOp->p2, is
23700 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 69 66  WriteLock);.  if
23710 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43  ( rc==SQLITE_LOC
23720 4b 45 44 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  KED ){.    const
23730 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e   char *z = pOp->
23740 70 34 2e 7a 3b 0a 20 20 20 20 73 71 6c 69 74 65  p4.z;.    sqlite
23750 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
23760 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74  ErrMsg, db, "dat
23770 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
23780 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a  ocked: %s", z);.
23790 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
237a0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
237b0 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
237c0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
237d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
237e0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
237f0 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50  : VBegin * * * P
23800 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  4 *.**.** P4 may
23810 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   be a pointer to
23820 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
23830 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73   structure. If s
23840 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20  o, call the .** 
23850 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f  xBegin method fo
23860 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a  r that table..**
23870 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65  .** Also, whethe
23880 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73  r or not P4 is s
23890 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74  et, check that t
238a0 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67  his is not being
238b0 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20   called from.** 
238c0 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63  within a callbac
238d0 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  k to a virtual t
238e0 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74  able xSync() met
238f0 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 73  hod. If it is, s
23900 65 74 20 74 68 65 0a 2a 2a 20 65 72 72 6f 72 20  et the.** error 
23910 63 6f 64 65 20 74 6f 20 53 51 4c 49 54 45 5f 4c  code to SQLITE_L
23920 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OCKED..*/.case O
23930 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 73 71  P_VBegin: {.  sq
23940 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
23950 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
23960 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  b;.  rc = sqlite
23970 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70  3VtabBegin(db, p
23980 56 74 61 62 29 3b 0a 20 20 69 66 28 20 70 56 74  Vtab);.  if( pVt
23990 61 62 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ab ){.    sqlite
239a0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
239b0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
239c0 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
239d0 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56  >zErrMsg;.    pV
239e0 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
239f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
23a00 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
23a10 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
23a20 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
23a30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
23a40 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
23a50 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a  de: VCreate P1 *
23a60 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
23a70 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
23a80 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
23a90 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
23aa0 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
23ab0 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74   method.** for t
23ac0 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
23ad0 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b  se OP_VCreate: {
23ae0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
23af0 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62  tabCallCreate(db
23b00 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
23b10 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  p4.z, &p->zErrMs
23b20 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
23b30 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
23b40 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
23b50 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
23b60 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
23b70 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
23b80 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
23b90 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
23ba0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
23bb0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
23bc0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
23bd0 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
23be0 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
23bf0 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
23c00 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
23c10 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  {.  p->inVtabMet
23c20 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20  hod = 2;.  rc = 
23c30 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
23c40 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e  estroy(db, pOp->
23c50 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
23c60 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
23c70 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  d = 0;.  break;.
23c80 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
23c90 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
23ca0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
23cb0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
23cc0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
23cd0 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20  ode: VOpen P1 * 
23ce0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
23cf0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
23d00 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
23d10 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
23d20 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
23d30 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  e..** P1 is a cu
23d40 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68  rsor number.  Th
23d50 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20  is opcode opens 
23d60 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  a cursor to the 
23d70 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
23d80 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74   and stores that
23d90 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a   cursor in P1..*
23da0 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a  /.case OP_VOpen:
23db0 20 7b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43 75   {.  Cursor *pCu
23dc0 72 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33  r = 0;.  sqlite3
23dd0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
23de0 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 0a  tabCursor = 0;..
23df0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
23e00 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
23e10 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33  pVtab;.  sqlite3
23e20 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
23e30 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
23e40 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
23e50 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 70  ule;..  assert(p
23e60 56 74 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29  Vtab && pModule)
23e70 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  ;.  if( sqlite3S
23e80 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67  afetyOff(db) ) g
23e90 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
23ea0 5f 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20  _misuse;.  rc = 
23eb0 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70  pModule->xOpen(p
23ec0 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73  Vtab, &pVtabCurs
23ed0 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  or);.  sqlite3Db
23ee0 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
23ef0 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d  Msg);.  p->zErrM
23f00 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72  sg = pVtab->zErr
23f10 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45  Msg;.  pVtab->zE
23f20 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28  rrMsg = 0;.  if(
23f30 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
23f40 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
23f50 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
23f60 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
23f70 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49  ==rc ){.    /* I
23f80 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65  nitialize sqlite
23f90 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61  3_vtab_cursor ba
23fa0 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20  se class */.    
23fb0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
23fc0 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20  ab = pVtab;..   
23fd0 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73 65 20 76   /* Initialise v
23fe0 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
23ff0 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20  t */.    pCur = 
24000 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
24010 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 70 4f 70 5b  , pOp->p1, &pOp[
24020 2d 31 5d 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20  -1], -1, 0);.   
24030 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20   if( pCur ){.   
24040 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75     pCur->pVtabCu
24050 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73  rsor = pVtabCurs
24060 6f 72 3b 0a 20 20 20 20 20 20 70 43 75 72 2d 3e  or;.      pCur->
24070 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 43  pModule = pVtabC
24080 75 72 73 6f 72 2d 3e 70 56 74 61 62 2d 3e 70 4d  ursor->pVtab->pM
24090 6f 64 75 6c 65 3b 0a 20 20 20 20 7d 65 6c 73 65  odule;.    }else
240a0 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c  {.      db->mall
240b0 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
240c0 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c      pModule->xCl
240d0 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29  ose(pVtabCursor)
240e0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
240f0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
24100 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
24110 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
24120 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24130 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
24140 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65  * Opcode: VFilte
24150 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  r P1 P2 P3 P4 *.
24160 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  **.** P1 is a cu
24170 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e  rsor opened usin
24180 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20  g VOpen.  P2 is 
24190 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  an address to ju
241a0 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20  mp to if.** the 
241b0 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20  filtered result 
241c0 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a  set is empty..**
241d0 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72  .** P4 is either
241e0 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e   NULL or a strin
241f0 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72  g that was gener
24200 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73  ated by the xBes
24210 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64  tIndex.** method
24220 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
24230 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74   The interpretat
24240 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74  ion of the P4 st
24250 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20  ring is left.** 
24260 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  to the module im
24270 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  plementation..**
24280 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
24290 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c  invokes the xFil
242a0 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68  ter method on th
242b0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
242c0 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20  specified.** by 
242d0 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72  P1.  The integer
242e0 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61   query plan para
242f0 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72  meter to xFilter
24300 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
24310 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65  gister.** P3. Re
24320 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72  gister P3+1 stor
24330 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61  es the argc para
24340 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73  meter to be pass
24350 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69  ed to the.** xFi
24360 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67  lter method. Reg
24370 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b  isters P3+2..P3+
24380 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61  1+argc are the a
24390 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  rgc.** additiona
243a0 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69  l parameters whi
243b0 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f  ch are passed to
243c0 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61  .** xFilter as a
243d0 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33  rgv. Register P3
243e0 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b  +2 becomes argv[
243f0 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74  0] when passed t
24400 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a  o xFilter..**.**
24410 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   A jump is made 
24420 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73  to P2 if the res
24430 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69  ult set after fi
24440 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65  ltering would be
24450 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20   empty..*/.case 
24460 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20  OP_VFilter: {   
24470 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
24480 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75   nArg;.  int iQu
24490 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  ery;.  const sql
244a0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
244b0 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75  dule;.  Mem *pQu
244c0 65 72 79 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  ery = &p->aMem[p
244d0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 4d 65 6d 20 2a  Op->p3];.  Mem *
244e0 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b  pArgc = &pQuery[
244f0 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  1];.  sqlite3_vt
24500 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62  ab_cursor *pVtab
24510 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65  Cursor;.  sqlite
24520 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 0a  3_vtab *pVtab;..
24530 20 20 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d    Cursor *pCur =
24540 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24550 31 5d 3b 0a 0a 20 20 52 45 47 49 53 54 45 52 5f  1];..  REGISTER_
24560 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
24570 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74  Query);.  assert
24580 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
24590 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75  sor );.  pVtabCu
245a0 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74  rsor = pCur->pVt
245b0 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61  abCursor;.  pVta
245c0 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  b = pVtabCursor-
245d0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
245e0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
245f0 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74  le;..  /* Grab t
24600 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  he index number 
24610 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65 74  and argc paramet
24620 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ers */.  assert(
24630 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26   (pQuery->flags&
24640 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70  MEM_Int)!=0 && p
24650 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  Argc->flags==MEM
24660 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d  _Int );.  nArg =
24670 20 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69   pArgc->u.i;.  i
24680 51 75 65 72 79 20 3d 20 70 51 75 65 72 79 2d 3e  Query = pQuery->
24690 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  u.i;..  /* Invok
246a0 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  e the xFilter me
246b0 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20  thod */.  {.    
246c0 69 6e 74 20 72 65 73 20 3d 20 30 3b 0a 20 20 20  int res = 0;.   
246d0 20 69 6e 74 20 69 3b 0a 20 20 20 20 4d 65 6d 20   int i;.    Mem 
246e0 2a 2a 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41  **apArg = p->apA
246f0 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20  rg;.    for(i = 
24700 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
24710 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
24720 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20  = &pArgc[i+1];. 
24730 20 20 20 20 20 73 74 6f 72 65 54 79 70 65 49 6e       storeTypeIn
24740 66 6f 28 61 70 41 72 67 5b 69 5d 2c 20 30 29 3b  fo(apArg[i], 0);
24750 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
24760 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
24770 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (db) ) goto abor
24780 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b  t_due_to_misuse;
24790 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
247a0 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 20  Lock(pVtab);.   
247b0 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
247c0 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70   = 1;.    rc = p
247d0 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28  Module->xFilter(
247e0 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75  pVtabCursor, iQu
247f0 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ery, pOp->p4.z, 
24800 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20  nArg, apArg);.  
24810 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
24820 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  d = 0;.    sqlit
24830 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
24840 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d  zErrMsg);.    p-
24850 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62  >zErrMsg = pVtab
24860 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70  ->zErrMsg;.    p
24870 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20  Vtab->zErrMsg = 
24880 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  0;.    sqlite3Vt
24890 61 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74  abUnlock(db, pVt
248a0 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  ab);.    if( rc=
248b0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
248c0 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
248d0 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72  e->xEof(pVtabCur
248e0 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  sor);.    }.    
248f0 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
24900 79 4f 6e 28 64 62 29 20 29 20 67 6f 74 6f 20 61  yOn(db) ) goto a
24910 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75  bort_due_to_misu
24920 73 65 3b 0a 0a 20 20 20 20 69 66 28 20 72 65 73  se;..    if( res
24930 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
24940 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
24950 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75  }.  }.  pCur->nu
24960 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72  llRow = 0;..  br
24970 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
24980 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
24990 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
249a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
249b0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
249c0 2a 20 4f 70 63 6f 64 65 3a 20 56 52 6f 77 69 64  * Opcode: VRowid
249d0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
249e0 2a 2a 20 53 74 6f 72 65 20 69 6e 74 6f 20 72 65  ** Store into re
249f0 67 69 73 74 65 72 20 50 32 20 20 74 68 65 20 72  gister P2  the r
24a00 6f 77 69 64 20 6f 66 0a 2a 2a 20 74 68 65 20 76  owid of.** the v
24a10 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61  irtual-table tha
24a20 74 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  t the P1 cursor 
24a30 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 0a  is pointing to..
24a40 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 6f 77 69  */.case OP_VRowi
24a50 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
24a60 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
24a70 61 73 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ase */.  sqlite3
24a80 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
24a90 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
24aa0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
24ab0 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 52   sqlite_int64 iR
24ac0 6f 77 3b 0a 20 20 43 75 72 73 6f 72 20 2a 70 43  ow;.  Cursor *pC
24ad0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
24ae0 70 2d 3e 70 31 5d 3b 0a 0a 20 20 61 73 73 65 72  p->p1];..  asser
24af0 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
24b00 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43  rsor );.  if( pC
24b10 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
24b20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
24b30 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
24b40 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
24b50 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
24b60 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
24b70 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
24b80 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 69 66 28  >xRowid );.  if(
24b90 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66   sqlite3SafetyOf
24ba0 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f  f(db) ) goto abo
24bb0 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65  rt_due_to_misuse
24bc0 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
24bd0 2d 3e 78 52 6f 77 69 64 28 70 43 75 72 2d 3e 70  ->xRowid(pCur->p
24be0 56 74 61 62 43 75 72 73 6f 72 2c 20 26 69 52 6f  VtabCursor, &iRo
24bf0 77 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  w);.  sqlite3DbF
24c00 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
24c10 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72 72 4d 73  sg);.  p->zErrMs
24c20 67 20 3d 20 70 56 74 61 62 2d 3e 7a 45 72 72 4d  g = pVtab->zErrM
24c30 73 67 3b 0a 20 20 70 56 74 61 62 2d 3e 7a 45 72  sg;.  pVtab->zEr
24c40 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69 66 28 20  rMsg = 0;.  if( 
24c50 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
24c60 64 62 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  db) ) goto abort
24c70 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a  _due_to_misuse;.
24c80 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
24c90 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
24ca0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
24cb0 52 6f 77 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Row;.  break;.}.
24cc0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
24cd0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
24ce0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
24cf0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
24d00 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
24d10 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32  e: VColumn P1 P2
24d20 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74   P3 * *.**.** St
24d30 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ore the value of
24d40 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
24d50 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20  n of.** the row 
24d60 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74  of the virtual-t
24d70 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a  able that the .*
24d80 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70  * P1 cursor is p
24d90 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20  ointing to into 
24da0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
24db0 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a  case OP_VColumn:
24dc0 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
24dd0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
24de0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
24df0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
24e00 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74   *pDest;.  sqlit
24e10 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74  e3_context sCont
24e20 65 78 74 3b 0a 0a 20 20 43 75 72 73 6f 72 20 2a  ext;..  Cursor *
24e30 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
24e40 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24e50 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
24e60 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
24e70 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
24e80 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
24e90 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 70   );.  pDest = &p
24ea0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
24eb0 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
24ec0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
24ed0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
24ee0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72  l(pDest);.    br
24ef0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
24f00 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
24f10 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
24f20 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
24f30 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
24f40 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c  t( pModule->xCol
24f50 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28  umn );.  memset(
24f60 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69  &sContext, 0, si
24f70 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b  zeof(sContext));
24f80 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
24f90 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
24fa0 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
24fb0 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
24fc0 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e  .  ** the curren
24fd0 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43  t contents to sC
24fe0 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63  ontext.s so in c
24ff0 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e  ase the user-fun
25000 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20  ction .  ** can 
25010 75 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20  use the already 
25020 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
25030 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f   instead of allo
25040 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e  cating a .  ** n
25050 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73  ew one..  */.  s
25060 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
25070 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70  e(&sContext.s, p
25080 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  Dest);.  MemSetT
25090 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78  ypeFlag(&sContex
250a0 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  t.s, MEM_Null);.
250b0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
250c0 66 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f  fetyOff(db) ) go
250d0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
250e0 6d 69 73 75 73 65 3b 0a 20 20 72 63 20 3d 20 70  misuse;.  rc = p
250f0 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28  Module->xColumn(
25100 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
25110 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f  r, &sContext, pO
25120 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65  p->p2);.  sqlite
25130 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
25140 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45  ErrMsg);.  p->zE
25150 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e 7a  rrMsg = pVtab->z
25160 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62 2d  ErrMsg;.  pVtab-
25170 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a 20  >zErrMsg = 0;.. 
25180 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73   /* Copy the res
25190 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
251a0 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65  ion to the P3 re
251b0 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20  gister. We.  ** 
251c0 64 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c 65  do this regardle
251d0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
251e0 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63   not an error oc
251f0 63 75 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20  cured to ensure 
25200 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63  any.  ** dynamic
25210 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73   allocation in s
25220 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d  Context.s (a Mem
25230 20 73 74 72 75 63 74 29 20 69 73 20 20 72 65 6c   struct) is  rel
25240 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71  eased..  */.  sq
25250 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
25260 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78  ncoding(&sContex
25270 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  t.s, encoding);.
25280 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
25290 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
252a0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
252b0 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73  emMove(pDest, &s
252c0 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 55 50  Context.s);.  UP
252d0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
252e0 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28  E(pDest);..  if(
252f0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e   sqlite3SafetyOn
25300 28 64 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  (db) ){.    goto
25310 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69   abort_due_to_mi
25320 73 75 73 65 3b 0a 20 20 7d 0a 20 20 69 66 28 20  suse;.  }.  if( 
25330 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
25340 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
25350 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
25360 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
25370 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
25380 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
25390 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
253a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
253b0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
253c0 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
253d0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
253e0 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
253f0 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
25400 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
25410 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
25420 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
25430 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
25440 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
25450 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
25460 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
25470 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
25480 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
25490 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
254a0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
254b0 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
254c0 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
254d0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
254e0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
254f0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
25500 6e 74 20 72 65 73 20 3d 20 30 3b 0a 0a 20 20 43  nt res = 0;..  C
25510 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
25520 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25530 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
25540 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
25550 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
25560 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  Row ){.    break
25570 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
25580 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
25590 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
255a0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
255b0 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
255c0 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29  pModule->xNext )
255d0 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
255e0 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f  he xNext() metho
255f0 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
25600 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79   There is no way
25610 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e   for the.  ** un
25620 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65  derlying impleme
25630 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72  ntation to retur
25640 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e  n an error if on
25650 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a  e occurs during.
25660 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e    ** xNext(). In
25670 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72  stead, if an err
25680 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20  or occurs, true 
25690 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64  is returned (ind
256a0 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20  icating that .  
256b0 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c  ** data is avail
256c0 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72  able) and the er
256d0 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ror code returne
256e0 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f  d when xColumn o
256f0 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65  r.  ** some othe
25700 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74  r method is next
25710 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20   invoked on the 
25720 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62  save virtual tab
25730 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  le cursor..  */.
25740 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
25750 65 74 79 4f 66 66 28 64 62 29 20 29 20 67 6f 74  etyOff(db) ) got
25760 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d  o abort_due_to_m
25770 69 73 75 73 65 3b 0a 20 20 73 71 6c 69 74 65 33  isuse;.  sqlite3
25780 56 74 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b  VtabLock(pVtab);
25790 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
257a0 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70  od = 1;.  rc = p
257b0 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43  Module->xNext(pC
257c0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29  ur->pVtabCursor)
257d0 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  ;.  p->inVtabMet
257e0 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  hod = 0;.  sqlit
257f0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
25800 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a  zErrMsg);.  p->z
25810 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d 3e  ErrMsg = pVtab->
25820 7a 45 72 72 4d 73 67 3b 0a 20 20 70 56 74 61 62  zErrMsg;.  pVtab
25830 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20  ->zErrMsg = 0;. 
25840 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
25850 63 6b 28 64 62 2c 20 70 56 74 61 62 29 3b 0a 20  ck(db, pVtab);. 
25860 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
25870 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20  OK ){.    res = 
25880 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43  pModule->xEof(pC
25890 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29  ur->pVtabCursor)
258a0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
258b0 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
258c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
258d0 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 69  _to_misuse;..  i
258e0 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f  f( !res ){.    /
258f0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61  * If there is da
25900 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a  ta, jump to P2 *
25910 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  /.    pc = pOp->
25920 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
25930 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
25940 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
25950 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
25960 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25970 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
25980 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d  * Opcode: VRenam
25990 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
259a0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
259b0 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
259c0 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
259d0 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
259e0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
259f0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
25a00 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
25a10 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  ng xRename metho
25a20 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  d. The value.** 
25a30 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
25a40 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
25a50 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74  zName argument t
25a60 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65  o the xRename me
25a70 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  thod..*/.case OP
25a80 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71  _VRename: {.  sq
25a90 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
25aa0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
25ab0 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 20  b;.  Mem *pName 
25ac0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  = &p->aMem[pOp->
25ad0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
25ae0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
25af0 52 65 6e 61 6d 65 20 29 3b 0a 20 20 52 45 47 49  Rename );.  REGI
25b00 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
25b10 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 0a 20 20 53  p1, pName);..  S
25b20 74 72 69 6e 67 69 66 79 28 70 4e 61 6d 65 2c 20  tringify(pName, 
25b30 65 6e 63 6f 64 69 6e 67 29 3b 0a 0a 20 20 69 66  encoding);..  if
25b40 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
25b50 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
25b60 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
25b70 65 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  e;.  sqlite3Vtab
25b80 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20 20 72  Lock(pVtab);.  r
25b90 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  c = pVtab->pModu
25ba0 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61  le->xRename(pVta
25bb0 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20  b, pName->z);.  
25bc0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
25bd0 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
25be0 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 70 56   p->zErrMsg = pV
25bf0 74 61 62 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20  tab->zErrMsg;.  
25c00 70 56 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d  pVtab->zErrMsg =
25c10 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61   0;.  sqlite3Vta
25c20 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61  bUnlock(db, pVta
25c30 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  b);.  if( sqlite
25c40 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29 20  3SafetyOn(db) ) 
25c50 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
25c60 6f 5f 6d 69 73 75 73 65 3b 0a 0a 20 20 62 72 65  o_misuse;..  bre
25c70 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
25c80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25c90 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
25ca0 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
25cb0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
25cc0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
25cd0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
25ce0 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
25cf0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
25d00 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
25d10 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
25d20 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
25d30 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
25d40 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
25d50 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
25d60 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
25d70 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
25d80 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
25d90 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
25da0 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
25db0 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
25dc0 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
25dd0 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
25de0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
25df0 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
25e00 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
25e10 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
25e20 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
25e30 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
25e40 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
25e50 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
25e60 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
25e70 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
25e80 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
25e90 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
25ea0 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
25eb0 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
25ec0 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
25ed0 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
25ee0 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
25ef0 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
25f00 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
25f10 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
25f20 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
25f30 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
25f40 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
25f50 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
25f60 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
25f70 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
25f80 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
25f90 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
25fa0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
25fb0 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
25fc0 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
25fd0 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
25fe0 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
25ff0 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
26000 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
26010 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
26020 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
26030 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
26040 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
26050 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
26060 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
26070 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
26080 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
26090 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
260a0 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
260b0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
260c0 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
260d0 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
260e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
260f0 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  date: {.  sqlite
26100 33 5f 76 74 61 62 20 2a 70 56 74 61 62 20 3d 20  3_vtab *pVtab = 
26110 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
26120 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
26130 2a 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69  *pModule = (sqli
26140 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74  te3_module *)pVt
26150 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  ab->pModule;.  i
26160 6e 74 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70  nt nArg = pOp->p
26170 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
26180 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41  ->p4type==P4_VTA
26190 42 20 29 3b 0a 20 20 69 66 28 20 70 4d 6f 64 75  B );.  if( pModu
261a0 6c 65 2d 3e 78 55 70 64 61 74 65 3d 3d 30 20 29  le->xUpdate==0 )
261b0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
261c0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
261d0 73 67 2c 20 64 62 2c 20 22 72 65 61 64 2d 6f 6e  sg, db, "read-on
261e0 6c 79 20 74 61 62 6c 65 22 29 3b 0a 20 20 20 20  ly table");.    
261f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
26200 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  R;.  }else{.    
26210 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74  int i;.    sqlit
26220 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20  e_int64 rowid;. 
26230 20 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 20 3d     Mem **apArg =
26240 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 4d   p->apArg;.    M
26250 65 6d 20 2a 70 58 20 3d 20 26 70 2d 3e 61 4d 65  em *pX = &p->aMe
26260 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
26270 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
26280 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 74 6f   i++){.      sto
26290 72 65 54 79 70 65 49 6e 66 6f 28 70 58 2c 20 30  reTypeInfo(pX, 0
262a0 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  );.      apArg[i
262b0 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58  ] = pX;.      pX
262c0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
262d0 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
262e0 66 66 28 64 62 29 20 29 20 67 6f 74 6f 20 61 62  ff(db) ) goto ab
262f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 6d 69 73 75 73  ort_due_to_misus
26300 65 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  e;.    sqlite3Vt
26310 61 62 4c 6f 63 6b 28 70 56 74 61 62 29 3b 0a 20  abLock(pVtab);. 
26320 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
26330 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20  >xUpdate(pVtab, 
26340 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f  nArg, apArg, &ro
26350 77 69 64 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  wid);.    sqlite
26360 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
26370 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
26380 7a 45 72 72 4d 73 67 20 3d 20 70 56 74 61 62 2d  zErrMsg = pVtab-
26390 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 70 56  >zErrMsg;.    pV
263a0 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
263b0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
263c0 62 55 6e 6c 6f 63 6b 28 64 62 2c 20 70 56 74 61  bUnlock(db, pVta
263d0 62 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  b);.    if( sqli
263e0 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
263f0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
26400 5f 74 6f 5f 6d 69 73 75 73 65 3b 0a 20 20 20 20  _to_misuse;.    
26410 69 66 28 20 70 4f 70 2d 3e 70 31 20 26 26 20 72  if( pOp->p1 && r
26420 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
26430 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41        assert( nA
26440 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d  rg>1 && apArg[0]
26450 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66   && (apArg[0]->f
26460 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29  lags&MEM_Null) )
26470 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74  ;.      db->last
26480 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20  Rowid = rowid;. 
26490 20 20 20 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61     }.    p->nCha
264a0 6e 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  nge++;.  }.  bre
264b0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
264c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
264d0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
264e0 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
264f0 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
26500 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63  /* Opcode: Pagec
26510 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
26520 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
26530 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20   current number 
26540 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61  of pages in data
26550 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72  base P1 to memor
26560 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61  y cell P2..*/.ca
26570 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a  se OP_Pagecount:
26580 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
26590 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
265a0 20 2a 2f 0a 20 20 69 6e 74 20 70 31 20 3d 20 70   */.  int p1 = p
265b0 4f 70 2d 3e 70 31 3b 20 0a 20 20 69 6e 74 20 6e  Op->p1; .  int n
265c0 50 61 67 65 3b 0a 20 20 50 61 67 65 72 20 2a 70  Page;.  Pager *p
265d0 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
265e0 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
265f0 62 5b 70 31 5d 2e 70 42 74 29 3b 0a 0a 20 20 72  b[p1].pBt);..  r
26600 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  c = sqlite3Pager
26610 50 61 67 65 63 6f 75 6e 74 28 70 50 61 67 65 72  Pagecount(pPager
26620 2c 20 26 6e 50 61 67 65 29 3b 0a 20 20 69 66 28  , &nPage);.  if(
26630 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
26640 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
26650 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
26660 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 50 61   pOut->u.i = nPa
26670 67 65 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ge;.  }.  break;
26680 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
26690 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
266a0 52 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  RACE./* Opcode: 
266b0 54 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a  Trace * * * P4 *
266c0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
266d0 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
266e0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
266f0 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
26700 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
26710 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
26720 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
26730 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
26740 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63  e callback..*/.c
26750 61 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a  ase OP_Trace: {.
26760 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
26770 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  ){.    if( db->x
26780 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 64  Trace ){.      d
26790 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54  b->xTrace(db->pT
267a0 72 61 63 65 41 72 67 2c 20 70 4f 70 2d 3e 70 34  raceArg, pOp->p4
267b0 2e 7a 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65  .z);.    }.#ifde
267c0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
267d0 20 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67     if( (db->flag
267e0 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  s & SQLITE_SqlTr
267f0 61 63 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ace)!=0 ){.     
26800 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
26810 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20  ntf("SQL-trace: 
26820 25 73 5c 6e 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a  %s\n", pOp->p4.z
26830 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20  );.    }.#endif 
26840 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
26850 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  */.  }.  break;.
26860 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70  }.#endif.../* Op
26870 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a  code: Noop * * *
26880 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f   * *.**.** Do no
26890 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73  thing.  This ins
268a0 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65  truction is ofte
268b0 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75  n useful as a ju
268c0 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f  mp.** destinatio
268d0 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n..*/./*.** The 
268e0 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70  magic Explain op
268f0 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e  code are only in
26900 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c  serted when expl
26910 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a  ain==2 (which.**
26920 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20   is to say when 
26930 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52  the EXPLAIN QUER
26940 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73  Y PLAN syntax is
26950 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20   used.).** This 
26960 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69  opcode records i
26970 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
26980 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20  the optimizer.  
26990 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65  It is the.** the
269a0 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70   same as a no-op
269b0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e  .  This opcodesn
269c0 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e 20  ever appears in 
269d0 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61  a real VM progra
269e0 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b  m..*/.default: {
269f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69            /* Thi
26a00 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e  s is really OP_N
26a10 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61  oop and OP_Expla
26a20 69 6e 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d  in */.  break;.}
26a30 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
26a40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26a50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26a60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26a80 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66  .** The cases of
26a90 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
26aa0 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73  ement above this
26ab0 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c   line should all
26ac0 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20   be indented.** 
26ad0 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
26ae0 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  t the left-most 
26af0 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65  6 spaces have be
26b00 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d  en removed to im
26b10 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61  prove the.** rea
26b20 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20  dability.  From 
26b30 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f  this point on do
26b40 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69  wn, the normal i
26b50 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73  ndentation rules
26b60 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64   are.** restored
26b70 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
26b80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26b90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26ba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
26bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
26bc0 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56  .    }..#ifdef V
26bd0 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
26be0 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70  {.      u64 elap
26bf0 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74  sed = sqlite3Hwt
26c00 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20  ime() - start;. 
26c10 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73       pOp->cycles
26c20 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20   += elapsed;.   
26c30 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23     pOp->cnt++;.#
26c40 69 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72  if 0.        fpr
26c50 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31  intf(stdout, "%1
26c60 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29  0llu ", elapsed)
26c70 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
26c80 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
26c90 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 70 2d  out, origPc, &p-
26ca0 3e 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23  >aOp[origPc]);.#
26cb0 65 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64  endif.    }.#end
26cc0 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66  if..    /* The f
26cd0 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64  ollowing code ad
26ce0 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68  ds nothing to th
26cf0 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f  e actual functio
26d00 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  nality.    ** of
26d10 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49   the program.  I
26d20 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66  t is only here f
26d30 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64  or testing and d
26d40 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a  ebugging..    **
26d50 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61   On the other ha
26d60 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e  nd, it does burn
26d70 20 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72   CPU cycles ever
26d80 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20  y time through. 
26d90 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61     ** the evalua
26da0 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65  tor loop.  So we
26db0 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75   can leave it ou
26dc0 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73  t when NDEBUG is
26dd0 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
26de0 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
26df0 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d      assert( pc>=
26e00 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20  -1 && pc<p->nOp 
26e10 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
26e20 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
26e30 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20  p->trace ){.    
26e40 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70    if( rc!=0 ) fp
26e50 72 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22  rintf(p->trace,"
26e60 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20  rc=%d\n",rc);.  
26e70 20 20 20 20 69 66 28 20 6f 70 50 72 6f 70 65 72      if( opProper
26e80 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f  ty & OPFLG_OUT2_
26e90 50 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  PRERELEASE ){.  
26ea0 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
26eb0 61 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f  ace(p->trace, pO
26ec0 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
26ed0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
26ee0 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
26ef0 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20  LG_OUT3 ){.     
26f00 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
26f10 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e  (p->trace, pOp->
26f20 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p3, pOut);.     
26f30 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20   }.    }.#endif 
26f40 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
26f50 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e   */.#endif  /* N
26f60 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a  DEBUG */.  }  /*
26f70 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   The end of the 
26f80 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65  for(;;) loop the
26f90 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f   loops through o
26fa0 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  pcodes */..  /* 
26fb0 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
26fc0 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73   point, it means
26fd0 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20   that execution 
26fe0 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68  is finished with
26ff0 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f  .  ** an error o
27000 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a  f some kind..  *
27010 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  /.vdbe_error_hal
27020 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20  t:.  assert( rc 
27030 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  );.  p->rc = rc;
27040 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  .  sqlite3VdbeHa
27050 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d  lt(p);.  if( rc=
27060 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
27070 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63  MEM ) db->malloc
27080 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63  Failed = 1;.  rc
27090 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
270a0 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ..  /* This is t
270b0 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20  he only way out 
270c0 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  of this procedur
270d0 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20  e.  We have to. 
270e0 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20   ** release the 
270f0 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65  mutexes on btree
27100 73 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75  s that were acqu
27110 69 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a  ired at the.  **
27120 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65   top. */.vdbe_re
27130 74 75 72 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42  turn:.  sqlite3B
27140 74 72 65 65 4d 75 74 65 78 41 72 72 61 79 4c 65  treeMutexArrayLe
27150 61 76 65 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b  ave(&p->aMutex);
27160 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20  .  return rc;.. 
27170 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
27180 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20   if a string or 
27190 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e  blob larger than
271a0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
271b0 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75  TH.  ** is encou
271c0 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f  ntered..  */.too
271d0 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53  _big:.  sqlite3S
271e0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
271f0 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e  rMsg, db, "strin
27200 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
27210 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  g");.  rc = SQLI
27220 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74  TE_TOOBIG;.  got
27230 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
27240 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
27250 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f   here if a mallo
27260 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a  c() fails..  */.
27270 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61  no_mem:.  db->ma
27280 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
27290 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
272a0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
272b0 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  db, "out of memo
272c0 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ry");.  rc = SQL
272d0 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74  ITE_NOMEM;.  got
272e0 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
272f0 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
27300 20 68 65 72 65 20 66 6f 72 20 61 6e 20 53 51 4c   here for an SQL
27310 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72  ITE_MISUSE error
27320 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
27330 5f 74 6f 5f 6d 69 73 75 73 65 3a 0a 20 20 72 63  _to_misuse:.  rc
27340 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45   = SQLITE_MISUSE
27350 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 75  ;.  /* Fall thru
27360 20 69 6e 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   into abort_due_
27370 74 6f 5f 65 72 72 6f 72 20 2a 2f 0a 0a 20 20 2f  to_error */..  /
27380 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66  * Jump to here f
27390 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e  or any other kin
273a0 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72  d of fatal error
273b0 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69  .  The "rc" vari
273c0 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64  able.  ** should
273d0 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20   hold the error 
273e0 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f  number..  */.abo
273f0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a  rt_due_to_error:
27400 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45  .  assert( p->zE
27410 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66  rrMsg==0 );.  if
27420 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
27430 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45  ed ) rc = SQLITE
27440 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63  _NOMEM;.  if( rc
27450 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  !=SQLITE_IOERR_N
27460 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69  OMEM ){.    sqli
27470 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
27480 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
27490 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
274a0 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f  r(rc));.  }.  go
274b0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
274c0 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
274d0 6f 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71  o here if the sq
274e0 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
274f0 29 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69  ) API sets the i
27500 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c  nterrupt.  ** fl
27510 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  ag..  */.abort_d
27520 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a  ue_to_interrupt:
27530 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75  .  assert( db->u
27540 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
27550 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
27560 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d  _INTERRUPT;.  p-
27570 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69  >rc = rc;.  sqli
27580 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
27590 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
275a0 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
275b0 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76  r(rc));.  goto v
275c0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
275d0 7d 0a                                            }.