/ Hex Artifact Content
Login

Artifact cd3059de95a3a638eee919db8cfe4c318c160026:


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 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0840: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0850: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0860: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0870: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0880: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
0890: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
08a0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
08b0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
08c0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
08d0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
08e0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
08f0: 69 73 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  isused..*/.#ifde
0900: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
0910: 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75 74   define memAbout
0920: 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73 71  ToChange(P,M) sq
0930: 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f 75  lite3VdbeMemAbou
0940: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a 23  tToChange(P,M).#
0950: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d 65  else.# define me
0960: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 50  mAboutToChange(P
0970: 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,M).#endif../*.*
0980: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
0990: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
09a0: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65  is incremented e
09b0: 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72 73  very time a curs
09c0: 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69 74  or.** moves, eit
09d0: 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53 65  her by the OP_Se
09e0: 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20 6f  ekXX, OP_Next, o
09f0: 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64 65  r OP_Prev opcode
0a00: 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a 20  s.  The test.** 
0a10: 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20 74  procedures use t
0a20: 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
0a30: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  to make sure tha
0a40: 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a 2a  t indices are.**
0a50: 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74   working correct
0a60: 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61 62  ly.  This variab
0a70: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0a80: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0a90: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0aa0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0ab0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0ac0: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0ad0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ae0: 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
0af0: 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ount = 0;.#endif
0b00: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 69  ../*.** When thi
0b10: 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  s global variabl
0b20: 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20 69  e is positive, i
0b30: 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e 74  t gets decrement
0b40: 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a 2a  ed once before.*
0b50: 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74 69  * each instructi
0b60: 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20  on in the VDBE. 
0b70: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
0b80: 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73   zero, the u1.is
0b90: 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66  Interrupted.** f
0ba0: 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69  ield of the sqli
0bb0: 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73  te3 structure is
0bc0: 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f   set in order to
0bd0: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an int
0be0: 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  errupt..**.** Th
0bf0: 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20 75  is facility is u
0c00: 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sed for testing 
0c10: 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20 20  purposes only.  
0c20: 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e 63  It does not func
0c30: 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f 72  tion.** in an or
0c40: 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a 2f  dinary build..*/
0c50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
0c60: 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  EST.int sqlite3_
0c70: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 20  interrupt_count 
0c80: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  = 0;.#endif../*.
0c90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0ca0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0cb0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0cc0: 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72 74  type the OP_Sort
0cd0: 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78   opcode.** is ex
0ce0: 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65 73  ecuted.  The tes
0cf0: 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  t procedures use
0d00: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0d10: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0d20: 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20 69  hat.** sorting i
0d30: 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20 6e  s occurring or n
0d40: 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74 20  ot occurring at 
0d50: 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d 65  appropriate time
0d60: 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  s.   This variab
0d70: 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e  le.** has no fun
0d80: 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e  ction other than
0d90: 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20   to help verify 
0da0: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0db0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
0dc0: 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64  library..*/.#ifd
0dd0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69  ef SQLITE_TEST.i
0de0: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
0df0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0e00: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  f../*.** The nex
0e10: 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  t global variabl
0e20: 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73 69  e records the si
0e30: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
0e40: 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f 72  t MEM_Blob.** or
0e50: 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68 61   MEM_Str that ha
0e60: 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20 61  s been used by a
0e70: 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20 54   VDBE opcode.  T
0e80: 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72  he test procedur
0e90: 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20 69  es.** use this i
0ea0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d 61  nformation to ma
0eb0: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
0ec0: 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63 74   zero-blob funct
0ed0: 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20 77  ionality.** is w
0ee0: 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c 79  orking correctly
0ef0: 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62 6c  .   This variabl
0f00: 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f  e has no functio
0f10: 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 0a  n other than to.
0f20: 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  ** help verify t
0f30: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0f40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72  tion of the libr
0f50: 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ary..*/.#ifdef S
0f60: 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73  QLITE_TEST.int s
0f70: 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
0f80: 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ize = 0;.static 
0f90: 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42 6c  void updateMaxBl
0fa0: 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b 0a  obsize(Mem *p){.
0fb0: 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73 20    if( (p->flags 
0fc0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
0fd0: 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e 6e  lob))!=0 && p->n
0fe0: 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  >sqlite3_max_blo
0ff0: 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71 6c  bsize ){.    sql
1000: 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a  ite3_max_blobsiz
1010: 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d 0a  e = p->n;.  }.}.
1020: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1030: 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76 61  e next global va
1040: 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65 6d  riable is increm
1050: 65 6e 74 65 64 20 65 61 63 68 20 74 79 70 65 20  ented each type 
1060: 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70 63  the OP_Found opc
1070: 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ode.** is execut
1080: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
1090: 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65 72   to test whether
10a0: 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72 65   or not the fore
10b0: 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72 61  ign key.** opera
10c0: 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64  tion implemented
10d0: 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a 65   using OP_FkIsZe
10e0: 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20 54  ro is working. T
10f0: 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  his variable.** 
1100: 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e 20  has no function 
1110: 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68 65  other than to he
1120: 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63 6f  lp verify the co
1130: 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrect operation 
1140: 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61 72  of the.** librar
1150: 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
1160: 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  ITE_TEST.int sql
1170: 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
1180: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
1190: 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69 73  .** Test a regis
11a0: 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69 74  ter to see if it
11b0: 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75 72   exceeds the cur
11c0: 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c 6f  rent maximum blo
11d0: 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69 74  b size..** If it
11e0: 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74 68   does, record th
11f0: 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62 6c  e new maximum bl
1200: 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 20  ob size..*/.#if 
1210: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1220: 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  EST) && !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  (SQLITE_OMIT_BUI
1240: 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  LTIN_TEST).# def
1250: 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ine UPDATE_MAX_B
1260: 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64 61  LOBSIZE(P)  upda
1270: 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29  teMaxBlobsize(P)
1280: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1290: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
12a0: 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  IZE(P).#endif../
12b0: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65  *.** Convert the
12c0: 20 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20   given register 
12d0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66  into a string if
12e0: 20 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a   it isn't one.**
12f0: 20 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e   already. Return
1300: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d   non-zero if a m
1310: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a  alloc() fails..*
1320: 2f 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67  /.#define String
1330: 69 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20  ify(P, enc) \.  
1340: 20 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26   if(((P)->flags&
1350: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
1360: 62 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65  b))==0 && sqlite
1370: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
1380: 79 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20  y(P,enc)) \.    
1390: 20 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20   { goto no_mem; 
13a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65  }../*.** An ephe
13b0: 6d 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c  meral string val
13c0: 75 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79  ue (signified by
13d0: 20 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66   the MEM_Ephem f
13e0: 6c 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  lag) contains.**
13f0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1400: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
1410: 63 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65  cated string whe
1420: 72 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e  re some other en
1430: 74 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f  tity.** is respo
1440: 6e 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c  nsible for deall
1450: 6f 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72  ocating that str
1460: 69 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68  ing.  Because th
1470: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f  e register.** do
1480: 65 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74  es not control t
1490: 68 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69  he string, it mi
14a0: 67 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77  ght be deleted w
14b0: 69 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73  ithout the regis
14c0: 74 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69  ter.** knowing i
14d0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  t..**.** This ro
14e0: 75 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61  utine converts a
14f0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1500: 6e 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69  ng into a dynami
1510: 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a  cally allocated.
1520: 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74  ** string that t
1530: 68 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65  he register itse
1540: 6c 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e  lf controls.  In
1550: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74   other words, it
1560: 0a 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  .** converts an 
1570: 4d 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67  MEM_Ephem string
1580: 20 69 6e 74 6f 20 61 6e 20 4d 45 4d 5f 44 79 6e   into an MEM_Dyn
1590: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66   string..*/.#def
15a0: 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c 69  ine Deephemerali
15b0: 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20 28  ze(P) \.   if( (
15c0: 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 45  (P)->flags&MEM_E
15d0: 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20 20  phem)!=0 \.     
15e0: 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65    && sqlite3Vdbe
15f0: 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
1600: 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f 6d  (P) ){ goto no_m
1610: 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  em;}../* Return 
1620: 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72 73  true if the curs
1630: 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  or was opened us
1640: 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e 53  ing the OP_OpenS
1650: 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a 2f  orter opcode. */
1660: 0a 23 20 64 65 66 69 6e 65 20 69 73 53 6f 72 74  .# define isSort
1670: 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53 6f 72  er(x) ((x)->pSor
1680: 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 41  ter!=0)../*.** A
1690: 72 67 75 6d 65 6e 74 20 70 4d 65 6d 20 70 6f 69  rgument pMem poi
16a0: 6e 74 73 20 61 74 20 61 20 72 65 67 69 73 74 65  nts at a registe
16b0: 72 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 70  r that will be p
16c0: 61 73 73 65 64 20 74 6f 20 61 0a 2a 2a 20 75 73  assed to a.** us
16d0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
16e0: 69 6f 6e 20 6f 72 20 72 65 74 75 72 6e 65 64 20  ion or returned 
16f0: 74 6f 20 74 68 65 20 75 73 65 72 20 61 73 20 74  to the user as t
1700: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 20 71  he result of a q
1710: 75 65 72 79 2e 0a 2a 2a 20 54 68 69 73 20 72 6f  uery..** This ro
1720: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70  utine sets the p
1730: 4d 65 6d 2d 3e 74 79 70 65 20 76 61 72 69 61 62  Mem->type variab
1740: 6c 65 20 75 73 65 64 20 62 79 20 74 68 65 20 73  le used by the s
1750: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29  qlite3_value_*()
1760: 20 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 2e 0a 2a   .** routines..*
1770: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
1780: 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 4d  beMemStoreType(M
1790: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74  em *pMem){.  int
17a0: 20 66 6c 61 67 73 20 3d 20 70 4d 65 6d 2d 3e 66   flags = pMem->f
17b0: 6c 61 67 73 3b 0a 20 20 69 66 28 20 66 6c 61 67  lags;.  if( flag
17c0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
17d0: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
17e0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3b 0a 20 20   SQLITE_NULL;.  
17f0: 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 66 6c 61  }.  else if( fla
1800: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
1810: 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70 65 20 3d      pMem->type =
1820: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3b   SQLITE_INTEGER;
1830: 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
1840: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
1850: 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79   ){.    pMem->ty
1860: 70 65 20 3d 20 53 51 4c 49 54 45 5f 46 4c 4f 41  pe = SQLITE_FLOA
1870: 54 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66  T;.  }.  else if
1880: 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ( flags & MEM_St
1890: 72 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74  r ){.    pMem->t
18a0: 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 54 45 58  ype = SQLITE_TEX
18b0: 54 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  T;.  }else{.    
18c0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18d0: 49 54 45 5f 42 4c 4f 42 3b 0a 20 20 7d 0a 7d 0a  ITE_BLOB;.  }.}.
18e0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  ./*.** Allocate 
18f0: 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62 65  VdbeCursor numbe
1900: 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e 20  r iCur.  Return 
1910: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e  a pointer to it.
1920: 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a    Return NULL.**
1930: 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20 6f   if we run out o
1940: 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61  f memory..*/.sta
1950: 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20 2a  tic VdbeCursor *
1960: 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 0a  allocateCursor(.
1970: 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20 20    Vdbe *p,      
1980: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
1990: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a  irtual machine *
19a0: 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20 20  /.  int iCur,   
19b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
19c0: 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56 64  ex of the new Vd
19d0: 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e  beCursor */.  in
19e0: 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20 20  t nField,       
19f0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a00: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 74   fields in the t
1a10: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f  able or index */
1a20: 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20 20  .  int iDb,     
1a30: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
1a40: 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20  base the cursor 
1a50: 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d  belongs to, or -
1a60: 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72  1 */.  int isBtr
1a70: 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20  eeCursor     /* 
1a80: 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65 2e  True for B-Tree.
1a90: 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65 75    False for pseu
1aa0: 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61 62  do-table or vtab
1ab0: 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64   */.){.  /* Find
1ac0: 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
1ad0: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73   that will be us
1ae0: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1af0: 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20  blob of memory. 
1b00: 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72   ** required for
1b10: 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72   this VdbeCursor
1b20: 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69   structure. It i
1b30: 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20  s convenient to 
1b40: 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65  use a .  ** vdbe
1b50: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20   memory cell to 
1b60: 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72  manage the memor
1b70: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
1b80: 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a  uired for a.  **
1b90: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1ba0: 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f  cture for the fo
1bb0: 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a  llowing reasons:
1bc0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53  .  **.  **   * S
1bd0: 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20  ometimes cursor 
1be0: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
1bf0: 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66   for a couple of
1c00: 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1c10: 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20      purposes in 
1c20: 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20  a vdbe program. 
1c30: 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73  The different us
1c40: 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65  es might require
1c50: 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72  .  **     differ
1c60: 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61  ent sized alloca
1c70: 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65  tions. Memory ce
1c80: 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77  lls provide grow
1c90: 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c  able.  **     al
1ca0: 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  locations..  **.
1cb0: 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73    **   * When us
1cc0: 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ing ENABLE_MEMOR
1cd0: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65  Y_MANAGEMENT, me
1ce0: 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72  mory cell buffer
1cf0: 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62  s can.  **     b
1d00: 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76  e freed lazily v
1d10: 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72  ia the sqlite3_r
1d20: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20  elease_memory() 
1d30: 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20  API. This.  **  
1d40: 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65     minimizes the
1d50: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f   number of mallo
1d60: 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20  c calls made by 
1d70: 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a  the system..  **
1d80: 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c  .  ** Memory cel
1d90: 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61  ls for cursors a
1da0: 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20  re allocated at 
1db0: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61  the top of the a
1dc0: 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63  ddress.  ** spac
1dd0: 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  e. Memory cell (
1de0: 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70  p->nMem) corresp
1df0: 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30  onds to cursor 0
1e00: 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a  . Space for.  **
1e10: 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e   cursor 1 is man
1e20: 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63  aged by memory c
1e30: 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c  ell (p->nMem-1),
1e40: 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d   etc..  */.  Mem
1e50: 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65   *pMem = &p->aMe
1e60: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b  m[p->nMem-iCur];
1e70: 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20  ..  int nByte;. 
1e80: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1e90: 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20   = 0;.  nByte = 
1ea0: 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69  .      ROUND8(si
1eb0: 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29  zeof(VdbeCursor)
1ec0: 29 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74  ) + .      (isBt
1ed0: 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65  reeCursor?sqlite
1ee0: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1ef0: 28 29 3a 30 29 20 2b 20 0a 20 20 20 20 20 20 32  ():0) + .      2
1f00: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
1f10: 33 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  32);..  assert( 
1f20: 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  iCur<p->nCursor 
1f30: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  );.  if( p->apCs
1f40: 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20 20 73  r[iCur] ){.    s
1f50: 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1f60: 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1f70: 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70 2d 3e  [iCur]);.    p->
1f80: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 30 3b  apCsr[iCur] = 0;
1f90: 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c 49 54  .  }.  if( SQLIT
1fa0: 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56 64 62  E_OK==sqlite3Vdb
1fb0: 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d 2c 20 6e  eMemGrow(pMem, n
1fc0: 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20  Byte, 0) ){.    
1fd0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
1fe0: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
1ff0: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
2000: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
2010: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2020: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44  r));.    pCx->iD
2030: 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78  b = iDb;.    pCx
2040: 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c  ->nField = nFiel
2050: 64 3b 0a 20 20 20 20 69 66 28 20 6e 46 69 65 6c  d;.    if( nFiel
2060: 64 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  d ){.      pCx->
2070: 61 54 79 70 65 20 3d 20 28 75 33 32 20 2a 29 26  aType = (u32 *)&
2080: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
2090: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
20a0: 29 29 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ))];.    }.    i
20b0: 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f 72  f( isBtreeCursor
20c0: 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 70   ){.      pCx->p
20d0: 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72 73  Cursor = (BtCurs
20e0: 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 26  or*).          &
20f0: 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73  pMem->z[ROUND8(s
2100: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
2110: 29 29 2b 32 2a 6e 46 69 65 6c 64 2a 73 69 7a 65  ))+2*nField*size
2120: 6f 66 28 75 33 32 29 5d 3b 0a 20 20 20 20 20 20  of(u32)];.      
2130: 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
2140: 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75 72  orZero(pCx->pCur
2150: 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2160: 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a    return pCx;.}.
2170: 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f  ./*.** Try to co
2180: 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e  nvert a value in
2190: 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70  to a numeric rep
21a0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77  resentation if w
21b0: 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77  e can.** do so w
21c0: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
21d0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20  nformation.  In 
21e0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
21f0: 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f  the string.** lo
2200: 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65  oks like a numbe
2210: 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e  r, convert it in
2220: 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  to a number.  If
2230: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   it does not.** 
2240: 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62  look like a numb
2250: 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f  er, leave it alo
2260: 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ne..*/.static vo
2270: 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41  id applyNumericA
2280: 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52 65  ffinity(Mem *pRe
2290: 63 29 7b 0a 20 20 69 66 28 20 28 70 52 65 63 2d  c){.  if( (pRec-
22a0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 52 65  >flags & (MEM_Re
22b0: 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 20  al|MEM_Int))==0 
22c0: 29 7b 0a 20 20 20 20 64 6f 75 62 6c 65 20 72 56  ){.    double rV
22d0: 61 6c 75 65 3b 0a 20 20 20 20 69 36 34 20 69 56  alue;.    i64 iV
22e0: 61 6c 75 65 3b 0a 20 20 20 20 75 38 20 65 6e 63  alue;.    u8 enc
22f0: 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20   = pRec->enc;.  
2300: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2310: 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 29  gs&MEM_Str)==0 )
2320: 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66 28   return;.    if(
2330: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52 65   sqlite3AtoF(pRe
2340: 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20 70  c->z, &rValue, p
2350: 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20  Rec->n, enc)==0 
2360: 29 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 69 66  ) return;.    if
2370: 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  ( 0==sqlite3Atoi
2380: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61  64(pRec->z, &iVa
2390: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e  lue, pRec->n, en
23a0: 63 29 20 29 7b 0a 20 20 20 20 20 20 70 52 65 63  c) ){.      pRec
23b0: 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a  ->u.i = iValue;.
23c0: 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67        pRec->flag
23d0: 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  s |= MEM_Int;.  
23e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
23f0: 52 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75 65 3b  Rec->r = rValue;
2400: 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61  .      pRec->fla
2410: 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a  gs |= MEM_Real;.
2420: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a      }.  }.}../*.
2430: 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73  ** Processing is
2440: 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68   determine by th
2450: 65 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d  e affinity param
2460: 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  eter:.**.** SQLI
2470: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a  TE_AFF_INTEGER:.
2480: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ** SQLITE_AFF_RE
2490: 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  AL:.** SQLITE_AF
24a0: 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20  F_NUMERIC:.**   
24b0: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
24c0: 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67  pRec to an integ
24d0: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
24e0: 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c  n or a .**    fl
24f0: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70  oating-point rep
2500: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61  resentation if a
2510: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2520: 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69  entation.**    i
2530: 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20  s not possible. 
2540: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69   Note that the i
2550: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2560: 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61  ation is.**    a
2570: 6c 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c  lways preferred,
2580: 20 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66   even if the aff
2590: 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62  inity is REAL, b
25a0: 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20  ecause.**    an 
25b0: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
25c0: 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73  tation is more s
25d0: 70 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f  pace efficient o
25e0: 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51  n disk..**.** SQ
25f0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a  LITE_AFF_TEXT:.*
2600: 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65  *    Convert pRe
2610: 63 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72  c to a text repr
2620: 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  esentation..**.*
2630: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  * SQLITE_AFF_NON
2640: 45 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20  E:.**    No-op. 
2650: 20 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67   pRec is unchang
2660: 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ed..*/.static vo
2670: 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  id applyAffinity
2680: 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20  (.  Mem *pRec,  
2690: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
26a0: 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66  alue to apply af
26b0: 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63  finity to */.  c
26c0: 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20  har affinity,   
26d0: 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
26e0: 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
26f0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20   */.  u8 enc    
2700: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2710: 20 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64   this text encod
2720: 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20  ing */.){.  if( 
2730: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
2740: 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20  _AFF_TEXT ){.   
2750: 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74   /* Only attempt
2760: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2770: 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72 65  to TEXT if there
2780: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f   is an integer o
2790: 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65  r real.    ** re
27a0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c  presentation (bl
27b0: 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e  ob and NULL do n
27c0: 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64  ot get converted
27d0: 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a  ) but no string.
27e0: 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74      ** represent
27f0: 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20  ation..    */.  
2800: 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e    if( 0==(pRec->
2810: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26  flags&MEM_Str) &
2820: 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28  & (pRec->flags&(
2830: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Real|MEM_Int
2840: 29 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  )) ){.      sqli
2850: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
2860: 69 66 79 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a  ify(pRec, enc);.
2870: 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e      }.    pRec->
2880: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52  flags &= ~(MEM_R
2890: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  eal|MEM_Int);.  
28a0: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
28b0: 74 79 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ty!=SQLITE_AFF_N
28c0: 4f 4e 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ONE ){.    asser
28d0: 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  t( affinity==SQL
28e0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
28f0: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2900: 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20  ITE_AFF_REAL.   
2910: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66            || aff
2920: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2930: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20  F_NUMERIC );.   
2940: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
2950: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2960: 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
2970: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
2980: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2990: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
29a0: 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  pRec);.    }.  }
29b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f  .}../*.** Try to
29c0: 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79 70   convert the typ
29d0: 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  e of a function 
29e0: 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72 65  argument or a re
29f0: 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69  sult column.** i
2a00: 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65  nto a numeric re
2a10: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55  presentation.  U
2a20: 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47 45  se either INTEGE
2a30: 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68 65  R or REAL whiche
2a40: 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70  ver.** is approp
2a50: 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79  riate.  But only
2a60: 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69   do the conversi
2a70: 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73 73  on if it is poss
2a80: 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20  ible without.** 
2a90: 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
2aa0: 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20 74  ion and return t
2ab0: 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65 20  he revised type 
2ac0: 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e  of the argument.
2ad0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
2ae0: 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79  value_numeric_ty
2af0: 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  pe(sqlite3_value
2b00: 20 2a 70 56 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a   *pVal){.  Mem *
2b10: 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61  pMem = (Mem*)pVa
2b20: 6c 3b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 74  l;.  if( pMem->t
2b30: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2b40: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d   ){.    applyNum
2b50: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2b60: 6d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  m);.    sqlite3V
2b70: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
2b80: 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74  pMem);.  }.  ret
2b90: 75 72 6e 20 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a  urn pMem->type;.
2ba0: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65  }../*.** Exporte
2bb0: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70  d version of app
2bc0: 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68  lyAffinity(). Th
2bd0: 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20  is one works on 
2be0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2bf0: 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65  .** not the inte
2c00: 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a  rnal Mem* type..
2c10: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2c20: 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
2c30: 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  y(.  sqlite3_val
2c40: 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20  ue *pVal, .  u8 
2c50: 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20  affinity, .  u8 
2c60: 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66  enc.){.  applyAf
2c70: 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56  finity((Mem *)pV
2c80: 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  al, affinity, en
2c90: 63 29 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  c);.}..#ifdef SQ
2ca0: 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
2cb0: 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74   Write a nice st
2cc0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
2cd0: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  ion of the conte
2ce0: 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d  nts of cell pMem
2cf0: 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20  .** into buffer 
2d00: 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75  zBuf, length nBu
2d10: 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  f..*/.void sqlit
2d20: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
2d30: 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20  rint(Mem *pMem, 
2d40: 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63  char *zBuf){.  c
2d50: 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66  har *zCsr = zBuf
2d60: 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d  ;.  int f = pMem
2d70: 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74  ->flags;..  stat
2d80: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
2d90: 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20  onst encnames[] 
2da0: 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c  = {"(X)", "(8)",
2db0: 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42   "(16LE)", "(16B
2dc0: 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d  E)"};..  if( f&M
2dd0: 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69  EM_Blob ){.    i
2de0: 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63  nt i;.    char c
2df0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
2e00: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63  M_Dyn ){.      c
2e10: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
2e20: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
2e30: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
2e40: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
2e50: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
2e60: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63  tatic ){.      c
2e70: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
2e80: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
2e90: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
2ea0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
2eb0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
2ec0: 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  m ){.      c = '
2ed0: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
2ee0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2ef0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
2f00: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
2f10: 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20      c = 's';.   
2f20: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
2f30: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
2f40: 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20  sr, "%c", c);.  
2f50: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2f60: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
2f70: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
2f80: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
2f90: 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29   "%d[", pMem->n)
2fa0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
2fb0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
2fc0: 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  sr);.    for(i=0
2fd0: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
2fe0: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
2ff0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3000: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30  f(100, zCsr, "%0
3010: 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d  2X", ((int)pMem-
3020: 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a  >z[i] & 0xFF));.
3030: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
3040: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3050: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  sr);.    }.    f
3060: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
3070: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
3080: 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20  .      char z = 
3090: 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20  pMem->z[i];.    
30a0: 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e    if( z<32 || z>
30b0: 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20  126 ) *zCsr++ = 
30c0: 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20  '.';.      else 
30d0: 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20  *zCsr++ = z;.   
30e0: 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
30f0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3100: 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61  sr, "]%s", encna
3110: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3120: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
3130: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3140: 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20  r);.    if( f & 
3150: 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
3160: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3170: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25  tf(100, zCsr,"+%
3180: 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72  dz",pMem->u.nZer
3190: 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b  o);.      zCsr +
31a0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
31b0: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20  0(zCsr);.    }. 
31c0: 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b     *zCsr = '\0';
31d0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26  .  }else if( f &
31e0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
31f0: 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42  int j, k;.    zB
3200: 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20  uf[0] = ' ';.   
3210: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e   if( f & MEM_Dyn
3220: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
3230: 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  ] = 'z';.      a
3240: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3250: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
3260: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
3270: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3280: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
3290: 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20  zBuf[1] = 't';. 
32a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
32b0: 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45  & (MEM_Dyn|MEM_E
32c0: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
32d0: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
32e0: 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20  EM_Ephem ){.    
32f0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b    zBuf[1] = 'e';
3300: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3310: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3320: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
3330: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3340: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a   zBuf[1] = 's';.
3350: 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b      }.    k = 2;
3360: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3370: 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66  rintf(100, &zBuf
3380: 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d  [k], "%d", pMem-
3390: 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  >n);.    k += sq
33a0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
33b0: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
33c0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20  f[k++] = '[';.  
33d0: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20    for(j=0; j<15 
33e0: 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b  && j<pMem->n; j+
33f0: 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d  +){.      u8 c =
3400: 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20   pMem->z[j];.   
3410: 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26     if( c>=0x20 &
3420: 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20  & c<0x7f ){.    
3430: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3440: 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
3450: 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b          zBuf[k++
3460: 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d  ] = '.';.      }
3470: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b  .    }.    zBuf[
3480: 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20  k++] = ']';.    
3490: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
34a0: 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65  (100,&zBuf[k], e
34b0: 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e  ncnames[pMem->en
34c0: 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71  c]);.    k += sq
34d0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a  lite3Strlen30(&z
34e0: 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75  Buf[k]);.    zBu
34f0: 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a  f[k++] = 0;.  }.
3500: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3510: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
3520: 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61  .** Print the va
3530: 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65  lue of a registe
3540: 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75  r for tracing pu
3550: 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69  rposes:.*/.stati
3560: 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50  c void memTraceP
3570: 72 69 6e 74 28 46 49 4c 45 20 2a 6f 75 74 2c 20  rint(FILE *out, 
3580: 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  Mem *p){.  if( p
3590: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
35a0: 76 61 6c 69 64 20 29 7b 0a 20 20 20 20 66 70 72  valid ){.    fpr
35b0: 69 6e 74 66 28 6f 75 74 2c 20 22 20 75 6e 64 65  intf(out, " unde
35c0: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
35d0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
35e0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
35f0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 4e  fprintf(out, " N
3600: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3610: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3620: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3630: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3640: 53 74 72 29 20 29 7b 0a 20 20 20 20 66 70 72 69  Str) ){.    fpri
3650: 6e 74 66 28 6f 75 74 2c 20 22 20 73 69 3a 25 6c  ntf(out, " si:%l
3660: 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20  ld", p->u.i);.  
3670: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
3680: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
3690: 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c      fprintf(out,
36a0: 20 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75   " i:%lld", p->u
36b0: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
36c0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
36d0: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
36e0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
36f0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 66  EM_Real ){.    f
3700: 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 72 3a  printf(out, " r:
3710: 25 67 22 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64  %g", p->r);.#end
3720: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3730: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3740: 77 53 65 74 20 29 7b 0a 20 20 20 20 66 70 72 69  wSet ){.    fpri
3750: 6e 74 66 28 6f 75 74 2c 20 22 20 28 72 6f 77 73  ntf(out, " (rows
3760: 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  et)");.  }else{.
3770: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
3780: 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0];.    sqlite3V
3790: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
37a0: 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  t(p, zBuf);.    
37b0: 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 20 22  fprintf(out, " "
37c0: 29 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f  );.    fprintf(o
37d0: 75 74 2c 20 22 25 73 22 2c 20 7a 42 75 66 29 3b  ut, "%s", zBuf);
37e0: 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20 76 6f  .  }.}.static vo
37f0: 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65  id registerTrace
3800: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 69 6e 74 20  (FILE *out, int 
3810: 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  iReg, Mem *p){. 
3820: 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22 52   fprintf(out, "R
3830: 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67  EG[%d] = ", iReg
3840: 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69  );.  memTracePri
3850: 6e 74 28 6f 75 74 2c 20 70 29 3b 0a 20 20 66 70  nt(out, p);.  fp
3860: 72 69 6e 74 66 28 6f 75 74 2c 20 22 5c 6e 22 29  rintf(out, "\n")
3870: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ;.}.#endif..#ifd
3880: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3890: 23 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54  #  define REGIST
38a0: 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66  ER_TRACE(R,M) if
38b0: 28 70 2d 3e 74 72 61 63 65 29 72 65 67 69 73 74  (p->trace)regist
38c0: 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
38d0: 2c 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64  ,R,M).#else.#  d
38e0: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
38f0: 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66  RACE(R,M).#endif
3900: 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  ...#ifdef VDBE_P
3910: 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68  ROFILE../* .** h
3920: 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73  wtime.h contains
3930: 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65   inline assemble
3940: 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65  r code for imple
3950: 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68  menting .** high
3960: 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d  -performance tim
3970: 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f  ing routines..*/
3980: 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d  .#include "hwtim
3990: 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e.h"..#endif../*
39a0: 0a 2a 2a 20 54 68 65 20 43 48 45 43 4b 5f 46 4f  .** The CHECK_FO
39b0: 52 5f 49 4e 54 45 52 52 55 50 54 20 6d 61 63 72  R_INTERRUPT macr
39c0: 6f 20 64 65 66 69 6e 65 64 20 68 65 72 65 20 6c  o defined here l
39d0: 6f 6f 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ooks to see if t
39e0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e  he.** sqlite3_in
39f0: 74 65 72 72 75 70 74 28 29 20 72 6f 75 74 69 6e  terrupt() routin
3a00: 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  e has been calle
3a10: 64 2e 20 20 49 66 20 69 74 20 68 61 73 20 62 65  d.  If it has be
3a20: 65 6e 2c 20 74 68 65 6e 0a 2a 2a 20 70 72 6f 63  en, then.** proc
3a30: 65 73 73 69 6e 67 20 6f 66 20 74 68 65 20 56 44  essing of the VD
3a40: 42 45 20 70 72 6f 67 72 61 6d 20 69 73 20 69 6e  BE program is in
3a50: 74 65 72 72 75 70 74 65 64 2e 0a 2a 2a 0a 2a 2a  terrupted..**.**
3a60: 20 54 68 69 73 20 6d 61 63 72 6f 20 61 64 64 65   This macro adde
3a70: 64 20 74 6f 20 65 76 65 72 79 20 69 6e 73 74 72  d to every instr
3a80: 75 63 74 69 6f 6e 20 74 68 61 74 20 64 6f 65 73  uction that does
3a90: 20 61 20 6a 75 6d 70 20 69 6e 20 6f 72 64 65 72   a jump in order
3aa0: 20 74 6f 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74   to.** implement
3ab0: 20 61 20 6c 6f 6f 70 2e 20 20 54 68 69 73 20 74   a loop.  This t
3ac0: 65 73 74 20 75 73 65 64 20 74 6f 20 62 65 20 6f  est used to be o
3ad0: 6e 20 65 76 65 72 79 20 73 69 6e 67 6c 65 20 69  n every single i
3ae0: 6e 73 74 72 75 63 74 69 6f 6e 2c 0a 2a 2a 20 62  nstruction,.** b
3af0: 75 74 20 74 68 61 74 20 6d 65 61 6e 74 20 77 65  ut that meant we
3b00: 20 6d 6f 72 65 20 74 65 73 74 69 6e 67 20 74 68   more testing th
3b10: 61 6e 20 77 65 20 6e 65 65 64 65 64 2e 20 20 42  an we needed.  B
3b20: 79 20 6f 6e 6c 79 20 74 65 73 74 69 6e 67 20 74  y only testing t
3b30: 68 65 0a 2a 2a 20 66 6c 61 67 20 6f 6e 20 6a 75  he.** flag on ju
3b40: 6d 70 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2c  mp instructions,
3b50: 20 77 65 20 67 65 74 20 61 20 28 73 6d 61 6c 6c   we get a (small
3b60: 29 20 73 70 65 65 64 20 69 6d 70 72 6f 76 65 6d  ) speed improvem
3b70: 65 6e 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ent..*/.#define 
3b80: 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52  CHECK_FOR_INTERR
3b90: 55 50 54 20 5c 0a 20 20 20 69 66 28 20 64 62 2d  UPT \.   if( db-
3ba0: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
3bb0: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
3bc0: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
3bd0: 0a 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  ...#ifndef NDEBU
3be0: 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  G./*.** This fun
3bf0: 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61  ction is only ca
3c00: 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
3c10: 20 61 6e 20 61 73 73 65 72 74 28 29 20 65 78 70   an assert() exp
3c20: 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63  ression. It.** c
3c30: 68 65 63 6b 73 20 74 68 61 74 20 74 68 65 20 73  hecks that the s
3c40: 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74  qlite3.nTransact
3c50: 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20  ion variable is 
3c60: 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f  correctly set to
3c70: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
3c80: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
3c90: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72  n savepoints cur
3ca0: 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a  rently in the .*
3cb0: 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  * linked list st
3cc0: 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65  arting at sqlite
3cd0: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a  3.pSavepoint..**
3ce0: 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a   .** Usage:.**.*
3cf0: 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 63 68  *     assert( ch
3d00: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
3d10: 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74  t(db) );.*/.stat
3d20: 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65  ic int checkSave
3d30: 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74  pointCount(sqlit
3d40: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e  e3 *db){.  int n
3d50: 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e   = 0;.  Savepoin
3d60: 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62  t *p;.  for(p=db
3d70: 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b  ->pSavepoint; p;
3d80: 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b   p=p->pNext) n++
3d90: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28  ;.  assert( n==(
3da0: 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
3db0: 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
3dc0: 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a  onSavepoint) );.
3dd0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65    return 1;.}.#e
3de0: 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65  ndif.../*.** Exe
3df0: 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20  cute as much of 
3e00: 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61  a VDBE program a
3e10: 73 20 77 65 20 63 61 6e 20 74 68 65 6e 20 72 65  s we can then re
3e20: 74 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  turn..**.** sqli
3e30: 74 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79  te3VdbeMakeReady
3e40: 28 29 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65  () must be calle
3e50: 64 20 62 65 66 6f 72 65 20 74 68 69 73 20 72 6f  d before this ro
3e60: 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
3e70: 6f 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65 20 70  o.** close the p
3e80: 72 6f 67 72 61 6d 20 77 69 74 68 20 61 20 66 69  rogram with a fi
3e90: 6e 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20  nal OP_Halt and 
3ea0: 74 6f 20 73 65 74 20 75 70 20 74 68 65 20 63 61  to set up the ca
3eb0: 6c 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74  llbacks.** and t
3ec0: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
3ed0: 20 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20   pointer..**.** 
3ee0: 57 68 65 6e 65 76 65 72 20 61 20 72 6f 77 20 6f  Whenever a row o
3ef0: 72 20 72 65 73 75 6c 74 20 64 61 74 61 20 69 73  r result data is
3f00: 20 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73   available, this
3f10: 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 65 69   routine will ei
3f20: 74 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74  ther.** invoke t
3f30: 68 65 20 72 65 73 75 6c 74 20 63 61 6c 6c 62 61  he result callba
3f40: 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ck (if there is 
3f50: 6f 6e 65 29 20 6f 72 20 72 65 74 75 72 6e 20 77  one) or return w
3f60: 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f  ith.** SQLITE_RO
3f70: 57 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61  W..**.** If an a
3f80: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
3f90: 6f 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20  o open a locked 
3fa0: 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74  database, then t
3fb0: 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77  his routine.** w
3fc0: 69 6c 6c 20 65 69 74 68 65 72 20 69 6e 76 6f 6b  ill either invok
3fd0: 65 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62  e the busy callb
3fe0: 61 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73  ack (if there is
3ff0: 20 6f 6e 65 29 20 6f 72 20 69 74 20 77 69 6c 6c   one) or it will
4000: 0a 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c 49 54  .** return SQLIT
4010: 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66  E_BUSY..**.** If
4020: 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
4030: 2c 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  , an error messa
4040: 67 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 6f  ge is written to
4050: 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64   memory obtained
4060: 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
4070: 5f 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d  _malloc() and p-
4080: 3e 7a 45 72 72 4d 73 67 20 69 73 20 6d 61 64 65  >zErrMsg is made
4090: 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 61   to point to tha
40a0: 74 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65  t memory..** The
40b0: 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73   error code is s
40c0: 74 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63 20 61  tored in p->rc a
40d0: 6e 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  nd this routine 
40e0: 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45  returns SQLITE_E
40f0: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  RROR..**.** If t
4100: 68 65 20 63 61 6c 6c 62 61 63 6b 20 65 76 65 72  he callback ever
4110: 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   returns non-zer
4120: 6f 2c 20 74 68 65 6e 20 74 68 65 20 70 72 6f 67  o, then the prog
4130: 72 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d  ram exits.** imm
4140: 65 64 69 61 74 65 6c 79 2e 20 20 54 68 65 72 65  ediately.  There
4150: 20 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f   will be no erro
4160: 72 20 6d 65 73 73 61 67 65 20 62 75 74 20 74 68  r message but th
4170: 65 20 70 2d 3e 72 63 20 66 69 65 6c 64 20 69 73  e p->rc field is
4180: 0a 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c 49 54  .** set to SQLIT
4190: 45 5f 41 42 4f 52 54 20 61 6e 64 20 74 68 69 73  E_ABORT and this
41a0: 20 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 72 65   routine will re
41b0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
41c0: 52 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72  R..**.** A memor
41d0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72  y allocation err
41e0: 6f 72 20 63 61 75 73 65 73 20 70 2d 3e 72 63 20  or causes p->rc 
41f0: 74 6f 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c  to be set to SQL
4200: 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68  ITE_NOMEM and th
4210: 69 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f  is.** routine to
4220: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
4230: 52 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  RROR..**.** Othe
4240: 72 20 66 61 74 61 6c 20 65 72 72 6f 72 73 20 72  r fatal errors r
4250: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
4260: 4f 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20  OR..**.** After 
4270: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 68 61 73  this routine has
4280: 20 66 69 6e 69 73 68 65 64 2c 20 73 71 6c 69 74   finished, sqlit
4290: 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 29  e3VdbeFinalize()
42a0: 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73   should be.** us
42b0: 65 64 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74  ed to clean up t
42c0: 68 65 20 6d 65 73 73 20 74 68 61 74 20 77 61 73  he mess that was
42d0: 20 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f   left behind..*/
42e0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
42f0: 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20  Exec(.  Vdbe *p 
4300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4310: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a     /* The VDBE *
4320: 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b  /.){.  int pc=0;
4330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4340: 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d    /* The program
4350: 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70   counter */.  Op
4360: 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20   *aOp = p->aOp; 
4370: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
4380: 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20   of p->aOp */.  
4390: 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20  Op *pOp;        
43a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
43b0: 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrent operation 
43c0: 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  */.  int rc = SQ
43d0: 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
43e0: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
43f0: 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rn */.  sqlite3 
4400: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20  *db = p->db;    
4410: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4420: 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74  se */.  u8 reset
4430: 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
4440: 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65  0; /* Reset sche
4450: 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ma after an erro
4460: 72 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f  r if positive */
4470: 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d  .  u8 encoding =
4480: 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a   ENC(db);     /*
4490: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   The database en
44a0: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
44b0: 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20  iCompare = 0;   
44c0: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
44d0: 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70   of last OP_Comp
44e0: 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f  are operation */
44f0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53  .  unsigned nVmS
4500: 74 65 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  tep = 0;      /*
4510: 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
4520: 61 6c 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73  al machine steps
4530: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
4540: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
4550: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69  _CALLBACK.  unsi
4560: 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69  gned nProgressLi
4570: 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b  mit = 0;/* Invok
4580: 65 20 78 50 72 6f 67 72 65 73 73 28 29 20 77 68  e xProgress() wh
4590: 65 6e 20 6e 56 6d 53 74 65 70 20 72 65 61 63 68  en nVmStep reach
45a0: 65 73 20 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69  es this */.#endi
45b0: 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20  f.  Mem *aMem = 
45c0: 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f  p->aMem;       /
45d0: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65  * Copy of p->aMe
45e0: 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31  m */.  Mem *pIn1
45f0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4600: 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f    /* 1st input o
4610: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
4620: 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20  *pIn2 = 0;      
4630: 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e         /* 2nd in
4640: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4650: 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20   Mem *pIn3 = 0; 
4660: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33              /* 3
4670: 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  rd input operand
4680: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20   */.  Mem *pOut 
4690: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
46a0: 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61   /* Output opera
46b0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65  nd */.  int *aPe
46c0: 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20  rmute = 0;      
46d0: 20 20 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f     /* Permutatio
46e0: 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  n of columns for
46f0: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20   OP_Compare */. 
4700: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d   i64 lastRowid =
4710: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20   db->lastRowid; 
4720: 20 2f 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20   /* Saved value 
4730: 6f 66 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65  of the last inse
4740: 72 74 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64  rt ROWID */.#ifd
4750: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
4760: 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20    u64 start;    
4770: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4780: 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20  CPU clock count 
4790: 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f  at start of opco
47a0: 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69 67  de */.  int orig
47b0: 50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Pc;             
47c0: 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63 6f     /* Program co
47d0: 75 6e 74 65 72 20 61 74 20 73 74 61 72 74 20 6f  unter at start o
47e0: 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64  f opcode */.#end
47f0: 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54  if.  /*** INSERT
4800: 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52   STACK UNION HER
4810: 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74  E ***/..  assert
4820: 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  ( p->magic==VDBE
4830: 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f  _MAGIC_RUN );  /
4840: 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  * sqlite3_step()
4850: 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a   verifies this *
4860: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45  /.  sqlite3VdbeE
4870: 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70  nter(p);.  if( p
4880: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ->rc==SQLITE_NOM
4890: 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  EM ){.    /* Thi
48a0: 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d  s happens if a m
48b0: 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61  alloc() inside a
48c0: 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
48d0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f  _column_text() o
48e0: 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  r.    ** sqlite3
48f0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29  _column_text16()
4900: 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20   failed.  */.   
4910: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
4920: 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  }.  assert( p->r
4930: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
4940: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  p->rc==SQLITE_BU
4950: 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  SY );.  assert( 
4960: 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20  p->bIsReader || 
4970: 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29  p->readOnly!=0 )
4980: 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49  ;.  p->rc = SQLI
4990: 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72  TE_OK;.  p->iCur
49a0: 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20  rentTime = 0;.  
49b0: 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61  assert( p->expla
49c0: 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52  in==0 );.  p->pR
49d0: 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20  esultSet = 0;.  
49e0: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
49f0: 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 43 48 45  nBusy = 0;.  CHE
4a00: 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54  CK_FOR_INTERRUPT
4a10: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
4a20: 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69  OTraceSql(p);.#i
4a30: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4a40: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
4a50: 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78 50  ACK.  if( db->xP
4a60: 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20 61  rogress ){.    a
4a70: 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e  ssert( 0 < db->n
4a80: 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20  ProgressOps );. 
4a90: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
4aa0: 74 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 2d  t = (unsigned)p-
4ab0: 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
4ac0: 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53  _STMTSTATUS_VM_S
4ad0: 54 45 50 5d 3b 0a 20 20 20 20 69 66 28 20 6e 50  TEP];.    if( nP
4ae0: 72 6f 67 72 65 73 73 4c 69 6d 69 74 3d 3d 30 20  rogressLimit==0 
4af0: 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65  ){.      nProgre
4b00: 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50  ssLimit = db->nP
4b10: 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20 20 20  rogressOps;.    
4b20: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 50 72  }else{.      nPr
4b30: 6f 67 72 65 73 73 4c 69 6d 69 74 20 25 3d 20 28  ogressLimit %= (
4b40: 75 6e 73 69 67 6e 65 64 29 64 62 2d 3e 6e 50 72  unsigned)db->nPr
4b50: 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20 20 20 7d  ogressOps;.    }
4b60: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64  .  }.#endif.#ifd
4b70: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4b80: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65    sqlite3BeginBe
4b90: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20  nignMalloc();.  
4ba0: 69 66 28 20 70 2d 3e 70 63 3d 3d 30 20 20 26 26  if( p->pc==0  &&
4bb0: 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26   (p->db->flags &
4bc0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
4bd0: 69 6e 67 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  ing)!=0 ){.    i
4be0: 6e 74 20 69 3b 0a 20 20 20 20 70 72 69 6e 74 66  nt i;.    printf
4bf0: 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c  ("VDBE Program L
4c00: 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20  isting:\n");.   
4c10: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4c20: 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 66 6f 72  tSql(p);.    for
4c30: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
4c40: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  i++){.      sqli
4c50: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
4c60: 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69  tdout, i, &aOp[i
4c70: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ]);.    }.  }.  
4c80: 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
4c90: 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66  Malloc();.#endif
4ca0: 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b  .  for(pc=p->pc;
4cb0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20   rc==SQLITE_OK; 
4cc0: 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  pc++){.    asser
4cd0: 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63 3c 70  t( pc>=0 && pc<p
4ce0: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69 66 28  ->nOp );.    if(
4cf0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
4d00: 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  d ) goto no_mem;
4d10: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4d20: 46 49 4c 45 0a 20 20 20 20 6f 72 69 67 50 63 20  FILE.    origPc 
4d30: 3d 20 70 63 3b 0a 20 20 20 20 73 74 61 72 74 20  = pc;.    start 
4d40: 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
4d50: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56  );.#endif.    nV
4d60: 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f 70  mStep++;.    pOp
4d70: 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20   = &aOp[pc];..  
4d80: 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20    /* Only allow 
4d90: 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54  tracing if SQLIT
4da0: 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  E_DEBUG is defin
4db0: 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ed..    */.#ifde
4dc0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
4dd0: 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20     if( p->trace 
4de0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 63 3d  ){.      if( pc=
4df0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72  =0 ){.        pr
4e00: 69 6e 74 66 28 22 56 44 42 45 20 45 78 65 63 75  intf("VDBE Execu
4e10: 74 69 6f 6e 20 54 72 61 63 65 3a 5c 6e 22 29 3b  tion Trace:\n");
4e20: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4e30: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4e40: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
4e50: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
4e60: 70 28 70 2d 3e 74 72 61 63 65 2c 20 70 63 2c 20  p(p->trace, pc, 
4e70: 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  pOp);.    }.#end
4e80: 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f  if.      ..    /
4e90: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4ea0: 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d  f we need to sim
4eb0: 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75  ulate an interru
4ec0: 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68  pt.  This only h
4ed0: 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66  appens.    ** if
4ee0: 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69   we have a speci
4ef0: 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20  al test build.. 
4f00: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
4f10: 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28  ITE_TEST.    if(
4f20: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4f30: 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20  pt_count>0 ){.  
4f40: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
4f50: 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20  rrupt_count--;. 
4f60: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
4f70: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
4f80: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
4f90: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4fa0: 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (db);.      }.  
4fb0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
4fc0: 2f 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65  /* On any opcode
4fd0: 20 77 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d   with the "out2-
4fe0: 70 72 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c  prerelease" tag,
4ff0: 20 66 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a   free any.    **
5000: 20 65 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61   external alloca
5010: 74 69 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d  tions out of mem
5020: 5b 70 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d  [p2] and set mem
5030: 5b 70 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a  [p2] to be.    *
5040: 2a 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69  * an undefined i
5050: 6e 74 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73  nteger.  Opcodes
5060: 20 77 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c   will either fil
5070: 6c 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72  l in the integer
5080: 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72  .    ** value or
5090: 20 63 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d   convert mem[p2]
50a0: 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20   to a different 
50b0: 74 79 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  type..    */.   
50c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
50d0: 66 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70  flags==sqlite3Op
50e0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70  codeProperty[pOp
50f0: 2d 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20  ->opcode] );.   
5100: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
5110: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50  s & OPFLG_OUT2_P
5120: 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  RERELEASE ){.   
5130: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5140: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
5150: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
5160: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5170: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 70 4f 75  or) );.      pOu
5180: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
5190: 32 5d 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f  2];.      memAbo
51a0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
51b0: 75 74 29 3b 0a 20 20 20 20 20 20 56 64 62 65 4d  ut);.      VdbeM
51c0: 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29 3b  emRelease(pOut);
51d0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
51e0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
51f0: 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69    }..    /* Sani
5200: 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f  ty checking on o
5210: 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  ther operands */
5220: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
5230: 45 42 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f  EBUG.    if( (pO
5240: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5250: 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20  LG_IN1)!=0 ){.  
5260: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5270: 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p1>0 );.      a
5280: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d  ssert( pOp->p1<=
5290: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
52a0: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73  sor) );.      as
52b0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
52c0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
52d0: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
52e0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
52f0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  , &aMem[pOp->p1]
5300: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
5310: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
5320: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
5330: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5340: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5350: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5360: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
5370: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5380: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5390: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
53a0: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p2]) );.      RE
53b0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
53c0: 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
53d0: 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2]);.    }.   
53e0: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
53f0: 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21  gs & OPFLG_IN3)!
5400: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5410: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
5420: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5430: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
5440: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
5450: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5460: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5470: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
5480: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5490: 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b  (pOp->p3, &aMem[
54a0: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d  pOp->p3]);.    }
54b0: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
54c0: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
54d0: 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT2)!=0 ){.     
54e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
54f0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5500: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5510: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5520: 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
5530: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
5540: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
5550: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
5560: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
5570: 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a  FLG_OUT3)!=0 ){.
5580: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5590: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
55a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
55b0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
55c0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
55d0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
55e0: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
55f0: 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  3]);.    }.#endi
5600: 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68 28  f.  .    switch(
5610: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
5620: 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
5630: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5640: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5650: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5660: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
5670: 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20  ** What follows 
5680: 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69  is a massive swi
5690: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68  tch statement wh
56a0: 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d  ere each case im
56b0: 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65  plements a.** se
56c0: 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69  parate instructi
56d0: 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61  on in the virtua
56e0: 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77  l machine.  If w
56f0: 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75  e follow the usu
5700: 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f  al.** indentatio
5710: 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65  n conventions, e
5720: 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20  ach case should 
5730: 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36  be indented by 6
5740: 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a   spaces.  But.**
5750: 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f   that is a lot o
5760: 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f  f wasted space o
5770: 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69  n the left margi
5780: 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20  n.  So the code 
5790: 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77  within.** the sw
57a0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
57b0: 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63  ill break with c
57c0: 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65  onvention and be
57d0: 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f   flush-left. Ano
57e0: 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d  ther.** big comm
57f0: 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20  ent (similar to 
5800: 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d  this one) will m
5810: 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e  ark the point in
5820: 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a   the code where.
5830: 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e  ** we transition
5840: 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20   back to normal 
5850: 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a  indentation..**.
5860: 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e  ** The formattin
5870: 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69  g of each case i
5880: 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68  s important.  Th
5890: 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53  e makefile for S
58a0: 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74  QLite.** generat
58b0: 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22  es two C files "
58c0: 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22  opcodes.h" and "
58d0: 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63  opcodes.c" by sc
58e0: 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66  anning this.** f
58f0: 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ile looking for 
5900: 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e  lines that begin
5910: 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22   with "case OP_"
5920: 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68  .  The opcodes.h
5930: 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62   files.** will b
5940: 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64  e filled with #d
5950: 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65  efines that give
5960: 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20   unique integer 
5970: 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a  values to each.*
5980: 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65  * opcode and the
5990: 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20   opcodes.c file 
59a0: 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61  is filled with a
59b0: 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e  n array of strin
59c0: 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68  gs where.** each
59d0: 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73   string is the s
59e0: 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72  ymbolic name for
59f0: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
5a00: 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74  ng opcode.  If t
5a10: 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65  he.** case state
5a20: 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64  ment is followed
5a30: 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66   by a comment of
5a40: 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61   the form "/# sa
5a50: 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a  me as ... #/".**
5a60: 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73   that comment is
5a70: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
5a80: 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  ne the particula
5a90: 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  r value of the o
5aa0: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68  pcode..**.** Oth
5ab0: 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74  er keywords in t
5ac0: 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20  he comment that 
5ad0: 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73  follows each cas
5ae0: 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  e are used to.**
5af0: 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f   construct the O
5b00: 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52  PFLG_INITIALIZER
5b10: 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74   value that init
5b20: 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72  ializes opcodePr
5b30: 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79  operty[]..** Key
5b40: 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69  words include: i
5b50: 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75  n1, in2, in3, ou
5b60: 74 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20 6f  t2_prerelease, o
5b70: 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a  ut2, out3.  See.
5b80: 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68  ** the mkopcodeh
5b90: 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20  .awk script for 
5ba0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
5bb0: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f  mation..**.** Do
5bc0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75  cumentation abou
5bd0: 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69  t VDBE opcodes i
5be0: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73  s generated by s
5bf0: 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  canning this fil
5c00: 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f  e.** for lines o
5c10: 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22  f that contain "
5c20: 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20  Opcode:".  That 
5c30: 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62  line and all sub
5c40: 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65  sequent.** comme
5c50: 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65  nt lines are use
5c60: 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
5c70: 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  ion of the opcod
5c80: 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61  e.html documenta
5c90: 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a  tion.** file..**
5ca0: 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a  .** SUMMARY:.**.
5cb0: 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e  **     Formattin
5cc0: 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  g is important t
5cd0: 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73  o scripts that s
5ce0: 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a  can this file..*
5cf0: 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76  *     Do not dev
5d00: 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f  iate from the fo
5d10: 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63  rmatting style c
5d20: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e  urrently in use.
5d30: 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .**.************
5d40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5d80: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  */../* Opcode:  
5d90: 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a  Goto * P2 * * *.
5da0: 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69  **.** An uncondi
5db0: 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61  tional jump to a
5dc0: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68  ddress P2..** Th
5dd0: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
5de0: 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c  on executed will
5df0: 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20   be .** the one 
5e00: 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d  at index P2 from
5e10: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
5e20: 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d  f.** the program
5e30: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74  ..*/.case OP_Got
5e40: 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  o: {            
5e50: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 70 63   /* jump */.  pc
5e60: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
5e70: 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68  .  /* Opcodes th
5e80: 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74  at are used as t
5e90: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
5ea0: 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50  oop (OP_Next, OP
5eb0: 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56  _Prev,.  ** OP_V
5ec0: 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e  Next, OP_RowSetN
5ed0: 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65  ext, or OP_Sorte
5ee0: 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20  rNext) all jump 
5ef0: 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63  here upon.  ** c
5f00: 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63  ompletion.  Chec
5f10: 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69  k to see if sqli
5f20: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
5f30: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a  has been called.
5f40: 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70    ** or if the p
5f50: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
5f60: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76   needs to be inv
5f70: 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a  oked. .  **.  **
5f80: 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73 20   This code uses 
5f90: 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67 6f  unstructured "go
5fa0: 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61  to" statements a
5fb0: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b  nd does not look
5fc0: 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74   clean..  ** But
5fd0: 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65   that is not due
5fe0: 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e   to sloppy codin
5ff0: 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f  g habits. The co
6000: 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68  de is written th
6010: 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20  is.  ** way for 
6020: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20  performance, to 
6030: 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20  avoid having to 
6040: 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70  run the interrup
6050: 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20  t and progress. 
6060: 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76   ** checks on ev
6070: 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69  ery opcode.  Thi
6080: 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f  s helps sqlite3_
6090: 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62  step() to run ab
60a0: 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61  out 1.5%.  ** fa
60b0: 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74  ster according t
60c0: 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f  o "valgrind --to
60d0: 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a  ol=cachegrind" *
60e0: 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  /.check_for_inte
60f0: 72 72 75 70 74 3a 0a 20 20 43 48 45 43 4b 5f 46  rrupt:.  CHECK_F
6100: 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 23 69  OR_INTERRUPT;.#i
6110: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6120: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
6130: 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68  ACK.  /* Call th
6140: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6150: 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
6160: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
6170: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
6180: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
6190: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
61a0: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
61b0: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
61c0: 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65  n of.  ** sqlite
61d0: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
61e0: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
61f0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
6200: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
6210: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72  ..  ** If the pr
6220: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
6230: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
6240: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
6250: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
6260: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
6270: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
6280: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
6290: 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26 26 20  xProgress!=0 && 
62a0: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
62b0: 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20 69  ssLimit ){.    i
62c0: 6e 74 20 70 72 63 3b 0a 20 20 20 20 70 72 63 20  nt prc;.    prc 
62d0: 3d 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28  = db->xProgress(
62e0: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
62f0: 29 3b 0a 20 20 20 20 69 66 28 20 70 72 63 21 3d  );.    if( prc!=
6300: 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
6310: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
6320: 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
6330: 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20  e_error_halt;.  
6340: 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e    }.    if( db->
6350: 78 50 72 6f 67 72 65 73 73 21 3d 30 20 29 7b 0a  xProgress!=0 ){.
6360: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c        nProgressL
6370: 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b  imit = nVmStep +
6380: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6390: 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d  s - (nVmStep%db-
63a0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
63b0: 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
63c0: 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  .  .  break;.}..
63d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75  /* Opcode:  Gosu
63e0: 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  b P1 P2 * * *.**
63f0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
6400: 72 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e  rrent address on
6410: 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  to register P1.*
6420: 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20  * and then jump 
6430: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
6440: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a  /.case OP_Gosub:
6450: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
6460: 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
6470: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
6480: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
6490: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
64a0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
64b0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
64c0: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
64d0: 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29   & MEM_Dyn)==0 )
64e0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
64f0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
6500: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6510: 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e  EM_Int;.  pIn1->
6520: 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49  u.i = pc;.  REGI
6530: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
6540: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20  p1, pIn1);.  pc 
6550: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
6560: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6570: 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31  code:  Return P1
6580: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a   * * * *.**.** J
6590: 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ump to the next 
65a0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65  instruction afte
65b0: 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  r the address in
65c0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f   register P1..*/
65d0: 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a  .case OP_Return:
65e0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
65f0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
6600: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6610: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6620: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
6630: 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70  );.  pc = (int)p
6640: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 62 72 65 61  In1->u.i;.  brea
6650: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6660: 20 20 59 69 65 6c 64 20 50 31 20 2a 20 2a 20 2a    Yield P1 * * *
6670: 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68   *.**.** Swap th
6680: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
6690: 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  r with the value
66a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
66b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c  .*/.case OP_Yiel
66c0: 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
66d0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  /* in1 */.  int 
66e0: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
66f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6700: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
6710: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
6720: 6e 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d  n)==0 );.  pIn1-
6730: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6740: 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e  ;.  pcDest = (in
6750: 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70  t)pIn1->u.i;.  p
6760: 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20  In1->u.i = pc;. 
6770: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
6780: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
6790: 20 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20    pc = pcDest;. 
67a0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
67b0: 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c  code:  HaltIfNul
67c0: 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20 50  l  P1 P2 P3 P4 P
67d0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  5.** Synopsis:  
67e0: 69 66 20 72 5b 50 33 5d 20 6e 75 6c 6c 20 74 68  if r[P3] null th
67f0: 65 6e 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68  en halt.**.** Ch
6800: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
6810: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
6820: 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65  f it is NULL the
6830: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
6840: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
6850: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
6860: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
6870: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
6880: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
6890: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
68a0: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
68b0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
68c0: 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50   no-op..** The P
68d0: 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75  5 parameter shou
68e0: 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65  ld be 1..*/.case
68f0: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
6900: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
6910: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
6920: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
6930: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
6940: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
6950: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
6960: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
6970: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
6980: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
6990: 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45   * P4 P5.**.** E
69a0: 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  xit immediately.
69b0: 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f    All open curso
69c0: 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  rs, etc are clos
69d0: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
69e0: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
69f0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
6a00: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
6a10: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
6a20: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
6a30: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
6a40: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
6a50: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
6a60: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
6a70: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
6a80: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
6a90: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
6aa0: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
6ab0: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
6ac0: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
6ad0: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
6ae0: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
6af0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
6b00: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
6b10: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
6b20: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
6b30: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
6b40: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
6b50: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
6b60: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
6b70: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
6b80: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
6b90: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
6ba0: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
6bb0: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
6bc0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
6bd0: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
6be0: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
6bf0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
6c00: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
6c10: 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c  *.** P5 is a val
6c20: 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  ue between 0 and
6c30: 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74   4, inclusive, t
6c40: 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65  hat modifies the
6c50: 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a   P4 string..**.*
6c60: 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61  *    0:  (no cha
6c70: 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e  nge).**    1:  N
6c80: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e  OT NULL contrain
6c90: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
6ca0: 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f     2:  UNIQUE co
6cb0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
6cc0: 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48   P4.**    3:  CH
6cd0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ECK constraint f
6ce0: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
6cf0: 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  4:  FOREIGN KEY 
6d00: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
6d10: 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50  d: P4.**.** If P
6d20: 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e  5 is not zero an
6d30: 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68  d P4 is NULL, th
6d40: 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66  en everything af
6d50: 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a  ter the ":" is.*
6d60: 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a  * omitted..**.**
6d70: 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70   There is an imp
6d80: 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30  lied "Halt 0 0 0
6d90: 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  " instruction in
6da0: 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65  serted at the ve
6db0: 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65  ry end of.** eve
6dc0: 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20  ry program.  So 
6dd0: 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20  a jump past the 
6de0: 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  last instruction
6df0: 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a   of the program.
6e00: 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  ** is the same a
6e10: 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74  s executing Halt
6e20: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
6e30: 74 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  t: {.  const cha
6e40: 72 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73  r *zType;.  cons
6e50: 74 20 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b  t char *zLogFmt;
6e60: 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  ..  if( pOp->p1=
6e70: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d  =SQLITE_OK && p-
6e80: 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f  >pFrame ){.    /
6e90: 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70  * Halt the sub-p
6ea0: 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63  rogram. Return c
6eb0: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61  ontrol to the pa
6ec0: 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20  rent frame. */. 
6ed0: 20 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46     VdbeFrame *pF
6ee0: 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rame = p->pFrame
6ef0: 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20  ;.    p->pFrame 
6f00: 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  = pFrame->pParen
6f10: 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65  t;.    p->nFrame
6f20: 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  --;.    sqlite3V
6f30: 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
6f40: 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
6f50: 20 20 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56     pc = sqlite3V
6f60: 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28  dbeFrameRestore(
6f70: 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73  pFrame);.    las
6f80: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
6f90: 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20  tRowid;.    if( 
6fa0: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p2==OE_Igno
6fb0: 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  re ){.      /* I
6fc0: 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 20 69 73  nstruction pc is
6fd0: 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20   the OP_Program 
6fe0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65  that invoked the
6ff0: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20   sub-program .  
7000: 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79      ** currently
7010: 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49   being halted. I
7020: 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63  f the p2 instruc
7030: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f  tion of this OP_
7040: 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e  Halt.      ** in
7050: 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74  struction is set
7060: 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74   to OE_Ignore, t
7070: 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67  hen the sub-prog
7080: 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a  ram is throwing.
7090: 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f        ** an IGNO
70a0: 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e  RE exception. In
70b0: 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20   this case jump 
70c0: 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73  to the address s
70d0: 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a  pecified.      *
70e0: 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74  * as the p2 of t
70f0: 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  he calling OP_Pr
7100: 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20  ogram.  */.     
7110: 20 70 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d   pc = p->aOp[pc]
7120: 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20  .p2-1;.    }.   
7130: 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20   aOp = p->aOp;. 
7140: 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65     aMem = p->aMe
7150: 6d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  m;.    break;.  
7160: 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d  }.  p->rc = pOp-
7170: 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41  >p1;.  p->errorA
7180: 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d  ction = (u8)pOp-
7190: 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  >p2;.  p->pc = p
71a0: 63 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29  c;.  if( p->rc )
71b0: 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
71c0: 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69  5 ){.      stati
71d0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63  c const char * c
71e0: 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20  onst azType[] = 
71f0: 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55  { "NOT NULL", "U
7200: 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c  NIQUE", "CHECK",
7210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
7240: 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20  OREIGN KEY" };. 
7250: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
7260: 2d 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70 2d 3e  ->p5>=1 && pOp->
7270: 70 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20 20 74  p5<=4 );.      t
7280: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
7290: 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==1 );.      tes
72a0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
72b0: 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  2 );.      testc
72c0: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20  ase( pOp->p5==3 
72d0: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
72e0: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b  e( pOp->p5==4 );
72f0: 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 61  .      zType = a
7300: 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d  zType[pOp->p5-1]
7310: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
7320: 20 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a 20 20     zType = 0;.  
7330: 20 20 7d 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20    }.    zLogFmt 
7340: 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  = "abort at %d i
7350: 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20  n [%s]: %s";.   
7360: 20 69 66 28 20 7a 54 79 70 65 20 26 26 20 70 4f   if( zType && pO
7370: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20  p->p4.z ){.     
7380: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
7390: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
73a0: 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e  b, "%s constrain
73b0: 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20 0a  t failed: %s", .
73c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73d0: 20 20 20 20 20 20 20 7a 54 79 70 65 2c 20 70 4f         zType, pO
73e0: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65  p->p4.z);.    }e
73f0: 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  lse if( pOp->p4.
7400: 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  z ){.      sqlit
7410: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
7420: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
7430: 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  ", pOp->p4.z);. 
7440: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 54 79     }else if( zTy
7450: 70 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  pe ){.      sqli
7460: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
7470: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
7480: 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  s constraint fai
7490: 6c 65 64 22 2c 20 7a 54 79 70 65 29 3b 0a 20 20  led", zType);.  
74a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
74b0: 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f 72 74 20  LogFmt = "abort 
74c0: 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 22 3b 0a  at %d in [%s]";.
74d0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
74e0: 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 7a  3_log(pOp->p1, z
74f0: 4c 6f 67 46 6d 74 2c 20 70 63 2c 20 70 2d 3e 7a  LogFmt, pc, p->z
7500: 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  Sql, p->zErrMsg)
7510: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
7520: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
7530: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
7540: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
7550: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
7560: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
7570: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
7580: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
7590: 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
75a0: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
75b0: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
75c0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
75d0: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
75e0: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
75f0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
7600: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7610: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
7620: 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  s>0 || db->nDefe
7630: 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b  rredImmCons>0 );
7640: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
7650: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
7660: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
7670: 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  }.  goto vdbe_re
7680: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
7690: 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50  de: Integer P1 P
76a0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
76b0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a  sis: r[P2]=P1.**
76c0: 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69  .** The 32-bit i
76d0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20  nteger value P1 
76e0: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
76f0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
7700: 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a  case OP_Integer:
7710: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
7720: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7730: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
7740: 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  Op->p1;.  break;
7750: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
7760: 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a  nt64 * P2 * P4 *
7770: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
7780: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
7790: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
77a0: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
77b0: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
77c0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
77d0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
77e0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20  .case OP_Int64: 
77f0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
7800: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7810: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
7820: 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20  >p4.pI64!=0 );. 
7830: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f   pOut->u.i = *pO
7840: 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72  p->p4.pI64;.  br
7850: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
7860: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
7870: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
7880: 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20  code: Real * P2 
7890: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
78a0: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
78b0: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
78c0: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66  er to a 64-bit f
78d0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
78e0: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
78f0: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
7900: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
7910: 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20  se OP_Real: {   
7920: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
7930: 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75   as TK_FLOAT, ou
7940: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7950: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
7960: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73   MEM_Real;.  ass
7970: 65 72 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e  ert( !sqlite3IsN
7980: 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61  aN(*pOp->p4.pRea
7990: 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20  l) );.  pOut->r 
79a0: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  = *pOp->p4.pReal
79b0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
79c0: 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
79d0: 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50  String8 * P2 * P
79e0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
79f0: 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a   r[P2]='P4'.**.*
7a00: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
7a10: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20   nul terminated 
7a20: 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68  UTF-8 string. Th
7a30: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
7a40: 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74  nsformed .** int
7a50: 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62  o an OP_String b
7a60: 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63  efore it is exec
7a70: 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72  uted for the fir
7a80: 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65  st time..*/.case
7a90: 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20   OP_String8: {  
7aa0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
7ab0: 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74  s TK_STRING, out
7ac0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7ad0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7ae0: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d  4.z!=0 );.  pOp-
7af0: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
7b00: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
7b10: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
7b20: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
7b30: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7b40: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
7b50: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
7b60: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
7b70: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
7b80: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
7b90: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
7ba0: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
7bb0: 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72  ATIC);.    if( r
7bc0: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
7bd0: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
7be0: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
7bf0: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
7c00: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
7c10: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
7c20: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
7c30: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a   assert( pOut->z
7c40: 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20  Malloc==pOut->z 
7c50: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
7c60: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Out->flags & MEM
7c70: 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74  _Dyn );.    pOut
7c80: 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  ->zMalloc = 0;. 
7c90: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
7ca0: 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20  = MEM_Static;.  
7cb0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d    pOut->flags &=
7cc0: 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69   ~MEM_Dyn;.    i
7cd0: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
7ce0: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
7cf0: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
7d00: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
7d10: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
7d20: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
7d30: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
7d40: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
7d50: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
7d60: 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t->n;.  }.#endif
7d70: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
7d80: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
7d90: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
7da0: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
7db0: 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  ig;.  }.  /* Fal
7dc0: 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
7dd0: 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53   next case, OP_S
7de0: 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a  tring */.}.  ./*
7df0: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20   Opcode: String 
7e00: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
7e10: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
7e20: 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a  'P4' (len=P1).**
7e30: 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76  .** The string v
7e40: 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74  alue P4 of lengt
7e50: 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20  h P1 (bytes) is 
7e60: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
7e70: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
7e80: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
7e90: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
7ea0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
7eb0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
7ec0: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  0 );.  pOut->fla
7ed0: 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
7ee0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
7ef0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f  ;.  pOut->z = pO
7f00: 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d  p->p4.z;.  pOut-
7f10: 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  >n = pOp->p1;.  
7f20: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
7f30: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
7f40: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
7f50: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
7f60: 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50  * Opcode: Null P
7f70: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
7f80: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e  ynopsis:  r[P2..
7f90: 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57  P3]=NULL.**.** W
7fa0: 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f  rite a NULL into
7fb0: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20   registers P2.  
7fc0: 49 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68  If P3 greater th
7fd0: 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f  an P2, then also
7fe0: 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69   write.** NULL i
7ff0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20  nto register P3 
8000: 61 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74  and every regist
8010: 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32  er in between P2
8020: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a   and P3.  If P3.
8030: 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
8040: 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33  P2 (typically P3
8050: 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f   is zero) then o
8060: 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20  nly register P2 
8070: 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c  is.** set to NUL
8080: 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  L..**.** If the 
8090: 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P1 value is non-
80a0: 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20  zero, then also 
80b0: 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61  set the MEM_Clea
80c0: 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74  red flag so that
80d0: 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  .** NULL values 
80e0: 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65  will not compare
80f0: 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53   equal even if S
8100: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
8110: 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20  set on.** OP_Ne 
8120: 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73  or OP_Eq..*/.cas
8130: 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20  e OP_Null: {    
8140: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
8150: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
8160: 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75  nt cnt;.  u16 nu
8170: 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20 3d 20  llFlag;.  cnt = 
8180: 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b  pOp->p3-pOp->p2;
8190: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
81a0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
81b0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
81c0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
81d0: 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f  Flag = pOp->p1 ?
81e0: 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43   (MEM_Null|MEM_C
81f0: 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75  leared) : MEM_Nu
8200: 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74  ll;.  while( cnt
8210: 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b  >0 ){.    pOut++
8220: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
8230: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
8240: 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65  .    VdbeMemRele
8250: 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 70  ase(pOut);.    p
8260: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
8270: 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d  lFlag;.    cnt--
8280: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
8290: 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c  .../* Opcode: Bl
82a0: 6f 62 20 50 31 20 50 32 20 2a 20 50 34 0a 2a 2a  ob P1 P2 * P4.**
82b0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
82c0: 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a  =P4 (len=P1).**.
82d0: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
82e0: 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50  a blob of data P
82f0: 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53  1 bytes long.  S
8300: 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f  tore this.** blo
8310: 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  b in register P2
8320: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f  ..*/.case OP_Blo
8330: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
8340: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
8350: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
8360: 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53  rt( pOp->p1 <= S
8370: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
8380: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
8390: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
83a0: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d   pOp->p4.z, pOp-
83b0: 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f  >p1, 0, 0);.  pO
83c0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
83d0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
83e0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
83f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8400: 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65  Opcode: Variable
8410: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
8420: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8430: 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34  =parameter(P1,P4
8440: 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ).**.** Transfer
8450: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
8460: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50  ound parameter P
8470: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
8480: 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  P2.**.** If the 
8490: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d  parameter is nam
84a0: 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d  ed, then its nam
84b0: 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 20  e appears in P4 
84c0: 61 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54 68  and P3==1..** Th
84d0: 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73  e P4 value is us
84e0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69  ed by sqlite3_bi
84f0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
8500: 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e()..*/.case OP_
8510: 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20  Variable: {     
8520: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
8530: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d  rerelease */.  M
8540: 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20  em *pVar;       
8550: 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74  /* Value being t
8560: 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20  ransferred */.. 
8570: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
8580: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
8590: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65  ->nVar );.  asse
85a0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
85b0: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70   || pOp->p4.z==p
85c0: 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d  ->azVar[pOp->p1-
85d0: 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26  1] );.  pVar = &
85e0: 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20  p->aVar[pOp->p1 
85f0: 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  - 1];.  if( sqli
8600: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
8610: 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f  (pVar) ){.    go
8620: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8630: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8640: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
8650: 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74  , pVar, MEM_Stat
8660: 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ic);.  UPDATE_MA
8670: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
8680: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8690: 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31   Opcode: Move P1
86a0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
86b0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 40 50 33  nopsis:  r[P2@P3
86c0: 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a  ]=r[P1@P3].**.**
86d0: 20 4d 6f 76 65 20 74 68 65 20 76 61 6c 75 65 73   Move the values
86e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
86f0: 2e 50 31 2b 50 33 20 6f 76 65 72 20 69 6e 74 6f  .P1+P3 over into
8700: 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32  .** registers P2
8710: 2e 2e 50 32 2b 50 33 2e 20 20 52 65 67 69 73 74  ..P2+P3.  Regist
8720: 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 61 72  ers P1..P1+P3 ar
8730: 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e  e.** left holdin
8740: 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73  g a NULL.  It is
8750: 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65   an error for re
8760: 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a  gister ranges.**
8770: 20 50 31 2e 2e 50 31 2b 50 33 20 61 6e 64 20 50   P1..P1+P3 and P
8780: 32 2e 2e 50 32 2b 50 33 20 74 6f 20 6f 76 65 72  2..P2+P3 to over
8790: 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lap..*/.case OP_
87a0: 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a  Move: {.  char *
87b0: 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f  zMalloc;   /* Ho
87c0: 6c 64 69 6e 67 20 76 61 72 69 61 62 6c 65 20 66  lding variable f
87d0: 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d  or allocated mem
87e0: 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ory */.  int n; 
87f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
8800: 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
8810: 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f   left to copy */
8820: 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
8830: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
8840: 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a  to copy from */.
8850: 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
8860: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
8870: 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20  o copy to */..  
8880: 6e 20 3d 20 70 4f 70 2d 3e 70 33 20 2b 20 31 3b  n = pOp->p3 + 1;
8890: 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
88a0: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
88b0: 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26  .  assert( n>0 &
88c0: 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29  & p1>0 && p2>0 )
88d0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e  ;.  assert( p1+n
88e0: 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31  <=p2 || p2+n<=p1
88f0: 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   );..  pIn1 = &a
8900: 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Mem[p1];.  pOut 
8910: 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 77  = &aMem[p2];.  w
8920: 68 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20 20  hile( n-- ){.   
8930: 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26   assert( pOut<=&
8940: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  aMem[(p->nMem-p-
8950: 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20  >nCursor)] );.  
8960: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d    assert( pIn1<=
8970: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70  &aMem[(p->nMem-p
8980: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
8990: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
89a0: 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
89b0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
89c0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
89d0: 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74    zMalloc = pOut
89e0: 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70  ->zMalloc;.    p
89f0: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  Out->zMalloc = 0
8a00: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
8a10: 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70  eMemMove(pOut, p
8a20: 49 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  In1);.#ifdef SQL
8a30: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
8a40: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
8a50: 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26  om>=&aMem[p1] &&
8a60: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
8a70: 6d 3c 26 61 4d 65 6d 5b 70 31 2b 70 4f 70 2d 3e  m<&aMem[p1+pOp->
8a80: 70 33 5d 20 29 7b 0a 20 20 20 20 20 20 70 4f 75  p3] ){.      pOu
8a90: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d  t->pScopyFrom +=
8aa0: 20 70 31 20 2d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p1 - pOp->p2;. 
8ab0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
8ac0: 70 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pIn1->zMalloc = 
8ad0: 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47  zMalloc;.    REG
8ae0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b  ISTER_TRACE(p2++
8af0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e  , pOut);.    pIn
8b00: 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  1++;.    pOut++;
8b10: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
8b20: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79  ./* Opcode: Copy
8b30: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
8b40: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40   Synopsis: r[P2@
8b50: 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a  P3]=r[P1@P3].**.
8b60: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
8b70: 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e  f registers P1..
8b80: 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73  P1+P3 into regis
8b90: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a  ters P2..P2+P3..
8ba0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
8bb0: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
8bc0: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
8bd0: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
8be0: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
8bf0: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
8c00: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
8c10: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
8c20: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
8c30: 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  py: {.  int n;..
8c40: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
8c50: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
8c60: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
8c70: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
8c80: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
8c90: 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65  =pIn1 );.  while
8ca0: 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ( 1 ){.    sqlit
8cb0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
8cc0: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
8cd0: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20   MEM_Ephem);.   
8ce0: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
8cf0: 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51  pOut);.#ifdef SQ
8d00: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70  LITE_DEBUG.    p
8d10: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
8d20: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  = 0;.#endif.    
8d30: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
8d40: 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e  Op->p2+pOp->p3-n
8d50: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28  , pOut);.    if(
8d60: 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61   (n--)==0 ) brea
8d70: 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  k;.    pOut++;. 
8d80: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
8d90: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8da0: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
8db0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
8dc0: 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  sis: r[P2]=r[P1]
8dd0: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
8de0: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
8df0: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
8e00: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
8e10: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
8e20: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
8e30: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
8e40: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
8e50: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
8e60: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
8e70: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
8e80: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
8e90: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
8ea0: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
8eb0: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
8ec0: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
8ed0: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
8ee0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
8ef0: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
8f00: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
8f10: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
8f20: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
8f30: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
8f40: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
8f50: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
8f60: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
8f70: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
8f80: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
8f90: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
8fa0: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
8fb0: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
8fc0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
8fd0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
8fe0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
8ff0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
9000: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
9010: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
9020: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
9030: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
9040: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
9050: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
9060: 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d  EBUG.  if( pOut-
9070: 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29  >pScopyFrom==0 )
9080: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9090: 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66  m = pIn1;.#endif
90a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
90b0: 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f  Opcode: ResultRo
90c0: 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  w P1 P2 * * *.**
90d0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70   Synopsis:  outp
90e0: 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a  ut=r[P1@P2].**.*
90f0: 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20  * The registers 
9100: 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32  P1 through P1+P2
9110: 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e  -1 contain a sin
9120: 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65  gle row of.** re
9130: 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f  sults. This opco
9140: 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71  de causes the sq
9150: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
9160: 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a  l to terminate.*
9170: 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  * with an SQLITE
9180: 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65  _ROW return code
9190: 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20   and it sets up 
91a0: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
91b0: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f  .** structure to
91c0: 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20   provide access 
91d0: 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20 76 61  to the top P1 va
91e0: 6c 75 65 73 20 61 73 20 74 68 65 20 72 65 73 75  lues as the resu
91f0: 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a 63 61  lt.** row..*/.ca
9200: 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a  se OP_ResultRow:
9210: 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
9220: 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72    int i;.  asser
9230: 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e  t( p->nResColumn
9240: 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61  ==pOp->p2 );.  a
9250: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
9260: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
9270: 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28  p->p1+pOp->p2<=(
9280: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
9290: 6f 72 29 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20 49  or)+1 );..  /* I
92a0: 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74  f this statement
92b0: 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d   has violated im
92c0: 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20  mediate foreign 
92d0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  key constraints,
92e0: 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74   do.  ** not ret
92f0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
9300: 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e  f rows modified.
9310: 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45   And do not RELE
9320: 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ASE the statemen
9330: 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  t.  ** transacti
9340: 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20  on. It needs to 
9350: 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
9360: 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45   */.  if( SQLITE
9370: 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74  _OK!=(rc = sqlit
9380: 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
9390: 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65   0)) ){.    asse
93a0: 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51  rt( db->flags&SQ
93b0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
93c0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d  ;.    assert( p-
93d0: 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
93e0: 20 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   );.    break;. 
93f0: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20   }..  /* If the 
9400: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
9410: 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
9420: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61  sqlite3.flags ma
9430: 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44  sk, then .  ** D
9440: 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  ML statements in
9450: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
9460: 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e   to return the n
9470: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20  umber of rows . 
9480: 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   ** modified to 
9490: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
94a0: 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74  s the only way t
94b0: 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20  hat a VM that.  
94c0: 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65  ** opens a state
94d0: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
94e0: 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73   may invoke this
94f0: 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20   opcode..  **.  
9500: 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20  ** In case this 
9510: 69 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d  is such a statem
9520: 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73  ent, close any s
9530: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
9540: 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64  tion.  ** opened
9550: 20 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f   by this VM befo
9560: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e  re returning con
9570: 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72  trol to the user
9580: 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a  . This is to.  *
9590: 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74  * ensure that st
95a0: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
95b0: 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20  ions are always 
95c0: 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72  nested, not over
95d0: 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66  lapping..  ** If
95e0: 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d   the open statem
95f0: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent-transaction 
9600: 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65  is not closed he
9610: 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65  re, then the use
9620: 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20  r.  ** may step 
9630: 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20  another VM that 
9640: 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74  opens its own st
9650: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
9660: 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d  ion. This.  ** m
9670: 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c  ay lead to overl
9680: 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  apping statement
9690: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20   transactions.. 
96a0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61   **.  ** The sta
96b0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
96c0: 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f  on is never a to
96d0: 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74  p-level transact
96e0: 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a  ion.  Hence.  **
96f0: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c   the RELEASE cal
9700: 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65  l below can neve
9710: 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61  r fail..  */.  a
9720: 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65  ssert( p->iState
9730: 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66  ment==0 || db->f
9740: 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e  lags&SQLITE_Coun
9750: 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20  tRows );.  rc = 
9760: 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65  sqlite3VdbeClose
9770: 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56  Statement(p, SAV
9780: 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b  EPOINT_RELEASE);
9790: 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
97a0: 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20  =SQLITE_OK) ){. 
97b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
97c0: 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
97d0: 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  ll ephemeral cur
97e0: 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a  sor row caches *
97f0: 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20  /.  p->cacheCtr 
9800: 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b  = (p->cacheCtr +
9810: 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b   2)|1;..  /* Mak
9820: 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c  e sure the resul
9830: 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ts of the curren
9840: 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74  t row are \000 t
9850: 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61  erminated.  ** a
9860: 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69 67  nd have an assig
9870: 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20 72  ned type.  The r
9880: 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70  esults are de-ep
9890: 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20  hemeralized as. 
98a0: 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65 63   ** a side effec
98b0: 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d  t..  */.  pMem =
98c0: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
98d0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
98e0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f  .  for(i=0; i<pO
98f0: 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20  p->p2; i++){.   
9900: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
9910: 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b  lid(&pMem[i]) );
9920: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
9930: 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ize(&pMem[i]);. 
9940: 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
9950: 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  [i].flags & MEM_
9960: 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20  Ephem)==0.      
9970: 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69        || (pMem[i
9980: 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ].flags & (MEM_S
9990: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
99a0: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
99b0: 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61  dbeMemNulTermina
99c0: 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  te(&pMem[i]);.  
99d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
99e0: 53 74 6f 72 65 54 79 70 65 28 26 70 4d 65 6d 5b  StoreType(&pMem[
99f0: 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  i]);.    REGISTE
9a00: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b  R_TRACE(pOp->p1+
9a10: 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  i, &pMem[i]);.  
9a20: 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c  }.  if( db->mall
9a30: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
9a40: 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65  no_mem;..  /* Re
9a50: 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a  turn SQLITE_ROW.
9a60: 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 70    */.  p->pc = p
9a70: 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51  c + 1;.  rc = SQ
9a80: 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f  LITE_ROW;.  goto
9a90: 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a   vdbe_return;.}.
9aa0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63  ./* Opcode: Conc
9ab0: 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  at P1 P2 P3 * *.
9ac0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9ad0: 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a  3]=r[P2]+r[P1].*
9ae0: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78  *.** Add the tex
9af0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  t in register P1
9b00: 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66   onto the end of
9b10: 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20   the text in.** 
9b20: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
9b30: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
9b40: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
9b50: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68  .** If either th
9b60: 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20  e P1 or P2 text 
9b70: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74  are NULL then st
9b80: 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a  ore NULL in P3..
9b90: 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20  **.**   P3 = P2 
9ba0: 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69  || P1.**.** It i
9bb0: 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31  s illegal for P1
9bc0: 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68   and P3 to be th
9bd0: 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e  e same register.
9be0: 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69   Sometimes,.** i
9bf0: 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65  f P3 is the same
9c00: 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c   register as P2,
9c10: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
9c20: 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74  ion is able.** t
9c30: 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79  o avoid a memcpy
9c40: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ()..*/.case OP_C
9c50: 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20  oncat: {        
9c60: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
9c70: 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e  _CONCAT, in1, in
9c80: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  2, out3 */.  i64
9c90: 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20   nByte;..  pIn1 
9ca0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
9cb0: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
9cc0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
9cd0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9ce0: 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
9cf0: 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66  n1!=pOut );.  if
9d00: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
9d10: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
9d20: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
9d30: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
9d40: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
9d50: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66   break;.  }.  if
9d60: 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  ( ExpandBlob(pIn
9d70: 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62  1) || ExpandBlob
9d80: 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f  (pIn2) ) goto no
9d90: 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66  _mem;.  Stringif
9da0: 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
9db0: 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  );.  Stringify(p
9dc0: 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In2, encoding);.
9dd0: 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e    nByte = pIn1->
9de0: 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69  n + pIn2->n;.  i
9df0: 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69  f( nByte>db->aLi
9e00: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
9e10: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
9e20: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
9e30: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
9e40: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72  ag(pOut, MEM_Str
9e50: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
9e60: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
9e70: 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20  , (int)nByte+2, 
9e80: 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20  pOut==pIn2) ){. 
9e90: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
9ea0: 20 20 7d 0a 20 20 69 66 28 20 70 4f 75 74 21 3d    }.  if( pOut!=
9eb0: 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63  pIn2 ){.    memc
9ec0: 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32  py(pOut->z, pIn2
9ed0: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20  ->z, pIn2->n);. 
9ee0: 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75   }.  memcpy(&pOu
9ef0: 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70  t->z[pIn2->n], p
9f00: 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29  In1->z, pIn1->n)
9f10: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
9f20: 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b  e]=0;.  pOut->z[
9f30: 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20  nByte+1] = 0;.  
9f40: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
9f50: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
9f60: 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
9f70: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
9f80: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
9f90: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
9fa0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
9fb0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64  ../* Opcode: Add
9fc0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9fd0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
9fe0: 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]+r[P2].**
9ff0: 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75  .** Add the valu
a000: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
a010: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
a020: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
a030: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
a040: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
a050: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
a060: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
a070: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
a080: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
a090: 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50  e: Multiply P1 P
a0a0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
a0b0: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
a0c0: 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a  1]*r[P2].**.**.*
a0d0: 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76  * Multiply the v
a0e0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
a0f0: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
a100: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
a110: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
a120: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
a130: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
a140: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
a150: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
a160: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
a170: 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50  code: Subtract P
a180: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
a190: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
a1a0: 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]-r[P1].**.*
a1b0: 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76  * Subtract the v
a1c0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
a1d0: 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c   P1 from the val
a1e0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
a1f0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
a200: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
a210: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
a220: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
a230: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
a240: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
a250: 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50  Opcode: Divide P
a260: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
a270: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
a280: 72 5b 50 31 5d 2f 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]/r[P2].**.*
a290: 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c  * Divide the val
a2a0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
a2b0: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
a2c0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
a2d0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
a2e0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
a2f0: 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e  r P3 (P3=P2/P1).
a300: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
a310: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
a320: 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74   is zero, then t
a330: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
a340: 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  L. If either inp
a350: 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  ut is .** NULL, 
a360: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
a370: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
a380: 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50  : Remainder P1 P
a390: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
a3a0: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
a3b0: 31 5d 25 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 43  1]%r[P2].**.** C
a3c0: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
a3d0: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
a3e0: 65 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74  er division of t
a3f0: 68 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72  he value in.** r
a400: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
a410: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
a420: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
a430: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50   the result in P
a440: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
a450: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
a460: 50 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P2 is zero the r
a470: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
a480: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
a490: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
a4a0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
a4b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4d0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
a4e0: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
a4f0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
a500: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
a510: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
a520: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
a530: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
a540: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a560: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
a570: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
a580: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
a590: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
a5a0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
a5b0: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
a5c0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
a5d0: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
a5e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
a5f0: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
a600: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
a610: 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20  char bIntint;   
a620: 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61  /* Started out a
a630: 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70  s two integer op
a640: 65 72 61 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  erands */.  int 
a650: 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43  flags;      /* C
a660: 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c  ombined MEM_* fl
a670: 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e  ags from both in
a680: 70 75 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41  puts */.  i64 iA
a690: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
a6a0: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65  eger value of le
a6b0: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
a6c0: 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20  i64 iB;         
a6d0: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
a6e0: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
a6f0: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41  d */.  double rA
a700: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
a710: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
a720: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
a730: 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rB;      /* Rea
a740: 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  l value of right
a750: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70   operand */..  p
a760: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
a770: 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d  >p1];.  applyNum
a780: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
a790: 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
a7a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
a7b0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
a7c0: 69 74 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75  ity(pIn2);.  pOu
a7d0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a7e0: 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49  3];.  flags = pI
a7f0: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
a800: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
a810: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
a820: 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  )!=0 ) goto arit
a830: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
a840: 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49  _null;.  if( (pI
a850: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32  n1->flags & pIn2
a860: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
a870: 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  t)==MEM_Int ){. 
a880: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
a890: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
a8a0: 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69  ->u.i;.    bInti
a8b0: 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74  nt = 1;.    swit
a8c0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
a8d0: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
a8e0: 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20  _Add:       if( 
a8f0: 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
a900: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
a910: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
a920: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
a930: 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c  btract:  if( sql
a940: 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42  ite3SubInt64(&iB
a950: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
a960: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
a970: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
a980: 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65  ply:  if( sqlite
a990: 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41  3MulInt64(&iB,iA
a9a0: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
a9b0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
a9c0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
a9d0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
a9e0: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
a9f0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
aa00: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
aa10: 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d  ( iA==-1 && iB==
aa20: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
aa30: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20   goto fp_math;. 
aa40: 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b         iB /= iA;
aa50: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
aa60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
aa70: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
aa80: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
aa90: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
aaa0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
aab0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
aac0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
aad0: 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20    iB %= iA;.    
aae0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
aaf0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
ab00: 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20  t->u.i = iB;.   
ab10: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
ab20: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
ab30: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e    }else{.    bIn
ab40: 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74  tint = 0;.fp_mat
ab50: 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  h:.    rA = sqli
ab60: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
ab70: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
ab80: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
ab90: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
aba0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
abb0: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
abc0: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
abd0: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
abe0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
abf0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
ac00: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
ac10: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ac20: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
ac30: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
ac40: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
ac50: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
ac60: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
ac70: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
ac80: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
ac90: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
aca0: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
acb0: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
acc0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
acd0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
ace0: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
acf0: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
ad00: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
ad10: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
ad20: 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72       iA = (i64)r
ad30: 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20  A;.        iB = 
ad40: 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20  (i64)rB;.       
ad50: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
ad60: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
ad70: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
ad80: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
ad90: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
ada0: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
adb0: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
adc0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
add0: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
ade0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
adf0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
ae00: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
ae10: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
ae20: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
ae30: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
ae40: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
ae50: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
ae60: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
ae70: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
ae80: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a    pOut->r = rB;.
ae90: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
aea0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61  ag(pOut, MEM_Rea
aeb0: 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61  l);.    if( (fla
aec0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
aed0: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
aee0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
aef0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
af00: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
af10: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
af20: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
af30: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
af40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
af50: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
af60: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
af70: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
af80: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
af90: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
afa0: 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74  a CollSeq struct
afb0: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
afc0: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
afd0: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
afe0: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
aff0: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
b000: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
b010: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
b020: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
b030: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
b040: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
b050: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
b060: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
b070: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
b080: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
b090: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
b0a0: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
b0b0: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
b0c0: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
b0d0: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
b0e0: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
b0f0: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
b100: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
b110: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
b120: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
b130: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
b140: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
b150: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
b160: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
b170: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
b180: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
b190: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
b1a0: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
b1b0: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
b1c0: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
b1d0: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
b1e0: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
b1f0: 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75  licly, only to u
b200: 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65  ser functions de
b210: 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e  fined in func.c.
b220: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c  .*/.case OP_Coll
b230: 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  Seq: {.  assert(
b240: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
b250: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66  _COLLSEQ );.  if
b260: 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
b270: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
b280: 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
b290: 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a  p->p1], 0);.  }.
b2a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b2b0: 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20  pcode: Function 
b2c0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
b2d0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
b2e0: 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29  ]=func(r[P2@P5])
b2f0: 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20  .**.** Invoke a 
b300: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50  user function (P
b310: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
b320: 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72  o a Function str
b330: 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64  ucture that.** d
b340: 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74  efines the funct
b350: 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67  ion) with P5 arg
b360: 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f  uments taken fro
b370: 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
b380: 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  d.** successors.
b390: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
b3a0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  the function is 
b3b0: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
b3c0: 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74  er P3..** Regist
b3d0: 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62  er P3 must not b
b3e0: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e  e one of the fun
b3f0: 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a  ction inputs..**
b400: 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62  .** P1 is a 32-b
b410: 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63  it bitmask indic
b420: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
b430: 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65   not each argume
b440: 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75  nt to the .** fu
b450: 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72  nction was deter
b460: 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73  mined to be cons
b470: 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20  tant at compile 
b480: 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72  time. If the fir
b490: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77  st.** argument w
b4a0: 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e  as constant then
b4b0: 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20   bit 0 of P1 is 
b4c0: 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
b4d0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a  d to determine.*
b4e0: 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64  * whether meta d
b4f0: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
b500: 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74  ith a user funct
b510: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69  ion argument usi
b520: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
b530: 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20  3_set_auxdata() 
b540: 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c  API may be safel
b550: 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c  y retained until
b560: 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76   the next.** inv
b570: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
b580: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
b590: 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20  e also: AggStep 
b5a0: 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a  and AggFinal.*/.
b5b0: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
b5c0: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  : {.  int i;.  M
b5d0: 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69  em *pArg;.  sqli
b5e0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
b5f0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
b600: 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20   **apVal;.  int 
b610: 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  n;..  n = pOp->p
b620: 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e  5;.  apVal = p->
b630: 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28  apArg;.  assert(
b640: 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29   apVal || n==0 )
b650: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
b660: 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
b670: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
b680: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
b690: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
b6a0: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
b6b0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
b6c0: 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20  .  assert( n==0 
b6d0: 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26  || (pOp->p2>0 &&
b6e0: 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e   pOp->p2+n<=(p->
b6f0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
b700: 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  +1) );.  assert(
b710: 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32   pOp->p3<pOp->p2
b720: 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
b730: 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67  ->p2+n );.  pArg
b740: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
b750: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
b760: 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b  n; i++, pArg++){
b770: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
b780: 49 73 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b  IsValid(pArg) );
b790: 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
b7a0: 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65  pArg;.    Deephe
b7b0: 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a  meralize(pArg);.
b7c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
b7d0: 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41 72 67  emStoreType(pArg
b7e0: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
b7f0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c  TRACE(pOp->p2+i,
b800: 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61   pArg);.  }..  a
b810: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
b820: 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29  pe==P4_FUNCDEF )
b830: 3b 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20  ;.  ctx.pFunc = 
b840: 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
b850: 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d   ctx.s.flags = M
b860: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73  EM_Null;.  ctx.s
b870: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e  .db = db;.  ctx.
b880: 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
b890: 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  x.s.zMalloc = 0;
b8a0: 0a 20 20 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b  .  ctx.iOp = pc;
b8b0: 0a 20 20 63 74 78 2e 70 56 64 62 65 20 3d 20 70  .  ctx.pVdbe = p
b8c0: 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  ;..  /* The outp
b8d0: 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65  ut cell may alre
b8e0: 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65  ady have a buffe
b8f0: 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76  r allocated. Mov
b900: 65 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74  e.  ** the point
b910: 65 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69  er to ctx.s so i
b920: 6e 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d  n case the user-
b930: 66 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65  function can use
b940: 0a 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64  .  ** the alread
b950: 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  y allocated buff
b960: 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c  er instead of al
b970: 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f  locating a new o
b980: 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  ne..  */.  sqlit
b990: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63  e3VdbeMemMove(&c
b9a0: 74 78 2e 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d  tx.s, pOut);.  M
b9b0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26 63  emSetTypeFlag(&c
b9c0: 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  tx.s, MEM_Null);
b9d0: 0a 0a 20 20 63 74 78 2e 66 45 72 72 6f 72 4f 72  ..  ctx.fErrorOr
b9e0: 41 75 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 63  Aux = 0;.  if( c
b9f0: 74 78 2e 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c  tx.pFunc->funcFl
ba00: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e  ags & SQLITE_FUN
ba10: 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20  C_NEEDCOLL ){.  
ba20: 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f    assert( pOp>aO
ba30: 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p );.    assert(
ba40: 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d   pOp[-1].p4type=
ba50: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
ba60: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
ba70: 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
ba80: 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78  llSeq );.    ctx
ba90: 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d  .pColl = pOp[-1]
baa0: 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20  .p4.pColl;.  }. 
bab0: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
bac0: 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a   lastRowid;.  (*
bad0: 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63  ctx.pFunc->xFunc
bae0: 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c  )(&ctx, n, apVal
baf0: 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35  ); /* IMP: R-245
bb00: 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61  05-23230 */.  la
bb10: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
bb20: 73 74 52 6f 77 69 64 3b 0a 0a 20 20 69 66 28 20  stRowid;..  if( 
bb30: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
bb40: 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20   ){.    /* Even 
bb50: 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28  though a malloc(
bb60: 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74 68  ) has failed, th
bb70: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
bb80: 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 75   of the.    ** u
bb90: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79  ser function may
bba0: 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e 20   have called an 
bbb0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 58  sqlite3_result_X
bbc0: 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  XX() function.  
bbd0: 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20 61    ** to return a
bbe0: 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c   value. The foll
bbf0: 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61  owing call relea
bc00: 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63 65  ses any resource
bc10: 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69 61  s.    ** associa
bc20: 74 65 64 20 77 69 74 68 20 73 75 63 68 20 61 20  ted with such a 
bc30: 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  value..    */.  
bc40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
bc50: 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b  Release(&ctx.s);
bc60: 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
bc70: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
bc80: 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  he function retu
bc90: 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74  rned an error, t
bca0: 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f  hrow an exceptio
bcb0: 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 66  n */.  if( ctx.f
bcc0: 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20  ErrorOrAux ){.  
bcd0: 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f    if( ctx.isErro
bce0: 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  r ){.      sqlit
bcf0: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
bd00: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
bd10: 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
bd20: 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a  _text(&ctx.s));.
bd30: 20 20 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69        rc = ctx.i
bd40: 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
bd50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
bd60: 65 74 65 41 75 78 44 61 74 61 28 70 2c 20 70 63  eteAuxData(p, pc
bd70: 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a  , pOp->p1);.  }.
bd80: 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
bd90: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
bda0: 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73  ction into regis
bdb0: 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69  ter P3 */.  sqli
bdc0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
bdd0: 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e  oding(&ctx.s, en
bde0: 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74  coding);.  sqlit
bdf0: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
be00: 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69  ut, &ctx.s);.  i
be10: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
be20: 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b  mTooBig(pOut) ){
be30: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
be40: 67 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20  g;.  }..#if 0.  
be50: 2f 2a 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e  /* The app-defin
be60: 65 64 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  ed function has 
be70: 64 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74  done something t
be80: 68 61 74 20 61 73 20 63 61 75 73 65 64 20 74 68  hat as caused th
be90: 69 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e  is.  ** statemen
bea0: 74 20 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50  t to expire.  (P
beb0: 65 72 68 61 70 73 20 74 68 65 20 66 75 6e 63 74  erhaps the funct
bec0: 69 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74  ion called sqlit
bed0: 65 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77  e3_exec().  ** w
bee0: 69 74 68 20 61 20 43 52 45 41 54 45 20 54 41 42  ith a CREATE TAB
bef0: 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20  LE statement.). 
bf00: 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70   */.  if( p->exp
bf10: 69 72 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49  ired ) rc = SQLI
bf20: 54 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66  TE_ABORT;.#endif
bf30: 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ..  REGISTER_TRA
bf40: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  CE(pOp->p3, pOut
bf50: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
bf60: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
bf70: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
bf80: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
bf90: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
bfa0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
bfb0: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
bfc0: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
bfd0: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
bfe0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
bff0: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
c000: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
c010: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
c020: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
c030: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
c040: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
c050: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
c060: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
c070: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
c080: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b    r[P3]=r[P1]|r[
c090: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
c0a0: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
c0b0: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
c0c0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
c0d0: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
c0e0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
c0f0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
c100: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
c110: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
c120: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
c130: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
c140: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
c150: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
c160: 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d  P3]=r[P2]<<r[P1]
c170: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
c180: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
c190: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
c1a0: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
c1b0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
c1c0: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
c1d0: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
c1e0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
c1f0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
c200: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
c210: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
c220: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
c230: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c240: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
c250: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
c260: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
c270: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e  s:  r[P3]=r[P2]>
c280: 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69  >r[P1].**.** Shi
c290: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
c2a0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
c2b0: 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74   P2 to the right
c2c0: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
c2d0: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
c2e0: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
c2f0: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
c300: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
c310: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
c320: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
c330: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
c340: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
c350: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
c360: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20  P_BitAnd:       
c370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c380: 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20  e as TK_BITAND, 
c390: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
c3a0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a  /.case OP_BitOr:
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c3d0: 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  BITOR, in1, in2,
c3e0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
c3f0: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20  _ShiftLeft:     
c400: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c410: 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69   as TK_LSHIFT, i
c420: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
c430: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69  .case OP_ShiftRi
c440: 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ght: {          
c450: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
c460: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
c470: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69   out3 */.  i64 i
c480: 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69  A;.  u64 uA;.  i
c490: 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a  64 iB;.  u8 op;.
c4a0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
c4b0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
c4c0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
c4d0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
c4e0: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
c4f0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
c500: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
c510: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
c520: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
c530: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
c540: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41   break;.  }.  iA
c550: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
c560: 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
c570: 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iB = sqlite3Vdbe
c580: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
c590: 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    op = pOp->opco
c5a0: 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50  de;.  if( op==OP
c5b0: 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69  _BitAnd ){.    i
c5c0: 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65  A &= iB;.  }else
c5d0: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f   if( op==OP_BitO
c5e0: 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69  r ){.    iA |= i
c5f0: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  B;.  }else if( i
c600: 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  B!=0 ){.    asse
c610: 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  rt( op==OP_Shift
c620: 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  Right || op==OP_
c630: 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20  ShiftLeft );..  
c640: 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67    /* If shifting
c650: 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61   by a negative a
c660: 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20  mount, shift in 
c670: 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74  the other direct
c680: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69  ion */.    if( i
c690: 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  B<0 ){.      ass
c6a0: 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67  ert( OP_ShiftRig
c6b0: 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  ht==OP_ShiftLeft
c6c0: 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d  +1 );.      op =
c6d0: 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20   2*OP_ShiftLeft 
c6e0: 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20  + 1 - op;.      
c6f0: 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20  iB = iB>(-64) ? 
c700: 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a  -iB : 64;.    }.
c710: 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20  .    if( iB>=64 
c720: 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69  ){.      iA = (i
c730: 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  A>=0 || op==OP_S
c740: 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20  hiftLeft) ? 0 : 
c750: 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  -1;.    }else{. 
c760: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c       memcpy(&uA,
c770: 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29   &iA, sizeof(uA)
c780: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d  );.      if( op=
c790: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b  =OP_ShiftLeft ){
c7a0: 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20  .        uA <<= 
c7b0: 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  iB;.      }else{
c7c0: 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20  .        uA >>= 
c7d0: 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  iB;.        /* S
c7e0: 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20  ign-extend on a 
c7f0: 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61  right shift of a
c800: 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72   negative number
c810: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
c820: 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28  iA<0 ) uA |= (((
c830: 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (u64)0xffffffff)
c840: 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66  <<32)|0xffffffff
c850: 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20  ) << (64-iB);.  
c860: 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63      }.      memc
c870: 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a  py(&iA, &uA, siz
c880: 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a  eof(iA));.    }.
c890: 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
c8a0: 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79  = iA;.  MemSetTy
c8b0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
c8c0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
c8d0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
c8e0: 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20  dImm  P1 P2 * * 
c8f0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
c900: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
c910: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
c920: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
c930: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
c940: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
c950: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
c960: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
c970: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
c980: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
c990: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
c9a0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
c9b0: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
c9c0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
c9d0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
c9e0: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
c9f0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
ca00: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
ca10: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
ca20: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
ca30: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
ca40: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
ca50: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
ca60: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
ca70: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
ca80: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ca90: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
caa0: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
cab0: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
cac0: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
cad0: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
cae0: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
caf0: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
cb00: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
cb10: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
cb20: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
cb30: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
cb40: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
cb50: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
cb60: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
cb70: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
cb80: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
cb90: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
cba0: 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 41 66  ->p1];.  applyAf
cbb0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
cbc0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
cbd0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66   encoding);.  if
cbe0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
cbf0: 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
cc00: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
cc10: 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
cc20: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
cc30: 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
cc40: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
cc50: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
cc60: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
cc70: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   1;.    }.  }els
cc80: 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  e{.    MemSetTyp
cc90: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
cca0: 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
ccb0: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
ccc0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
ccd0: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
cce0: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
ccf0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
cd00: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
cd10: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
cd20: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
cd30: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
cd40: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
cd50: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
cd60: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
cd70: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
cd80: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
cd90: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
cda0: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
cdb0: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
cdc0: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
cdd0: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
cde0: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
cdf0: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
ce00: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
ce10: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
ce20: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
ce30: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
ce40: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
ce50: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
ce60: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
ce70: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
ce80: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
ce90: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
cea0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
ceb0: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
cec0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
ced0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
cee0: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
cef0: 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a  ode: ToText P1 *
cf00: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
cf10: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
cf20: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
cf30: 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68  e text..** If th
cf40: 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72  e value is numer
cf50: 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ic, convert it t
cf60: 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67  o a string using
cf70: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
cf80: 6e 74 20 6f 66 20 70 72 69 6e 74 66 28 29 2e 20  nt of printf(). 
cf90: 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65   Blob values are
cfa0: 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a   unchanged and.*
cfb0: 2a 20 61 72 65 20 61 66 74 65 72 77 61 72 64 73  * are afterwards
cfc0: 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65   simply interpre
cfd0: 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a  ted as text..**.
cfe0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
cff0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
d000: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
d010: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
d020: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54  ..*/.case OP_ToT
d030: 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ext: {          
d040: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d050: 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69  as TK_TO_TEXT, i
d060: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
d070: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
d080: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d090: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66  e(p, pIn1);.  if
d0a0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
d0b0: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
d0c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f  ;.  assert( MEM_
d0d0: 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e  Str==(MEM_Blob>>
d0e0: 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  3) );.  pIn1->fl
d0f0: 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c  ags |= (pIn1->fl
d100: 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33  ags&MEM_Blob)>>3
d110: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
d120: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
d130: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
d140: 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  g);.  rc = Expan
d150: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61  dBlob(pIn1);.  a
d160: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
d170: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
d180: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
d190: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
d1a0: 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d  s &= ~(MEM_Int|M
d1b0: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62  EM_Real|MEM_Blob
d1c0: 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50  |MEM_Zero);.  UP
d1d0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
d1e0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
d1f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d200: 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20  ToBlob P1 * * * 
d210: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
d220: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
d230: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42  ter P1 to be a B
d240: 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  LOB..** If the v
d250: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
d260: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
d270: 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a   string first..*
d280: 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69  * Strings are si
d290: 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74  mply reinterpret
d2a0: 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68  ed as blobs with
d2b0: 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f   no change.** to
d2c0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
d2d0: 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  data..**.** A NU
d2e0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
d2f0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
d300: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
d310: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
d320: 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20  se OP_ToBlob: { 
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d340: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
d350: 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20  O_BLOB, in1 */. 
d360: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d370: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
d380: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d390: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20  Null ) break;.  
d3a0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
d3b0: 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20   & MEM_Blob)==0 
d3c0: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
d3d0: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
d3e0: 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f  E_AFF_TEXT, enco
d3f0: 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72  ding);.    asser
d400: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
d410: 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e   MEM_Str || db->
d420: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
d430: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
d440: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f  ag(pIn1, MEM_Blo
d450: 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
d460: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
d470: 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e  ~(MEM_TypeMask&~
d480: 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20  MEM_Blob);.  }. 
d490: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
d4a0: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72  SIZE(pIn1);.  br
d4b0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
d4c0: 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20  e: ToNumeric P1 
d4d0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
d4e0: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
d4f0: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
d500: 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68  be numeric (eith
d510: 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72  er an.** integer
d520: 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70   or a floating-p
d530: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a  oint number.).**
d540: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
d550: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
d560: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
d570: 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65   to an using the
d580: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
d590: 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66  f atoi() or atof
d5a0: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69  () and store 0 i
d5b0: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
d5c0: 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73  sion .** is poss
d5d0: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
d5e0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
d5f0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
d600: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
d610: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
d620: 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a  se OP_ToNumeric:
d630: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
d640: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d650: 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e  K_TO_NUMERIC, in
d660: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
d670: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
d680: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
d690: 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  merify(pIn1);.  
d6a0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
d6b0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
d6c0: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
d6d0: 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20  e: ToInt P1 * * 
d6e0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
d6f0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
d700: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
d710: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a  n integer.  If.*
d720: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63  * The value is c
d730: 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20  urrently a real 
d740: 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73  number, drop its
d750: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
d760: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
d770: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
d780: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
d790: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
d7a0: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
d7b0: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
d7c0: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
d7d0: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
d7e0: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
d7f0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
d800: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
d810: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
d820: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
d830: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
d840: 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20   OP_ToInt: {    
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d860: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49   same as TK_TO_I
d870: 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  NT, in1 */.  pIn
d880: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d890: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
d8a0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
d8b0: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  l)==0 ){.    sql
d8c0: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
d8d0: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  erify(pIn1);.  }
d8e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
d8f0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
d900: 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21  _OMIT_CAST) && !
d910: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
d920: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
d930: 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  NT)./* Opcode: T
d940: 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  oReal P1 * * * *
d950: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
d960: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d970: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c  er P1 to be a fl
d980: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
d990: 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76  ber..** If The v
d9a0: 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c  alue is currentl
d9b0: 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f  y an integer, co
d9c0: 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20  nvert it..** If 
d9d0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
d9e0: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
d9f0: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
da00: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
da10: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
da20: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
da30: 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f   store 0.0 if no
da40: 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e   such conversion
da50: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
da60: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
da70: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
da80: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
da90: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
daa0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
dab0: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
dac0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
dad0: 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20   as TK_TO_REAL, 
dae0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
daf0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
db00: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
db10: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69  ge(p, pIn1);.  i
db20: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
db30: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
db40: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
db50: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
db60: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
db70: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
db80: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
db90: 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e  _CAST) && !defin
dba0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
dbb0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a  LOATING_POINT) *
dbc0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
dbd0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
dbe0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
dbf0: 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]<r[P3] goto
dc00: 20 50 33 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P3.**.** Compar
dc10: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
dc20: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
dc30: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
dc40: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
dc50: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
dc60: 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P2.  .**.** If t
dc70: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
dc80: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
dc90: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
dca0: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
dcb0: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
dcc0: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
dcd0: 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54  p.  If the SQLIT
dce0: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a  E_JUMPIFNULL .**
dcf0: 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68   bit is clear th
dd00: 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
dd10: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
dd20: 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  d is NULL..**.**
dd30: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
dd40: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
dd50: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
dd60: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
dd70: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
dd80: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
dd90: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
dda0: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
ddb0: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
ddc0: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
ddd0: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
dde0: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
ddf0: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
de00: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
de10: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
de20: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
de30: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
de40: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
de50: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
de60: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
de70: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
de80: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
de90: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
dea0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
deb0: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
dec0: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
ded0: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
dee0: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
def0: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
df00: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
df10: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
df20: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
df30: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
df40: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
df50: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
df60: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
df70: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
df80: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
df90: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
dfa0: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
dfb0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
dfc0: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
dfd0: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
dfe0: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
dff0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
e000: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
e010: 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f  4 is  used to do
e020: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e030: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
e040: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
e050: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
e060: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
e070: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
e080: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
e090: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
e0a0: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
e0b0: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
e0c0: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
e0d0: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
e0e0: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
e0f0: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
e100: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
e110: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
e120: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
e130: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
e140: 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  blobs..**.** If 
e150: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
e160: 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  P2 bit of P5 is 
e170: 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74  set, then do not
e180: 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c   jump.  Instead,
e190: 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c  .** store a bool
e1a0: 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68  ean result (eith
e1b0: 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e  er 0, or 1, or N
e1c0: 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72  ULL) in register
e1d0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
e1e0: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e1f0: 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35  bit is set in P5
e200: 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75  , then NULL valu
e210: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
e220: 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e  d.** equal to on
e230: 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69  e another, provi
e240: 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64 6f  ded that they do
e250: 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72 20   not have their 
e260: 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62  MEM_Cleared.** b
e270: 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  it set..*/./* Op
e280: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
e290: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
e2a0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72  sis: if r[P1]!=r
e2b0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
e2c0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
e2d0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
e2e0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
e2f0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
e300: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
e310: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
e320: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
e330: 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65  e not equal.  Se
e340: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e350: 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  for.** additiona
e360: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e370: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
e380: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
e390: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
e3a0: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
e3b0: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
e3c0: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
e3d0: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
e3e0: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
e3f0: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
e400: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e410: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
e420: 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20  n is false.  If 
e430: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e440: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
e450: 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a  result is true..
e460: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
e470: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e480: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
e490: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
e4a0: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
e4b0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
e4c0: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
e4d0: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
e4e0: 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33  ode: Eq P1 P2 P3
e4f0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e500: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b  is: if r[P1]==r[
e510: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
e520: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
e530: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
e540: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
e550: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
e560: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
e570: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
e580: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
e590: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
e5a0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e5b0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e5c0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
e5d0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
e5e0: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
e5f0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
e600: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
e610: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
e620: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
e630: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
e640: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
e650: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
e660: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
e670: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
e680: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
e690: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e6a0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e6b0: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
e6c0: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
e6d0: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
e6e0: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
e6f0: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
e700: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
e710: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
e720: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
e730: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
e740: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
e750: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
e760: 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f   r[P1]<=r[P3] go
e770: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
e780: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
e790: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
e7a0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
e7b0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
e7c0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
e7d0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
e7e0: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
e7f0: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
e800: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
e810: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
e820: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
e830: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
e840: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
e850: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
e860: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
e870: 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d  : if r[P1]>r[P3]
e880: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
e890: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e8a0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e8b0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e8c0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e8d0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
e8e0: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
e8f0: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
e900: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
e910: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
e920: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
e930: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
e940: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e950: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
e960: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e970: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e980: 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]>=r[P3] goto
e990: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
e9a0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e9b0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e9c0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e9d0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
e9e0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
e9f0: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
ea00: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
ea10: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
ea20: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
ea30: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
ea40: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
ea50: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
ea60: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
ea70: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
ea80: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ea90: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
eaa0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
eab0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
eac0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
ead0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
eae0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
eb00: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
eb10: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
eb20: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
eb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
eb40: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
eb50: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
eb60: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
eb70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
eb80: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
eb90: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
eba0: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
ebb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ebc0: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
ebd0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
ebe0: 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
ebf0: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
ec00: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
ec10: 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70  f pIn1 against p
ec20: 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  In3 */.  char af
ec30: 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
ec40: 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20  Affinity to use 
ec50: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
ec60: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20  /.  u16 flags1; 
ec70: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
ec80: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
ec90: 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20   of pIn1->flags 
eca0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b  */.  u16 flags3;
ecb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
ecc0: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
ecd0: 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73  e of pIn3->flags
ece0: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
ecf0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
ed00: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
ed10: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20  ->p3];.  flags1 
ed20: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn1->flags;. 
ed30: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
ed40: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
ed50: 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
ed60: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
ed70: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
ed80: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
ed90: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
eda0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
edb0: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
edc0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
edd0: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
ede0: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
edf0: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
ee00: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
ee10: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
ee20: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
ee30: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
ee40: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
ee50: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
ee60: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
ee70: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
ee80: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
ee90: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
eea0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
eeb0: 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  e );.      asser
eec0: 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  t( (flags1 & MEM
eed0: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
eee0: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
eef0: 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20  1&MEM_Null)!=0. 
ef00: 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33        && (flags3
ef10: 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20  &MEM_Null)!=0.  
ef20: 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26       && (flags3&
ef30: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a  MEM_Cleared)==0.
ef40: 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
ef50: 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65   res = 0;  /* Re
ef60: 73 75 6c 74 73 20 61 72 65 20 65 71 75 61 6c 20  sults are equal 
ef70: 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  */.      }else{.
ef80: 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b          res = 1;
ef90: 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65    /* Results are
efa0: 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20   not equal */.  
efb0: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
efc0: 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  .      /* SQLITE
efd0: 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72  _NULLEQ is clear
efe0: 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e   and at least on
eff0: 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  e operand is NUL
f000: 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  L,.      ** then
f010: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
f020: 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20  lways NULL..    
f030: 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73    ** The jump is
f040: 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51   taken if the SQ
f050: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
f060: 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20  bit is set..    
f070: 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
f080: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f090: 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20  JUMPIFNULL ){.  
f0a0: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
f0b0: 70 32 2d 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73  p2-1;.      }els
f0c0: 65 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20  e if( pOp->p5 & 
f0d0: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
f0e0: 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d  {.        pOut =
f0f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
f100: 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54  .        MemSetT
f110: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
f120: 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20  M_Null);.       
f130: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
f140: 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
f150: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
f160: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  eak;.    }.  }el
f170: 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68  se{.    /* Neith
f180: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
f190: 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72  LL.  Do a compar
f1a0: 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66  ison. */.    aff
f1b0: 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20  inity = pOp->p5 
f1c0: 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  & SQLITE_AFF_MAS
f1d0: 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e  K;.    if( affin
f1e0: 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70  ity ){.      app
f1f0: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
f200: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64   affinity, encod
f210: 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 70 70 6c  ing);.      appl
f220: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  yAffinity(pIn3, 
f230: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64 69  affinity, encodi
f240: 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64  ng);.      if( d
f250: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
f260: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
f270: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
f280: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
f290: 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70  4_COLLSEQ || pOp
f2a0: 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b  ->p4.pColl==0 );
f2b0: 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
f2c0: 70 49 6e 31 29 3b 0a 20 20 20 20 45 78 70 61 6e  pIn1);.    Expan
f2d0: 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20  dBlob(pIn3);.   
f2e0: 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
f2f0: 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
f300: 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
f310: 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63  ll);.  }.  switc
f320: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
f330: 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71  {.    case OP_Eq
f340: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d  :    res = res==
f350: 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
f360: 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20    case OP_Ne:   
f370: 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20   res = res!=0;  
f380: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
f390: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73  se OP_Lt:    res
f3a0: 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62   = res<0;      b
f3b0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
f3c0: 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Le:    res = r
f3d0: 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es<=0;     break
f3e0: 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74  ;.    case OP_Gt
f3f0: 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30  :    res = res>0
f400: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
f410: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
f420: 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20   res = res>=0;  
f430: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
f440: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
f450: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
f460: 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  .    pOut = &aMe
f470: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
f480: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
f490: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d  (p, pOut);.    M
f4a0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
f4b0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
f4c0: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65    pOut->u.i = re
f4d0: 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  s;.    REGISTER_
f4e0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
f4f0: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Out);.  }else if
f500: 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20  ( res ){.    pc 
f510: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
f520: 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20  ..  /* Undo any 
f530: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
f540: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20  applyAffinity() 
f550: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
f560: 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e  isters. */.  pIn
f570: 31 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 31  1->flags = (pIn1
f580: 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70  ->flags&~MEM_Typ
f590: 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31  eMask) | (flags1
f5a0: 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a  &MEM_TypeMask);.
f5b0: 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20    pIn3->flags = 
f5c0: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45  (pIn3->flags&~ME
f5d0: 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
f5e0: 6c 61 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61  lags3&MEM_TypeMa
f5f0: 73 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  sk);.  break;.}.
f600: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d  ./* Opcode: Perm
f610: 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34  utation * * * P4
f620: 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
f630: 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65   permutation use
f640: 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70  d by the OP_Comp
f650: 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20  are operator to 
f660: 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20  be the array.** 
f670: 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50  of integers in P
f680: 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72  4..**.** The per
f690: 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  mutation is only
f6a0: 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65   valid until the
f6b0: 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65   next OP_Compare
f6c0: 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65   that has.** the
f6d0: 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
f6e0: 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54  bit set in P5. T
f6f0: 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f  ypically the OP_
f700: 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75  Permutation shou
f710: 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d  ld .** occur imm
f720: 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74  ediately prior t
f730: 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  o the OP_Compare
f740: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72  ..*/.case OP_Per
f750: 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73  mutation: {.  as
f760: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
f770: 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29  e==P4_INTARRAY )
f780: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
f790: 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72  >p4.ai );.  aPer
f7a0: 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  mute = pOp->p4.a
f7b0: 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  i;.  break;.}../
f7c0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
f7d0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
f7e0: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
f7f0: 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65  wo vectors of re
f800: 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50  gisters in reg(P
f810: 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29  1)..reg(P1+P3-1)
f820: 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76   (call this.** v
f830: 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69  ector "A") and i
f840: 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50  n reg(P2)..reg(P
f850: 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20  2+P3-1) ("B").  
f860: 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20  Save the result 
f870: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  of.** the compar
f880: 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20  ison for use by 
f890: 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70  the next OP_Jump
f8a0: 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a   instruct..**.**
f8b0: 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
f8c0: 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
f8d0: 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
f8e0: 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69  order of compari
f8f0: 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d  son is.** determ
f900: 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74  ined by the most
f910: 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75   recent OP_Permu
f920: 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e  tation operator.
f930: 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c    If the.** OPFL
f940: 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69  AG_PERMUTE bit i
f950: 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
f960: 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61  gister are compa
f970: 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61  red in sequentia
f980: 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  l.** order..**.*
f990: 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66  * P4 is a KeyInf
f9a0: 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  o structure that
f9b0: 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69   defines collati
f9c0: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64  ng sequences and
f9d0: 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20   sort.** orders 
f9e0: 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73  for the comparis
f9f0: 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
fa00: 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  tion applies to 
fa10: 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c  registers.** onl
fa20: 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  y.  The KeyInfo 
fa30: 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65  elements are use
fa40: 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a  d sequentially..
fa50: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72  **.** The compar
fa60: 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63  ison is a sort c
fa70: 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55  omparison, so NU
fa80: 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  LLs compare equa
fa90: 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20  l,.** NULLs are 
faa0: 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72  less than number
fab0: 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c  s, numbers are l
fac0: 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73  ess than strings
fad0: 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73  ,.** and strings
fae0: 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62   are less than b
faf0: 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lobs..*/.case OP
fb00: 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e  _Compare: {.  in
fb10: 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
fb20: 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32  int p1;.  int p2
fb30: 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66  ;.  const KeyInf
fb40: 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
fb50: 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65  nt idx;.  CollSe
fb60: 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20  q *pColl;    /* 
fb70: 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
fb80: 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69  ce to use on thi
fb90: 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20  s term */.  int 
fba0: 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f  bRev;          /
fbb0: 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45  * True for DESCE
fbc0: 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72  NDING sort order
fbd0: 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d   */..  if( (pOp-
fbe0: 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52  >p5 & OPFLAG_PER
fbf0: 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d  MUTE)==0 ) aPerm
fc00: 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70  ute = 0;.  n = p
fc10: 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
fc20: 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
fc30: 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
fc40: 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
fc50: 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
fc60: 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
fc70: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
fc80: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
fc90: 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
fca0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
fcb0: 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
fcc0: 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
fcd0: 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
fce0: 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
fcf0: 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
fd00: 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
fd10: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
fd20: 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
fd30: 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
fd40: 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  +mx<=(p->nMem-p-
fd50: 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
fd60: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
fd70: 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e  rt( p1>0 && p1+n
fd80: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
fd90: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
fda0: 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
fdb0: 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  p2+n<=(p->nMem-p
fdc0: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
fdd0: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
fde0: 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
fdf0: 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
fe00: 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
fe10: 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
fe20: 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73  e[i] : i;.    as
fe30: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
fe40: 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20  (&aMem[p1+idx]) 
fe50: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
fe60: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
fe70: 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p2+idx]) );.    
fe80: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
fe90: 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b  1+idx, &aMem[p1+
fea0: 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  idx]);.    REGIS
feb0: 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78  TER_TRACE(p2+idx
fec0: 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  , &aMem[p2+idx])
fed0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c  ;.    assert( i<
fee0: 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
fef0: 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20   );.    pColl = 
ff00: 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b  pKeyInfo->aColl[
ff10: 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70  i];.    bRev = p
ff20: 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72  KeyInfo->aSortOr
ff30: 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d  der[i];.    iCom
ff40: 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65  pare = sqlite3Me
ff50: 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70  mCompare(&aMem[p
ff60: 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32  1+idx], &aMem[p2
ff70: 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20  +idx], pColl);. 
ff80: 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20     if( iCompare 
ff90: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65  ){.      if( bRe
ffa0: 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d  v ) iCompare = -
ffb0: 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20  iCompare;.      
ffc0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
ffd0: 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  .  aPermute = 0;
ffe0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
fff0: 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20  Opcode: Jump P1 
10000 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
10010 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74  Jump to the inst
10020 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65  ruction at addre
10030 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33  ss P1, P2, or P3
10040 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
10050 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20  ether.** in the 
10060 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43  most recent OP_C
10070 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69  ompare instructi
10080 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72  on the P1 vector
10090 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a   was less than.*
100a0 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67  * equal to, or g
100b0 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
100c0 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65  P2 vector, respe
100d0 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65  ctively..*/.case
100e0 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20   OP_Jump: {     
100f0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
10100 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72  */.  if( iCompar
10110 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  e<0 ){.    pc = 
10120 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20 7d  pOp->p1 - 1;.  }
10130 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
10140 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  e==0 ){.    pc =
10150 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
10160 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20  }else{.    pc = 
10170 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 7d  pOp->p3 - 1;.  }
10180 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10190 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50  Opcode: And P1 P
101a0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
101b0 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
101c0 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] && r[P2]).**.
101d0 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
101e0 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76  cal AND of the v
101f0 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
10200 72 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  rs P1 and P2 and
10210 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65  .** write the re
10220 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74  sult into regist
10230 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
10240 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
10250 69 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65  is 0 (false) the
10260 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
10270 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65  0 even if.** the
10280 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
10290 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
102a0 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55  d true or two NU
102b0 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55  LLs give.** a NU
102c0 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a  LL output..*/./*
102d0 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50   Opcode: Or P1 P
102e0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
102f0 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50  psis: r[P3]=(r[P
10300 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a  1] || r[P2]).**.
10310 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69  ** Take the logi
10320 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61  cal OR of the va
10330 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
10340 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
10350 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77  * store the answ
10360 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
10370 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
10380 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e  er P1 or P2 is n
10390 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68  onzero (true) th
103a0 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
103b0 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65   1 (true).** eve
103c0 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69  n if the other i
103d0 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
103e0 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20   NULL and false 
103f0 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20  or two NULLs.** 
10400 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70  give a NULL outp
10410 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ut..*/.case OP_A
10420 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
10430 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41   /* same as TK_A
10440 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
10450 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72  t3 */.case OP_Or
10460 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
10470 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52  /* same as TK_OR
10480 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
10490 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20   */.  int v1;   
104a0 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64   /* Left operand
104b0 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  :  0==FALSE, 1==
104c0 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
104d0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e   or NULL */.  in
104e0 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68  t v2;    /* Righ
104f0 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41  t operand: 0==FA
10500 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
10510 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
10520 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
10530 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
10540 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
10550 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
10560 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v1 = 2;.  }els
10570 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69  e{.    v1 = sqli
10580 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
10590 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn1)!=0;.  }.  
105a0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
105b0 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
105c0 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  2->flags & MEM_N
105d0 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20  ull ){.    v2 = 
105e0 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
105f0 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v2 = sqlite3Vdbe
10600 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d  IntValue(pIn2)!=
10610 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
10620 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64  ->opcode==OP_And
10630 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
10640 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
10650 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d  ar and_logic[] =
10660 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31   { 0, 0, 0, 0, 1
10670 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a  , 2, 0, 2, 2 };.
10680 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67      v1 = and_log
10690 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
106a0 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63  else{.    static
106b0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
106c0 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20  char or_logic[] 
106d0 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20  = { 0, 1, 2, 1, 
106e0 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b  1, 1, 2, 1, 2 };
106f0 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67  .    v1 = or_log
10700 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d  ic[v1*3+v2];.  }
10710 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
10720 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
10730 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d  v1==2 ){.    Mem
10740 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
10750 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d  , MEM_Null);.  }
10760 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  else{.    pOut->
10770 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65  u.i = v1;.    Me
10780 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
10790 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
107a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
107b0 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50  Opcode: Not P1 P
107c0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
107d0 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50  sis: r[P2]= !r[P
107e0 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
107f0 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
10800 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
10810 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
10820 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
10830 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
10840 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
10850 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
10860 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
10870 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
10880 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
10890 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
108a0 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
108b0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
108c0 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
108d0 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
108e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
108f0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
10900 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
10910 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
10920 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
10930 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
10940 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65  Null(pOut);.  }e
10950 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
10960 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
10970 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64  pOut, !sqlite3Vd
10980 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
10990 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
109a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
109b0 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
109c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
109d0 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a  P1]= ~r[P1].**.*
109e0 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
109f0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
10a00 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
10a10 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
10a20 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
10a30 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
10a40 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
10a50 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
10a60 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
10a70 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
10a80 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
10a90 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
10aa0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
10ab0 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
10ac0 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
10ad0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
10ae0 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
10af0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
10b00 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
10b10 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
10b20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
10b30 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
10b40 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
10b50 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
10b60 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74 65 33 56  (pOut, ~sqlite3V
10b70 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
10b80 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ));.  }.  break;
10b90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
10ba0 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
10bb0 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 69 66 20 4f  **.** Check if O
10bc0 50 5f 4f 6e 63 65 20 66 6c 61 67 20 50 31 20 69  P_Once flag P1 i
10bd0 73 20 73 65 74 2e 20 49 66 20 73 6f 2c 20 6a 75  s set. If so, ju
10be0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
10bf0 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
10c00 0a 2a 2a 20 73 65 74 20 74 68 65 20 66 6c 61 67  .** set the flag
10c10 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
10c20 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
10c30 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
10c40 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20  se OP_Once: {   
10c50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
10c60 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
10c70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46  Op->p1<p->nOnceF
10c80 6c 61 67 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  lag );.  if( p->
10c90 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
10ca0 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  1] ){.    pc = p
10cb0 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73  Op->p2-1;.  }els
10cc0 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46  e{.    p->aOnceF
10cd0 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31  lag[pOp->p1] = 1
10ce0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10cf0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
10d00 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
10d10 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
10d20 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
10d30 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
10d40 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
10d50 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
10d60 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
10d70 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
10d80 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
10d90 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
10da0 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
10db0 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20 6e 6f  jump if P3 is no
10dc0 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70  n-zero..*/./* Op
10dd0 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50  code: IfNot P1 P
10de0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
10df0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
10e00 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
10e10 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20  er P1 is False. 
10e20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
10e30 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73   considered fals
10e40 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75  e if it has a nu
10e50 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a  meric value of z
10e60 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
10e70 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
10e80 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
10e90 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20  e jump if P3 is 
10ea0 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
10eb0 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20  _If:            
10ec0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
10ed0 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  1 */.case OP_IfN
10ee0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
10ef0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
10f00 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31  .  int c;.  pIn1
10f10 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
10f20 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
10f30 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10f40 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e  ){.    c = pOp->
10f50 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66  p3;.  }else{.#if
10f60 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
10f70 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
10f80 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64     c = sqlite3Vd
10f90 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
10fa0 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63  !=0;.#else.    c
10fb0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
10fc0 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  alValue(pIn1)!=0
10fd0 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  .0;.#endif.    i
10fe0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
10ff0 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21  OP_IfNot ) c = !
11000 63 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 20 29  c;.  }.  if( c )
11010 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
11020 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2-1;.  }.  brea
11030 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11040 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20   IsNull P1 P2 * 
11050 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11060 20 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c    if r[P1]==NULL
11070 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
11080 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
11090 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
110a0 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a  er P1 is NULL..*
110b0 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c  /.case OP_IsNull
110c0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
110d0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e  * same as TK_ISN
110e0 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
110f0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
11100 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
11110 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
11120 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a  MEM_Null)!=0 ){.
11130 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
11140 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
11150 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11160 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
11170 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11180 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c  : if r[P1]!=NULL
11190 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
111a0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
111b0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
111c0 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c  er P1 is not NUL
111d0 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  L.  .*/.case OP_
111e0 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  NotNull: {      
111f0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11200 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d   TK_NOTNULL, jum
11210 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
11220 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11230 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
11240 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11250 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  )==0 ){.    pc =
11260 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
11270 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11280 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20   Opcode: Column 
11290 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
112a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
112b0 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  3]=PX.**.** Inte
112c0 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74  rpret the data t
112d0 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
112e0 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72  ints to as a str
112f0 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69  ucture built usi
11300 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65  ng.** the MakeRe
11310 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
11320 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65  .  (See the Make
11330 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f  Record opcode fo
11340 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20  r additional.** 
11350 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
11360 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  t the format of 
11370 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72  the data.)  Extr
11380 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f  act the P2-th co
11390 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69  lumn.** from thi
113a0 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68  s record.  If th
113b0 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
113c0 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c  t (P2+1) .** val
113d0 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ues in the recor
113e0 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  d, extract a NUL
113f0 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c  L..**.** The val
11400 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20  ue extracted is 
11410 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
11420 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
11430 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  the column conta
11440 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50  ins fewer than P
11450 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65  2 fields, then e
11460 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20  xtract a NULL.  
11470 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34  Or,.** if the P4
11480 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
11490 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61  4_MEM use the va
114a0 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72  lue of the P4 ar
114b0 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65  gument as.** the
114c0 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49   result..**.** I
114d0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45  f the OPFLAG_CLE
114e0 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73  ARCACHE bit is s
114f0 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20  et on P5 and P1 
11500 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  is a pseudo-tabl
11510 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65  e cursor,.** the
11520 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74  n the cache of t
11530 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73  he cursor is res
11540 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72  et prior to extr
11550 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  acting the colum
11560 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  n..** The first 
11570 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73  OP_Column agains
11580 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
11590 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65   after the value
115a0 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a   of the content.
115b0 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ** register has 
115c0 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68  changed should h
115d0 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74  ave this bit set
115e0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
115f0 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
11600 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
11610 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65  FARG bits are se
11620 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20  t on P5 when.** 
11630 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75  the result is gu
11640 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79  aranteed to only
11650 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
11660 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65  argument of a le
11670 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70  ngth().** or typ
11680 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  eof() function, 
11690 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54  respectively.  T
116a0 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61  he loading of la
116b0 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65  rge blobs can be
116c0 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20  .** skipped for 
116d0 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c  length() and all
116e0 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67   content loading
116f0 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20   can be skipped 
11700 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f  for typeof()..*/
11710 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a  .case OP_Column:
11720 20 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f 61 64   {.  u32 payload
11730 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65  Size;   /* Numbe
11740 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
11750 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36  e record */.  i6
11760 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  4 payloadSize64;
11770 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
11780 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
11790 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20  d */.  int p1;  
117a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 31 20            /* P1 
117b0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63  value of the opc
117c0 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  ode */.  int p2;
117d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63              /* c
117e0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20  olumn number to 
117f0 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64  retrieve */.  Vd
11800 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
11810 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
11820 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  sor */.  char *z
11830 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  Rec;        /* P
11840 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65  ointer to comple
11850 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a  te record-data *
11860 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
11870 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54  rsr;   /* The BT
11880 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ree cursor */.  
11890 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20  u32 *aType;     
118a0 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68     /* aType[i] h
118b0 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63  olds the numeric
118c0 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74   type of the i-t
118d0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  h column */.  u3
118e0 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20  2 *aOffset;     
118f0 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69   /* aOffset[i] i
11900 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72  s offset to star
11910 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d  t of data for i-
11920 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  th column */.  i
11930 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
11940 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66    /* number of f
11950 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
11960 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  ord */.  int len
11970 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
11980 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
11990 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
119a0 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
119b0 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
119c0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
119d0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61  counter */.  cha
119e0 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20  r *zData;       
119f0 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
11a00 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
11a10 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ded */.  Mem *pD
11a20 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57  est;        /* W
11a30 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68  here to write th
11a40 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75  e extracted valu
11a50 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e */.  Mem sMem;
11a60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
11a70 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
11a80 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
11a90 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b  d */.  u8 *zIdx;
11aa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
11ab0 65 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a  ex into header *
11ac0 2f 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b  /.  u8 *zEndHdr;
11ad0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
11ae0 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
11af0 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
11b00 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74   */.  u32 offset
11b10 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73  ;        /* Offs
11b20 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  et into the data
11b30 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c   */.  u32 szFiel
11b40 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  d;       /* Numb
11b50 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
11b60 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
11b70 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 73  field */.  int s
11b80 7a 48 64 72 3b 20 20 20 20 20 20 20 20 20 2f 2a  zHdr;         /*
11b90 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   Size of the hea
11ba0 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61  der size field a
11bb0 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72  t start of recor
11bc0 64 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c  d */.  int avail
11bd0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
11be0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
11bf0 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a  available data *
11c00 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20  /.  u32 t;      
11c10 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65         /* A type
11c20 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72   code from the r
11c30 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a  ecord header */.
11c40 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20    Mem *pReg;    
11c50 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61       /* PseudoTa
11c60 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  ble input regist
11c70 65 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d 20 70  er */...  p1 = p
11c80 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
11c90 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d 20 30  Op->p2;.  pC = 0
11ca0 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d  ;.  memset(&sMem
11cb0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
11cc0 29 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31  ));.  assert( p1
11cd0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
11ce0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
11cf0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
11d00 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
11d10 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  or) );.  pDest =
11d20 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
11d30 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
11d40 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20  nge(p, pDest);. 
11d50 20 7a 52 65 63 20 3d 20 30 3b 0a 0a 20 20 2f 2a   zRec = 0;..  /*
11d60 20 54 68 69 73 20 62 6c 6f 63 6b 20 73 65 74 73   This block sets
11d70 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 70 61   the variable pa
11d80 79 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62 65 20  yloadSize to be 
11d90 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
11da0 20 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73 20 69   of.  ** bytes i
11db0 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  n the record..  
11dc0 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69 73 20  **.  ** zRec is 
11dd0 73 65 74 20 74 6f 20 62 65 20 74 68 65 20 63 6f  set to be the co
11de0 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 74  mplete text of t
11df0 68 65 20 72 65 63 6f 72 64 20 69 66 20 69 74 20  he record if it 
11e00 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 20 20  is available..  
11e10 2a 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74 65 20  ** The complete 
11e20 72 65 63 6f 72 64 20 74 65 78 74 20 69 73 20 61  record text is a
11e30 6c 77 61 79 73 20 61 76 61 69 6c 61 62 6c 65 20  lways available 
11e40 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  for pseudo-table
11e50 73 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 72 65  s.  ** If the re
11e60 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20 69  cord is stored i
11e70 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68 65 20  n a cursor, the 
11e80 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20  complete record 
11e90 74 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20  text.  ** might 
11ea0 62 65 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20  be available in 
11eb0 74 68 65 20 20 70 43 2d 3e 61 52 6f 77 20 63 61  the  pC->aRow ca
11ec0 63 68 65 2e 20 20 4f 72 20 69 74 20 6d 69 67 68  che.  Or it migh
11ed0 74 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a 20 49  t not be..  ** I
11ee0 66 20 74 68 65 20 64 61 74 61 20 69 73 20 75 6e  f the data is un
11ef0 61 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52 65 63  available,  zRec
11f00 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
11f10 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 61 6c  .  **.  ** We al
11f20 73 6f 20 63 6f 6d 70 75 74 65 20 74 68 65 20 6e  so compute the n
11f30 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
11f40 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 20   in the record. 
11f50 20 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a 20 20   For cursors,.  
11f60 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
11f70 20 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74 6f 72   columns is stor
11f80 65 64 20 69 6e 20 74 68 65 20 56 64 62 65 43 75  ed in the VdbeCu
11f90 72 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c 65 6d  rsor.nField elem
11fa0 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43 20 3d  ent..  */.  pC =
11fb0 20 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b 0a 20   p->apCsr[p1];. 
11fc0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
11fd0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
11fe0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
11ff0 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  LE.  assert( pC-
12000 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30 20  >pVtabCursor==0 
12010 29 3b 0a 23 65 6e 64 69 66 0a 20 20 70 43 72 73  );.#endif.  pCrs
12020 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
12030 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d 30 20  .  if( pCrsr!=0 
12040 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 72 65  ){.    /* The re
12050 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64 20 69  cord is stored i
12060 6e 20 61 20 42 2d 54 72 65 65 20 2a 2f 0a 20 20  n a B-Tree */.  
12070 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
12080 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
12090 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  C);.    if( rc )
120a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
120b0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66  to_error;.    if
120c0 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
120d0 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53 69  .      payloadSi
120e0 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  ze = 0;.    }els
120f0 65 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53  e if( pC->cacheS
12100 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43  tatus==p->cacheC
12110 74 72 20 29 7b 0a 20 20 20 20 20 20 70 61 79 6c  tr ){.      payl
12120 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 70 61  oadSize = pC->pa
12130 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20  yloadSize;.     
12140 20 7a 52 65 63 20 3d 20 28 63 68 61 72 2a 29 70   zRec = (char*)p
12150 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d 65 6c  C->aRow;.    }el
12160 73 65 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64  se if( pC->isInd
12170 65 78 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ex ){.      asse
12180 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
12190 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
121a0 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 56 56  rsr) );.      VV
121b0 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
121c0 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
121d0 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64  (pCrsr, &payload
121e0 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 61  Size64);.      a
121f0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
12200 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 54 72 75  E_OK );   /* Tru
12210 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  e because of Cur
12220 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c  sorMoveto() call
12230 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20   above */.      
12240 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  /* sqlite3BtreeP
12250 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73  arseCellPtr() us
12260 65 73 20 67 65 74 56 61 72 69 6e 74 33 32 28 29  es getVarint32()
12270 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a   to extract the.
12280 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64        ** payload
12290 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20   size, so it is 
122a0 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70  impossible for p
122b0 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20  ayloadSize64 to 
122c0 62 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  be.      ** larg
122d0 65 72 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e  er than 32 bits.
122e0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
122f0 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  ( (payloadSize64
12300 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33   & SQLITE_MAX_U3
12310 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64  2)==(u64)payload
12320 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20  Size64 );.      
12330 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75  payloadSize = (u
12340 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  32)payloadSize64
12350 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
12360 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
12370 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
12380 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
12390 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63       VVA_ONLY(rc
123a0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
123b0 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
123c0 26 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20  &payloadSize);. 
123d0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
123e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
123f0 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61  /* DataSize() ca
12400 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20  nnot fail */.   
12410 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 41   }.  }else if( A
12420 4c 57 41 59 53 28 70 43 2d 3e 70 73 65 75 64 6f  LWAYS(pC->pseudo
12430 54 61 62 6c 65 52 65 67 3e 30 29 20 29 7b 0a 20  TableReg>0) ){. 
12440 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b     pReg = &aMem[
12450 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
12460 65 67 5d 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  eg];.    if( pC-
12470 3e 6d 75 6c 74 69 50 73 65 75 64 6f 20 29 7b 0a  >multiPseudo ){.
12480 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12490 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
124a0 70 44 65 73 74 2c 20 70 52 65 67 2b 70 32 2c 20  pDest, pReg+p2, 
124b0 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20  MEM_Ephem);.    
124c0 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
124d0 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 67  (pDest);.      g
124e0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
124f0 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  t;.    }.    ass
12500 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73  ert( pReg->flags
12510 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
12520 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
12530 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
12540 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d     payloadSize =
12550 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 7a 52   pReg->n;.    zR
12560 65 63 20 3d 20 70 52 65 67 2d 3e 7a 3b 0a 20 20  ec = pReg->z;.  
12570 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
12580 73 20 3d 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46  s = (pOp->p5&OPF
12590 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 29 20  LAG_CLEARCACHE) 
125a0 3f 20 43 41 43 48 45 5f 53 54 41 4c 45 20 3a 20  ? CACHE_STALE : 
125b0 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20  p->cacheCtr;.   
125c0 20 61 73 73 65 72 74 28 20 70 61 79 6c 6f 61 64   assert( payload
125d0 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65 63 21  Size==0 || zRec!
125e0 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  =0 );.  }else{. 
125f0 20 20 20 2f 2a 20 43 6f 6e 73 69 64 65 72 20 74     /* Consider t
12600 68 65 20 72 6f 77 20 74 6f 20 62 65 20 4e 55 4c  he row to be NUL
12610 4c 20 2a 2f 0a 20 20 20 20 70 61 79 6c 6f 61 64  L */.    payload
12620 53 69 7a 65 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20  Size = 0;.  }.. 
12630 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64 53 69   /* If payloadSi
12640 7a 65 20 69 73 20 30 2c 20 74 68 65 6e 20 6a 75  ze is 0, then ju
12650 73 74 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 2e  st store a NULL.
12660 20 20 54 68 69 73 20 63 61 6e 20 68 61 70 70 65    This can happe
12670 6e 20 62 65 63 61 75 73 65 20 6f 66 0a 20 20 2a  n because of.  *
12680 2a 20 6e 75 6c 6c 52 6f 77 20 6f 72 20 62 65 63  * nullRow or bec
12690 61 75 73 65 20 6f 66 20 61 20 63 6f 72 72 75 70  ause of a corrup
126a0 74 20 64 61 74 61 62 61 73 65 2e 20 2a 2f 0a 20  t database. */. 
126b0 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65   if( payloadSize
126c0 3d 3d 30 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65  ==0 ){.    MemSe
126d0 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
126e0 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
126f0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
12700 75 74 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  ut;.  }.  assert
12710 28 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  ( db->aLimit[SQL
12720 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
12730 5d 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 61  ]>=0 );.  if( pa
12740 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32  yloadSize > (u32
12750 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
12760 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
12770 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
12780 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69  _big;.  }..  nFi
12790 65 6c 64 20 3d 20 70 43 2d 3e 6e 46 69 65 6c 64  eld = pC->nField
127a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 6e  ;.  assert( p2<n
127b0 46 69 65 6c 64 20 29 3b 0a 0a 20 20 2f 2a 20 52  Field );..  /* R
127c0 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 74 68  ead and parse th
127d0 65 20 74 61 62 6c 65 20 68 65 61 64 65 72 2e 20  e table header. 
127e0 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
127f0 74 73 20 6f 66 20 74 68 65 20 70 61 72 73 65 0a  ts of the parse.
12800 20 20 2a 2a 20 69 6e 74 6f 20 74 68 65 20 72 65    ** into the re
12810 63 6f 72 64 20 68 65 61 64 65 72 20 63 61 63 68  cord header cach
12820 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
12830 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61  cursor..  */.  a
12840 54 79 70 65 20 3d 20 70 43 2d 3e 61 54 79 70 65  Type = pC->aType
12850 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68  ;.  if( pC->cach
12860 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68  eStatus==p->cach
12870 65 43 74 72 20 29 7b 0a 20 20 20 20 61 4f 66 66  eCtr ){.    aOff
12880 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65  set = pC->aOffse
12890 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
128a0 61 73 73 65 72 74 28 61 54 79 70 65 29 3b 0a 20  assert(aType);. 
128b0 20 20 20 61 76 61 69 6c 20 3d 20 30 3b 0a 20 20     avail = 0;.  
128c0 20 20 70 43 2d 3e 61 4f 66 66 73 65 74 20 3d 20    pC->aOffset = 
128d0 61 4f 66 66 73 65 74 20 3d 20 26 61 54 79 70 65  aOffset = &aType
128e0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 70 43  [nField];.    pC
128f0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
12900 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20  payloadSize;.   
12910 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
12920 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a   = p->cacheCtr;.
12930 0a 20 20 20 20 2f 2a 20 46 69 67 75 72 65 20 6f  .    /* Figure o
12940 75 74 20 68 6f 77 20 6d 61 6e 79 20 62 79 74 65  ut how many byte
12950 73 20 61 72 65 20 69 6e 20 74 68 65 20 68 65 61  s are in the hea
12960 64 65 72 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a  der */.    if( z
12970 52 65 63 20 29 7b 0a 20 20 20 20 20 20 7a 44 61  Rec ){.      zDa
12980 74 61 20 3d 20 7a 52 65 63 3b 0a 20 20 20 20 7d  ta = zRec;.    }
12990 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20  else{.      if( 
129a0 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20  pC->isIndex ){. 
129b0 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28         zData = (
129c0 63 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72  char*)sqlite3Btr
129d0 65 65 4b 65 79 46 65 74 63 68 28 70 43 72 73 72  eeKeyFetch(pCrsr
129e0 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20  , &avail);.     
129f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12a00 7a 44 61 74 61 20 3d 20 28 63 68 61 72 2a 29 73  zData = (char*)s
12a10 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46  qlite3BtreeDataF
12a20 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
12a30 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  il);.      }.   
12a40 20 20 20 2f 2a 20 49 66 20 4b 65 79 46 65 74 63     /* If KeyFetc
12a50 68 28 29 2f 44 61 74 61 46 65 74 63 68 28 29 20  h()/DataFetch() 
12a60 6d 61 6e 61 67 65 64 20 74 6f 20 67 65 74 20 74  managed to get t
12a70 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61  he entire payloa
12a80 64 2c 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  d,.      ** save
12a90 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e 20   the payload in 
12aa0 74 68 65 20 70 43 2d 3e 61 52 6f 77 20 63 61 63  the pC->aRow cac
12ab0 68 65 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 73  he.  That will s
12ac0 61 76 65 20 75 73 20 66 72 6f 6d 0a 20 20 20 20  ave us from.    
12ad0 20 20 2a 2a 20 68 61 76 69 6e 67 20 74 6f 20 6d    ** having to m
12ae0 61 6b 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 63  ake additional c
12af0 61 6c 6c 73 20 74 6f 20 66 65 74 63 68 20 74 68  alls to fetch th
12b00 65 20 63 6f 6e 74 65 6e 74 20 70 6f 72 74 69 6f  e content portio
12b10 6e 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68  n of.      ** th
12b20 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20  e record..      
12b30 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
12b40 20 61 76 61 69 6c 3e 3d 30 20 29 3b 0a 20 20 20   avail>=0 );.   
12b50 20 20 20 69 66 28 20 70 61 79 6c 6f 61 64 53 69     if( payloadSi
12b60 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c  ze <= (u32)avail
12b70 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 52 65 63   ){.        zRec
12b80 20 3d 20 7a 44 61 74 61 3b 0a 20 20 20 20 20 20   = zData;.      
12b90 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38    pC->aRow = (u8
12ba0 2a 29 7a 44 61 74 61 3b 0a 20 20 20 20 20 20 7d  *)zData;.      }
12bb0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43  else{.        pC
12bc0 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ->aRow = 0;.    
12bd0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 2f 2a    }.    }.    /*
12be0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
12bf0 73 73 65 72 74 20 69 73 20 74 72 75 65 20 69 6e  ssert is true in
12c00 20 61 6c 6c 20 63 61 73 65 73 20 65 78 63 65 70   all cases excep
12c10 74 20 77 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68  t when.    ** th
12c20 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
12c30 68 61 73 20 62 65 65 6e 20 63 6f 72 72 75 70 74  has been corrupt
12c40 65 64 20 65 78 74 65 72 6e 61 6c 6c 79 2e 0a 20  ed externally.. 
12c50 20 20 20 2a 2a 20 20 20 20 61 73 73 65 72 74 28     **    assert(
12c60 20 7a 52 65 63 21 3d 30 20 7c 7c 20 61 76 61 69   zRec!=0 || avai
12c70 6c 3e 3d 70 61 79 6c 6f 61 64 53 69 7a 65 20 7c  l>=payloadSize |
12c80 7c 20 61 76 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f  | avail>=9 ); */
12c90 0a 20 20 20 20 73 7a 48 64 72 20 3d 20 67 65 74  .    szHdr = get
12ca0 56 61 72 69 6e 74 33 32 28 28 75 38 2a 29 7a 44  Varint32((u8*)zD
12cb0 61 74 61 2c 20 6f 66 66 73 65 74 29 3b 0a 0a 20  ata, offset);.. 
12cc0 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
12cd0 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
12ce0 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e  se has not given
12cf0 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20   us an oversize 
12d00 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44  header..    ** D
12d10 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76  o this now to av
12d20 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20  oid an oversize 
12d30 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
12d40 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  n..    **.    **
12d50 20 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61   Type entries ca
12d60 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61  n be between 1 a
12d70 6e 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e  nd 5 bytes each.
12d80 20 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79    But 4 and 5 by
12d90 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20  te.    ** types 
12da0 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61  use so much data
12db0 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72   space that ther
12dc0 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30  e can only be 40
12dd0 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20  96 and 32 of.   
12de0 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63   ** them, respec
12df0 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20  tively.  So the 
12e00 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c  maximum header l
12e10 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72  ength results fr
12e20 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79  om a.    ** 3-by
12e30 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68  te type for each
12e40 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   of the maximum 
12e50 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73  of 32768 columns
12e60 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20   plus three.    
12e70 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66  ** extra bytes f
12e80 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65  or the header le
12e90 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32  ngth itself.  32
12ea0 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30  768*3 + 3 = 9830
12eb0 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  7..    */.    if
12ec0 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37  ( offset > 98307
12ed0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
12ee0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
12ef0 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f  PT;.      goto o
12f00 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
12f10 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d 70    }..    /* Comp
12f20 75 74 65 20 69 6e 20 6c 65 6e 20 74 68 65 20 6e  ute in len the n
12f30 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
12f40 66 20 64 61 74 61 20 77 65 20 6e 65 65 64 20 74  f data we need t
12f50 6f 20 72 65 61 64 20 69 6e 20 6f 72 64 65 72 0a  o read in order.
12f60 20 20 20 20 2a 2a 20 74 6f 20 67 65 74 20 6e 46      ** to get nF
12f70 69 65 6c 64 20 74 79 70 65 20 76 61 6c 75 65 73  ield type values
12f80 2e 20 20 6f 66 66 73 65 74 20 69 73 20 61 6e 20  .  offset is an 
12f90 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74  upper bound on t
12fa0 68 69 73 2e 20 20 42 75 74 0a 20 20 20 20 2a 2a  his.  But.    **
12fb0 20 6e 46 69 65 6c 64 20 6d 69 67 68 74 20 62 65   nField might be
12fc0 20 73 69 67 6e 69 66 69 63 61 6e 74 6c 79 20 6c   significantly l
12fd0 65 73 73 20 74 68 61 6e 20 74 68 65 20 74 72 75  ess than the tru
12fe0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
12ff0 6d 6e 73 0a 20 20 20 20 2a 2a 20 69 6e 20 74 68  mns.    ** in th
13000 65 20 74 61 62 6c 65 2c 20 61 6e 64 20 69 6e 20  e table, and in 
13010 74 68 61 74 20 63 61 73 65 2c 20 35 2a 6e 46 69  that case, 5*nFi
13020 65 6c 64 2b 33 20 6d 69 67 68 74 20 62 65 20 73  eld+3 might be s
13030 6d 61 6c 6c 65 72 20 74 68 61 6e 20 6f 66 66 73  maller than offs
13040 65 74 2e 0a 20 20 20 20 2a 2a 20 57 65 20 77 61  et..    ** We wa
13050 6e 74 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c  nt to minimize l
13060 65 6e 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c  en in order to l
13070 69 6d 69 74 20 74 68 65 20 73 69 7a 65 20 6f 66  imit the size of
13080 20 74 68 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20   the memory.    
13090 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65  ** allocation, e
130a0 73 70 65 63 69 61 6c 6c 79 20 69 66 20 61 20 63  specially if a c
130b0 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20  orrupt database 
130c0 66 69 6c 65 20 68 61 73 20 63 61 75 73 65 64 20  file has caused 
130d0 6f 66 66 73 65 74 0a 20 20 20 20 2a 2a 20 74 6f  offset.    ** to
130e0 20 62 65 20 6f 76 65 72 73 69 7a 65 64 2e 20 4f   be oversized. O
130f0 66 66 73 65 74 20 69 73 20 6c 69 6d 69 74 65 64  ffset is limited
13100 20 74 6f 20 39 38 33 30 37 20 61 62 6f 76 65 2e   to 98307 above.
13110 20 20 42 75 74 20 39 38 33 30 37 20 6d 69 67 68    But 98307 migh
13120 74 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 65  t.    ** still e
13130 78 63 65 65 64 20 52 6f 62 73 6f 6e 20 6d 65 6d  xceed Robson mem
13140 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c  ory allocation l
13150 69 6d 69 74 73 20 6f 6e 20 73 6f 6d 65 20 63 6f  imits on some co
13160 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0a 20 20  nfigurations..  
13170 20 20 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20    ** On systems 
13180 74 68 61 74 20 63 61 6e 6e 6f 74 20 74 6f 6c 65  that cannot tole
13190 72 61 74 65 20 6c 61 72 67 65 20 6d 65 6d 6f 72  rate large memor
131a0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e  y allocations, n
131b0 46 69 65 6c 64 2a 35 2b 33 0a 20 20 20 20 2a 2a  Field*5+3.    **
131c0 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20   will likely be 
131d0 6d 75 63 68 20 73 6d 61 6c 6c 65 72 20 73 69 6e  much smaller sin
131e0 63 65 20 6e 46 69 65 6c 64 20 77 69 6c 6c 20 6c  ce nField will l
131f0 69 6b 65 6c 79 20 62 65 20 6c 65 73 73 20 74 68  ikely be less th
13200 61 6e 0a 20 20 20 20 2a 2a 20 32 30 20 6f 72 20  an.    ** 20 or 
13210 73 6f 2e 20 20 54 68 69 73 20 69 6e 73 75 72 65  so.  This insure
13220 73 20 74 68 61 74 20 52 6f 62 73 6f 6e 20 6d 65  s that Robson me
13230 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
13240 6c 69 6d 69 74 73 20 61 72 65 0a 20 20 20 20 2a  limits are.    *
13250 2a 20 6e 6f 74 20 65 78 63 65 65 64 65 64 20 65  * not exceeded e
13260 76 65 6e 20 66 6f 72 20 63 6f 72 72 75 70 74 20  ven for corrupt 
13270 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a  database files..
13280 20 20 20 20 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d      */.    len =
13290 20 6e 46 69 65 6c 64 2a 35 20 2b 20 33 3b 0a 20   nField*5 + 3;. 
132a0 20 20 20 69 66 28 20 6c 65 6e 20 3e 20 28 69 6e     if( len > (in
132b0 74 29 6f 66 66 73 65 74 20 29 20 6c 65 6e 20 3d  t)offset ) len =
132c0 20 28 69 6e 74 29 6f 66 66 73 65 74 3b 0a 0a 20   (int)offset;.. 
132d0 20 20 20 2f 2a 20 54 68 65 20 4b 65 79 46 65 74     /* The KeyFet
132e0 63 68 28 29 20 6f 72 20 44 61 74 61 46 65 74 63  ch() or DataFetc
132f0 68 28 29 20 61 62 6f 76 65 20 61 72 65 20 66 61  h() above are fa
13300 73 74 20 61 6e 64 20 77 69 6c 6c 20 67 65 74 20  st and will get 
13310 74 68 65 20 65 6e 74 69 72 65 0a 20 20 20 20 2a  the entire.    *
13320 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  * record header 
13330 69 6e 20 6d 6f 73 74 20 63 61 73 65 73 2e 20 20  in most cases.  
13340 42 75 74 20 74 68 65 79 20 77 69 6c 6c 20 66 61  But they will fa
13350 69 6c 20 74 6f 20 67 65 74 20 74 68 65 20 63 6f  il to get the co
13360 6d 70 6c 65 74 65 0a 20 20 20 20 2a 2a 20 72 65  mplete.    ** re
13370 63 6f 72 64 20 68 65 61 64 65 72 20 69 66 20 74  cord header if t
13380 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
13390 20 64 6f 65 73 20 6e 6f 74 20 66 69 74 20 6f 6e   does not fit on
133a0 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 0a 20   a single page. 
133b0 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 42 2d 54     ** in the B-T
133c0 72 65 65 2e 20 20 57 68 65 6e 20 74 68 61 74 20  ree.  When that 
133d0 68 61 70 70 65 6e 73 2c 20 75 73 65 20 73 71 6c  happens, use sql
133e0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
133f0 74 72 65 65 28 29 20 74 6f 0a 20 20 20 20 2a 2a  tree() to.    **
13400 20 61 63 71 75 69 72 65 20 74 68 65 20 63 6f 6d   acquire the com
13410 70 6c 65 74 65 20 68 65 61 64 65 72 20 74 65 78  plete header tex
13420 74 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  t..    */.    if
13430 28 20 21 7a 52 65 63 20 26 26 20 61 76 61 69 6c  ( !zRec && avail
13440 3c 6c 65 6e 20 29 7b 0a 20 20 20 20 20 20 73 4d  <len ){.      sM
13450 65 6d 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20  em.flags = 0;.  
13460 20 20 20 20 73 4d 65 6d 2e 64 62 20 3d 20 30 3b      sMem.db = 0;
13470 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
13480 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
13490 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6c 65  ree(pCrsr, 0, le
134a0 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 20  n, pC->isIndex, 
134b0 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66  &sMem);.      if
134c0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
134d0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
134e0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
134f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a 44 61       }.      zDa
13500 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20  ta = sMem.z;.   
13510 20 7d 0a 20 20 20 20 7a 45 6e 64 48 64 72 20 3d   }.    zEndHdr =
13520 20 28 75 38 20 2a 29 26 7a 44 61 74 61 5b 6c 65   (u8 *)&zData[le
13530 6e 5d 3b 0a 20 20 20 20 7a 49 64 78 20 3d 20 28  n];.    zIdx = (
13540 75 38 20 2a 29 26 7a 44 61 74 61 5b 73 7a 48 64  u8 *)&zData[szHd
13550 72 5d 3b 0a 0a 20 20 20 20 2f 2a 20 53 63 61 6e  r];..    /* Scan
13560 20 74 68 65 20 68 65 61 64 65 72 20 61 6e 64 20   the header and 
13570 75 73 65 20 69 74 20 74 6f 20 66 69 6c 6c 20 69  use it to fill i
13580 6e 20 74 68 65 20 61 54 79 70 65 5b 5d 20 61 6e  n the aType[] an
13590 64 20 61 4f 66 66 73 65 74 5b 5d 0a 20 20 20 20  d aOffset[].    
135a0 2a 2a 20 61 72 72 61 79 73 2e 20 20 61 54 79 70  ** arrays.  aTyp
135b0 65 5b 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69  e[i] will contai
135c0 6e 20 74 68 65 20 74 79 70 65 20 69 6e 74 65 67  n the type integ
135d0 65 72 20 66 6f 72 20 74 68 65 20 69 2d 74 68 0a  er for the i-th.
135e0 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e      ** column an
135f0 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 77 69 6c  d aOffset[i] wil
13600 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 6f 66  l contain the of
13610 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65  fset from the be
13620 67 69 6e 6e 69 6e 67 0a 20 20 20 20 2a 2a 20 6f  ginning.    ** o
13630 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
13640 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65  the start of the
13650 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 69 2d   data for the i-
13660 74 68 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f  th column.    */
13670 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
13680 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20  nField; i++){.  
13690 20 20 20 20 69 66 28 20 7a 49 64 78 3c 7a 45 6e      if( zIdx<zEn
136a0 64 48 64 72 20 29 7b 0a 20 20 20 20 20 20 20 20  dHdr ){.        
136b0 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66  aOffset[i] = off
136c0 73 65 74 3b 0a 20 20 20 20 20 20 20 20 69 66 28  set;.        if(
136d0 20 7a 49 64 78 5b 30 5d 3c 30 78 38 30 20 29 7b   zIdx[0]<0x80 ){
136e0 0a 20 20 20 20 20 20 20 20 20 20 74 20 3d 20 7a  .          t = z
136f0 49 64 78 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20  Idx[0];.        
13700 20 20 7a 49 64 78 2b 2b 3b 0a 20 20 20 20 20 20    zIdx++;.      
13710 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
13720 20 20 20 7a 49 64 78 20 2b 3d 20 73 71 6c 69 74     zIdx += sqlit
13730 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a 49  e3GetVarint32(zI
13740 64 78 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20  dx, &t);.       
13750 20 7d 0a 20 20 20 20 20 20 20 20 61 54 79 70 65   }.        aType
13760 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20 20  [i] = t;.       
13770 20 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c 69 74   szField = sqlit
13780 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
13790 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20  Len(t);.        
137a0 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c  offset += szFiel
137b0 64 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6f  d;.        if( o
137c0 66 66 73 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b  ffset<szField ){
137d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 66 66    /* True if off
137e0 73 65 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f  set overflows */
137f0 0a 20 20 20 20 20 20 20 20 20 20 7a 49 64 78 20  .          zIdx 
13800 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20  = &zEndHdr[1];  
13810 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c 49 54 45  /* Forces SQLITE
13820 5f 43 4f 52 52 55 50 54 20 72 65 74 75 72 6e 20  _CORRUPT return 
13830 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20  below */.       
13840 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
13850 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b    }.      }else{
13860 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 69  .        /* If i
13870 20 69 73 20 6c 65 73 73 20 74 68 61 74 20 6e 46   is less that nF
13880 69 65 6c 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ield, then there
13890 20 61 72 65 20 66 65 77 65 72 20 66 69 65 6c 64   are fewer field
138a0 73 20 69 6e 20 74 68 69 73 0a 20 20 20 20 20 20  s in this.      
138b0 20 20 2a 2a 20 72 65 63 6f 72 64 20 74 68 61 6e    ** record than
138c0 20 53 65 74 4e 75 6d 43 6f 6c 75 6d 6e 73 20 69   SetNumColumns i
138d0 6e 64 69 63 61 74 65 64 20 74 68 65 72 65 20 61  ndicated there a
138e0 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  re columns in th
138f0 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62  e.        ** tab
13900 6c 65 2e 20 53 65 74 20 74 68 65 20 6f 66 66 73  le. Set the offs
13910 65 74 20 66 6f 72 20 61 6e 79 20 65 78 74 72 61  et for any extra
13920 20 63 6f 6c 75 6d 6e 73 20 6e 6f 74 20 70 72 65   columns not pre
13930 73 65 6e 74 20 69 6e 0a 20 20 20 20 20 20 20 20  sent in.        
13940 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  ** the record to
13950 20 30 2e 20 54 68 69 73 20 74 65 6c 6c 73 20 63   0. This tells c
13960 6f 64 65 20 62 65 6c 6f 77 20 74 6f 20 73 74 6f  ode below to sto
13970 72 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  re the default v
13980 61 6c 75 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  alue.        ** 
13990 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69  for the column i
139a0 6e 73 74 65 61 64 20 6f 66 20 64 65 73 65 72 69  nstead of deseri
139b0 61 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75 65 20  alizing a value 
139c0 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e  from the record.
139d0 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
139e0 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
139f0 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   0;.      }.    
13a00 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
13a10 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
13a20 6d 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c 61  m);.    sMem.fla
13a30 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a  gs = MEM_Null;..
13a40 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76      /* If we hav
13a50 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64  e read more head
13a60 65 72 20 64 61 74 61 20 74 68 61 6e 20 77 61 73  er data than was
13a70 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
13a80 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20 2a 2a  e header,.    **
13a90 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f   or if the end o
13aa0 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64  f the last field
13ab0 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 70   appears to be p
13ac0 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ast the end of t
13ad0 68 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  he.    ** record
13ae0 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20  , or if the end 
13af0 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c  of the last fiel
13b00 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20  d appears to be 
13b10 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a 20  before the end. 
13b20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63     ** of the rec
13b30 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69  ord (when all fi
13b40 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74  elds present), t
13b50 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64  hen we must be d
13b60 65 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20 77  ealing .    ** w
13b70 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64 61  ith a corrupt da
13b80 74 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20  tabase..    */. 
13b90 20 20 20 69 66 28 20 28 7a 49 64 78 20 3e 20 7a     if( (zIdx > z
13ba0 45 6e 64 48 64 72 29 20 7c 7c 20 28 6f 66 66 73  EndHdr) || (offs
13bb0 65 74 20 3e 20 70 61 79 6c 6f 61 64 53 69 7a 65  et > payloadSize
13bc0 29 0a 20 20 20 20 20 20 20 20 20 7c 7c 20 28 7a  ).         || (z
13bd0 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20  Idx==zEndHdr && 
13be0 6f 66 66 73 65 74 21 3d 70 61 79 6c 6f 61 64 53  offset!=payloadS
13bf0 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 72 63  ize) ){.      rc
13c00 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
13c10 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f  T_BKPT;.      go
13c20 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
13c30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
13c40 2a 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d 6e  * Get the column
13c50 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 49 66   information. If
13c60 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20   aOffset[p2] is 
13c70 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 0a  non-zero, then .
13c80 20 20 2a 2a 20 64 65 73 65 72 69 61 6c 69 7a 65    ** deserialize
13c90 20 74 68 65 20 76 61 6c 75 65 20 66 72 6f 6d 20   the value from 
13ca0 74 68 65 20 72 65 63 6f 72 64 2e 20 49 66 20 61  the record. If a
13cb0 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20 7a 65  Offset[p2] is ze
13cc0 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20 74 68  ro,.  ** then th
13cd0 65 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75  ere are not enou
13ce0 67 68 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  gh fields in the
13cf0 20 72 65 63 6f 72 64 20 74 6f 20 73 61 74 69 73   record to satis
13d00 66 79 20 74 68 65 0a 20 20 2a 2a 20 72 65 71 75  fy the.  ** requ
13d10 65 73 74 2e 20 20 49 6e 20 74 68 69 73 20 63 61  est.  In this ca
13d20 73 65 2c 20 73 65 74 20 74 68 65 20 76 61 6c 75  se, set the valu
13d30 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50 34 20  e NULL or to P4 
13d40 69 66 20 50 34 20 69 73 0a 20 20 2a 2a 20 61 20  if P4 is.  ** a 
13d50 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65 6d  pointer to a Mem
13d60 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20 20   object..  */.  
13d70 69 66 28 20 61 4f 66 66 73 65 74 5b 70 32 5d 20  if( aOffset[p2] 
13d80 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  ){.    assert( r
13d90 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
13da0 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b 0a      if( zRec ){.
13db0 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
13dc0 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   the common case
13dd0 20 77 68 65 72 65 20 74 68 65 20 77 68 6f 6c 65   where the whole
13de0 20 72 6f 77 20 66 69 74 73 20 6f 6e 20 61 20 73   row fits on a s
13df0 69 6e 67 6c 65 20 70 61 67 65 20 2a 2f 0a 20 20  ingle page */.  
13e00 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61      VdbeMemRelea
13e10 73 65 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  se(pDest);.     
13e20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
13e30 61 6c 47 65 74 28 28 75 38 20 2a 29 26 7a 52 65  alGet((u8 *)&zRe
13e40 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d 2c 20  c[aOffset[p2]], 
13e50 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74  aType[p2], pDest
13e60 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
13e70 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e      /* This bran
13e80 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20  ch happens only 
13e90 77 68 65 6e 20 74 68 65 20 72 6f 77 20 6f 76 65  when the row ove
13ea0 72 66 6c 6f 77 73 20 6f 6e 74 6f 20 6d 75 6c 74  rflows onto mult
13eb0 69 70 6c 65 20 70 61 67 65 73 20 2a 2f 0a 20 20  iple pages */.  
13ec0 20 20 20 20 74 20 3d 20 61 54 79 70 65 5b 70 32      t = aType[p2
13ed0 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f  ];.      if( (pO
13ee0 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f  p->p5 & (OPFLAG_
13ef0 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47  LENGTHARG|OPFLAG
13f00 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a  _TYPEOFARG))!=0.
13f10 20 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31         && ((t>=1
13f20 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c  2 && (t&1)==0) |
13f30 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  | (pOp->p5 & OPF
13f40 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d  LAG_TYPEOFARG)!=
13f50 30 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  0).      ){.    
13f60 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69      /* Content i
13f70 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72  s irrelevant for
13f80 20 74 68 65 20 74 79 70 65 6f 66 28 29 20 66 75   the typeof() fu
13f90 6e 63 74 69 6f 6e 20 61 6e 64 20 66 6f 72 0a 20  nction and for. 
13fa0 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 65         ** the le
13fb0 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e  ngth(X) function
13fc0 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2e   if X is a blob.
13fd0 20 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73    So we might as
13fe0 20 77 65 6c 6c 20 75 73 65 0a 20 20 20 20 20 20   well use.      
13ff0 20 20 2a 2a 20 62 6f 67 75 73 20 63 6f 6e 74 65    ** bogus conte
14000 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72  nt rather than r
14010 65 61 64 69 6e 67 20 63 6f 6e 74 65 6e 74 20 66  eading content f
14020 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20  rom disk.  NULL 
14030 77 6f 72 6b 73 0a 20 20 20 20 20 20 20 20 2a 2a  works.        **
14040 20 66 6f 72 20 74 65 78 74 20 61 6e 64 20 62 6c   for text and bl
14050 6f 62 20 61 6e 64 20 77 68 61 74 65 76 65 72 20  ob and whatever 
14060 69 73 20 69 6e 20 74 68 65 20 70 61 79 6c 6f 61  is in the payloa
14070 64 53 69 7a 65 36 34 20 76 61 72 69 61 62 6c 65  dSize64 variable
14080 0a 20 20 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c  .        ** will
14090 20 77 6f 72 6b 20 66 6f 72 20 65 76 65 72 79 74   work for everyt
140a0 68 69 6e 67 20 65 6c 73 65 2e 20 2a 2f 0a 20 20  hing else. */.  
140b0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 74 3c        zData = t<
140c0 31 32 20 3f 20 28 63 68 61 72 2a 29 26 70 61 79  12 ? (char*)&pay
140d0 6c 6f 61 64 53 69 7a 65 36 34 20 3a 20 30 3b 0a  loadSize64 : 0;.
140e0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
140f0 20 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74       len = sqlit
14100 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
14110 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20  Len(t);.        
14120 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
14130 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73 74 29  ve(&sMem, pDest)
14140 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
14150 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
14160 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f  mBtree(pCrsr, aO
14170 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
14180 20 70 43 2d 3e 69 73 49 6e 64 65 78 2c 0a 20 20   pC->isIndex,.  
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 20 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20     &sMem);.     
141c0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
141d0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
141e0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
141f0 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  _out;.        }.
14200 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
14210 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 0a  sMem.z;.      }.
14220 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
14230 65 53 65 72 69 61 6c 47 65 74 28 28 75 38 2a 29  eSerialGet((u8*)
14240 7a 44 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29  zData, t, pDest)
14250 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 44 65 73  ;.    }.    pDes
14260 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
14270 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  g;.  }else{.    
14280 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
14290 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20  =P4_MEM ){.     
142a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
142b0 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74  hallowCopy(pDest
142c0 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20  , pOp->p4.pMem, 
142d0 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
142e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 4d 65   }else{.      Me
142f0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
14300 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
14310 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49     }.  }..  /* I
14320 66 20 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79  f we dynamically
14330 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
14340 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74   to hold the dat
14350 61 20 28 69 6e 20 74 68 65 0a 20 20 2a 2a 20 73  a (in the.  ** s
14360 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
14370 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62  mBtree() call ab
14380 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66  ove) then transf
14390 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68  er control of th
143a0 61 74 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61  at.  ** dynamica
143b0 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70  lly allocated sp
143c0 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68 65 20  ace over to the 
143d0 70 44 65 73 74 20 73 74 72 75 63 74 75 72 65 2e  pDest structure.
143e0 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 65 76 65  .  ** This preve
143f0 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70  nts a memory cop
14400 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 4d  y..  */.  if( sM
14410 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20  em.zMalloc ){.  
14420 20 20 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a    assert( sMem.z
14430 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29  ==sMem.zMalloc )
14440 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28  ;.    assert( !(
14450 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d  pDest->flags & M
14460 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 61  EM_Dyn) );.    a
14470 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e  ssert( !(pDest->
14480 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f  flags & (MEM_Blo
14490 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20 70  b|MEM_Str)) || p
144a0 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20  Dest->z==sMem.z 
144b0 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  );.    pDest->fl
144c0 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70 68  ags &= ~(MEM_Eph
144d0 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  em|MEM_Static);.
144e0 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
144f0 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
14500 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65    pDest->z = sMe
14510 6d 2e 7a 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  m.z;.    pDest->
14520 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a  zMalloc = sMem.z
14530 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20 72  Malloc;.  }..  r
14540 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
14550 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65 28  emMakeWriteable(
14560 70 44 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c 75  pDest);..op_colu
14570 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45  mn_out:.  UPDATE
14580 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
14590 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52  est);.  REGISTER
145a0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
145b0 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b  pDest);.  break;
145c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
145d0 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20  ffinity P1 P2 * 
145e0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
145f0 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40  : affinity(r[P1@
14600 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79  P2]).**.** Apply
14610 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61   affinities to a
14620 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67   range of P2 reg
14630 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
14640 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50  with P1..**.** P
14650 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68  4 is a string th
14660 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74  at is P2 charact
14670 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74  ers long. The nt
14680 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
14690 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
146a0 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
146b0 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
146c0 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
146d0 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65  or the nth.** me
146e0 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65  mory cell in the
146f0 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20   range..*/.case 
14700 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20  OP_Affinity: {. 
14710 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66   const char *zAf
14720 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65  finity;   /* The
14730 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
14740 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61  applied */.  cha
14750 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20 20  r cAff;         
14760 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c        /* A singl
14770 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 61  e character of a
14780 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41  ffinity */..  zA
14790 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
147a0 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  4.z;.  assert( z
147b0 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20  Affinity!=0 );. 
147c0 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
147d0 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29  ty[pOp->p2]==0 )
147e0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
147f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69  [pOp->p1];.  whi
14800 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41  le( (cAff = *(zA
14810 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29  ffinity++))!=0 )
14820 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  {.    assert( pI
14830 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28  n1 <= &p->aMem[(
14840 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
14850 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
14860 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
14870 49 6e 31 29 20 29 3b 0a 20 20 20 20 45 78 70 61  In1) );.    Expa
14880 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
14890 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
148a0 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f  pIn1, cAff, enco
148b0 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b  ding);.    pIn1+
148c0 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
148d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  }../* Opcode: Ma
148e0 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50  keRecord P1 P2 P
148f0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
14900 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28  is: r[P3]=mkrec(
14910 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  r[P1@P2]).**.** 
14920 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73  Convert P2 regis
14930 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  ters beginning w
14940 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20  ith P1 into the 
14950 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a  [record format].
14960 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74 61  ** use as a data
14970 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74   record in a dat
14980 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61  abase table or a
14990 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e  s a key.** in an
149a0 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f   index.  The OP_
149b0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61  Column opcode ca
149c0 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63  n decode the rec
149d0 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a  ord later..**.**
149e0 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72   P4 may be a str
149f0 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63  ing that is P2 c
14a00 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20  haracters long. 
14a10 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74   The nth charact
14a20 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
14a30 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
14a40 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
14a50 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
14a60 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74   used for the nt
14a70 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68  h.** field of th
14a80 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a  e index key..**.
14a90 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66  ** The mapping f
14aa0 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f  rom character to
14ab0 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76   affinity is giv
14ac0 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45  en by the SQLITE
14ad0 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20  _AFF_.** macros 
14ae0 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74  defined in sqlit
14af0 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66  eInt.h..**.** If
14b00 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P4 is NULL then
14b10 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64   all index field
14b20 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e  s have the affin
14b30 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73  ity NONE..*/.cas
14b40 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a  e OP_MakeRecord:
14b50 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63   {.  u8 *zNewRec
14b60 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ord;        /* A
14b70 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20   buffer to hold 
14b80 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65  the data for the
14b90 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20   new record */. 
14ba0 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20   Mem *pRec;     
14bb0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
14bc0 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75  ew record */.  u
14bd0 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20  64 nData;       
14be0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14bf0 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
14c00 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
14c10 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20  nHdr;           
14c20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14c30 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
14c40 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e  space */.  i64 n
14c50 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  Byte;           
14c60 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20    /* Data space 
14c70 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
14c80 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  s record */.  in
14c90 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20  t nZero;        
14ca0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14cb0 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20  f zero bytes at 
14cc0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
14cd0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
14ce0 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20  Varint;         
14cf0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
14d00 79 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74  ytes in a varint
14d10 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c   */.  u32 serial
14d20 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20  _type;       /* 
14d30 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20  Type field */.  
14d40 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20  Mem *pData0;    
14d50 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
14d60 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62  field to be comb
14d70 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65  ined into the re
14d80 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  cord */.  Mem *p
14d90 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Last;           
14da0 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f   /* Last field o
14db0 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
14dc0 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20    int nField;   
14dd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14de0 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
14df0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
14e00 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
14e10 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66         /* The af
14e20 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f  finity string fo
14e30 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  r the record */.
14e40 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61    int file_forma
14e50 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65  t;       /* File
14e60 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66   format to use f
14e70 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  or encoding */. 
14e80 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
14e90 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
14ea0 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
14eb0 6f 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6c  ord[] */.  int l
14ec0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
14ed0 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61    /* Length of a
14ee0 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20   field */..  /* 
14ef0 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63  Assuming the rec
14f00 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66  ord contains N f
14f10 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72  ields, the recor
14f20 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20  d format looks. 
14f30 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20   ** like this:. 
14f40 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d   **.  ** -------
14f50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f90 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a  -.  ** | hdr-siz
14fa0 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70  e | type 0 | typ
14fb0 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65  e 1 | ... | type
14fc0 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e   N-1 | data0 | .
14fd0 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20  .. | data N-1 | 
14fe0 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  ** ----------
14ff0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15000 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15010 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15020 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
15030 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29   **.  ** Data(0)
15040 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72   is taken from r
15050 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74  egister P1.  Dat
15060 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20  a(1) comes from 
15070 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20  register P1+1.  
15080 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68 2e  ** and so froth.
15090 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20  .  **.  ** Each 
150a0 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20  type field is a 
150b0 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74  varint represent
150c0 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74  ing the serial t
150d0 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  ype of the .  **
150e0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64   corresponding d
150f0 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65  ata element (see
15100 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15110 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20  alType()). The. 
15120 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65   ** hdr-size fie
15130 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72  ld is also a var
15140 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
15150 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
15160 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20   beginning.  ** 
15170 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
15180 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e   data0..  */.  n
15190 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20  Data = 0;       
151a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
151b0 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
151c0 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30  ce */.  nHdr = 0
151d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
151e0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
151f0 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
15200 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20  .  nZero = 0;   
15210 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15220 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74  of zero bytes at
15230 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
15240 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65  record */.  nFie
15250 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  ld = pOp->p1;.  
15260 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d  zAffinity = pOp-
15270 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28  >p4.z;.  assert(
15280 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70   nField>0 && pOp
15290 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
152a0 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d  2+nField<=(p->nM
152b0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
152c0 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
152d0 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
152e0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
152f0 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
15300 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
15310 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
15320 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
15330 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
15340 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
15350 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
15360 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
15370 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
15380 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
15390 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
153a0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
153b0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
153c0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
153d0 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
153e0 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
153f0 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
15400 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
15410 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
15420 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
15430 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
15440 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
15450 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30   for(pRec=pData0
15460 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70  ; pRec<=pLast; p
15470 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  Rec++){.    asse
15480 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
15490 52 65 63 29 20 29 3b 0a 20 20 20 20 69 66 28 20  Rec) );.    if( 
154a0 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20  zAffinity ){.   
154b0 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
154c0 28 70 52 65 63 2c 20 7a 41 66 66 69 6e 69 74 79  (pRec, zAffinity
154d0 5b 70 52 65 63 2d 70 44 61 74 61 30 5d 2c 20 65  [pRec-pData0], e
154e0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 7d 0a  ncoding);.    }.
154f0 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
15500 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 20 26 26 20  ags&MEM_Zero && 
15510 70 52 65 63 2d 3e 6e 3e 30 20 29 7b 0a 20 20 20  pRec->n>0 ){.   
15520 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
15530 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63  mExpandBlob(pRec
15540 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 72  );.    }.    ser
15550 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
15560 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
15570 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
15580 61 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73  at);.    len = s
15590 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
155a0 54 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74  TypeLen(serial_t
155b0 79 70 65 29 3b 0a 20 20 20 20 6e 44 61 74 61 20  ype);.    nData 
155c0 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 6e 48 64 72  += len;.    nHdr
155d0 20 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e   += sqlite3Varin
155e0 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
155f0 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
15600 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
15610 6f 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4f 6e  o ){.      /* On
15620 6c 79 20 70 75 72 65 20 7a 65 72 6f 2d 66 69 6c  ly pure zero-fil
15630 6c 65 64 20 42 4c 4f 42 73 20 63 61 6e 20 62 65  led BLOBs can be
15640 20 69 6e 70 75 74 20 74 6f 20 74 68 69 73 20 4f   input to this O
15650 70 63 6f 64 65 2e 0a 20 20 20 20 20 20 2a 2a 20  pcode..      ** 
15660 57 65 20 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  We do not allow 
15670 62 6c 6f 62 73 20 77 69 74 68 20 61 20 70 72 65  blobs with a pre
15680 66 69 78 20 61 6e 64 20 61 20 7a 65 72 6f 2d 66  fix and a zero-f
15690 69 6c 6c 65 64 20 74 61 69 6c 2e 20 2a 2f 0a 20  illed tail. */. 
156a0 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52       nZero += pR
156b0 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
156c0 20 7d 65 6c 73 65 20 69 66 28 20 6c 65 6e 20 29   }else if( len )
156d0 7b 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 3d 20  {.      nZero = 
156e0 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  0;.    }.  }..  
156f0 2f 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69  /* Add the initi
15700 61 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74  al header varint
15710 20 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73   and total the s
15720 69 7a 65 20 2a 2f 0a 20 20 6e 48 64 72 20 2b 3d  ize */.  nHdr +=
15730 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74   nVarint = sqlit
15740 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
15750 29 3b 0a 20 20 69 66 28 20 6e 56 61 72 69 6e 74  );.  if( nVarint
15760 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65  <sqlite3VarintLe
15770 6e 28 6e 48 64 72 29 20 29 7b 0a 20 20 20 20 6e  n(nHdr) ){.    n
15780 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79  Hdr++;.  }.  nBy
15790 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 2d  te = nHdr+nData-
157a0 6e 5a 65 72 6f 3b 0a 20 20 69 66 28 20 6e 42 79  nZero;.  if( nBy
157b0 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
157c0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
157d0 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
157e0 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f  oo_big;.  }..  /
157f0 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
15800 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
15810 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72  has a buffer lar
15820 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f  ge enough to sto
15830 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77  re .  ** the new
15840 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74   record. The out
15850 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f  put register (pO
15860 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c  p->p3) is not al
15870 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65  lowed to.  ** be
15880 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75   one of the inpu
15890 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63  t registers (bec
158a0 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ause the followi
158b0 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20  ng call to.  ** 
158c0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
158d0 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62  ow() could clobb
158e0 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66  er the value bef
158f0 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e  ore it is used).
15900 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
15910 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
15920 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c  Out, (int)nByte,
15930 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
15940 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
15950 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
15960 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
15970 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
15980 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
15990 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
159a0 2c 20 6e 48 64 72 29 3b 0a 20 20 66 6f 72 28 70  , nHdr);.  for(p
159b0 52 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63  Rec=pData0; pRec
159c0 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29  <=pLast; pRec++)
159d0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
159e0 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
159f0 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
15a00 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
15a10 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74    i += putVarint
15a20 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69  32(&zNewRecord[i
15a30 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  ], serial_type);
15a40 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20        /* serial 
15a50 74 79 70 65 20 2a 2f 0a 20 20 7d 0a 20 20 66 6f  type */.  }.  fo
15a60 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20 70  r(pRec=pData0; p
15a70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65 63  Rec<=pLast; pRec
15a80 2b 2b 29 7b 20 20 2f 2a 20 73 65 72 69 61 6c 20  ++){  /* serial 
15a90 64 61 74 61 20 2a 2f 0a 20 20 20 20 69 20 2b 3d  data */.    i +=
15aa0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15ab0 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
15ac0 64 5b 69 5d 2c 20 28 69 6e 74 29 28 6e 42 79 74  d[i], (int)(nByt
15ad0 65 2d 69 29 2c 20 70 52 65 63 2c 66 69 6c 65 5f  e-i), pRec,file_
15ae0 66 6f 72 6d 61 74 29 3b 0a 20 20 7d 0a 20 20 61  format);.  }.  a
15af0 73 73 65 72 74 28 20 69 3d 3d 6e 42 79 74 65 20  ssert( i==nByte 
15b00 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
15b10 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
15b20 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
15b30 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
15b40 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
15b50 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  te;.  pOut->flag
15b60 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d  s = MEM_Blob | M
15b70 45 4d 5f 44 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e  EM_Dyn;.  pOut->
15b80 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20  xDel = 0;.  if( 
15b90 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75  nZero ){.    pOu
15ba0 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65  t->u.nZero = nZe
15bb0 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ro;.    pOut->fl
15bc0 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b  ags |= MEM_Zero;
15bd0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  .  }.  pOut->enc
15be0 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20   = SQLITE_UTF8; 
15bf0 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20   /* In case the 
15c00 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e  blob is ever con
15c10 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a  verted to text *
15c20 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  /.  REGISTER_TRA
15c30 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  CE(pOp->p3, pOut
15c40 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
15c50 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
15c60 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
15c70 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20  pcode: Count P1 
15c80 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
15c90 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e  psis: r[P2]=coun
15ca0 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  t().**.** Store 
15cb0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  the number of en
15cc0 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65  tries (an intege
15cd0 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20  r value) in the 
15ce0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a  table or index .
15cf0 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ** opened by cur
15d00 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74  sor P1 in regist
15d10 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66  er P2.*/.#ifndef
15d20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52   SQLITE_OMIT_BTR
15d30 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f  EECOUNT.case OP_
15d40 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  Count: {        
15d50 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
15d60 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e  ase */.  i64 nEn
15d70 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  try;.  BtCursor 
15d80 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73 72  *pCrsr;..  pCrsr
15d90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
15da0 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  >p1]->pCursor;. 
15db0 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73   if( ALWAYS(pCrs
15dc0 72 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  r) ){.    rc = s
15dd0 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74  qlite3BtreeCount
15de0 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29  (pCrsr, &nEntry)
15df0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
15e00 45 6e 74 72 79 20 3d 20 30 3b 0a 20 20 7d 0a 20  Entry = 0;.  }. 
15e10 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e   pOut->u.i = nEn
15e20 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  try;.  break;.}.
15e30 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
15e40 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20  e: Savepoint P1 
15e50 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  * * P4 *.**.** O
15e60 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20  pen, release or 
15e70 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76  rollback the sav
15e80 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20  epoint named by 
15e90 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65  parameter P4, de
15ea0 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68  pending.** on th
15eb0 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54  e value of P1. T
15ec0 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76  o open a new sav
15ed0 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54  epoint, P1==0. T
15ee0 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
15ef0 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e  t) an.** existin
15f00 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  g savepoint, P1=
15f10 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61  =1, or to rollba
15f20 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73  ck an existing s
15f30 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a  avepoint P1==2..
15f40 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70  */.case OP_Savep
15f50 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31  oint: {.  int p1
15f60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15f70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
15f80 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64  ue of P1 operand
15f90 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
15fa0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
15fb0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
15fc0 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20   savepoint */.  
15fd0 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76  int nName;.  Sav
15fe0 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20  epoint *pNew;.  
15ff0 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
16000 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69  point;.  Savepoi
16010 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20  nt *pTmp;.  int 
16020 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e  iSavepoint;.  in
16030 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f  t ii;..  p1 = pO
16040 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d  p->p1;.  zName =
16050 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f   pOp->p4.z;..  /
16060 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
16070 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69  e p1 parameter i
16080 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68  s valid. Also th
16090 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  at if there is n
160a0 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e  o open.  ** tran
160b0 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  saction, then th
160c0 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e  ere cannot be an
160d0 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20  y savepoints. . 
160e0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
160f0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ->pSavepoint==0 
16100 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  || db->autoCommi
16110 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
16120 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
16130 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50  BEGIN||p1==SAVEP
16140 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31  OINT_RELEASE||p1
16150 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
16160 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  BACK );.  assert
16170 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
16180 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   || db->isTransa
16190 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d  ctionSavepoint==
161a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63  0 );.  assert( c
161b0 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
161c0 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65  nt(db) );.  asse
161d0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
161e0 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53   );..  if( p1==S
161f0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29  AVEPOINT_BEGIN )
16200 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56  {.    if( db->nV
16210 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
16220 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76      /* A new sav
16230 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65  epoint cannot be
16240 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72   created if ther
16250 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
16260 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61  te .      ** sta
16270 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70  tements (i.e. op
16280 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e  en read/write in
16290 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68  cremental blob h
162a0 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a  andles)..      *
162b0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
162c0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
162d0 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
162e0 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
162f0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
16300 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
16310 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
16320 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
16330 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
16340 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
16350 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
16360 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
16370 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
16380 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
16390 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
163a0 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
163b0 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
163c0 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
163d0 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
163e0 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
163f0 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
16400 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
16410 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
16420 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
16430 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
16440 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
16450 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
16460 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
16470 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
16480 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
16490 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
164a0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
164b0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
164c0 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
164d0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
164e0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
164f0 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
16500 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
16510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16520 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
16530 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
16540 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
16550 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
16560 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
16570 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
16580 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
16590 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
165a0 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
165b0 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
165c0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
165d0 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
165e0 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
165f0 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
16600 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
16610 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
16620 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
16630 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
16640 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
16650 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
16660 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
16670 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
16680 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
16690 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
166a0 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
166b0 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
166c0 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
166d0 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
166e0 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
166f0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16700 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
16710 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
16720 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
16730 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
16740 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
16750 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
16760 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20      }.    .     
16770 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
16780 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
16790 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
167a0 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
167b0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
167c0 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
167d0 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
167e0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
167f0 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
16800 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
16810 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
16820 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70  dCons;.        p
16830 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  New->nDeferredIm
16840 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
16850 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
16860 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
16870 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f  lse{.    iSavepo
16880 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  int = 0;..    /*
16890 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20   Find the named 
168a0 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68  savepoint. If th
168b0 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73  ere is no such s
168c0 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61  avepoint, then a
168d0 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f  n.    ** an erro
168e0 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  r is returned to
168f0 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20   the user.  */. 
16900 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53     for(.      pS
16910 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70  avepoint = db->p
16920 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
16930 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
16940 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
16950 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
16960 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
16970 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
16980 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20  vepoint->pNext. 
16990 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76     ){.      iSav
169a0 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  epoint++;.    }.
169b0 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f      if( !pSavepo
169c0 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
169d0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
169e0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
169f0 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
16a00 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a  t: %s", zName);.
16a10 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
16a20 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c  E_ERROR;.    }el
16a30 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  se if( db->nVdbe
16a40 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53  Write>0 && p1==S
16a50 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
16a60 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20   ){.      /* It 
16a70 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
16a80 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  to release (comm
16a90 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20  it) a savepoint 
16aa0 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20  if there are .  
16ab0 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72      ** active wr
16ac0 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ite statements..
16ad0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
16ae0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
16af0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
16b00 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f   .        "canno
16b10 74 20 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f  t release savepo
16b20 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d  int - SQL statem
16b30 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
16b40 22 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ".      );.     
16b50 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
16b60 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20  Y;.    }else{.. 
16b70 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e       /* Determin
16b80 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
16b90 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
16ba0 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
16bb0 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a  . If so,.      *
16bc0 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20  * and this is a 
16bd0 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c  RELEASE command,
16be0 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e   then the curren
16bf0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20  t transaction . 
16c00 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69       ** is commi
16c10 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  tted. .      */.
16c20 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e        int isTran
16c30 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70  saction = pSavep
16c40 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26  oint->pNext==0 &
16c50 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  & db->isTransact
16c60 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ionSavepoint;.  
16c70 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61      if( isTransa
16c80 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56  ction && p1==SAV
16c90 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
16ca0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72  {.        if( (r
16cb0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
16cc0 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53  heckFk(p, 1))!=S
16cd0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
16ce0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
16cf0 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
16d00 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  }.        db->au
16d10 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
16d20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
16d30 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
16d40 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
16d50 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70         p->pc = p
16d60 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  c;.          db-
16d70 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
16d80 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63  .          p->rc
16d90 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
16da0 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67  USY;.          g
16db0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
16dc0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
16dd0 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
16de0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
16df0 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  0;.        rc = 
16e00 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c  p->rc;.      }el
16e10 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76  se{.        iSav
16e20 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  epoint = db->nSa
16e30 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70  vepoint - iSavep
16e40 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20  oint - 1;.      
16e50 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
16e60 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a  INT_ROLLBACK ){.
16e70 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69            for(ii
16e80 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
16e90 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
16ea0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 54     sqlite3BtreeT
16eb0 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62  ripAllCursors(db
16ec0 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 53  ->aDb[ii].pBt, S
16ed0 51 4c 49 54 45 5f 41 42 4f 52 54 29 3b 0a 20 20  QLITE_ABORT);.  
16ee0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16ef0 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28    }.        for(
16f00 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
16f10 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
16f20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
16f30 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62  treeSavepoint(db
16f40 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70  ->aDb[ii].pBt, p
16f50 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
16f60 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
16f70 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
16f80 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
16f90 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
16fa0 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
16fb0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16fc0 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
16fd0 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20  INT_ROLLBACK && 
16fe0 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54  (db->flags&SQLIT
16ff0 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
17000 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
17010 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
17020 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
17030 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
17040 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
17050 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
17060 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  on(db);.        
17070 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64    db->flags = (d
17080 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54  b->flags | SQLIT
17090 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
170a0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
170b0 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
170c0 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  Regardless of wh
170d0 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
170e0 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42  RELEASE or ROLLB
170f0 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c  ACK, destroy all
17100 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70   .      ** savep
17110 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73  oints nested ins
17120 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70  ide of the savep
17130 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
17140 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20  ted on. */.     
17150 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76   while( db->pSav
17160 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69  epoint!=pSavepoi
17170 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54  nt ){.        pT
17180 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  mp = db->pSavepo
17190 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
171a0 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54  >pSavepoint = pT
171b0 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  mp->pNext;.     
171c0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
171d0 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20  (db, pTmp);.    
171e0 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
171f0 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  nt--;.      }.. 
17200 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73       /* If it is
17210 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e   a RELEASE, then
17220 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76   destroy the sav
17230 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
17240 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20  rated on .      
17250 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73  ** too. If it is
17260 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20   a ROLLBACK TO, 
17270 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d  then set the num
17280 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
17290 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72  .      ** constr
172a0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20  aint violations 
172b0 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
172c0 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76  atabase to the v
172d0 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20  alue stored.    
172e0 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61    ** when the sa
172f0 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61  vepoint was crea
17300 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69  ted.  */.      i
17310 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
17320 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
17330 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76      assert( pSav
17340 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76  epoint==db->pSav
17350 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20  epoint );.      
17360 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
17370 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
17380 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
17390 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
173a0 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  pSavepoint);.   
173b0 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e       if( !isTran
173c0 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20  saction ){.     
173d0 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
173e0 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d  int--;.        }
173f0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
17400 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
17410 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  redCons = pSavep
17420 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43  oint->nDeferredC
17430 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  ons;.        db-
17440 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
17450 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  s = pSavepoint->
17460 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
17470 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
17480 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
17490 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ion ){.        r
174a0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
174b0 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c  avepoint(db, p1,
174c0 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
174d0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
174e0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
174f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17500 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
17510 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
17520 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74  ../* Opcode: Aut
17530 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20  oCommit P1 P2 * 
17540 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  * *.**.** Set th
17550 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d  e database auto-
17560 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50  commit flag to P
17570 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50  1 (1 or 0). If P
17580 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a  2 is true, roll.
17590 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72  ** back any curr
175a0 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72  ently active btr
175b0 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  ee transactions.
175c0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   If there are an
175d0 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20  y active.** VMs 
175e0 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73  (apart from this
175f0 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f   one), then a RO
17600 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41  LLBACK fails.  A
17610 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66   COMMIT fails if
17620 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63  .** there are ac
17630 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73  tive writing VMs
17640 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74   or active VMs t
17650 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63  hat use shared c
17660 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ache..**.** This
17670 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75   instruction cau
17680 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61  ses the VM to ha
17690 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  lt..*/.case OP_A
176a0 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69  utoCommit: {.  i
176b0 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  nt desiredAutoCo
176c0 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c  mmit;.  int iRol
176d0 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72  lback;.  int tur
176e0 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65  nOnAC;..  desire
176f0 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f  dAutoCommit = pO
17700 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61  p->p1;.  iRollba
17710 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ck = pOp->p2;.  
17720 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72  turnOnAC = desir
17730 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20  edAutoCommit && 
17740 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b  !db->autoCommit;
17750 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
17760 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
17770 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  || desiredAutoCo
17780 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
17790 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
177a0 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f  Commit==1 || iRo
177b0 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61  llback==0 );.  a
177c0 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65  ssert( db->nVdbe
177d0 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20  Active>0 );  /* 
177e0 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e  At least this on
177f0 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a  e VM is active *
17800 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  /.  assert( p->b
17810 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 23 69 66  IsReader );..#if
17820 20 30 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41   0.  if( turnOnA
17830 43 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26  C && iRollback &
17840 26 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76  & db->nVdbeActiv
17850 65 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  e>1 ){.    /* If
17860 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
17870 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52  n implements a R
17880 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65  OLLBACK and othe
17890 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a  r VMs are.    **
178a0 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20   still running, 
178b0 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f  and a transactio
178c0 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72 65 74  n is active, ret
178d0 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64  urn an error ind
178e0 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74  icating.    ** t
178f0 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
17900 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
17910 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20  first. .    */. 
17920 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
17930 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
17940 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c   db, "cannot rol
17950 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
17960 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  n - ".        "S
17970 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
17980 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
17990 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
179a0 59 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  Y;.  }else.#endi
179b0 66 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  f.  if( turnOnAC
179c0 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26   && !iRollback &
179d0 26 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65  & db->nVdbeWrite
179e0 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  >0 ){.    /* If 
179f0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17a00 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f   implements a CO
17a10 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56  MMIT and other V
17a20 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20  Ms are writing. 
17a30 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20     ** return an 
17a40 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
17a50 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20   that the other 
17a60 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
17a70 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f  e first. .    */
17a80 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
17a90 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
17aa0 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63  g, db, "cannot c
17ab0 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f  ommit transactio
17ac0 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  n - ".        "S
17ad0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
17ae0 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
17af0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
17b00 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64  Y;.  }else if( d
17b10 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17b20 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  !=db->autoCommit
17b30 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c   ){.    if( iRol
17b40 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61  lback ){.      a
17b50 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
17b60 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20  toCommit==1 );. 
17b70 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c       sqlite3Roll
17b80 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49  backAll(db, SQLI
17b90 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
17ba0 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  K);.      db->au
17bb0 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
17bc0 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20    }else if( (rc 
17bd0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
17be0 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
17bf0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
17c00 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
17c10 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
17c20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
17c30 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41  t = (u8)desiredA
17c40 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20  utoCommit;.     
17c50 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
17c60 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
17c70 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
17c80 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
17c90 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
17ca0 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69  it = (u8)(1-desi
17cb0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a  redAutoCommit);.
17cc0 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
17cd0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17ce0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76  ;.        goto v
17cf0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
17d00 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
17d10 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
17d20 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73  ment==0 );.    s
17d30 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
17d40 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69  oints(db);.    i
17d50 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
17d60 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
17d70 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  = SQLITE_DONE;. 
17d80 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17d90 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
17da0 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  R;.    }.    got
17db0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
17dc0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
17dd0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
17de0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20  >zErrMsg, db,.  
17df0 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41        (!desiredA
17e00 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e  utoCommit)?"cann
17e10 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ot start a trans
17e20 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20  action within a 
17e30 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20  transaction":(. 
17e40 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63         (iRollbac
17e50 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  k)?"cannot rollb
17e60 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  ack - no transac
17e70 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a  tion is active":
17e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17e90 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d      "cannot comm
17ea0 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  it - no transact
17eb0 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29  ion is active"))
17ec0 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20  ;.         .    
17ed0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
17ee0 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  R;.  }.  break;.
17ef0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72  }../* Opcode: Tr
17f00 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20  ansaction P1 P2 
17f10 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67 69  * * *.**.** Begi
17f20 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  n a transaction.
17f30 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69 6f    The transactio
17f40 6e 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43 6f  n ends when a Co
17f50 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63 6b  mmit or Rollback
17f60 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65 6e  .** opcode is en
17f70 63 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70 65  countered.  Depe
17f80 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e 20  nding on the ON 
17f90 43 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e 67  CONFLICT setting
17fa0 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61 63  , the.** transac
17fb0 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f 20  tion might also 
17fc0 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 69  be rolled back i
17fd0 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65 6e  f an error is en
17fe0 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a 2a  countered..**.**
17ff0 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
18000 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
18010 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74   file on which t
18020 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
18030 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49  s.** started.  I
18040 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61  ndex 0 is the ma
18050 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
18060 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20   and index 1 is 
18070 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64  the.** file used
18080 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74   for temporary t
18090 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20  ables.  Indices 
180a0 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65  of 2 or more are
180b0 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74   used for.** att
180c0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
180d0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
180e0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
180f0 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
18100 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20  on is started.  
18110 41 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b 20  A RESERVED lock 
18120 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20 6f  is.** obtained o
18130 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
18140 69 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74 65  ile when a write
18150 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
18160 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a 20  started.  No.** 
18170 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 63 61  other process ca
18180 6e 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72 20  n start another 
18190 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
181a0 6e 20 77 68 69 6c 65 20 74 68 69 73 20 74 72 61  n while this tra
181b0 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 75  nsaction is.** u
181c0 6e 64 65 72 77 61 79 2e 20 20 53 74 61 72 74 69  nderway.  Starti
181d0 6e 67 20 61 20 77 72 69 74 65 20 74 72 61 6e 73  ng a write trans
181e0 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65 61  action also crea
181f0 74 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  tes a rollback j
18200 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72 69  ournal. A.** wri
18210 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  te transaction m
18220 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62  ust be started b
18230 65 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67 65  efore any change
18240 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
18250 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
18260 2e 20 20 49 66 20 50 32 20 69 73 20 67 72 65 61  .  If P2 is grea
18270 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
18280 6c 20 74 6f 20 32 20 74 68 65 6e 20 61 6e 20 45  l to 2 then an E
18290 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 69 73  XCLUSIVE lock is
182a0 0a 2a 2a 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65  .** also obtaine
182b0 64 20 6f 6e 20 74 68 65 20 66 69 6c 65 2e 0a 2a  d on the file..*
182c0 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d  *.** If a write-
182d0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
182e0 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56  tarted and the V
182f0 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72  dbe.usesStmtJour
18300 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74  nal flag is.** t
18310 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69  rue (this flag i
18320 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62  s set if the Vdb
18330 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72  e may modify mor
18340 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61  e than one row a
18350 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20  nd may.** throw 
18360 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
18370 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  on), a statement
18380 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
18390 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e   also be opened.
183a0 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69  .** More specifi
183b0 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65  cally, a stateme
183c0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
183d0 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65  s opened iff the
183e0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
183f0 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
18400 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f  ntly not in auto
18410 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20  commit mode, or 
18420 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68  if there are oth
18430 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61  er.** active sta
18440 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65  tements. A state
18450 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
18460 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e   allows the chan
18470 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69 73  ges made by this
18480 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72  .** VDBE to be r
18490 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72  olled back after
184a0 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75   an error withou
184b0 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c  t having to roll
184c0 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74   back the.** ent
184d0 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
184e0 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20   If no error is 
184f0 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65  encountered, the
18500 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
18510 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61  action.** will a
18520 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d  utomatically com
18530 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
18540 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
18550 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P2 is zero, th
18560 65 6e 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69  en a read-lock i
18570 73 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68  s obtained on th
18580 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
18590 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e  .*/.case OP_Tran
185a0 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72  saction: {.  Btr
185b0 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
185c0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
185d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
185e0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20  >readOnly==0 || 
185f0 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20  pOp->p2==0 );.  
18600 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
18610 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
18620 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
18630 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
18640 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
18650 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
18660 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  ;.  if( pOp->p2 
18670 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  && (db->flags & 
18680 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
18690 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )!=0 ){.    rc =
186a0 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
186b0 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
186c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
186d0 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61   }.  pBt = db->a
186e0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
186f0 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
18700 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18710 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
18720 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  Bt, pOp->p2);.  
18730 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
18740 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
18750 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
18760 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
18770 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
18780 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
18790 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  n;.    }.    if(
187a0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
187b0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
187c0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
187d0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
187e0 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73  pOp->p2 && p->us
187f0 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20  esStmtJournal . 
18800 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f      && (db->auto
18810 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
18820 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20  >nVdbeRead>1) . 
18830 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65     ){.      asse
18840 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
18850 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29  IsInTrans(pBt) )
18860 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69  ;.      if( p->i
18870 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a  Statement==0 ){.
18880 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
18890 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d  db->nStatement>=
188a0 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f  0 && db->nSavepo
188b0 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  int>=0 );.      
188c0 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
188d0 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e  ++; .        p->
188e0 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d  iStatement = db-
188f0 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
18900 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20  ->nStatement;.  
18910 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20      }..      rc 
18920 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
18930 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
18940 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69  OINT_BEGIN, p->i
18950 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20  Statement-1);.  
18960 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
18970 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
18980 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
18990 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c  eeBeginStmt(pBt,
189a0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b   p->iStatement);
189b0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
189c0 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72  /* Store the cur
189d0 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68  rent value of th
189e0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
189f0 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  es deferred cons
18a00 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20  traint.      ** 
18a10 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20  counter. If the 
18a20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
18a30 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ction needs to b
18a40 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20  e rolled back,. 
18a50 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75       ** the valu
18a60 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65  e of this counte
18a70 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  r needs to be re
18a80 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a  stored too.  */.
18a90 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
18aa0 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  fCons = db->nDef
18ab0 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
18ac0 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43   p->nStmtDefImmC
18ad0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
18ae0 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
18af0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
18b00 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
18b10 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
18b20 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
18b30 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
18b40 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
18b50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
18b60 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
18b70 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65  .** P3==1 is the
18b80 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
18b90 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64    P3==2 is the d
18ba0 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
18bb0 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20  ** P3==3 is the 
18bc0 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
18bd0 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
18be0 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
18bf0 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
18c00 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
18c10 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
18c20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
18c30 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
18c40 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
18c50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75  ..**.** There mu
18c60 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63  st be a read-loc
18c70 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
18c80 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e  e (either a tran
18c90 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20  saction.** must 
18ca0 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68  be started or th
18cb0 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f  ere must be an o
18cc0 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f  pen cursor) befo
18cd0 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20  re.** executing 
18ce0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
18cf0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
18d00 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  dCookie: {      
18d10 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
18d20 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
18d30 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
18d40 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f  t iDb;.  int iCo
18d50 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  okie;..  assert(
18d60 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
18d70 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
18d80 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f  ;.  iCookie = pO
18d90 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
18da0 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f   pOp->p3<SQLITE_
18db0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
18dc0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
18dd0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
18de0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
18df0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30  >aDb[iDb].pBt!=0
18e00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
18e10 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
18e20 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62  (yDbMask)1)<<iDb
18e30 29 29 21 3d 30 20 29 3b 0a 0a 20 20 73 71 6c 69  ))!=0 );..  sqli
18e40 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
18e50 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
18e60 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20  , iCookie, (u32 
18e70 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75  *)&iMeta);.  pOu
18e80 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a  t->u.i = iMeta;.
18e90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
18ea0 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65  pcode: SetCookie
18eb0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
18ec0 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 6f  .** Write the co
18ed0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
18ee0 72 20 50 33 20 28 69 6e 74 65 72 70 72 65 74 65  r P3 (interprete
18ef0 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29  d as an integer)
18f00 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20  .** into cookie 
18f10 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74  number P2 of dat
18f20 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d 3d 31  abase P1.  P2==1
18f30 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76   is the schema v
18f40 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d  ersion.  .** P2=
18f50 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
18f60 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d 3d 33  se format. P2==3
18f70 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
18f80 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
18f90 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  .** size, and so
18fa0 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
18fb0 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
18fc0 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
18fd0 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61  =1 is the .** da
18fe0 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
18ff0 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72   to store tempor
19000 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
19010 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  * A transaction 
19020 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
19030 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67  before executing
19040 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f   this opcode..*/
19050 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b  .case OP_SetCook
19060 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69  ie: {       /* i
19070 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62 3b  n3 */.  Db *pDb;
19080 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
19090 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45  p2<SQLITE_N_BTRE
190a0 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65  E_META );.  asse
190b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
190c0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
190d0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
190e0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
190f0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
19100 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
19110 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
19120 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
19130 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
19140 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
19150 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
19160 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
19170 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
19180 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
19190 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
191a0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c  [pOp->p3];.  sql
191b0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
191c0 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f  erify(pIn3);.  /
191d0 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74  * See note about
191e0 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20   index shifting 
191f0 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  on OP_ReadCookie
19200 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
19210 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74  e3BtreeUpdateMet
19220 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d  a(pDb->pBt, pOp-
19230 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e  >p2, (int)pIn3->
19240 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  u.i);.  if( pOp-
19250 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d  >p2==BTREE_SCHEM
19260 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20  A_VERSION ){.   
19270 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68   /* When the sch
19280 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  ema cookie chang
19290 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e  es, record the n
192a0 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e  ew cookie intern
192b0 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d  ally */.    pDb-
192c0 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  >pSchema->schema
192d0 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70  _cookie = (int)p
192e0 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62  In3->u.i;.    db
192f0 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
19300 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b  E_InternChanges;
19310 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
19320 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45  ->p2==BTREE_FILE
19330 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f  _FORMAT ){.    /
19340 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73  * Record changes
19350 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72   in the file for
19360 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  mat */.    pDb->
19370 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
19380 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d  rmat = (u8)pIn3-
19390 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20  >u.i;.  }.  if( 
193a0 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20  pOp->p1==1 ){.  
193b0 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
193c0 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61  all prepared sta
193d0 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72  tements whenever
193e0 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
193f0 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  se.    ** schema
19400 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69   is changed.  Ti
19410 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20  cket #1644 */.  
19420 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
19430 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
19440 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  s(db);.    p->ex
19450 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
19460 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
19470 63 6f 64 65 3a 20 56 65 72 69 66 79 43 6f 6f 6b  code: VerifyCook
19480 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
19490 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
194a0 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62 61 6c 20  value of global 
194b0 64 61 74 61 62 61 73 65 20 70 61 72 61 6d 65 74  database paramet
194c0 65 72 20 6e 75 6d 62 65 72 20 30 20 28 74 68 65  er number 0 (the
194d0 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65 72 73 69  .** schema versi
194e0 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20 73 75 72  on) and make sur
194f0 65 20 69 74 20 69 73 20 65 71 75 61 6c 20 74 6f  e it is equal to
19500 20 50 32 20 61 6e 64 20 74 68 61 74 20 74 68 65   P2 and that the
19510 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  .** generation c
19520 6f 75 6e 74 65 72 20 6f 6e 20 74 68 65 20 6c 6f  ounter on the lo
19530 63 61 6c 20 73 63 68 65 6d 61 20 70 61 72 73 65  cal schema parse
19540 20 65 71 75 61 6c 73 20 50 33 2e 0a 2a 2a 0a 2a   equals P3..**.*
19550 2a 20 50 31 20 69 73 20 74 68 65 20 64 61 74 61  * P1 is the data
19560 62 61 73 65 20 6e 75 6d 62 65 72 20 77 68 69 63  base number whic
19570 68 20 69 73 20 30 20 66 6f 72 20 74 68 65 20 6d  h is 0 for the m
19580 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
19590 65 0a 2a 2a 20 61 6e 64 20 31 20 66 6f 72 20 74  e.** and 1 for t
195a0 68 65 20 66 69 6c 65 20 68 6f 6c 64 69 6e 67 20  he file holding 
195b0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
195c0 20 61 6e 64 20 73 6f 6d 65 20 68 69 67 68 65 72   and some higher
195d0 20 6e 75 6d 62 65 72 0a 2a 2a 20 66 6f 72 20 61   number.** for a
195e0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
195f0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  es..**.** The co
19600 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73  okie changes its
19610 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20   value whenever 
19620 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
19630 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20  ema changes..** 
19640 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69  This operation i
19650 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  s used to detect
19660 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63   when that the c
19670 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65  ookie has change
19680 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68  d.** and that th
19690 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
196a0 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61  s needs to rerea
196b0 64 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  d the schema..**
196c0 0a 2a 2a 20 45 69 74 68 65 72 20 61 20 74 72 61  .** Either a tra
196d0 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
196e0 6f 20 68 61 76 65 20 62 65 65 6e 20 73 74 61 72  o have been star
196f0 74 65 64 20 6f 72 20 61 6e 20 4f 50 5f 4f 70 65  ted or an OP_Ope
19700 6e 20 6e 65 65 64 73 0a 2a 2a 20 74 6f 20 62 65  n needs.** to be
19710 20 65 78 65 63 75 74 65 64 20 28 74 6f 20 65 73   executed (to es
19720 74 61 62 6c 69 73 68 20 61 20 72 65 61 64 20 6c  tablish a read l
19730 6f 63 6b 29 20 62 65 66 6f 72 65 20 74 68 69 73  ock) before this
19740 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20 69 6e   opcode is.** in
19750 76 6f 6b 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  voked..*/.case O
19760 50 5f 56 65 72 69 66 79 43 6f 6f 6b 69 65 3a 20  P_VerifyCookie: 
19770 7b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  {.  int iMeta;. 
19780 20 69 6e 74 20 69 47 65 6e 3b 0a 20 20 42 74 72   int iGen;.  Btr
19790 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
197a0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
197b0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
197c0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  b );.  assert( (
197d0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
197e0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f  ((yDbMask)1)<<pO
197f0 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20  p->p1))!=0 );.  
19800 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
19810 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
19820 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
19830 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
19840 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70 42  IsReader );.  pB
19850 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
19860 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20  >p1].pBt;.  if( 
19870 70 42 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  pBt ){.    sqlit
19880 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70  e3BtreeGetMeta(p
19890 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41  Bt, BTREE_SCHEMA
198a0 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a  _VERSION, (u32 *
198b0 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47  )&iMeta);.    iG
198c0 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  en = db->aDb[pOp
198d0 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69  ->p1].pSchema->i
198e0 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65  Generation;.  }e
198f0 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20  lse{.    iGen = 
19900 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20  iMeta = 0;.  }. 
19910 20 69 66 28 20 69 4d 65 74 61 21 3d 70 4f 70 2d   if( iMeta!=pOp-
19920 3e 70 32 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70  >p2 || iGen!=pOp
19930 2d 3e 70 33 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p3 ){.    sqli
19940 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
19950 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
19960 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
19970 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
19980 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
19990 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
199a0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
199b0 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
199c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
199d0 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
199e0 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
199f0 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
19a00 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
19a10 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
19a20 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
19a30 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
19a40 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
19a50 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
19a60 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
19a70 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
19a80 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
19a90 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
19aa0 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
19ab0 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
19ac0 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
19ad0 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
19ae0 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
19af0 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
19b00 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
19b10 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
19b20 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
19b30 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
19b40 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
19b50 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
19b60 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
19b70 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
19b80 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
19b90 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
19ba0 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
19bb0 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
19bc0 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
19bd0 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
19be0 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
19bf0 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
19c00 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
19c10 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
19c20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
19c30 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
19c40 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
19c50 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
19c60 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
19c70 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
19c80 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
19c90 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
19ca0 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
19cb0 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
19cc0 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
19cd0 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  ema(db, pOp->p1)
19ce0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e  ;.    }..    p->
19cf0 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20  expired = 1;.   
19d00 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48   rc = SQLITE_SCH
19d10 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  EMA;.  }.  break
19d20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
19d30 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50  OpenRead P1 P2 P
19d40 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
19d50 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
19d60 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
19d70 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f   read-only curso
19d80 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  r for the databa
19d90 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72  se table whose r
19da0 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50  oot page is.** P
19db0 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  2 in a database 
19dc0 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62  file.  The datab
19dd0 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65  ase file is dete
19de0 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a  rmined by P3. .*
19df0 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68  * P3==0 means th
19e00 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
19e10 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65   P3==1 means the
19e20 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
19e30 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  or .** temporary
19e40 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e   tables, and P3>
19e50 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65  1 means used the
19e60 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61   corresponding a
19e70 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62  ttached.** datab
19e80 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e  ase.  Give the n
19e90 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65  ew cursor an ide
19ea0 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20  ntifier of P1.  
19eb0 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73  The P1.** values
19ec0 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e   need not be con
19ed0 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20  tiguous but all 
19ee0 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64  P1 values should
19ef0 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65   be small intege
19f00 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20  rs..** It is an 
19f10 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20  error for P1 to 
19f20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a  be negative..**.
19f30 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e  ** If P5!=0 then
19f40 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   use the content
19f50 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
19f60 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  as the root page
19f70 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c  , not.** the val
19f80 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e  ue of P2 itself.
19f90 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c  .**.** There wil
19fa0 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b  l be a read lock
19fb0 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
19fc0 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65 20   whenever there 
19fd0 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75  is an.** open cu
19fe0 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61  rsor.  If the da
19ff0 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63  tabase was unloc
1a000 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69  ked prior to thi
1a010 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  s instruction.**
1a020 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63   then a read loc
1a030 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61 73  k is acquired as
1a040 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e   part of this in
1a050 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65  struction.  A re
1a060 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77  ad.** lock allow
1a070 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65  s other processe
1a080 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61  s to read the da
1a090 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68 69  tabase but prohi
1a0a0 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65  bits.** any othe
1a0b0 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d  r process from m
1a0c0 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61 74  odifying the dat
1a0d0 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61 64  abase.  The read
1a0e0 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65   lock is.** rele
1a0f0 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75  ased when all cu
1a100 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64  rsors are closed
1a110 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  .  If this instr
1a120 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a  uction attempts.
1a130 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61 64  ** to get a read
1a140 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c   lock but fails,
1a150 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72 6d   the script term
1a160 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a  inates with an.*
1a170 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72  * SQLITE_BUSY er
1a180 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ror code..**.** 
1a190 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
1a1a0 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
1a1b0 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
1a1c0 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
1a1d0 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
1a1e0 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
1a1f0 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
1a200 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
1a210 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74  yInfo .** struct
1a220 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73  ure, then said s
1a230 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73  tructure defines
1a240 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
1a250 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
1a260 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69  equence of the i
1a270 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65  ndex being opene
1a280 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  d. Otherwise, if
1a290 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
1a2a0 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20  r .** value, it 
1a2b0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
1a2c0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1a2d0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a  in the table..**
1a2e0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
1a2f0 6e 57 72 69 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  nWrite..*/./* Op
1a300 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
1a310 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1a320 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1a330 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1a340 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
1a350 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
1a360 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
1a370 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
1a380 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
1a390 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20  2.  Or if P5!=0 
1a3a0 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
1a3b0 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
1a3c0 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f  o find the.** ro
1a3d0 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54  ot page..**.** T
1a3e0 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
1a3f0 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
1a400 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
1a410 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
1a420 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
1a430 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
1a440 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
1a450 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
1a460 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
1a470 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
1a480 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
1a490 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1a4a0 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1a4b0 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
1a4c0 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1a4d0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1a4e0 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1a4f0 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
1a500 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
1a510 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1a520 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20  n the table, or 
1a530 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73  to the.** larges
1a540 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63  t index of any c
1a550 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62  olumn of the tab
1a560 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61  le that is actua
1a570 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  lly used..**.** 
1a580 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1a590 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
1a5a0 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
1a5b0 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
1a5c0 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
1a5d0 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
1a5e0 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61    For a given ta
1a5f0 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62  ble, there can b
1a600 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65  e one or more re
1a610 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f  ad-only.** curso
1a620 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  rs or a single r
1a630 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
1a640 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a   but not both..*
1a650 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
1a660 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20  enRead..*/.case 
1a670 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
1a680 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20  e OP_OpenWrite: 
1a690 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  {.  int nField;.
1a6a0 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
1a6b0 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20  nfo;.  int p2;. 
1a6c0 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
1a6d0 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20  wrFlag;.  Btree 
1a6e0 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  *pX;.  VdbeCurso
1a6f0 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70  r *pCur;.  Db *p
1a700 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 28  Db;..  assert( (
1a710 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f  pOp->p5&(OPFLAG_
1a720 50 32 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42  P2ISREG|OPFLAG_B
1a730 55 4c 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70  ULKCSR))==pOp->p
1a740 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  5 );.  assert( p
1a750 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1a760 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d  penWrite || pOp-
1a770 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p5==0 );.  asse
1a780 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1a790 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1a7a0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1a7b0 65 6e 52 65 61 64 20 7c 7c 20 70 2d 3e 72 65 61  enRead || p->rea
1a7c0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69  dOnly==0 );..  i
1a7d0 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b  f( p->expired ){
1a7e0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1a7f0 5f 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61  _ABORT;.    brea
1a800 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64  k;.  }..  nField
1a810 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f   = 0;.  pKeyInfo
1a820 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70   = 0;.  p2 = pOp
1a830 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f  ->p2;.  iDb = pO
1a840 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
1a850 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
1a860 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1a870 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
1a880 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
1a890 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20  )<<iDb))!=0 );. 
1a8a0 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
1a8b0 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62  iDb];.  pX = pDb
1a8c0 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28  ->pBt;.  assert(
1a8d0 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pX!=0 );.  if( 
1a8e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1a8f0 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20  OpenWrite ){.   
1a900 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20   wrFlag = 1;.   
1a910 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1a920 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
1a930 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
1a940 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68     if( pDb->pSch
1a950 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1a960 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   < p->minWriteFi
1a970 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20  leFormat ){.    
1a980 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c    p->minWriteFil
1a990 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70  eFormat = pDb->p
1a9a0 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
1a9b0 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  mat;.    }.  }el
1a9c0 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d  se{.    wrFlag =
1a9d0 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   0;.  }.  if( pO
1a9e0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
1a9f0 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73  2ISREG ){.    as
1aa00 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20  sert( p2>0 );.  
1aa10 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70    assert( p2<=(p
1aa20 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
1aa30 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d  r) );.    pIn2 =
1aa40 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20   &aMem[p2];.    
1aa50 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
1aa60 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20  id(pIn2) );.    
1aa70 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
1aa80 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
1aa90 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
1aaa0 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
1aab0 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32  fy(pIn2);.    p2
1aac0 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e   = (int)pIn2->u.
1aad0 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32  i;.    /* The p2
1aae0 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f   value always co
1aaf0 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72  mes from a prior
1ab00 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
1ab10 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a  opcode and.    *
1ab20 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69  * that opcode wi
1ab30 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68  ll always set th
1ab40 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20  e p2 value to 2 
1ab50 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20  or more or else 
1ab60 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20  fail..    ** If 
1ab70 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69  there were a fai
1ab80 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72  lure, the prepar
1ab90 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  ed statement wou
1aba0 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20  ld have halted. 
1abb0 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61     ** before rea
1abc0 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  ching this instr
1abd0 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69  uction. */.    i
1abe0 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29  f( NEVER(p2<2) )
1abf0 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51   {.      rc = SQ
1ac00 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
1ac10 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
1ac20 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1ac30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
1ac40 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1ac50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20  4_KEYINFO ){.   
1ac60 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
1ac70 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
1ac80 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1ac90 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1aca0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1acb0 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1acc0 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   );.    nField =
1acd0 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
1ace0 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69  d+pKeyInfo->nXFi
1acf0 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eld;.  }else if(
1ad00 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1ad10 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46  _INT32 ){.    nF
1ad20 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
1ad30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
1ad40 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1ad50 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
1ad60 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1ad70 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31  , nField, iDb, 1
1ad80 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30  );.  if( pCur==0
1ad90 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1ada0 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20    pCur->nullRow 
1adb0 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f  = 1;.  pCur->isO
1adc0 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 72 63  rdered = 1;.  rc
1add0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1ade0 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72  ursor(pX, p2, wr
1adf0 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20  Flag, pKeyInfo, 
1ae00 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  pCur->pCursor);.
1ae10 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
1ae20 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61   = pKeyInfo;.  a
1ae30 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55  ssert( OPFLAG_BU
1ae40 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c  LKCSR==BTREE_BUL
1ae50 4b 4c 4f 41 44 20 29 3b 0a 20 20 73 71 6c 69 74  KLOAD );.  sqlit
1ae60 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e  e3BtreeCursorHin
1ae70 74 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72  ts(pCur->pCursor
1ae80 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  , (pOp->p5 & OPF
1ae90 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29 3b 0a 0a  LAG_BULKCSR));..
1aea0 20 20 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65    /* Since it pe
1aeb0 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79  rforms no memory
1aec0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49   allocation or I
1aed0 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75  O, the only valu
1aee0 65 20 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69  e that.  ** sqli
1aef0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29  te3BtreeCursor()
1af00 20 6d 61 79 20 72 65 74 75 72 6e 20 69 73 20 53   may return is S
1af10 51 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61  QLITE_OK. */.  a
1af20 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
1af30 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 53 65  E_OK );..  /* Se
1af40 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72  t the VdbeCursor
1af50 2e 69 73 54 61 62 6c 65 20 61 6e 64 20 69 73 49  .isTable and isI
1af60 6e 64 65 78 20 76 61 72 69 61 62 6c 65 73 2e 20  ndex variables. 
1af70 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
1af80 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65  s of.  ** SQLite
1af90 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69   used to check i
1afa0 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  f the root-page 
1afb0 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20  flags were sane 
1afc0 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20  at this point.  
1afd0 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61  ** and report da
1afe0 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
1aff0 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e  n if they were n
1b000 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65  ot, but this che
1b010 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63  ck has.  ** sinc
1b020 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
1b030 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a   btree layer.  *
1b040 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61  /  .  pCur->isTa
1b050 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70  ble = pOp->p4typ
1b060 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20  e!=P4_KEYINFO;. 
1b070 20 70 43 75 72 2d 3e 69 73 49 6e 64 65 78 20 3d   pCur->isIndex =
1b080 20 21 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 3b   !pCur->isTable;
1b090 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1b0a0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
1b0b0 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
1b0c0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1b0d0 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1b0e0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1b0f0 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
1b100 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
1b110 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
1b120 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
1b130 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
1b140 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1b150 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
1b160 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
1b170 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
1b180 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
1b190 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
1b1a0 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
1b1b0 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
1b1c0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1b1d0 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61   in the ephemera
1b1e0 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  l table..** The 
1b1f0 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f  cursor points to
1b200 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69   a BTree table i
1b210 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61  f P4==0 and to a
1b220 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20   BTree index.** 
1b230 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20  if P4 is not 0. 
1b240 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
1b250 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  LL, it points to
1b260 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1b270 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66  ture.** that def
1b280 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20  ines the format 
1b290 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69  of keys in the i
1b2a0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndex..**.** The 
1b2b0 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e  P5 parameter can
1b2c0 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68   be a mask of th
1b2d0 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20  e BTREE_* flags 
1b2e0 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74  defined.** in bt
1b2f0 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c  ree.h.  These fl
1b300 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65  ags control aspe
1b310 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61  cts of the opera
1b320 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62  tion of.** the b
1b330 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45  tree.  The BTREE
1b340 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e  _OMIT_JOURNAL an
1b350 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66  d BTREE_SINGLE f
1b360 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65  lags are.** adde
1b370 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
1b380 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1b390 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20  penAutoindex P1 
1b3a0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
1b3b0 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
1b3c0 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
1b3d0 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
1b3e0 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
1b3f0 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
1b400 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
1b410 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
1b420 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
1b430 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
1b440 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
1b450 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1b460 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
1b470 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
1b480 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
1b490 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
1b4a0 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
1b4b0 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
1b4c0 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
1b4d0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1b4e0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1b4f0 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20  Info;..  static 
1b500 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61  const int vfsFla
1b510 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49  gs = .      SQLI
1b520 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
1b530 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1b540 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20  _OPEN_CREATE |. 
1b550 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1b560 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20  _EXCLUSIVE |.   
1b570 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44     SQLITE_OPEN_D
1b580 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20  ELETEONCLOSE |. 
1b590 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1b5a0 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20  _TRANSIENT_DB;. 
1b5b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1b5c0 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1b5d0 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1b5e0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1b5f0 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28  2, -1, 1);.  if(
1b600 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1b610 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
1b620 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 72 63 20  llRow = 1;.  rc 
1b630 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70  = sqlite3BtreeOp
1b640 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20  en(db->pVfs, 0, 
1b650 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a  db, &pCx->pBt, .
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b670 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d          BTREE_OM
1b680 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52  IT_JOURNAL | BTR
1b690 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d  EE_SINGLE | pOp-
1b6a0 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a  >p5, vfsFlags);.
1b6b0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1b6c0 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
1b6d0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1b6e0 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c  nTrans(pCx->pBt,
1b6f0 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   1);.  }.  if( r
1b700 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1b710 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e      /* If a tran
1b720 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72  sient index is r
1b730 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20  equired, create 
1b740 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20  it by calling.  
1b750 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
1b760 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
1b770 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c  ith the BTREE_BL
1b780 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72  OBKEY flag befor
1b790 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67  e.    ** opening
1b7a0 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
1b7b0 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
1b7c0 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
1b7d0 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d  the.    ** autom
1b7e0 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1b7f0 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
1b800 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42  -page 1 (an BLOB
1b810 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a  _INTKEY table)..
1b820 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
1b830 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1b840 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20  p4.pKeyInfo)!=0 
1b850 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e  ){.      int pgn
1b860 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  o;.      assert(
1b870 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1b880 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20  _KEYINFO );.    
1b890 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1b8a0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
1b8b0 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Cx->pBt, &pgno, 
1b8c0 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20  BTREE_BLOBKEY | 
1b8d0 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20  pOp->p5); .     
1b8e0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1b8f0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  OK ){.        as
1b900 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54  sert( pgno==MAST
1b910 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20  ER_ROOT+1 );.   
1b920 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1b930 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1b940 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1b950 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1b960 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20  ENC(db) );.     
1b970 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f     pCx->pKeyInfo
1b980 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20   = pKeyInfo;.   
1b990 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1b9a0 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1b9b0 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20  ->pBt, pgno, 1, 
1b9c0 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70  pKeyInfo, pCx->p
1b9d0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1b9e0 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1b9f0 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1ba00 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1ba10 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1ba20 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
1ba30 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70  ER_ROOT, 1, 0, p
1ba40 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  Cx->pCursor);.  
1ba50 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1ba60 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
1ba70 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
1ba80 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
1ba90 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
1baa0 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d 20   pCx->isIndex = 
1bab0 21 70 43 78 2d 3e 69 73 54 61 62 6c 65 3b 0a 20  !pCx->isTable;. 
1bac0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1bad0 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e  code: SorterOpen
1bae0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
1baf0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1bb00 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65  orks like OP_Ope
1bb10 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70  nEphemeral excep
1bb20 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a  t that it opens.
1bb30 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  ** a transient i
1bb40 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65  ndex that is spe
1bb50 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e  cifically design
1bb60 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65  ed to sort large
1bb70 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67  .** tables using
1bb80 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72   an external mer
1bb90 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68  ge-sort algorith
1bba0 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  m..*/.case OP_So
1bbb0 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  rterOpen: {.  Vd
1bbc0 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1bbd0 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1bbe0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1bbf0 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1bc00 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  1);.  if( pCx==0
1bc10 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1bc20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
1bc30 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1bc40 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  fo;.  assert( pC
1bc50 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  x->pKeyInfo->db=
1bc60 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  =db );.  assert(
1bc70 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1bc80 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1bc90 20 20 70 43 78 2d 3e 69 73 53 6f 72 74 65 72 20    pCx->isSorter 
1bca0 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 1;.  rc = sqli
1bcb0 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69  te3VdbeSorterIni
1bcc0 74 28 64 62 2c 20 70 43 78 29 3b 0a 20 20 62 72  t(db, pCx);.  br
1bcd0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1bce0 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31  e: OpenPseudo P1
1bcf0 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53   P2 P3 * P5.** S
1bd00 79 6e 6f 70 73 69 73 3a 20 63 6f 6e 74 65 6e 74  ynopsis: content
1bd10 20 69 6e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a   in r[P2@P3].**.
1bd20 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
1bd30 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73  rsor that points
1bd40 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65   to a fake table
1bd50 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
1bd60 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f   single.** row o
1bd70 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e  f data.  The con
1bd80 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65  tent of that one
1bd90 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 6e 74   row in the cont
1bda0 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  ent of memory.**
1bdb0 20 72 65 67 69 73 74 65 72 20 50 32 20 77 68 65   register P2 whe
1bdc0 6e 20 50 35 3d 3d 30 2e 20 20 49 6e 20 6f 74 68  n P5==0.  In oth
1bdd0 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72  er words, cursor
1bde0 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61   P1 becomes an a
1bdf0 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a  lias for the .**
1be00 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e   MEM_Blob conten
1be10 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72  t contained in r
1be20 65 67 69 73 74 65 72 20 50 32 2e 20 20 57 68 65  egister P2.  Whe
1be30 6e 20 50 35 3d 3d 31 2c 20 74 68 65 6e 20 74 68  n P5==1, then th
1be40 65 0a 2a 2a 20 72 6f 77 20 69 73 20 72 65 70 72  e.** row is repr
1be50 65 73 65 6e 74 65 64 20 62 79 20 50 33 20 63 6f  esented by P3 co
1be60 6e 73 65 63 75 74 69 76 65 20 72 65 67 69 73 74  nsecutive regist
1be70 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
1be80 74 68 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70  th P2..**.** A p
1be90 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61  seudo-table crea
1bea0 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  ted by this opco
1beb0 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f  de is used to ho
1bec0 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ld a single.** r
1bed0 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74  ow output from t
1bee0 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61  he sorter so tha
1bef0 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65  t the row can be
1bf00 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f   decomposed into
1bf10 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63  .** individual c
1bf20 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65  olumns using the
1bf30 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1bf40 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  e.  The OP_Colum
1bf50 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74  n opcode.** is t
1bf60 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f  he only cursor o
1bf70 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73  pcode that works
1bf80 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74   with a pseudo-t
1bf90 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69  able..**.** P3 i
1bfa0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1bfb0 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
1bfc0 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20  cords that will 
1bfd0 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20  be stored by.** 
1bfe0 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  the pseudo-table
1bff0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1c000 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62  nPseudo: {.  Vdb
1c010 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20  eCursor *pCx;.. 
1c020 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c030 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1c040 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1c050 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1c060 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28  3, -1, 0);.  if(
1c070 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1c080 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
1c090 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78  llRow = 1;.  pCx
1c0a0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
1c0b0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43   = pOp->p2;.  pC
1c0c0 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
1c0d0 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20 3d    pCx->isIndex =
1c0e0 20 30 3b 0a 20 20 70 43 78 2d 3e 6d 75 6c 74 69   0;.  pCx->multi
1c0f0 50 73 65 75 64 6f 20 3d 20 70 4f 70 2d 3e 70 35  Pseudo = pOp->p5
1c100 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c110 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
1c120 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1c130 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
1c140 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
1c150 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
1c160 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
1c170 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
1c180 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
1c190 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
1c1a0 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
1c1b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1c1c0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1c1d0 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
1c1e0 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1c1f0 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
1c200 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
1c210 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
1c220 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c230 70 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50 31  pcode: SeekGe P1
1c240 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1c250 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1c260 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1c270 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1c280 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1c290 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1c2a0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1c2b0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1c2c0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1c2d0 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
1c2e0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1c2f0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1c300 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1c310 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1c320 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1c330 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1c340 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1c350 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1c360 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1c370 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1c380 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1c390 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1c3a0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1c3b0 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1c3c0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1c3d0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1c3e0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1c3f0 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1c400 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1c410 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1c420 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1c430 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1c440 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1c450 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1c460 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c   Distinct, SeekL
1c470 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c  t, SeekGt, SeekL
1c480 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1c490 53 65 65 6b 47 74 20 50 31 20 50 32 20 50 33 20  SeekGt P1 P2 P3 
1c4a0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1c4b0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1c4c0 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1c4d0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1c4e0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1c4f0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1c500 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1c510 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1c520 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1c530 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1c540 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1c550 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1c560 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1c570 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1c580 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1c590 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1c5a0 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1c5b0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1c5c0 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1c5d0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1c5e0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1c5f0 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
1c600 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
1c610 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
1c620 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1c630 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1c640 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a  greater than .**
1c650 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1c660 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1c670 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1c680 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1c690 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44  und, NotFound, D
1c6a0 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c  istinct, SeekLt,
1c6b0 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1c6c0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1c6d0 65 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  ekLt P1 P2 P3 P4
1c6e0 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   * .** Synopsis:
1c6f0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1c700 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1c710 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1c720 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1c730 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1c740 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1c750 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1c760 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1c770 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1c780 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1c790 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1c7a0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1c7b0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1c7c0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1c7d0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1c7e0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1c7f0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1c800 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1c810 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1c820 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1c830 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
1c840 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
1c850 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1c860 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1c870 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20  no records less 
1c880 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1c890 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1c8a0 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1c8b0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  o P2..**.** See 
1c8c0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1c8d0 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c  Found, Distinct,
1c8e0 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1c8f0 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1c900 63 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31 20  code: SeekLe P1 
1c910 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1c920 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1c930 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1c940 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1c950 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1c960 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1c970 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1c980 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1c990 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1c9a0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1c9b0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1c9c0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1c9d0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1c9e0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1c9f0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1ca00 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1ca10 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1ca20 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1ca30 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1ca40 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1ca50 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1ca60 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1ca70 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1ca80 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1ca90 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1caa0 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1cab0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1cac0 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1cad0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1cae0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1caf0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1cb00 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
1cb10 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1cb20 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53  und, Distinct, S
1cb30 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1cb40 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
1cb50 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20 20  _SeekLt:        
1cb60 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1cb70 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65 3a  .case OP_SeekLe:
1cb80 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1cb90 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1cba0 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20 20  _SeekGe:        
1cbb0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1cbc0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74 3a  .case OP_SeekGt:
1cbd0 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
1cbe0 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
1cbf0 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20  es;.  int oc;.  
1cc00 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1cc10 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1cc20 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   r;.  int nField
1cc30 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  ;.  i64 iKey;   
1cc40 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
1cc50 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
1cc60 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  o */..  assert( 
1cc70 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1cc80 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1cc90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1cca0 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
1ccb0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1ccc0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1ccd0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1cce0 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1ccf0 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
1cd00 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 65 20  sert( OP_SeekLe 
1cd10 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 31 20 29  == OP_SeekLt+1 )
1cd20 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1cd30 65 65 6b 47 65 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGe == OP_Seek
1cd40 4c 74 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74  Lt+2 );.  assert
1cd50 28 20 4f 50 5f 53 65 65 6b 47 74 20 3d 3d 20 4f  ( OP_SeekGt == O
1cd60 50 5f 53 65 65 6b 4c 74 2b 33 20 29 3b 0a 20 20  P_SeekLt+3 );.  
1cd70 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
1cd80 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28 20 41  dered );.  if( A
1cd90 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f  LWAYS(pC->pCurso
1cda0 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 6f 63 20  r!=0) ){.    oc 
1cdb0 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
1cdc0 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
1cdd0 20 30 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   0;.    if( pC->
1cde0 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20  isTable ){.     
1cdf0 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61   /* The input va
1ce00 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20  lue in P3 might 
1ce10 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20  be of any type: 
1ce20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73  integer, real, s
1ce30 74 72 69 6e 67 2c 0a 20 20 20 20 20 20 2a 2a 20  tring,.      ** 
1ce40 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20  blob, or NULL.  
1ce50 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20  But it needs to 
1ce60 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  be an integer be
1ce70 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20  fore we can do. 
1ce80 20 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b       ** the seek
1ce90 2c 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e 20  , so covert it. 
1cea0 2a 2f 0a 20 20 20 20 20 20 70 49 6e 33 20 3d 20  */.      pIn3 = 
1ceb0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1cec0 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
1ced0 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 29  icAffinity(pIn3)
1cee0 3b 0a 20 20 20 20 20 20 69 4b 65 79 20 3d 20 73  ;.      iKey = s
1cef0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
1cf00 75 65 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20  ue(pIn3);.      
1cf10 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1cf20 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20   = 0;..      /* 
1cf30 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1cf40 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e  could not be con
1cf50 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
1cf60 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20  nteger without. 
1cf70 20 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20       ** loss of 
1cf80 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
1cf90 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73  n special proces
1cfa0 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64  sing is required
1cfb0 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ... */.      if(
1cfc0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1cfd0 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
1cfe0 20 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33         if( (pIn3
1cff0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
1d000 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
1d010 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
1d020 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65   value cannot be
1d030 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
1d040 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75  any kind of a nu
1d050 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  mber,.          
1d060 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b  ** then the seek
1d070 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
1d080 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20  , so jump to P2 
1d090 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 70 63 20  */.          pc 
1d0a0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
1d0b0 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
1d0c0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1d0d0 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
1d0e0 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65   this point, the
1d0f0 6e 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d  n the P3 value m
1d100 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69 6e  ust be a floatin
1d110 67 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 6f 69  g.        ** poi
1d120 6e 74 20 6e 75 6d 62 65 72 2e 20 2a 2f 0a 20 20  nt number. */.  
1d130 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
1d140 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1d150 5f 52 65 61 6c 29 21 3d 30 20 29 3b 0a 0a 20 20  _Real)!=0 );..  
1d160 20 20 20 20 20 20 69 66 28 20 69 4b 65 79 3d 3d        if( iKey==
1d170 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 26  SMALLEST_INT64 &
1d180 26 20 28 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62  & (pIn3->r<(doub
1d190 6c 65 29 69 4b 65 79 20 7c 7c 20 70 49 6e 33 2d  le)iKey || pIn3-
1d1a0 3e 72 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 20  >r>0) ){.       
1d1b0 20 20 20 2f 2a 20 54 68 65 20 50 33 20 76 61 6c     /* The P3 val
1d1c0 75 65 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20  ue is too large 
1d1d0 69 6e 20 6d 61 67 6e 69 74 75 64 65 20 74 6f 20  in magnitude to 
1d1e0 62 65 20 65 78 70 72 65 73 73 65 64 20 61 73 20  be expressed as 
1d1f0 61 6e 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  an.          ** 
1d200 69 6e 74 65 67 65 72 2e 20 2a 2f 0a 20 20 20 20  integer. */.    
1d210 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20        res = 1;. 
1d220 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1d230 33 2d 3e 72 3c 30 20 29 7b 0a 20 20 20 20 20 20  3->r<0 ){.      
1d240 20 20 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50        if( oc>=OP
1d250 5f 53 65 65 6b 47 65 20 29 7b 20 20 61 73 73 65  _SeekGe ){  asse
1d260 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  rt( oc==OP_SeekG
1d270 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  e || oc==OP_Seek
1d280 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Gt );.          
1d290 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1d2a0 42 74 72 65 65 46 69 72 73 74 28 70 43 2d 3e 70  BtreeFirst(pC->p
1d2b0 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28               if(
1d2d0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1d2e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d2f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1d300 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1d310 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1d320 20 20 20 20 20 69 66 28 20 6f 63 3c 3d 4f 50 5f       if( oc<=OP_
1d330 53 65 65 6b 4c 65 20 29 7b 20 20 61 73 73 65 72  SeekLe ){  asser
1d340 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74  t( oc==OP_SeekLt
1d350 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
1d360 65 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  e );.           
1d370 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1d380 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75  treeLast(pC->pCu
1d390 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1d3a0 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72             if( r
1d3b0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1d3c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1d3d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1d3e0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
1d3f0 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  }.          if( 
1d400 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20  res ){.         
1d410 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1d420 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  - 1;.          }
1d430 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
1d440 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
1d450 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  if( oc==OP_SeekL
1d460 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  t || oc==OP_Seek
1d470 47 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  Ge ){.          
1d480 2f 2a 20 55 73 65 20 74 68 65 20 63 65 69 6c 69  /* Use the ceili
1d490 6e 67 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f  ng() function to
1d4a0 20 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69   convert real->i
1d4b0 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  nt */.          
1d4c0 69 66 28 20 70 49 6e 33 2d 3e 72 20 3e 20 28 64  if( pIn3->r > (d
1d4d0 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65  ouble)iKey ) iKe
1d4e0 79 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  y++;.        }el
1d4f0 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a  se{.          /*
1d500 20 55 73 65 20 74 68 65 20 66 6c 6f 6f 72 28 29   Use the floor()
1d510 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e   function to con
1d520 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a  vert real->int *
1d530 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  /.          asse
1d540 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
1d550 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  e || oc==OP_Seek
1d560 47 74 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Gt );.          
1d570 69 66 28 20 70 49 6e 33 2d 3e 72 20 3c 20 28 64  if( pIn3->r < (d
1d580 6f 75 62 6c 65 29 69 4b 65 79 20 29 20 69 4b 65  ouble)iKey ) iKe
1d590 79 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  y--;.        }. 
1d5a0 20 20 20 20 20 7d 20 0a 20 20 20 20 20 20 72 63       } .      rc
1d5b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
1d5c0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
1d5d0 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75  ->pCursor, 0, (u
1d5e0 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  64)iKey, 0, &res
1d5f0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
1d600 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1d610 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1d620 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1d630 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
1d640 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
1d650 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1d660 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  lid = 1;.       
1d670 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   pC->lastRowid =
1d680 20 69 4b 65 79 3b 0a 20 20 20 20 20 20 7d 0a 20   iKey;.      }. 
1d690 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1d6a0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
1d6b0 2e 69 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  .i;.      assert
1d6c0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1d6d0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 20  4_INT32 );.     
1d6e0 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
1d6f0 30 20 29 3b 0a 20 20 20 20 20 20 72 2e 70 4b 65  0 );.      r.pKe
1d700 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1d710 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46  Info;.      r.nF
1d720 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65  ield = (u16)nFie
1d730 6c 64 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68  ld;..      /* Th
1d740 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63  e next line of c
1d750 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20  ode computes as 
1d760 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61  follows, only fa
1d770 73 74 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20  ster:.      **  
1d780 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
1d790 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  Gt || oc==OP_See
1d7a0 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20 2a 2a 20  kLe ){.      ** 
1d7b0 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e      r.flags = UN
1d7c0 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 3b 0a  PACKED_INCRKEY;.
1d7d0 20 20 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65        **   }else
1d7e0 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72  {.      **     r
1d7f0 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20  .flags = 0;.    
1d800 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 20 20 2a    **   }.      *
1d810 2f 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20  /.      r.flags 
1d820 3d 20 28 75 38 29 28 55 4e 50 41 43 4b 45 44 5f  = (u8)(UNPACKED_
1d830 49 4e 43 52 4b 45 59 20 2a 20 28 31 20 26 20 28  INCRKEY * (1 & (
1d840 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 74 29 29  oc - OP_SeekLt))
1d850 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1d860 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 74 20 7c   oc!=OP_SeekGt |
1d870 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43  | r.flags==UNPAC
1d880 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20  KED_INCRKEY );. 
1d890 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21       assert( oc!
1d8a0 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 72 2e  =OP_SeekLe || r.
1d8b0 66 6c 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f  flags==UNPACKED_
1d8c0 49 4e 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20  INCRKEY );.     
1d8d0 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1d8e0 53 65 65 6b 47 65 20 7c 7c 20 72 2e 66 6c 61 67  SeekGe || r.flag
1d8f0 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  s==0 );.      as
1d900 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1d910 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d  kLt || r.flags==
1d920 30 20 29 3b 0a 0a 20 20 20 20 20 20 72 2e 61 4d  0 );..      r.aM
1d930 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
1d940 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p3];.#ifdef SQLI
1d950 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20 20 7b  TE_DEBUG.      {
1d960 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
1d970 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
1d980 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
1d990 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
1d9a0 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
1d9b0 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e     ExpandBlob(r.
1d9c0 61 4d 65 6d 29 3b 0a 20 20 20 20 20 20 72 63 20  aMem);.      rc 
1d9d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1d9e0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1d9f0 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c  >pCursor, &r, 0,
1da00 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20   0, &res);.     
1da10 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1da20 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
1da30 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1da40 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
1da50 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1da60 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d  Valid = 0;.    }
1da70 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
1da80 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
1da90 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
1daa0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
1dab0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
1dac0 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
1dad0 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
1dae0 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 6f 63  endif.    if( oc
1daf0 3e 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20 20  >=OP_SeekGe ){  
1db00 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1db10 65 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGe || oc==OP_
1db20 53 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20  SeekGt );.      
1db30 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65  if( res<0 || (re
1db40 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
1db50 65 65 6b 47 74 29 20 29 7b 0a 20 20 20 20 20 20  eekGt) ){.      
1db60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1db70 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72  reeNext(pC->pCur
1db80 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1db90 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1dba0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1dbb0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1dbc0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  .        pC->row
1dbd0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1dbe0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1dbf0 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1dc00 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
1dc10 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63        assert( oc
1dc20 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f  ==OP_SeekLt || o
1dc30 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a  c==OP_SeekLe );.
1dc40 20 20 20 20 20 20 69 66 28 20 72 65 73 3e 30 20        if( res>0 
1dc50 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1dc60 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29 20 29 7b 0a  ==OP_SeekLt) ){.
1dc70 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1dc80 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
1dc90 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  s(pC->pCursor, &
1dca0 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
1dcb0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1dcc0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1dcd0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1dce0 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1dcf0 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  lid = 0;.      }
1dd00 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a  else{.        /*
1dd10 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65   res might be ne
1dd20 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74  gative because t
1dd30 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74  he table is empt
1dd40 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20  y.  Check to.   
1dd50 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74       ** see if t
1dd60 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e  his is the case.
1dd70 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
1dd80 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65      res = sqlite
1dd90 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70 43  3BtreeEof(pC->pC
1dda0 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a  ursor);.      }.
1ddb0 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
1ddc0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
1ddd0 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
1dde0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1ddf0 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   - 1;.    }.  }e
1de00 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  lse{.    /* This
1de10 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61 74   happens when at
1de20 74 65 6d 70 74 69 6e 67 20 74 6f 20 6f 70 65 6e  tempting to open
1de30 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6d 61 73   the sqlite3_mas
1de40 74 65 72 20 74 61 62 6c 65 0a 20 20 20 20 2a 2a  ter table.    **
1de50 20 66 6f 72 20 72 65 61 64 20 61 63 63 65 73 73   for read access
1de60 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
1de70 45 4d 50 54 59 2e 20 49 6e 20 74 68 69 73 20 63  EMPTY. In this c
1de80 61 73 65 20 61 6c 77 61 79 73 0a 20 20 20 20 2a  ase always.    *
1de90 2a 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  * take the jump 
1dea0 28 73 69 6e 63 65 20 74 68 65 72 65 20 61 72 65  (since there are
1deb0 20 6e 6f 20 72 65 63 6f 72 64 73 20 69 6e 20 74   no records in t
1dec0 68 65 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  he table)..    *
1ded0 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  /.    pc = pOp->
1dee0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1def0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1df00 65 3a 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20  e: Seek P1 P2 * 
1df10 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1df20 20 20 69 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a    intkey=r[P2].*
1df30 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70  *.** P1 is an op
1df40 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  en table cursor 
1df50 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77 69  and P2 is a rowi
1df60 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61  d integer.  Arra
1df70 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f  nge.** for P1 to
1df80 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74   move so that it
1df90 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72   points to the r
1dfa0 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20 50 32  owid given by P2
1dfb0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
1dfc0 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72  actually a defer
1dfd0 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69  red seek.  Nothi
1dfe0 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70  ng actually happ
1dff0 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65  ens until.** the
1e000 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20   cursor is used 
1e010 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64  to read a record
1e020 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20  .  That way, if 
1e030 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75  no reads.** occu
1e040 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72  r, no unnecessar
1e050 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a  y I/O happens..*
1e060 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20  /.case OP_Seek: 
1e070 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20  {    /* in2 */. 
1e080 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1e090 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1e0a0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1e0b0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1e0c0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1e0d0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1e0e0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
1e0f0 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43  f( ALWAYS(pC->pC
1e100 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20  ursor!=0) ){.   
1e110 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1e120 61 62 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e  able );.    pC->
1e130 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1e140 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
1e150 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 70 43 2d 3e  p->p2];.    pC->
1e160 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73  movetoTarget = s
1e170 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
1e180 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43  ue(pIn2);.    pC
1e190 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1e1a0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65   0;.    pC->defe
1e1b0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
1e1c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20    }.  break;.}. 
1e1d0 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f   ../* Opcode: Fo
1e1e0 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
1e1f0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1e200 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1e210 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
1e220 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
1e230 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
1e240 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
1e250 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
1e260 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1e270 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
1e280 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
1e290 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
1e2a0 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
1e2b0 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69  *.** Cursor P1 i
1e2c0 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
1e2d0 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
1e2e0 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
1e2f0 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
1e300 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e  s a prefix of an
1e310 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
1e320 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
1e330 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50  e to P2 and.** P
1e340 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
1e350 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69  ng at the matchi
1e360 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
1e370 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
1e380 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
1e390 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47  NotExists. SeekG
1e3a0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1e3b0 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50  NotFound P1 P2 P
1e3c0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1e3d0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1e3e0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1e3f0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1e400 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1e410 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1e420 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1e430 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1e440 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1e450 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1e460 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1e470 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1e480 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
1e490 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
1e4a0 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
1e4b0 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
1e4c0 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
1e4d0 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20  4.** is not the 
1e4e0 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
1e4f0 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
1e500 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
1e510 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20   P2.  If P1 .** 
1e520 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20  does contain an 
1e530 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66  entry whose pref
1e540 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50  ix matches the P
1e550 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e  3/P4 record then
1e560 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c   control.** fall
1e570 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  s through to the
1e580 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
1e590 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74  n and P1 is left
1e5a0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
1e5b0 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  .** matching ent
1e5c0 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ry..**.** See al
1e5d0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  so: Found, NotEx
1e5e0 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ists, NoConflict
1e5f0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
1e600 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20  oConflict P1 P2 
1e610 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1e620 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1e630 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
1e640 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1e650 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1e660 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1e670 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1e680 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1e690 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1e6a0 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1e6b0 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1e6c0 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1e6d0 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
1e6e0 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1e6f0 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1e700 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1e710 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1e720 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P4.** contains a
1e730 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a  ny NULL value, j
1e740 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
1e750 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74  to P2.  If all t
1e760 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72  erms of the.** r
1e770 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55  ecord are not-NU
1e780 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20  LL then a check 
1e790 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72  is done to deter
1e7a0 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20  mine if any row 
1e7b0 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64  in the.** P1 ind
1e7c0 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20 6d  ex btree has a m
1e7d0 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66  atching key pref
1e7e0 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ix.  If there ar
1e7f0 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75  e no matches, ju
1e800 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  mp.** immediatel
1e810 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65  y to P2.  If the
1e820 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66  re is a match, f
1e830 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20  all through and 
1e840 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20  leave the P1.** 
1e850 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
1e860 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  to the matching 
1e870 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  row..**.** This 
1e880 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61  opcode is simila
1e890 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  r to OP_NotFound
1e8a0 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74   with the except
1e8b0 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  ions that the.**
1e8c0 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79   branch is alway
1e8d0 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70  s taken if any p
1e8e0 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72 63  art of the searc
1e8f0 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e  h key input is N
1e900 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ULL..**.** See a
1e910 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46  lso: NotFound, F
1e920 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a  ound, NotExists.
1e930 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e  */.case OP_NoCon
1e940 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75  flict:     /* ju
1e950 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1e960 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20  OP_NotFound:    
1e970 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1e980 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64  */.case OP_Found
1e990 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
1e9a0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
1e9b0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a   alreadyExists;.
1e9c0 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65    int ii;.  Vdbe
1e9d0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
1e9e0 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a 70  t res;.  char *p
1e9f0 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64  Free;.  Unpacked
1ea00 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b  Record *pIdxKey;
1ea10 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1ea20 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d  d r;.  char aTem
1ea30 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65  pRec[ROUND8(size
1ea40 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  of(UnpackedRecor
1ea50 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d  d)) + sizeof(Mem
1ea60 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65  )*4 + 7];..#ifde
1ea70 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1ea80 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  if( pOp->opcode!
1ea90 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29  =OP_NoConflict )
1eaa0 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
1eab0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  ount++;.#endif..
1eac0 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
1ead0 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
1eae0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1eaf0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1eb00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1eb10 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1eb20 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  32 );.  pC = p->
1eb30 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1eb40 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1eb50 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
1eb60 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
1eb70 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75  ( ALWAYS(pC->pCu
1eb80 72 73 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20 20  rsor!=0) ){..   
1eb90 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1eba0 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69  able==0 );.    i
1ebb0 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29  f( pOp->p4.i>0 )
1ebc0 7b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e  {.      r.pKeyIn
1ebd0 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
1ebe0 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c  o;.      r.nFiel
1ebf0 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34  d = (u16)pOp->p4
1ec00 2e 69 3b 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d  .i;.      r.aMem
1ec10 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20   = pIn3;.#ifdef 
1ec20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
1ec30 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74     {.        int
1ec40 20 69 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   i;.        for(
1ec50 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1ec60 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   i++){.         
1ec70 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1ec80 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
1ec90 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
1eca0 20 69 20 29 20 52 45 47 49 53 54 45 52 5f 54 52   i ) REGISTER_TR
1ecb0 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 2c 20 26  ACE(pOp->p3+i, &
1ecc0 72 2e 61 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  r.aMem[i]);.    
1ecd0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 23 65      }.      }.#e
1ece0 6e 64 69 66 0a 20 20 20 20 20 20 72 2e 66 6c 61  ndif.      r.fla
1ecf0 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52  gs = UNPACKED_PR
1ed00 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
1ed10 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a    pIdxKey = &r;.
1ed20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1ed30 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74   pIdxKey = sqlit
1ed40 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63  e3VdbeAllocUnpac
1ed50 6b 65 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20  kedRecord(.     
1ed60 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66       pC->pKeyInf
1ed70 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a  o, aTempRec, siz
1ed80 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c 20 26  eof(aTempRec), &
1ed90 70 46 72 65 65 0a 20 20 20 20 20 20 29 3b 20 0a  pFree.      ); .
1eda0 20 20 20 20 20 20 69 66 28 20 70 49 64 78 4b 65        if( pIdxKe
1edb0 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  y==0 ) goto no_m
1edc0 65 6d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  em;.      assert
1edd0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
1ede0 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
1edf0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d    assert( (pIn3-
1ee00 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
1ee10 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a 65 72  o)==0 );  /* zer
1ee20 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79 20 65  oblobs already e
1ee30 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20 20 20  xpanded */.     
1ee40 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f   sqlite3VdbeReco
1ee50 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65  rdUnpack(pC->pKe
1ee60 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20  yInfo, pIn3->n, 
1ee70 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79  pIn3->z, pIdxKey
1ee80 29 3b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79  );.      pIdxKey
1ee90 2d 3e 66 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43  ->flags |= UNPAC
1eea0 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
1eeb0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
1eec0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1eed0 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20  NoConflict ){.  
1eee0 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f      /* For the O
1eef0 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63  P_NoConflict opc
1ef00 6f 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75  ode, take the ju
1ef10 6d 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  mp if any of the
1ef20 0a 20 20 20 20 20 20 2a 2a 20 69 6e 70 75 74 20  .      ** input 
1ef30 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c  fields are NULL,
1ef40 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77   since any key w
1ef50 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20  ith a NULL will 
1ef60 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  not.      ** con
1ef70 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 20 20 66  flict */.      f
1ef80 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46  or(ii=0; ii<r.nF
1ef90 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  ield; ii++){.   
1efa0 20 20 20 20 20 69 66 28 20 72 2e 61 4d 65 6d 5b       if( r.aMem[
1efb0 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
1efc0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  Null ){.        
1efd0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1efe0 20 31 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72   1;.          br
1eff0 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  eak;.        }. 
1f000 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
1f010 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1f020 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1f030 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 49  (pC->pCursor, pI
1f040 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65  dxKey, 0, 0, &re
1f050 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  s);.    if( pOp-
1f060 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20  >p4.i==0 ){.    
1f070 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1f080 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 20 20  db, pFree);.    
1f090 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
1f0a0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1f0b0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
1f0c0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1f0d0 20 3d 20 72 65 73 3b 0a 20 20 20 20 61 6c 72 65   = res;.    alre
1f0e0 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73  adyExists = (res
1f0f0 3d 3d 30 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 75  ==0);.    pC->nu
1f100 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64  llRow = 1-alread
1f110 79 45 78 69 73 74 73 3b 0a 20 20 20 20 70 43 2d  yExists;.    pC-
1f120 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1f130 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
1f140 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1f150 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66  _STALE;.  }.  if
1f160 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1f170 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 69  P_Found ){.    i
1f180 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  f( alreadyExists
1f190 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20   ) pc = pOp->p2 
1f1a0 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
1f1b0 20 20 69 66 28 20 21 61 6c 72 65 61 64 79 45 78    if( !alreadyEx
1f1c0 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d  ists ) pc = pOp-
1f1d0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
1f1e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1f1f0 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
1f200 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
1f210 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
1f220 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
1f230 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
1f240 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
1f250 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
1f260 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
1f270 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73  ** keys).  P3 is
1f280 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69   an integer rowi
1f290 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e  d.  If P1 does n
1f2a0 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ot contain a rec
1f2b0 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69  ord with.** rowi
1f2c0 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
1f2d0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1f2e0 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f  .  If P1 does co
1f2f0 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 0a 2a  ntain a record.*
1f300 2a 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20  * with rowid P3 
1f310 74 68 65 6e 20 6c 65 61 76 65 20 74 68 65 20 63  then leave the c
1f320 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61  ursor pointing a
1f330 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e  t that record an
1f340 64 20 66 61 6c 6c 0a 2a 2a 20 74 68 72 6f 75 67  d fall.** throug
1f350 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
1f360 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
1f370 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64   The OP_NotFound
1f380 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73   opcode performs
1f390 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
1f3a0 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72  ion on index btr
1f3b0 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62  ees.** (with arb
1f3c0 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c  itrary multi-val
1f3d0 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20  ue keys)..**.** 
1f3e0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1f3f0 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
1f400 66 6c 69 63 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  flict.*/.case OP
1f410 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20  _NotExists: {   
1f420 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1f430 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  3 */.  VdbeCurso
1f440 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
1f450 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
1f460 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b  res;.  u64 iKey;
1f470 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ..  pIn3 = &aMem
1f480 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
1f490 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
1f4a0 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
1f4b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1f4c0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1f4d0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1f4e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1f4f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1f500 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1f510 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1f520 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f530 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
1f540 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
1f550 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
1f560 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d  ( ALWAYS(pCrsr!=
1f570 30 29 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20  0) ){.    res = 
1f580 30 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 49  0;.    iKey = pI
1f590 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 72 63 20  n3->u.i;.    rc 
1f5a0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1f5b0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
1f5c0 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20  sr, 0, iKey, 0, 
1f5d0 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6c  &res);.    pC->l
1f5e0 61 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d  astRowid = pIn3-
1f5f0 3e 75 2e 69 3b 0a 20 20 20 20 70 43 2d 3e 72 6f  >u.i;.    pC->ro
1f600 77 69 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73  widIsValid = res
1f610 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70 43  ==0 ?1:0;.    pC
1f620 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
1f630 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
1f640 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1f650 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
1f660 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1f670 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a    if( res!=0 ){.
1f680 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1f690 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 61 73  p2 - 1;.      as
1f6a0 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
1f6b0 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 20  sValid==0 );.   
1f6c0 20 7d 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52   }.    pC->seekR
1f6d0 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 7d  esult = res;.  }
1f6e0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69  else{.    /* Thi
1f6f0 73 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 61  s happens when a
1f700 6e 20 61 74 74 65 6d 70 74 20 74 6f 20 6f 70 65  n attempt to ope
1f710 6e 20 61 20 72 65 61 64 20 63 75 72 73 6f 72 20  n a read cursor 
1f720 6f 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 73  on the .    ** s
1f730 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
1f740 6c 65 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54  le returns SQLIT
1f750 45 5f 45 4d 50 54 59 2e 0a 20 20 20 20 2a 2f 0a  E_EMPTY..    */.
1f760 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1f770 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74   - 1;.    assert
1f780 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1f790 69 64 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d  id==0 );.    pC-
1f7a0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b  >seekResult = 0;
1f7b0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1f7c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
1f7d0 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  ence P1 P2 * * *
1f7e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
1f7f0 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
1f800 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76  Find the next av
1f810 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65  ailable sequence
1f820 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73   number for curs
1f830 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20  or P1..** Write 
1f840 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  the sequence num
1f850 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ber into registe
1f860 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71  r P2..** The seq
1f870 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20  uence number on 
1f880 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e  the cursor is in
1f890 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20  cremented after 
1f8a0 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74  this.** instruct
1f8b0 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ion.  .*/.case O
1f8c0 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20  P_Sequence: {   
1f8d0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1f8e0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1f8f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1f900 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1f910 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1f920 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
1f930 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
1f940 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61  pOut->u.i = p->a
1f950 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73  pCsr[pOp->p1]->s
1f960 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65  eqCount++;.  bre
1f970 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
1f980 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50  e: NewRowid P1 P
1f990 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
1f9a0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
1f9b0 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65  d.**.** Get a ne
1f9c0 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64  w integer record
1f9d0 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22   number (a.k.a "
1f9e0 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20  rowid") used as 
1f9f0 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62  the key to a tab
1fa00 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72  le..** The recor
1fa10 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20  d number is not 
1fa20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20  previously used 
1fa30 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20  as a key in the 
1fa40 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c  database.** tabl
1fa50 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  e that cursor P1
1fa60 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65   points to.  The
1fa70 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1fa80 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a  er is written.**
1fa90 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69   written to regi
1faa0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
1fab0 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69  f P3>0 then P3 i
1fac0 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
1fad0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
1fae0 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74  f this VDBE that
1faf0 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c   holds .** the l
1fb00 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c  argest previousl
1fb10 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  y generated reco
1fb20 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65  rd number. No ne
1fb30 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73  w record numbers
1fb40 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20   are.** allowed 
1fb50 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
1fb60 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e  this value. When
1fb70 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63   this value reac
1fb80 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c  hes its maximum,
1fb90 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46   .** an SQLITE_F
1fba0 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e  ULL error is gen
1fbb0 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72  erated. The P3 r
1fbc0 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74  egister is updat
1fbd0 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a  ed with the '.**
1fbe0 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
1fbf0 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50  d number. This P
1fc00 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75  3 mechanism is u
1fc10 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c  sed to help impl
1fc20 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54  ement the.** AUT
1fc30 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75  OINCREMENT featu
1fc40 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  re..*/.case OP_N
1fc50 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  ewRowid: {      
1fc60 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1fc70 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34  release */.  i64
1fc80 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
1fc90 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
1fca0 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
1fcb0 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
1fcc0 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
1fcd0 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
1fce0 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
1fcf0 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
1fd00 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
1fd10 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
1fd20 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
1fd30 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
1fd40 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
1fd50 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
1fd60 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
1fd70 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
1fd80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1fd90 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
1fda0 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
1fdb0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
1fdc0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
1fdd0 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f  Frame;     /* Ro
1fde0 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45  ot frame of VDBE
1fdf0 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
1fe00 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
1fe10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1fe20 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1fe30 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1fe40 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1fe50 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1fe60 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28   );.  if( NEVER(
1fe70 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20  pC->pCursor==0) 
1fe80 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65  ){.    /* The ze
1fe90 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ro initializatio
1fea0 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74  n above is all t
1feb0 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f  hat is needed */
1fec0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1fed0 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20   The next rowid 
1fee0 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  or record number
1fef0 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d   (different term
1ff00 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20  s for the same. 
1ff10 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20     ** thing) is 
1ff20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77  obtained in a tw
1ff30 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d  o-step algorithm
1ff40 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1ff50 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74  First we attempt
1ff60 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72   to find the lar
1ff70 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
1ff80 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a  wid and add one.
1ff90 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20      ** to that. 
1ffa0 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67   But if the larg
1ffb0 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
1ffc0 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68  id is already th
1ffd0 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a  e maximum.    **
1ffe0 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
1fff0 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61  r, we have to fa
20000 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
20010 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20  e second.    ** 
20020 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c  probabilistic al
20030 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20  gorithm.    **. 
20040 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64     ** The second
20050 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f   algorithm is to
20060 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20   select a rowid 
20070 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65  at random and se
20080 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61  e if.    ** it a
20090 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e  lready exists in
200a0 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
200b0 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
200c0 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a  t, we have.    *
200d0 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66  * succeeded.  If
200e0 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69   the random rowi
200f0 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65  d does exist, we
20100 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e   select a new on
20110 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79  e.    ** and try
20120 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30   again, up to 10
20130 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a  0 times..    */.
20140 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
20150 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64  isTable );..#ifd
20160 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f  ef SQLITE_32BIT_
20170 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65  ROWID.#   define
20180 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66   MAX_ROWID 0x7ff
20190 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20  fffff.#else.    
201a0 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  /* Some compiler
201b0 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
201c0 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68   constants of th
201d0 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66  e form 0x7ffffff
201e0 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a  fffffffff..    *
201f0 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69  * Others complai
20200 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66  n about 0x7fffff
20210 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20  fffffffffffLL.  
20220 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
20230 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a  cro seems.    **
20240 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20   to provide the 
20250 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d  constant while m
20260 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c  aking all compil
20270 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a  ers happy..    *
20280 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  /.#   define MAX
20290 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28  _ROWID  (i64)( (
202a0 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66  ((u64)0x7fffffff
202b0 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78  )<<32) | (u64)0x
202c0 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69  ffffffff ).#endi
202d0 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  f..    if( !pC->
202e0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
202f0 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69  {.      v = sqli
20300 74 65 33 42 74 72 65 65 47 65 74 43 61 63 68 65  te3BtreeGetCache
20310 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73  dRowid(pC->pCurs
20320 6f 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 76  or);.      if( v
20330 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
20340 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
20350 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Last(pC->pCursor
20360 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
20370 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
20380 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
20390 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
203a0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
203b0 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72   }.        if( r
203c0 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  es ){.          
203d0 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a  v = 1;   /* IMP:
203e0 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a   R-61914-48074 *
203f0 2f 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  /.        }else{
20400 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
20410 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
20420 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d  ursorIsValid(pC-
20430 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >pCursor) );.   
20440 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
20450 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
20460 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29  pC->pCursor, &v)
20470 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
20480 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
20490 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74  K );   /* Cannot
204a0 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20   fail following 
204b0 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
204c0 20 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d           if( v>=
204d0 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20  MAX_ROWID ){.   
204e0 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65           pC->use
204f0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b  RandomRowid = 1;
20500 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
20510 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 2b  {.            v+
20520 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  +;   /* IMP: R-2
20530 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20  9538-34987 */.  
20540 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
20550 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66    }.      }..#if
20560 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
20570 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
20580 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33       if( pOp->p3
20590 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41   ){.        /* A
205a0 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
205b0 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
205c0 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
205d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
205e0 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  >0 );.        if
205f0 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
20600 20 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72           for(pFr
20610 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
20620 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
20630 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
20640 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  Parent);.       
20650 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
20660 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
20670 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
20680 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
20690 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d  ( pOp->p3<=pFram
206a0 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  e->nMem );.     
206b0 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72       pMem = &pFr
206c0 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
206d0 33 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  3];.        }els
206e0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e{.          /* 
206f0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
20700 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
20710 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
20720 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20730 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
20740 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
20750 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61         pMem = &a
20760 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
20770 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
20780 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d  ToChange(p, pMem
20790 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
207a0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
207b0 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b  IsValid(pMem) );
207c0 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ..        REGIST
207d0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
207e0 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  , pMem);.       
207f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
20800 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
20810 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
20820 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
20830 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20  MEM_Int)!=0 );  
20840 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73  /* mem(P3) holds
20850 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20   an integer */. 
20860 20 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d         if( pMem-
20870 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
20880 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
20890 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
208a0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
208b0 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  ULL;   /* IMP: R
208c0 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a  -12275-61338 */.
208d0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
208e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
208f0 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
20900 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d       if( v<pMem-
20910 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20  >u.i+1 ){.      
20920 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
20930 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  i + 1;.        }
20940 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75  .        pMem->u
20950 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20 7d 0a  .i = v;.      }.
20960 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 73 71  #endif..      sq
20970 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
20980 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70 43 75  hedRowid(pC->pCu
20990 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f 57 49  rsor, v<MAX_ROWI
209a0 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a 20 20  D ? v+1 : 0);.  
209b0 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43 2d 3e    }.    if( pC->
209c0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
209d0 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45  {.      /* IMPLE
209e0 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
209f0 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74  07677-41881 If t
20a00 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44  he largest ROWID
20a10 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65   is equal to the
20a20 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73  .      ** larges
20a30 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67  t possible integ
20a40 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35  er (922337203685
20a50 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68  4775807) then th
20a60 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
20a70 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74   ** engine start
20a80 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69  s picking positi
20a90 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57  ve candidate ROW
20aa0 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e  IDs at random un
20ab0 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20  til.      ** it 
20ac0 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69  finds one that i
20ad0 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
20ae0 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20   used. */.      
20af0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
20b00 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e  =0 );  /* We can
20b10 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d  not be in random
20b20 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74   rowid mode if t
20b30 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20  his is.         
20b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b50 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e      ** an AUTOIN
20b60 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a  CREMENT table. *
20b70 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20 74 68  /.      /* on th
20b80 65 20 66 69 72 73 74 20 61 74 74 65 6d 70 74 2c  e first attempt,
20b90 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65 20 6d   simply do one m
20ba0 6f 72 65 20 74 68 61 6e 20 70 72 65 76 69 6f 75  ore than previou
20bb0 73 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20 6c  s */.      v = l
20bc0 61 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 20 20  astRowid;.      
20bd0 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e  v &= (MAX_ROWID>
20be0 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64  >1); /* ensure d
20bf0 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69  oesn't go negati
20c00 76 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b 2b 3b  ve */.      v++;
20c10 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a   /* ensure non-z
20c20 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74  ero */.      cnt
20c30 20 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c   = 0;.      whil
20c40 65 28 20 20 20 28 28 72 63 20 3d 20 73 71 6c 69  e(   ((rc = sqli
20c50 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
20c60 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
20c70 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20  or, 0, (u64)v,. 
20c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cb0 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54  0, &res))==SQLIT
20cc0 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20  E_OK).          
20cd0 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20    && (res==0).  
20ce0 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b            && (++
20cf0 63 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20 20 20  cnt<100)){.     
20d00 20 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e 20     /* collision 
20d10 2d 20 74 72 79 20 61 6e 6f 74 68 65 72 20 72 61  - try another ra
20d20 6e 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a 20 20  ndom rowid */.  
20d30 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61        sqlite3_ra
20d40 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28  ndomness(sizeof(
20d50 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  v), &v);.       
20d60 20 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a 20 20   if( cnt<5 ){.  
20d70 20 20 20 20 20 20 20 20 2f 2a 20 74 72 79 20 22          /* try "
20d80 73 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20 72 6f  small" random ro
20d90 77 69 64 73 20 66 6f 72 20 74 68 65 20 69 6e 69  wids for the ini
20da0 74 69 61 6c 20 61 74 74 65 6d 70 74 73 20 2a 2f  tial attempts */
20db0 0a 20 20 20 20 20 20 20 20 20 20 76 20 26 3d 20  .          v &= 
20dc0 30 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20  0xffffff;.      
20dd0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
20de0 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
20df0 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72  ID>>1); /* ensur
20e00 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67  e doesn't go neg
20e10 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 20  ative */.       
20e20 20 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b 3b 20   }.        v++; 
20e30 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65  /* ensure non-ze
20e40 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20  ro */.      }.  
20e50 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
20e60 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
20e70 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
20e80 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
20e90 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35  * IMP: R-38219-5
20ea0 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  3002 */.        
20eb0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
20ec0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
20ed0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76  .      assert( v
20ee0 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d  >0 );  /* EV: R-
20ef0 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20  40812-03570 */. 
20f00 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77     }.    pC->row
20f10 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
20f20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
20f30 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
20f40 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
20f50 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
20f60 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
20f70 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
20f80 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
20f90 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
20fa0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
20fb0 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72  key=r[P3] data=r
20fc0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  [P2].**.** Write
20fd0 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74   an entry into t
20fe0 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73  he table of curs
20ff0 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e  or P1.  A new en
21000 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65  try is.** create
21010 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20  d if it doesn't 
21020 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72  already exist or
21030 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e   the data for an
21040 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74   existing.** ent
21050 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65  ry is overwritte
21060 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20  n.  The data is 
21070 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c  the value MEM_Bl
21080 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ob stored in reg
21090 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  ister.** number 
210a0 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73  P2. The key is s
210b0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
210c0 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75  r P3. The key mu
210d0 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49  st.** be a MEM_I
210e0 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nt..**.** If the
210f0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
21100 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
21110 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
21120 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
21130 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
21140 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20  otherwise not). 
21150 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
21160 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66  ASTROWID flag of
21170 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74   P5 is set,.** t
21180 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f  hen rowid is sto
21190 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65  red for subseque
211a0 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65  nt return by the
211b0 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74  .** sqlite3_last
211c0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
211d0 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77  function (otherw
211e0 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69  ise it is unmodi
211f0 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  fied)..**.** If 
21200 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  the OPFLAG_USESE
21210 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66  EKRESULT flag of
21220 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 69   P5 is set and i
21230 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a  f the result of.
21240 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b  ** the last seek
21250 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e   operation (OP_N
21260 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61 20  otExists) was a 
21270 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68  success, then th
21280 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20  is.** operation 
21290 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74  will not attempt
212a0 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70   to find the app
212b0 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65 66  ropriate row bef
212c0 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65  ore doing.** the
212d0 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c   insert but will
212e0 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69   instead overwri
212f0 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  te the row that 
21300 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
21310 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
21320 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61  ing to.  Presuma
21330 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f  bly, the prior O
21340 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f  P_NotExists opco
21350 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64  de.** has alread
21360 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65  y positioned the
21370 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c   cursor correctl
21380 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f  y.  This is an o
21390 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  ptimization.** t
213a0 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f  hat boosts perfo
213b0 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69  rmance by avoidi
213c0 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65  ng redundant see
213d0 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ks..**.** If the
213e0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
213f0 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
21400 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  en this opcode i
21410 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20  s part of an.** 
21420 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e  UPDATE operation
21430 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66  .  Otherwise (if
21440 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65   the flag is cle
21450 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70  ar) then this op
21460 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20  code.** is part 
21470 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65  of an INSERT ope
21480 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66  ration.  The dif
21490 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20  ference is only 
214a0 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20  important to.** 
214b0 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e  the update hook.
214c0 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72  .**.** Parameter
214d0 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f   P4 may point to
214e0 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69   a string contai
214f0 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d 6e  ning the table-n
21500 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62  ame, or.** may b
21510 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73  e NULL. If it is
21520 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
21530 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
21540 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55 70  .** (sqlite3.xUp
21550 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73  dateCallback) is
21560 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69   invoked followi
21570 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  ng a successful 
21580 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57  insert..**.** (W
21590 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20  ARNING/TODO: If 
215a0 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63  P1 is a pseudo-c
215b0 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20  ursor and P2 is 
215c0 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61  dynamically.** a
215d0 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f  llocated, then o
215e0 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69  wnership of P2 i
215f0 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f  s transferred to
21600 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73   the pseudo-curs
21610 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74  or.** and regist
21620 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70  er P2 becomes ep
21630 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65  hemeral.  If the
21640 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67   cursor is chang
21650 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  ed, the.** value
21660 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
21670 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65  will then change
21680 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69  .  Make sure thi
21690 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61  s does not.** ca
216a0 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  use any problems
216b0 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  .).**.** This in
216c0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
216d0 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20  orks on tables. 
216e0 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   The equivalent 
216f0 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66  instruction.** f
21700 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50  or indices is OP
21710 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f  _IdxInsert..*/./
21720 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
21730 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20  Int P1 P2 P3 P4 
21740 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
21750 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d   intkey=P3 data=
21760 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r[P2].**.** This
21770 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c   works exactly l
21780 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78  ike OP_Insert ex
21790 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65  cept that the ke
217a0 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65  y is the.** inte
217b0 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f  ger value P3, no
217c0 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  t the value of t
217d0 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65  he integer store
217e0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
217f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73  ..*/.case OP_Ins
21800 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e  ert: .case OP_In
21810 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d  sertInt: {.  Mem
21820 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f   *pData;       /
21830 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
21840 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ng data for the 
21850 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73  record to be ins
21860 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erted */.  Mem *
21870 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20  pKey;        /* 
21880 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
21890 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65   key  for the re
218a0 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b  cord */.  i64 iK
218b0 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ey;         /* T
218c0 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44  he integer ROWID
218d0 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20   or key for the 
218e0 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73  record to be ins
218f0 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43  erted */.  VdbeC
21900 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20  ursor *pC;   /* 
21910 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20  Cursor to table 
21920 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72  into which inser
21930 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a  t is written */.
21940 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20    int nZero;    
21950 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
21960 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61   zero-bytes to a
21970 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ppend */.  int s
21980 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20  eekResult;   /* 
21990 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20  Result of prior 
219a0 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20  seek or 0 if no 
219b0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
219c0 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ag */.  const ch
219d0 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74  ar *zDb;  /* dat
219e0 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65  abase name - use
219f0 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20  d by the update 
21a00 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  hook */.  const 
21a10 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54  char *zTbl; /* T
21a20 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  able name - used
21a30 20 62 79 20 74 68 65 20 6f 70 64 61 74 65 20 68   by the opdate h
21a40 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b  ook */.  int op;
21a50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
21a60 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20  code for update 
21a70 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44  hook: SQLITE_UPD
21a80 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e  ATE or SQLITE_IN
21a90 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61  SERT */..  pData
21aa0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
21ab0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ];.  assert( pOp
21ac0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21ad0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
21ae0 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
21af0 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a  Valid(pData) );.
21b00 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
21b10 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
21b20 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
21b30 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
21b40 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
21b50 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
21b60 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
21b70 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
21b80 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  e );.  REGISTER_
21b90 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
21ba0 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f  Data);..  if( pO
21bb0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  p->opcode==OP_In
21bc0 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79  sert ){.    pKey
21bd0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
21be0 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
21bf0 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Key->flags & MEM
21c00 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65  _Int );.    asse
21c10 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
21c20 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49  Key) );.    REGI
21c30 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
21c40 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69  p3, pKey);.    i
21c50 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b  Key = pKey->u.i;
21c60 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
21c70 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
21c80 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20  e==OP_InsertInt 
21c90 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f  );.    iKey = pO
21ca0 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66  p->p3;.  }..  if
21cb0 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
21cc0 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
21cd0 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28  nChange++;.  if(
21ce0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
21cf0 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62  G_LASTROWID ) db
21d00 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
21d10 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a  stRowid = iKey;.
21d20 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
21d30 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
21d40 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20  .    pData->z = 
21d50 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20  0;.    pData->n 
21d60 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 0;.  }else{.  
21d70 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d    assert( pData-
21d80 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
21d90 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20  ob|MEM_Str) );. 
21da0 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20   }.  seekResult 
21db0 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
21dc0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
21dd0 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
21de0 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28  sult : 0);.  if(
21df0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
21e00 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
21e10 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75  nZero = pData->u
21e20 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b  .nZero;.  }else{
21e30 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a  .    nZero = 0;.
21e40 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72    }.  sqlite3Btr
21e50 65 65 53 65 74 43 61 63 68 65 64 52 6f 77 69 64  eeSetCachedRowid
21e60 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 29  (pC->pCursor, 0)
21e70 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
21e80 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
21e90 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79  pCursor, 0, iKey
21ea0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
21eb0 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74              pDat
21ec0 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20  a->z, pData->n, 
21ed0 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20  nZero,.         
21ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ef0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
21f00 47 5f 41 50 50 45 4e 44 2c 20 73 65 65 6b 52 65  G_APPEND, seekRe
21f10 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e  sult.  );.  pC->
21f20 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
21f30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
21f40 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
21f50 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
21f60 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
21f70 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
21f80 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
21f90 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
21fa0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
21fb0 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
21fc0 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
21fd0 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64  z ){.    zDb = d
21fe0 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
21ff0 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20  zName;.    zTbl 
22000 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
22010 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20   op = ((pOp->p5 
22020 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
22030 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41  E) ? SQLITE_UPDA
22040 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45  TE : SQLITE_INSE
22050 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  RT);.    assert(
22060 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
22070 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
22080 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
22090 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c  ateArg, op, zDb,
220a0 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20   zTbl, iKey);.  
220b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
220c0 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72  b>=0 );.  }.  br
220d0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
220e0 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20  e: Delete P1 P2 
220f0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  * P4 *.**.** Del
22100 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61  ete the record a
22110 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63  t which the P1 c
22120 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74  ursor is current
22130 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a  ly pointing..**.
22140 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 77 69  ** The cursor wi
22150 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74  ll be left point
22160 69 6e 67 20 61 74 20 65 69 74 68 65 72 20 74 68  ing at either th
22170 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72  e next or the pr
22180 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64  evious.** record
22190 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49   in the table. I
221a0 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69  f it is left poi
221b0 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78  nting at the nex
221c0 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a  t record, then.*
221d0 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20  * the next Next 
221e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c  instruction will
221f0 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65   be a no-op.  He
22200 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20  nce it is OK to 
22210 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f  delete.** a reco
22220 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  rd from within a
22230 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a  n Next loop..**.
22240 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
22250 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
22260 20 50 32 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P2 is set, then
22270 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
22280 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72  count is.** incr
22290 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
222a0 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50  se not)..**.** P
222b0 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73  1 must not be ps
222c0 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20  eudo-table.  It 
222d0 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  has to be a real
222e0 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d   table with.** m
222f0 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a  ultiple rows..**
22300 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
22310 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69   NULL, then it i
22320 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
22330 65 20 74 61 62 6c 65 20 74 68 61 74 20 50 31 20  e table that P1 
22340 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74  is.** pointing t
22350 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65 20 68  o.  The update h
22360 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f  ook will be invo
22370 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69 73 74  ked, if it exist
22380 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  s..** If P4 is n
22390 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  ot NULL then the
223a0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
223b0 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69  have been positi
223c0 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50  oned.** using OP
223d0 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20  _NotFound prior 
223e0 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73  to invoking this
223f0 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
22400 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20   OP_Delete: {.  
22410 69 36 34 20 69 4b 65 79 3b 0a 20 20 56 64 62 65  i64 iKey;.  Vdbe
22420 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 69  Cursor *pC;..  i
22430 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  Key = 0;.  asser
22440 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
22450 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
22460 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
22470 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
22480 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
22490 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
224a0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20  ->pCursor!=0 ); 
224b0 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66   /* Only valid f
224c0 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20  or real tables, 
224d0 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20  no pseudotables 
224e0 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  */..  /* If the 
224f0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c  update-hook will
22500 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74   be invoked, set
22510 20 69 4b 65 79 20 74 6f 20 74 68 65 20 72 6f 77   iKey to the row
22520 69 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 72  id of the.  ** r
22530 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64  ow being deleted
22540 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
22550 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
22560 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
22570 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
22580 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
22590 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69  assert( pC->rowi
225a0 64 49 73 56 61 6c 69 64 20 29 3b 20 20 2f 2a 20  dIsValid );  /* 
225b0 6c 61 73 74 52 6f 77 69 64 20 73 65 74 20 62 79  lastRowid set by
225c0 20 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e 6f 74   previous OP_Not
225d0 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69 4b 65  Found */.    iKe
225e0 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69  y = pC->lastRowi
225f0 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65  d;.  }..  /* The
22600 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f 64   OP_Delete opcod
22610 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73  e always follows
22620 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73   an OP_NotExists
22630 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a 20   or OP_Last or. 
22640 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   ** OP_Column on
22650 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
22660 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65  without any inte
22670 72 76 65 6e 69 6e 67 20 6f 70 65 72 61 74 69 6f  rvening operatio
22680 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69 67  ns that.  ** mig
22690 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61 6c  ht move or inval
226a0 69 64 61 74 65 20 74 68 65 20 63 75 72 73 6f 72  idate the cursor
226b0 2e 20 20 48 65 6e 63 65 20 63 75 72 73 6f 72 20  .  Hence cursor 
226c0 70 43 20 69 73 20 61 6c 77 61 79 73 20 70 6f 69  pC is always poi
226d0 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74 68  nting.  ** to th
226e0 65 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65  e row to be dele
226f0 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69  ted and the sqli
22700 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
22710 65 74 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e 0a  eto() operation.
22720 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61 6c    ** below is al
22730 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64  ways a no-op and
22740 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20 57   cannot fail.  W
22750 65 20 77 69 6c 6c 20 72 75 6e 20 69 74 20 61 6e  e will run it an
22760 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20 20  yhow, though,.  
22770 2a 2a 20 74 6f 20 67 75 61 72 64 20 61 67 61 69  ** to guard agai
22780 6e 73 74 20 66 75 74 75 72 65 20 63 68 61 6e 67  nst future chang
22790 65 73 20 74 6f 20 74 68 65 20 63 6f 64 65 20 67  es to the code g
227a0 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a  enerator..  **/.
227b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
227c0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
227d0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
227e0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
227f0 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56  o(pC);.  if( NEV
22800 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  ER(rc!=SQLITE_OK
22810 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
22820 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
22830 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
22840 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
22850 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72 63  Cursor, 0);.  rc
22860 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
22870 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f  elete(pC->pCurso
22880 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  r);.  pC->cacheS
22890 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
228a0 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
228b0 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
228c0 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
228d0 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
228e0 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70  TE_OK && db->xUp
228f0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
22900 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
22910 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
22920 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
22930 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 63  Db].zName;.    c
22940 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 20  onst char *zTbl 
22950 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
22960 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
22970 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
22980 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45  Arg, SQLITE_DELE
22990 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69  TE, zDb, zTbl, i
229a0 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Key);.    assert
229b0 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
229c0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
229d0 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  2 & OPFLAG_NCHAN
229e0 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
229f0 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a  +;.  break;.}./*
22a00 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f   Opcode: ResetCo
22a10 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  unt * * * * *.**
22a20 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
22a30 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
22a40 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f  ter is copied to
22a50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
22a60 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63  ndle.** change c
22a70 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64  ounter (returned
22a80 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63   by subsequent c
22a90 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f  alls to sqlite3_
22aa0 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54  changes())..** T
22ab0 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65  hen the VMs inte
22ac0 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e  rnal change coun
22ad0 74 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e  ter resets to 0.
22ae0 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64  .** This is used
22af0 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
22b00 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rams..*/.case OP
22b10 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20  _ResetCount: {. 
22b20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
22b30 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
22b40 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68  hange);.  p->nCh
22b50 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61  ange = 0;.  brea
22b60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22b70 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50   SorterCompare P
22b80 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79  1 P2 P3 P4.** Sy
22b90 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b 65 79 28  nopsis:  if key(
22ba0 50 31 29 21 3d 72 74 72 69 6d 28 72 5b 50 33 5d  P1)!=rtrim(r[P3]
22bb0 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ,P4) goto P2.**.
22bc0 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
22bd0 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69  r cursor. This i
22be0 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61  nstruction compa
22bf0 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20  res a prefix of 
22c00 74 68 65 0a 2a 2a 20 74 68 65 20 72 65 63 6f 72  the.** the recor
22c10 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74  d blob in regist
22c20 65 72 20 50 33 20 61 67 61 69 6e 73 74 20 61 20  er P3 against a 
22c30 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e  prefix of the en
22c40 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65  try that .** the
22c50 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63   sorter cursor c
22c60 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20  urrently points 
22c70 74 6f 2e 20 20 54 68 65 20 66 69 6e 61 6c 20 50  to.  The final P
22c80 34 20 66 69 65 6c 64 73 20 6f 66 20 62 6f 74 68  4 fields of both
22c90 0a 2a 2a 20 74 68 65 20 50 33 20 61 6e 64 20 73  .** the P3 and s
22ca0 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65  orter record are
22cb0 20 69 67 6e 6f 72 65 64 2e 0a 2a 2a 0a 2a 2a 20   ignored..**.** 
22cc0 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20  If either P3 or 
22cd0 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61  the sorter conta
22ce0 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e  ins a NULL in on
22cf0 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69  e of their signi
22d00 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73  ficant.** fields
22d10 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74   (not counting t
22d20 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20  he P4 fields at 
22d30 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72  the end which ar
22d40 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a  e ignored) then.
22d50 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
22d60 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  n is assumed to 
22d70 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20  be equal..**.** 
22d80 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
22d90 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
22da0 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f   if the two reco
22db0 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  rds compare equa
22dc0 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68  l to.** each oth
22dd0 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20  er.  Jump to P2 
22de0 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66  if they are diff
22df0 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erent..*/.case O
22e00 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a  P_SorterCompare:
22e10 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
22e20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
22e30 20 20 69 6e 74 20 6e 49 67 6e 6f 72 65 3b 0a 0a    int nIgnore;..
22e40 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22e50 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22e60 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
22e70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
22e80 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
22e90 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  T32 );.  pIn3 = 
22ea0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
22eb0 20 20 6e 49 67 6e 6f 72 65 20 3d 20 70 4f 70 2d    nIgnore = pOp-
22ec0 3e 70 34 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71  >p4.i;.  rc = sq
22ed0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43  lite3VdbeSorterC
22ee0 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c  ompare(pC, pIn3,
22ef0 20 6e 49 67 6e 6f 72 65 2c 20 26 72 65 73 29 3b   nIgnore, &res);
22f00 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
22f10 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
22f20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
22f30 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  ;../* Opcode: So
22f40 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20 2a  rterData P1 P2 *
22f50 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
22f60 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
22f70 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
22f80 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 75  gister P2 the cu
22f90 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74  rrent sorter dat
22fa0 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72  a for sorter cur
22fb0 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
22fc0 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b  OP_SorterData: {
22fd0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
22fe0 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  C;..  pOut = &aM
22ff0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
23000 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
23010 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23020 20 70 43 2d 3e 69 73 53 6f 72 74 65 72 20 29 3b   pC->isSorter );
23030 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
23040 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28  dbeSorterRowkey(
23050 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65  pC, pOut);.  bre
23060 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
23070 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
23080 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
23090 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
230a0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
230b0 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
230c0 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61  omplete row data
230d0 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
230e0 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
230f0 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
23100 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
23110 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65  It is just copie
23120 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
23130 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
23140 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
23150 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
23160 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
23170 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
23180 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
23190 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
231a0 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
231b0 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
231c0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
231d0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  -table..*/./* Op
231e0 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20  code: RowKey P1 
231f0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
23200 70 73 69 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a  psis: r[P2]=key.
23210 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
23220 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
23230 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65   complete row ke
23240 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  y for cursor P1.
23250 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
23260 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
23270 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
23280 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69   The key is copi
23290 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33 20 72  ed onto the P3 r
232a0 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
232b0 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
232c0 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
232d0 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
232e0 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
232f0 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
23300 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
23310 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
23320 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
23330 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
23340 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
23350 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65   OP_RowKey:.case
23360 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20   OP_RowData: {. 
23370 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
23380 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
23390 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69  sr;.  u32 n;.  i
233a0 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20  64 n64;..  pOut 
233b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
233c0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
233d0 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
233e0 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52    /* Note that R
233f0 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74  owKey and RowDat
23400 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61  a are really exa
23410 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e  ctly the same in
23420 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61  struction */.  a
23430 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
23440 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23450 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
23460 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23470 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
23480 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 30 20 29  C->isSorter==0 )
23490 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
234a0 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e  isTable || pOp->
234b0 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61  opcode!=OP_RowDa
234c0 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
234d0 70 43 2d 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70  pC->isIndex || p
234e0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52  Op->opcode==OP_R
234f0 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65  owData );.  asse
23500 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
23510 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52  ssert( pC->nullR
23520 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ow==0 );.  asser
23530 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
23540 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
23550 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
23560 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  r!=0 );.  pCrsr 
23570 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
23580 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
23590 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
235a0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 0a 20 20  id(pCrsr) );..  
235b0 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79  /* The OP_RowKey
235c0 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20   and OP_RowData 
235d0 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66  opcodes always f
235e0 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73  ollow OP_NotExis
235f0 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65  ts or.  ** OP_Re
23600 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74  wind/Op_Next wit
23610 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67  h no intervening
23620 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68   instructions th
23630 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64  at might invalid
23640 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72  ate.  ** the cur
23650 73 6f 72 2e 20 20 48 65 6e 63 65 20 74 68 65 20  sor.  Hence the 
23660 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65  following sqlite
23670 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
23680 6f 28 29 20 63 61 6c 6c 20 69 73 20 61 6c 77 61  o() call is alwa
23690 79 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20  ys.  ** a no-op 
236a0 61 6e 64 20 63 61 6e 20 6e 65 76 65 72 20 66 61  and can never fa
236b0 69 6c 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76  il.  But we leav
236c0 65 20 69 74 20 69 6e 20 70 6c 61 63 65 20 61 73  e it in place as
236d0 20 61 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a   a safety..  */.
236e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
236f0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
23700 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
23710 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
23720 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56  o(pC);.  if( NEV
23730 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  ER(rc!=SQLITE_OK
23740 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
23750 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
23760 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  if( pC->isIndex 
23770 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  ){.    assert( !
23780 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
23790 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d     VVA_ONLY(rc =
237a0 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  ) sqlite3BtreeKe
237b0 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36  ySize(pCrsr, &n6
237c0 34 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  4);.    assert( 
237d0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
237e0 20 20 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61      /* True beca
237f0 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76  use of CursorMov
23800 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65  eto() call above
23810 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e   */.    if( n64>
23820 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
23830 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
23840 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  ){.      goto to
23850 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20  o_big;.    }.   
23860 20 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20   n = (u32)n64;. 
23870 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f   }else{.    VVA_
23880 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
23890 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
238a0 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20  pCrsr, &n);.    
238b0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
238c0 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44  TE_OK );    /* D
238d0 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74  ataSize() cannot
238e0 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28   fail */.    if(
238f0 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   n>(u32)db->aLim
23900 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
23910 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
23920 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
23930 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73     }.  }.  if( s
23940 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
23950 77 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b  w(pOut, n, 0) ){
23960 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
23970 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20  ;.  }.  pOut->n 
23980 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  = n;.  MemSetTyp
23990 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
239a0 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d  Blob);.  if( pC-
239b0 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
239c0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
239d0 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e  eKey(pCrsr, 0, n
239e0 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65  , pOut->z);.  }e
239f0 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  lse{.    rc = sq
23a00 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70  lite3BtreeData(p
23a10 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
23a20 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->z);.  }.  pOut
23a30 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
23a40 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
23a50 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
23a60 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a  r cast to text *
23a70 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  /.  UPDATE_MAX_B
23a80 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
23a90 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
23aa0 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
23ab0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
23ac0 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20  pcode: Rowid P1 
23ad0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
23ae0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
23af0 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e  d.**.** Store in
23b00 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
23b10 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
23b20 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20   the key of the 
23b30 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74  table entry that
23b40 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e  .** P1 is curren
23b50 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a  tly point to..**
23b60 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69  .** P1 can be ei
23b70 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79  ther an ordinary
23b80 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74   table or a virt
23b90 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72  ual table.  Ther
23ba0 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
23bb0 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52  a separate OP_VR
23bc0 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  owid opcode for 
23bd0 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c  use with virtual
23be0 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69   tables, but thi
23bf0 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20  s.** one opcode 
23c00 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f  now works for bo
23c10 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a  th table types..
23c20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64  */.case OP_Rowid
23c30 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
23c40 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
23c50 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65  elease */.  Vdbe
23c60 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36  Cursor *pC;.  i6
23c70 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  4 v;.  sqlite3_v
23c80 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
23c90 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
23ca0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
23cb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23cc0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23cd0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
23ce0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23cf0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23d00 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
23d10 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
23d20 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e  leReg==0 || pC->
23d30 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28  nullRow );.  if(
23d40 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
23d50 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
23d60 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
23d70 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69  break;.  }else i
23d80 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  f( pC->deferredM
23d90 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d  oveto ){.    v =
23da0 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
23db0 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
23dc0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
23dd0 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  BLE.  }else if( 
23de0 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  pC->pVtabCursor 
23df0 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70  ){.    pVtab = p
23e00 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  C->pVtabCursor->
23e10 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
23e20 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
23e30 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
23e40 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
23e50 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   );.    rc = pMo
23e60 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
23e70 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76  >pVtabCursor, &v
23e80 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  );.    sqlite3Vt
23e90 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
23ea0 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66  , pVtab);.#endif
23eb0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
23ec0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
23ed0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
23ee0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
23ef0 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
23f00 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
23f10 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
23f20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
23f30 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23f40 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72  r;.    if( pC->r
23f50 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20  owidIsValid ){. 
23f60 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73       v = pC->las
23f70 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73  tRowid;.    }els
23f80 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
23f90 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
23fa0 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
23fb0 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  v);.      assert
23fc0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
23fd0 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f  );  /* Always so
23fe0 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
23ff0 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65  orMoveto() above
24000 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   */.    }.  }.  
24010 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
24020 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
24030 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
24040 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
24050 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
24060 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
24070 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
24080 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
24090 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
240a0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
240b0 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
240c0 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
240d0 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
240e0 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
240f0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
24100 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
24110 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
24120 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
24130 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
24140 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24150 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
24160 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
24170 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
24180 6c 69 64 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  lid = 0;.  asser
24190 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 7c  t( pC->pCursor |
241a0 7c 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  | pC->pVtabCurso
241b0 72 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70  r );.  if( pC->p
241c0 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71  Cursor ){.    sq
241d0 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 43  lite3BtreeClearC
241e0 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f  ursor(pC->pCurso
241f0 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  r);.  }.  break;
24200 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .}../* Opcode: L
24210 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ast P1 P2 * * *.
24220 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
24230 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
24240 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
24250 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
24260 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
24270 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20  fer to the last 
24280 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
24290 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
242a0 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
242b0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
242c0 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
242d0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
242e0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
242f0 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
24300 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
24310 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
24320 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
24330 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
24340 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
24350 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73  ..*/.case OP_Las
24360 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
24370 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
24380 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
24390 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
243a0 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
243b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
243c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
243d0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
243e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
243f0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24400 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
24410 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20  >pCursor;.  res 
24420 3d 20 30 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  = 0;.  if( ALWAY
24430 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
24440 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
24450 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20  treeLast(pCrsr, 
24460 26 72 65 73 29 3b 0a 20 20 7d 0a 20 20 70 43 2d  &res);.  }.  pC-
24470 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
24480 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  es;.  pC->deferr
24490 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
244a0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
244b0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
244c0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
244d0 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70  STALE;.  if( pOp
244e0 2d 3e 70 32 3e 30 20 26 26 20 72 65 73 20 29 7b  ->p2>0 && res ){
244f0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
24500 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
24510 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
24520 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
24530 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
24540 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
24550 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
24560 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
24570 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
24580 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
24590 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
245a0 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
245b0 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
245c0 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
245d0 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
245e0 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
245f0 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
24600 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
24610 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
24620 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
24630 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
24640 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
24650 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
24660 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
24670 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
24680 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
24690 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
246a0 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
246b0 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
246c0 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
246d0 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
246e0 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
246f0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
24700 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
24710 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
24720 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
24730 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
24740 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d  rSort:    /* jum
24750 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  p */.case OP_Sor
24760 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
24770 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
24780 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
24790 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
247a0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
247b0 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
247c0 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
247d0 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
247e0 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a  US_SORT]++;.  /*
247f0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
24800 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
24810 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
24820 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ind P1 P2 * * *.
24830 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
24840 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
24850 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
24860 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
24870 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
24880 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
24890 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
248a0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
248b0 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
248c0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
248d0 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
248e0 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
248f0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
24900 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
24910 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
24920 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
24930 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
24940 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
24950 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
24960 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
24970 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  wind: {        /
24980 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
24990 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
249a0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
249b0 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73   int res;..  ass
249c0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
249d0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
249e0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
249f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
24a00 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
24a10 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
24a20 70 43 2d 3e 69 73 53 6f 72 74 65 72 3d 3d 28 70  pC->isSorter==(p
24a30 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
24a40 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20  orterSort) );.  
24a50 72 65 73 20 3d 20 31 3b 0a 20 20 69 66 28 20 69  res = 1;.  if( i
24a60 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
24a70 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
24a80 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28  dbeSorterRewind(
24a90 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20  db, pC, &res);. 
24aa0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73   }else{.    pCrs
24ab0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
24ac0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72  .    assert( pCr
24ad0 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  sr );.    rc = s
24ae0 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74  qlite3BtreeFirst
24af0 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
24b00 20 20 20 70 43 2d 3e 61 74 46 69 72 73 74 20 3d     pC->atFirst =
24b10 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20   res==0 ?1:0;.  
24b20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
24b30 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
24b40 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
24b50 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
24b60 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
24b70 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d  d = 0;.  }.  pC-
24b80 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
24b90 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  es;.  assert( pO
24ba0 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
24bb0 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69  p2<p->nOp );.  i
24bc0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
24bd0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
24be0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
24bf0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20  /* Opcode: Next 
24c00 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a  P1 P2 * * P5.**.
24c10 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f  ** Advance curso
24c20 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
24c30 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
24c40 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  xt key/data pair
24c50 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
24c60 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
24c70 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
24c80 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
24c90 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
24ca0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
24cb0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
24cc0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
24cd0 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77  cursor advance w
24ce0 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
24cf0 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
24d00 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
24d10 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
24d20 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
24d30 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
24d40 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
24d50 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f  * P4 is always o
24d60 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43  f type P4_ADVANC
24d70 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  E. The function 
24d80 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74  pointer points t
24d90 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65  o.** sqlite3Btre
24da0 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  eNext()..**.** I
24db0 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
24dc0 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
24dd0 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
24de0 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
24df0 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
24e00 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
24e10 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
24e20 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
24e30 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f  so: Prev.*/./* O
24e40 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50  pcode: Prev P1 P
24e50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 42  2 * * P5.**.** B
24e60 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
24e70 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
24e80 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
24e90 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
24ea0 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
24eb0 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
24ec0 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
24ed0 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
24ee0 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
24ef0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
24f00 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
24f10 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
24f20 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
24f30 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
24f40 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
24f50 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
24f60 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
24f70 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
24f80 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
24f90 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
24fa0 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73  .** P4 is always
24fb0 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41   of type P4_ADVA
24fc0 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f  NCE. The functio
24fd0 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73  n pointer points
24fe0 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74   to.** sqlite3Bt
24ff0 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a  reePrevious()..*
25000 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f  *.** If P5 is po
25010 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a  sitive and the j
25020 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68  ump is taken, th
25030 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72  en event counter
25040 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20  .** number P5-1 
25050 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
25060 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63  statement is inc
25070 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 63 61 73  remented..*/.cas
25080 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a  e OP_SorterNext:
25090 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
250a0 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20  ase OP_Prev:    
250b0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
250c0 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 7b  .case OP_Next: {
250d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
250e0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
250f0 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
25100 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25110 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
25120 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
25130 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
25140 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43  <ArraySize(p->aC
25150 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20  ounter) );.  pC 
25160 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
25170 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30  p1];.  if( pC==0
25180 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20 20   ){.    break;  
25190 2f 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23 32  /* See ticket #2
251a0 32 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 61 73 73  273 */.  }.  ass
251b0 65 72 74 28 20 70 43 2d 3e 69 73 53 6f 72 74 65  ert( pC->isSorte
251c0 72 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  r==(pOp->opcode=
251d0 3d 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20  =OP_SorterNext) 
251e0 29 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65  );.  if( isSorte
251f0 72 28 70 43 29 20 29 7b 0a 20 20 20 20 61 73 73  r(pC) ){.    ass
25200 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
25210 3d 3d 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 20  ==OP_SorterNext 
25220 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
25230 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78  te3VdbeSorterNex
25240 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b  t(db, pC, &res);
25250 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
25260 20 72 65 73 20 3d 20 31 3b 20 2f 2f 20 41 6c 77   res = 1; // Alw
25270 61 79 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ays initialized 
25280 62 79 20 74 68 65 20 78 41 64 76 61 6e 63 65 28  by the xAdvance(
25290 29 20 63 61 6c 6c 20 2a 2f 0a 20 20 20 20 61 73  ) call */.    as
252a0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
252b0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
252c0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70     assert( pC->p
252d0 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 61 73  Cursor );.    as
252e0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
252f0 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
25300 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
25310 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
25320 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
25330 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
25340 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Prev || pOp->p4.
25350 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
25360 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20 29  3BtreePrevious )
25370 3b 0a 20 20 20 20 72 63 20 3d 20 70 4f 70 2d 3e  ;.    rc = pOp->
25380 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e  p4.xAdvance(pC->
25390 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
253a0 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f    }.  pC->nullRo
253b0 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
253c0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
253d0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
253e0 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
253f0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
25400 20 31 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e   1;.    p->aCoun
25410 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a  ter[pOp->p5]++;.
25420 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
25430 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
25440 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
25450 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e  endif.  }.  pC->
25460 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
25470 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66  ;.  goto check_f
25480 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  or_interrupt;.}.
25490 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49  ./* Opcode: IdxI
254a0 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20 2a  nsert P1 P2 P3 *
254b0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
254c0 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a   key=r[P2].**.**
254d0 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c   Register P2 hol
254e0 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  ds an SQL index 
254f0 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74  key made using t
25500 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64  he.** MakeRecord
25510 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20   instructions.  
25520 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74  This opcode writ
25530 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69  es that key.** i
25540 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31  nto the index P1
25550 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20  .  Data for the 
25560 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a  entry is nil..**
25570 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67  .** P3 is a flag
25580 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 61   that provides a
25590 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74   hint to the b-t
255a0 72 65 65 20 6c 61 79 65 72 20 74 68 61 74 20 74  ree layer that t
255b0 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73  his.** insert is
255c0 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
255d0 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54   append..**.** T
255e0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
255f0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
25600 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
25610 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
25620 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
25630 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
25640 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
25650 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f  rInsert:       /
25660 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50  * in2 */.case OP
25670 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20  _IdxInsert: {   
25680 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
25690 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
256a0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
256b0 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a  sr;.  int nKey;.
256c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b    const char *zK
256d0 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ey;..  assert( p
256e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
256f0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
25700 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
25710 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
25720 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
25730 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
25740 53 6f 72 74 65 72 3d 3d 28 70 4f 70 2d 3e 6f 70  Sorter==(pOp->op
25750 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
25760 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32  nsert) );.  pIn2
25770 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
25780 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
25790 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  2->flags & MEM_B
257a0 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  lob );.  pCrsr =
257b0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
257c0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
257d0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
257e0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69  ->nChange++;.  i
257f0 66 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21  f( ALWAYS(pCrsr!
25800 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  =0) ){.    asser
25810 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
25820 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78  0 );.    rc = Ex
25830 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a  pandBlob(pIn2);.
25840 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
25850 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69  TE_OK ){.      i
25860 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
25870 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
25880 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
25890 72 57 72 69 74 65 28 64 62 2c 20 70 43 2c 20 70  rWrite(db, pC, p
258a0 49 6e 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  In2);.      }els
258b0 65 7b 0a 20 20 20 20 20 20 20 20 6e 4b 65 79 20  e{.        nKey 
258c0 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20  = pIn2->n;.     
258d0 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     zKey = pIn2->
258e0 7a 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  z;.        rc = 
258f0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
25900 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20  rt(pCrsr, zKey, 
25910 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20  nKey, "", 0, 0, 
25920 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20  pOp->p3, .      
25930 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20        ((pOp->p5 
25940 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
25950 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
25960 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20  ekResult : 0).  
25970 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20            );.   
25980 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
25990 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
259a0 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43  =0 );.        pC
259b0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
259c0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
259d0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
259e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
259f0 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20  code: IdxDelete 
25a00 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
25a10 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
25a20 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P2@P3].**.** Th
25a30 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
25a40 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
25a50 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
25a60 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
25a70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
25a80 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
25a90 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
25aa0 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
25ab0 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
25ac0 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
25ad0 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
25ae0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
25af0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
25b00 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
25b10 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
25b20 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
25b30 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
25b40 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
25b50 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
25b60 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
25b70 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
25b80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
25b90 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
25ba0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
25bb0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25bc0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
25bd0 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
25be0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
25bf0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
25c00 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
25c10 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
25c20 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 72 73   if( ALWAYS(pCrs
25c30 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 72 2e 70  r!=0) ){.    r.p
25c40 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
25c50 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
25c60 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
25c70 3e 70 33 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73  >p3;.    r.flags
25c80 20 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46   = UNPACKED_PREF
25c90 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 72 2e  IX_MATCH;.    r.
25ca0 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
25cb0 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p2];.#ifdef SQ
25cc0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
25cd0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
25ce0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
25cf0 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
25d00 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
25d10 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
25d20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
25d30 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
25d40 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
25d50 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
25d60 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
25d70 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
25d80 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
25d90 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 29  reeDelete(pCrsr)
25da0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  ;.    }.    asse
25db0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
25dc0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
25dd0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
25de0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
25df0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
25e00 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f  /* Opcode: IdxRo
25e10 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
25e20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
25e30 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57  2]=rowid.**.** W
25e40 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
25e50 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
25e60 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61   which is the la
25e70 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
25e80 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65  record at.** the
25e90 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65   end of the inde
25ea0 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f  x key pointed to
25eb0 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20   by cursor P1.  
25ec0 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f  This integer sho
25ed0 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f  uld be.** the ro
25ee0 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
25ef0 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20   entry to which 
25f00 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79  this index entry
25f10 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53   points..**.** S
25f20 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20  ee also: Rowid, 
25f30 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63  MakeRecord..*/.c
25f40 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a  ase OP_IdxRowid:
25f50 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
25f60 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
25f70 73 65 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72  se */.  BtCursor
25f80 20 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43   *pCrsr;.  VdbeC
25f90 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34  ursor *pC;.  i64
25fa0 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72   rowid;..  asser
25fb0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25fc0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
25fd0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
25fe0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25ff0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
26000 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
26010 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 70 4f 75  ->pCursor;.  pOu
26020 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
26030 75 6c 6c 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  ull;.  if( ALWAY
26040 53 28 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20  S(pCrsr!=0) ){. 
26050 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
26060 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
26070 70 43 29 3b 0a 20 20 20 20 69 66 28 20 4e 45 56  pC);.    if( NEV
26080 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62  ER(rc) ) goto ab
26090 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
260a0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
260b0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
260c0 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
260d0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
260e0 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43  0 );.    if( !pC
260f0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
26100 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
26110 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20  dbeIdxRowid(db, 
26120 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a  pCrsr, &rowid);.
26130 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
26140 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
26150 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
26160 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
26170 20 20 7d 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e    }.      pOut->
26180 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  u.i = rowid;.   
26190 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
261a0 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a   MEM_Int;.    }.
261b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
261c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45  /* Opcode: IdxGE
261d0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
261e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
261f0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
26200 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
26210 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
26220 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
26230 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
26240 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
26250 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
26260 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
26270 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
26280 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
26290 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
262a0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
262b0 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
262c0 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
262d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
262e0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
262f0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
26300 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
26310 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
26320 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
26330 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
26340 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
26350 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
26360 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
26370 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
26380 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
26390 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
263a0 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20  on .** prior to 
263b0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
263c0 20 54 68 69 73 20 6d 61 6b 65 20 74 68 65 20 6f   This make the o
263d0 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20  pcode work like 
263e0 49 64 78 47 54 20 65 78 63 65 70 74 0a 2a 2a 20  IdxGT except.** 
263f0 74 68 61 74 20 69 66 20 74 68 65 20 6b 65 79 20  that if the key 
26400 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 33  from register P3
26410 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20   is a prefix of 
26420 74 68 65 20 6b 65 79 20 69 6e 20 74 68 65 20 63  the key in the c
26430 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65  ursor,.** the re
26440 73 75 6c 74 20 69 73 20 66 61 6c 73 65 20 77 68  sult is false wh
26450 65 72 65 61 73 20 69 74 20 77 6f 75 6c 64 20 62  ereas it would b
26460 65 20 74 72 75 65 20 77 69 74 68 20 49 64 78 47  e true with IdxG
26470 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T..*/./* Opcode:
26480 20 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20   IdxLT P1 P2 P3 
26490 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
264a0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
264b0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
264c0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
264d0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
264e0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
264f0 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
26500 61 74 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57  at omits the ROW
26510 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  ID.  Compare thi
26520 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
26530 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
26540 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
26550 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
26560 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
26570 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31   ROWID on the P1
26580 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66   index..**.** If
26590 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
265a0 74 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  try is less than
265b0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74   the key value t
265c0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
265d0 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  ** Otherwise fal
265e0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
265f0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
26600 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  n..**.** If P5 i
26610 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s non-zero then 
26620 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73  the key value is
26630 20 69 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e   increased by an
26640 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f 72 20 0a   epsilon prior .
26650 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72  ** to the compar
26660 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65  ison.  This make
26670 73 20 74 68 65 20 6f 70 63 6f 64 65 20 77 6f 72  s the opcode wor
26680 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e 0a 2a 2f  k like IdxLE..*/
26690 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20  .case OP_IdxLT: 
266a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
266b0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
266c0 45 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  E: {        /* j
266d0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
266e0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
266f0 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
26700 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
26710 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
26720 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
26730 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
26740 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
26750 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
26760 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
26770 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
26780 20 69 66 28 20 41 4c 57 41 59 53 28 70 43 2d 3e   if( ALWAYS(pC->
26790 70 43 75 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20  pCursor!=0) ){. 
267a0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
267b0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
267c0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
267d0 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
267e0 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20  p->p5==1 );.    
267f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
26800 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
26810 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
26820 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
26830 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
26840 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
26850 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29     if( pOp->p5 )
26860 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20  {.      r.flags 
26870 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b  = UNPACKED_INCRK
26880 45 59 20 7c 20 55 4e 50 41 43 4b 45 44 5f 50 52  EY | UNPACKED_PR
26890 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20  EFIX_MATCH;.    
268a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 2e 66  }else{.      r.f
268b0 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
268c0 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20 20  PREFIX_MATCH;.  
268d0 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d    }.    r.aMem =
268e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
268f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
26900 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69  EBUG.    { int i
26910 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
26920 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
26930 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
26940 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
26950 23 65 6e 64 69 66 0a 20 20 20 20 72 63 20 3d 20  #endif.    rc = 
26960 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65  sqlite3VdbeIdxKe
26970 79 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c  yCompare(pC, &r,
26980 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
26990 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
269a0 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 20 20 72  IdxLT ){.      r
269b0 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 20 20 7d  es = -res;.    }
269c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
269d0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
269e0 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a 20 20 20  =OP_IdxGE );.   
269f0 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20 20 7d 0a     res++;.    }.
26a00 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b      if( res>0 ){
26a10 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
26a20 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20 20 7d 0a  >p2 - 1 ;.    }.
26a30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
26a40 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72  /* Opcode: Destr
26a50 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  oy P1 P2 P3 * *.
26a60 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20  **.** Delete an 
26a70 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
26a80 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
26a90 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
26aa0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
26ab0 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  * file is given 
26ac0 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  by P1..**.** The
26ad0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73   table being des
26ae0 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65  troyed is in the
26af0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
26b00 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49  ile if P3==0.  I
26b10 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20  f.** P3==1 then 
26b20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
26b30 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
26b40 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
26b50 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
26b60 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
26b70 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
26b80 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
26b90 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
26ba0 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
26bb0 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e   is enabled then
26bc0 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
26bd0 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f  that another roo
26be0 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20  t page.** might 
26bf0 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  be moved into th
26c00 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20  e newly deleted 
26c10 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64  root page in ord
26c20 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a  er to keep all.*
26c30 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e  * root pages con
26c40 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62  tiguous at the b
26c50 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
26c60 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66  database.  The f
26c70 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f  ormer.** value o
26c80 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
26c90 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73  that moved - its
26ca0 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68   value before th
26cb0 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20  e move occurred 
26cc0 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69  -.** is stored i
26cd0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
26ce0 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d  If no page .** m
26cf0 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75  ovement was requ
26d00 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68  ired (because th
26d10 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72  e table being dr
26d20 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64  opped was alread
26d30 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f  y .** the last o
26d40 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
26d50 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  se) then a zero 
26d60 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
26d70 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20  ister P2..** If 
26d80 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69  AUTOVACUUM is di
26d90 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65  sabled then a ze
26da0 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
26db0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
26dc0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65  ** See also: Cle
26dd0 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  ar.*/.case OP_De
26de0 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20  stroy: {     /* 
26df0 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
26e00 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b  */.  int iMoved;
26e10 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56  .  int iCnt;.  V
26e20 64 62 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e  dbe *pVdbe;.  in
26e30 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65 72 74  t iDb;..  assert
26e40 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
26e50 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
26e60 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
26e70 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b  ABLE.  iCnt = 0;
26e80 0a 20 20 66 6f 72 28 70 56 64 62 65 3d 64 62 2d  .  for(pVdbe=db-
26e90 3e 70 56 64 62 65 3b 20 70 56 64 62 65 3b 20 70  >pVdbe; pVdbe; p
26ea0 56 64 62 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e  Vdbe = pVdbe->pN
26eb0 65 78 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56  ext){.    if( pV
26ec0 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  dbe->magic==VDBE
26ed0 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56  _MAGIC_RUN && pV
26ee0 64 62 65 2d 3e 62 49 73 52 65 61 64 65 72 20 0a  dbe->bIsReader .
26ef0 20 20 20 20 20 26 26 20 70 56 64 62 65 2d 3e 69       && pVdbe->i
26f00 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26  nVtabMethod<2 &&
26f10 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30 20 0a 20   pVdbe->pc>=0 . 
26f20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74     ){.      iCnt
26f30 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  ++;.    }.  }.#e
26f40 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d  lse.  iCnt = db-
26f50 3e 6e 56 64 62 65 52 65 61 64 3b 0a 23 65 6e 64  >nVdbeRead;.#end
26f60 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  if.  pOut->flags
26f70 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69   = MEM_Null;.  i
26f80 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20  f( iCnt>1 ){.   
26f90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
26fa0 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f  KED;.    p->erro
26fb0 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f  rAction = OE_Abo
26fc0 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rt;.  }else{.   
26fd0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
26fe0 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6e 74      assert( iCnt
26ff0 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==1 );.    asser
27000 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
27010 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
27020 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 20 20  <<iDb))!=0 );.  
27030 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
27040 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d  reeDropTable(db-
27050 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70  >aDb[iDb].pBt, p
27060 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29  Op->p1, &iMoved)
27070 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
27080 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
27090 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f   pOut->u.i = iMo
270a0 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ved;.#ifndef SQL
270b0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
270c0 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  UUM.    if( rc==
270d0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f  SQLITE_OK && iMo
270e0 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  ved!=0 ){.      
270f0 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
27100 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d  oved(db, iDb, iM
27110 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  oved, pOp->p1);.
27120 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f        /* All OP_
27130 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f  Destroy operatio
27140 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20  ns occur on the 
27150 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20  same btree */.  
27160 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73 65      assert( rese
27170 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d  tSchemaOnFault==
27180 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61  0 || resetSchema
27190 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29  OnFault==iDb+1 )
271a0 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68  ;.      resetSch
271b0 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62  emaOnFault = iDb
271c0 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  +1;.    }.#endif
271d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
271e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61  ./* Opcode: Clea
271f0 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a  r P1 P2 P3.**.**
27200 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
27210 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  ents of the data
27220 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
27230 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  dex whose root p
27240 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61  age.** in the da
27250 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67  tabase file is g
27260 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74  iven by P1.  But
27270 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79  , unlike Destroy
27280 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f  , do not.** remo
27290 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  ve the table or 
272a0 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64  index from the d
272b0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
272c0 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
272d0 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20  ing clear is in 
272e0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
272f0 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e  e file if P2==0.
27300 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68    If.** P2==1 th
27310 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  en the table to 
27320 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  be clear is in t
27330 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
27340 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68  abase file.** th
27350 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  at is used to st
27360 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  ore tables creat
27370 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
27380 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a  EMPORARY TABLE..
27390 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20  **.** If the P3 
273a0 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72  value is non-zer
273b0 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  o, then the tabl
273c0 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75  e referred to mu
273d0 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b  st be an.** intk
273e0 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c  ey table (an SQL
273f0 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69   table, not an i
27400 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63  ndex). In this c
27410 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e  ase the row chan
27420 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20  ge .** count is 
27430 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
27440 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
27450 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
27460 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a  eing cleared. .*
27470 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74  * If P3 is great
27480 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  er than zero, th
27490 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  en the value sto
274a0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
274b0 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e  P3 is.** also in
274c0 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
274d0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
274e0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
274f0 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a  ng cleared..**.*
27500 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74  * See also: Dest
27510 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  roy.*/.case OP_C
27520 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43  lear: {.  int nC
27530 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e  hange;. .  nChan
27540 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  ge = 0;.  assert
27550 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
27560 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
27570 70 2d 3e 70 31 21 3d 31 20 29 3b 0a 20 20 61 73  p->p1!=1 );.  as
27580 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
27590 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
275a0 29 31 29 3c 3c 70 4f 70 2d 3e 70 32 29 29 21 3d  )1)<<pOp->p2))!=
275b0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
275c0 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
275d0 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44  le(.      db->aD
275e0 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20  b[pOp->p2].pBt, 
275f0 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70  pOp->p1, (pOp->p
27600 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30  3 ? &nChange : 0
27610 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  ).  );.  if( pOp
27620 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  ->p3 ){.    p->n
27630 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67  Change += nChang
27640 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  e;.    if( pOp->
27650 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73  p3>0 ){.      as
27660 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
27670 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
27680 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
27690 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
276a0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
276b0 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70       aMem[pOp->p
276c0 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67  3].u.i += nChang
276d0 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  e;.    }.  }.  b
276e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
276f0 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20  de: CreateTable 
27700 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
27710 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
27720 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a  oot iDb=P1.**.**
27730 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
27740 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69  table in the mai
27750 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
27760 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
27770 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
27780 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
27790 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
277a0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
277b0 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
277c0 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
277d0 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
277e0 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
277f0 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  ** register P2.*
27800 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65  *.** The differe
27810 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61  nce between a ta
27820 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78  ble and an index
27830 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62   is this:  A tab
27840 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20  le must.** have 
27850 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  a 4-byte integer
27860 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76   key and can hav
27870 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  e arbitrary data
27880 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  .  An index.** h
27890 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  as an arbitrary 
278a0 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e  key but no data.
278b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
278c0 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a   CreateIndex.*/.
278d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
278e0 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a  eIndex P1 P2 * *
278f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
27900 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50  r[P2]=root iDb=P
27910 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  1.**.** Allocate
27920 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20   a new index in 
27930 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
27940 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
27950 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
27960 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
27970 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
27980 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
27990 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
279a0 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
279b0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
279c0 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
279d0 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
279e0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
279f0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
27a00 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  n OP_CreateTable
27a10 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
27a20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
27a30 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e  case OP_CreateIn
27a40 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20  dex:            
27a50 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
27a60 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  se */.case OP_Cr
27a70 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20  eateTable: {    
27a80 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
27a90 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
27aa0 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c  t pgno;.  int fl
27ab0 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  ags;.  Db *pDb;.
27ac0 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61  .  pgno = 0;.  a
27ad0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
27ae0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
27af0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
27b00 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
27b10 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  & (((yDbMask)1)<
27b20 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
27b30 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
27b40 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
27b50 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
27b60 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
27b70 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
27b80 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
27b90 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62  de==OP_CreateTab
27ba0 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61  le ){.    /* fla
27bb0 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
27bc0 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20  Y; */.    flags 
27bd0 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a  = BTREE_INTKEY;.
27be0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61    }else{.    fla
27bf0 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b  gs = BTREE_BLOBK
27c00 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  EY;.  }.  rc = s
27c10 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
27c20 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c  eTable(pDb->pBt,
27c30 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a   &pgno, flags);.
27c40 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67    pOut->u.i = pg
27c50 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  no;.  break;.}..
27c60 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65  /* Opcode: Parse
27c70 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34  Schema P1 * * P4
27c80 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e   *.**.** Read an
27c90 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72  d parse all entr
27ca0 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ies from the SQL
27cb0 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
27cc0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a   of database P1.
27cd0 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68  ** that match th
27ce0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50  e WHERE clause P
27cf0 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4. .**.** This o
27d00 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
27d10 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61  e parser to crea
27d20 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c  te a new virtual
27d30 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65   machine,.** the
27d40 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76  n runs the new v
27d50 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
27d60 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65   It is thus a re
27d70 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e  -entrant opcode.
27d80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73  .*/.case OP_Pars
27d90 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74  eSchema: {.  int
27da0 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   iDb;.  const ch
27db0 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63  ar *zMaster;.  c
27dc0 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69  har *zSql;.  Ini
27dd0 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
27de0 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72  .  /* Any prepar
27df0 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  ed statement tha
27e00 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f  t invokes this o
27e10 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20  pcode will hold 
27e20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20  mutexes.  ** on 
27e30 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68  every btree.  Th
27e40 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69  is is a prerequi
27e50 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e  site for invokin
27e60 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49  g .  ** sqlite3I
27e70 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20  nitCallback().. 
27e80 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
27e90 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44  E_DEBUG.  for(iD
27ea0 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62  b=0; iDb<db->nDb
27eb0 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73  ; iDb++){.    as
27ec0 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20  sert( iDb==1 || 
27ed0 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64  sqlite3BtreeHold
27ee0 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69  sMutex(db->aDb[i
27ef0 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a  Db].pBt) );.  }.
27f00 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20  #endif..  iDb = 
27f10 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
27f20 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
27f30 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
27f40 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65  sert( DbHasPrope
27f50 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f  rty(db, iDb, DB_
27f60 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b  SchemaLoaded) );
27f70 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65  .  /* Used to be
27f80 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a   a conditional *
27f90 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20  / {.    zMaster 
27fa0 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69  = SCHEMA_TABLE(i
27fb0 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  Db);.    initDat
27fc0 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69  a.db = db;.    i
27fd0 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f  nitData.iDb = pO
27fe0 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44  p->p1;.    initD
27ff0 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26  ata.pzErrMsg = &
28000 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  p->zErrMsg;.    
28010 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50  zSql = sqlite3MP
28020 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20  rintf(db,.      
28030 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72   "SELECT name, r
28040 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f  ootpage, sql FRO
28050 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20  M '%q'.%s WHERE 
28060 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  %s ORDER BY rowi
28070 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61  d",.       db->a
28080 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a  Db[iDb].zName, z
28090 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e  Master, pOp->p4.
280a0 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c  z);.    if( zSql
280b0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
280c0 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
280d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
280e0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69   assert( db->ini
280f0 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20  t.busy==0 );.   
28100 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
28110 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74   = 1;.      init
28120 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45  Data.rc = SQLITE
28130 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72  _OK;.      asser
28140 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
28150 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63  iled );.      rc
28160 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
28170 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
28180 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
28190 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
281a0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
281b0 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69  TE_OK ) rc = ini
281c0 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20  tData.rc;.      
281d0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
281e0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64  , zSql);.      d
281f0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30  b->init.busy = 0
28200 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
28210 28 20 72 63 20 29 20 73 71 6c 69 74 65 33 52 65  ( rc ) sqlite3Re
28220 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
28230 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
28240 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
28250 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74  NOMEM ){.    got
28260 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
28270 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20  break;  .}..#if 
28280 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
28290 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a  OMIT_ANALYZE)./*
282a0 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61   Opcode: LoadAna
282b0 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a  lysis P1 * * * *
282c0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20  .**.** Read the 
282d0 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
282e0 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  le for database 
282f0 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20  P1 and load the 
28300 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68  content.** of th
28310 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68  at table into th
28320 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78  e internal index
28330 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68   hash table.  Th
28340 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a  is will cause.**
28350 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f   the analysis to
28360 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72   be used when pr
28370 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73  eparing all subs
28380 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a  equent queries..
28390 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41  */.case OP_LoadA
283a0 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73  nalysis: {.  ass
283b0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
283c0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
283d0 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Db );.  rc = sql
283e0 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
283f0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  (db, pOp->p1);. 
28400 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64   break;  .}.#end
28410 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
28420 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
28430 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ZE) */../* Opcod
28440 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20  e: DropTable P1 
28450 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
28460 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
28470 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
28480 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
28490 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
284a0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
284b0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
284c0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
284d0 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  ed after a table
284e0 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 69  .** is dropped i
284f0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
28500 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
28510 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
28520 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
28530 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
28540 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
28550 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62  .case OP_DropTab
28560 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  le: {.  sqlite3U
28570 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
28580 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ble(db, pOp->p1,
28590 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
285a0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
285b0 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31  de: DropIndex P1
285c0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
285d0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
285e0 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
285f0 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
28600 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
28610 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64   the index named
28620 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
28630 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
28640 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64  led after an ind
28650 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  ex.** is dropped
28660 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
28670 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
28680 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
28690 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
286a0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
286b0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
286c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49  */.case OP_DropI
286d0 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ndex: {.  sqlite
286e0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
286f0 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70  Index(db, pOp->p
28700 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
28710 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28720 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65  code: DropTrigge
28730 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  r P1 * * P4 *.**
28740 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
28750 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
28760 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
28770 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
28780 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72  e.** the trigger
28790 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
287a0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
287b0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
287c0 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20  a trigger.** is 
287d0 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65 72  dropped in order
287e0 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
287f0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
28800 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
28810 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
28820 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
28830 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
28840 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b  P_DropTrigger: {
28850 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
28860 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
28870 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
28880 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
28890 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
288a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
288b0 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70  RITY_CHECK./* Op
288c0 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43  code: IntegrityC
288d0 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  k P1 P2 P3 * P5.
288e0 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c  **.** Do an anal
288f0 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72  ysis of the curr
28900 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
28910 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a  ase.  Store in.*
28920 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68  * register P1 th
28930 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72  e text of an err
28940 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72  or message descr
28950 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65  ibing any proble
28960 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f  ms..** If no pro
28970 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c  blems are found,
28980 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
28990 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
289a0 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
289b0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
289c0 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
289d0 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72  of allowed error
289e0 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65  s..** At most re
289f0 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c  g(P3) errors wil
28a00 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a  l be reported..*
28a10 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
28a20 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73  , the analysis s
28a30 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
28a40 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61  reg(P1) errors a
28a50 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65  re .** seen.  Re
28a60 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64  g(P1) is updated
28a70 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
28a80 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
28a90 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ning..**.** The 
28aa0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
28ab0 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
28ac0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
28ad0 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73  are integer.** s
28ae0 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29  tored in reg(P1)
28af0 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67  , reg(P1+1), reg
28b00 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68  (P1+2), ....  Th
28b10 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65  ere are P2 table
28b20 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a  s.** total..**.*
28b30 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a  * If P5 is not z
28b40 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69  ero, the check i
28b50 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75  s done on the au
28b60 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
28b70 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68  .** file, not th
28b80 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
28b90 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  file..**.** This
28ba0 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
28bb0 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
28bc0 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
28bd0 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65   pragma..*/.case
28be0 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a   OP_IntegrityCk:
28bf0 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20   {.  int nRoot; 
28c00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
28c10 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63  f tables to chec
28c20 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72  k.  (Number of r
28c30 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20  oot pages.) */. 
28c40 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20   int *aRoot;    
28c50 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f   /* Array of roo
28c60 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f  tpage numbers fo
28c70 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63  r tables to be c
28c80 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20  hecked */.  int 
28c90 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  j;          /* L
28ca0 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
28cb0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
28cc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
28cd0 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f  rors reported */
28ce0 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
28cf0 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
28d00 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a  e error report *
28d10 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20  /.  Mem *pnErr; 
28d20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
28d30 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66  keeping track of
28d40 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
28d50 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  g */..  assert( 
28d60 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
28d70 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
28d80 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  2;.  assert( nRo
28d90 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20  ot>0 );.  aRoot 
28da0 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
28db0 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
28dc0 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29  int)*(nRoot+1) )
28dd0 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30  ;.  if( aRoot==0
28de0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
28df0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28e00 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
28e10 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
28e20 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20  sor) );.  pnErr 
28e30 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
28e40 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
28e50 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  rr->flags & MEM_
28e60 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Int)!=0 );.  ass
28e70 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
28e80 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
28e90 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
28ea0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
28eb0 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d  p->p1];.  for(j=
28ec0 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29  0; j<nRoot; j++)
28ed0 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d  {.    aRoot[j] =
28ee0 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62   (int)sqlite3Vdb
28ef0 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b  eIntValue(&pIn1[
28f00 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74  j]);.  }.  aRoot
28f10 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  [j] = 0;.  asser
28f20 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
28f30 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
28f40 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
28f50 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70  (((yDbMask)1)<<p
28f60 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b 0a 20  Op->p5))!=0 );. 
28f70 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
28f80 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
28f90 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
28fa0 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
28fb0 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
28fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fd0 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
28fe0 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
28ff0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
29000 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72  , aRoot);.  pnEr
29010 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
29020 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
29030 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
29040 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
29050 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
29060 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
29070 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
29080 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
29090 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
290a0 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
290b0 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
290c0 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
290d0 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
290e0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
290f0 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
29100 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
29110 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
29120 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
29130 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
29140 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
29150 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
29160 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
29170 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
29180 73 69 73 3a 20 20 72 6f 77 73 65 74 28 50 31 29  sis:  rowset(P1)
29190 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73  =r[P2].**.** Ins
291a0 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ert the integer 
291b0 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65  value held by re
291c0 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61  gister P2 into a
291d0 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a   boolean index.*
291e0 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74  * held in regist
291f0 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  er P1..**.** An 
29200 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20  assertion fails 
29210 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20  if P2 is not an 
29220 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
29230 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b   OP_RowSetAdd: {
29240 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69         /* in1, i
29250 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n2 */.  pIn1 = &
29260 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
29270 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
29280 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
29290 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
292a0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
292b0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
292c0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
292d0 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
292e0 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
292f0 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
29300 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
29310 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
29320 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
29330 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53   }.  sqlite3RowS
29340 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
29350 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e  .pRowSet, pIn2->
29360 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  u.i);.  break;.}
29370 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
29380 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33  SetRead P1 P2 P3
29390 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
293a0 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28  :  r[P3]=rowset(
293b0 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63  P1).**.** Extrac
293c0 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  t the smallest v
293d0 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61  alue from boolea
293e0 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70  n index P1 and p
293f0 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  ut that value in
29400 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
29410 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65  3.  Or, if boole
29420 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69  an index P1 is i
29430 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20  nitially empty, 
29440 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68  leave P3.** unch
29450 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74  anged and jump t
29460 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
29470 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
29480 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20  SetRead: {      
29490 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f   /* jump, in1, o
294a0 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c  ut3 */.  i64 val
294b0 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
294c0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
294d0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
294e0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
294f0 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f  .   || sqlite3Ro
29500 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75  wSetNext(pIn1->u
29510 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d  .pRowSet, &val)=
29520 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54  =0.  ){.    /* T
29530 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  he boolean index
29540 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20   is empty */.   
29550 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
29560 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
29570 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
29580 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
29590 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20   /* A value was 
295a0 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20  pulled from the 
295b0 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c  index */.    sql
295c0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
295d0 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
295e0 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20  3], val);.  }.  
295f0 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
29600 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20  nterrupt;.}../* 
29610 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65  Opcode: RowSetTe
29620 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  st P1 P2 P3 P4.*
29630 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
29640 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50  [P3] in rowset(P
29650 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  1) goto P2.**.**
29660 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
29670 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20  assumed to hold 
29680 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
29690 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73   value. If regis
296a0 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69  ter P1.** contai
296b0 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65  ns a RowSet obje
296c0 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53  ct and that RowS
296d0 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69  et object contai
296e0 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ns.** the value 
296f0 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70  held in P3, jump
29700 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
29710 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65   Otherwise, inse
29720 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  rt the.** intege
29730 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65  r in P3 into the
29740 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74   RowSet and cont
29750 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a  inue on to the.*
29760 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a  * next opcode..*
29770 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20  *.** The RowSet 
29780 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69  object is optimi
29790 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65  zed for the case
297a0 20 77 68 65 72 65 20 73 75 63 63 65 73 73 69 76   where successiv
297b0 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74  e sets.** of int
297c0 65 67 65 72 73 2c 20 77 68 65 72 65 20 65 61 63  egers, where eac
297d0 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e  h set contains n
297e0 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61  o duplicates. Ea
297f0 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c  ch set.** of val
29800 75 65 73 20 69 73 20 69 64 65 6e 74 69 66 69 65  ues is identifie
29810 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50 34  d by a unique P4
29820 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73   value. The firs
29830 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61  t set.** must ha
29840 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69  ve P4==0, the fi
29850 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20  nal set P4=-1.  
29860 50 34 20 6d 75 73 74 20 62 65 20 65 69 74 68 65  P4 must be eithe
29870 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e  r -1 or.** non-n
29880 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f  egative.  For no
29890 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  n-negative value
298a0 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65  s of P4 only the
298b0 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73   lower 4.** bits
298c0 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74   are significant
298d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c  ..**.** This all
298e0 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ows optimization
298f0 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d  s: (a) when P4==
29900 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  0 there is no ne
29910 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68  ed to test.** th
29920 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  e rowset object 
29930 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73  for P3, as it is
29940 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20   guaranteed not 
29950 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a  to contain it,.*
29960 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d  * (b) when P4==-
29970 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  1 there is no ne
29980 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65  ed to insert the
29990 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69   value, as it wi
299a0 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74  ll.** never be t
299b0 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28  ested for, and (
299c0 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20  c) when a value 
299d0 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20  that is part of 
299e0 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65  set X is.** inse
299f0 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e  rted, there is n
29a00 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68  o need to search
29a10 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73   to see if the s
29a20 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a  ame value was.**
29a30 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65   previously inse
29a40 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
29a50 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69  set X (only if i
29a60 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79  t was previously
29a70 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20  .** inserted as 
29a80 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68  part of some oth
29a90 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65  er set)..*/.case
29aa0 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20   OP_RowSetTest: 
29ab0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
29ac0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
29ad0 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
29ae0 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69   iSet;.  int exi
29af0 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  sts;..  pIn1 = &
29b00 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
29b10 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
29b20 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d  p->p3];.  iSet =
29b30 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73   pOp->p4.i;.  as
29b40 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
29b50 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20  s&MEM_Int );..  
29b60 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  /* If there is a
29b70 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68  nything other th
29b80 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65  an a rowset obje
29b90 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c  ct in memory cel
29ba0 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74  l P1,.  ** delet
29bb0 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69  e it now and ini
29bc0 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20  tialize P1 with 
29bd0 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a  an empty rowset.
29be0 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31    */.  if( (pIn1
29bf0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
29c00 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  wSet)==0 ){.    
29c10 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
29c20 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20  tRowSet(pIn1);. 
29c30 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
29c40 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
29c50 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  )==0 ) goto no_m
29c60 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  em;.  }..  asser
29c70 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
29c80 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73  P4_INT32 );.  as
29c90 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c  sert( iSet==-1 |
29ca0 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69  | iSet>=0 );.  i
29cb0 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65  f( iSet ){.    e
29cc0 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52  xists = sqlite3R
29cd0 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e  owSetTest(pIn1->
29ce0 75 2e 70 52 6f 77 53 65 74 2c 20 0a 20 20 20 20  u.pRowSet, .    
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d00 20 20 20 20 20 20 20 20 20 20 20 28 75 38 29 28             (u8)(
29d10 69 53 65 74 3e 3d 30 20 3f 20 69 53 65 74 20 26  iSet>=0 ? iSet &
29d20 20 30 78 66 20 3a 20 30 78 66 66 29 2c 0a 20 20   0xf : 0xff),.  
29d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d40 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49 6e               pIn
29d50 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 69 66 28  3->u.i);.    if(
29d60 20 65 78 69 73 74 73 20 29 7b 0a 20 20 20 20 20   exists ){.     
29d70 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
29d80 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  1;.      break;.
29d90 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
29da0 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73  iSet>=0 ){.    s
29db0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
29dc0 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  rt(pIn1->u.pRowS
29dd0 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
29de0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
29df0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29e00 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a  OMIT_TRIGGER../*
29e10 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d   Opcode: Program
29e20 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
29e30 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
29e40 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
29e50 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74   passed as P4 (t
29e60 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41  ype P4_SUBPROGRA
29e70 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f  M). .**.** P1 co
29e80 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
29e90 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ss of the memory
29ea0 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
29eb0 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65  ins the first me
29ec0 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e  mory .** cell in
29ed0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c   an array of val
29ee0 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75  ues used as argu
29ef0 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62  ments to the sub
29f00 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a  -program. P2 .**
29f10 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
29f20 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
29f30 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67   if the sub-prog
29f40 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47  ram throws an IG
29f50 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69  NORE .** excepti
29f60 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49  on using the RAI
29f70 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52  SE() function. R
29f80 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
29f90 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
29fa0 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20  .** of a memory 
29fb0 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68  cell in this (th
29fc0 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61  e parent) VM tha
29fd0 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c  t is used to all
29fe0 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65  ocate the .** me
29ff0 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79  mory required by
2a000 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74   the sub-vdbe at
2a010 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20   runtime..**.** 
2a020 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2a030 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69  to the VM contai
2a040 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
2a050 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73   program..*/.cas
2a060 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20  e OP_Program: { 
2a070 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2a080 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
2a090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2a0a0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
2a0b0 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75  registers for su
2a0c0 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
2a0d0 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  nt nByte;       
2a0e0 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
2a0f0 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  of runtime space
2a100 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75   required for su
2a110 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d  b-program */.  M
2a120 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20  em *pRt;        
2a130 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
2a140 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72  er to allocate r
2a150 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a  untime space */.
2a160 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
2a170 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2a180 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72  d to iterate thr
2a190 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ough memory cell
2a1a0 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64  s */.  Mem *pEnd
2a1b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2a1c0 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65  * Last memory ce
2a1d0 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20  ll in new array 
2a1e0 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2a1f0 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  pFrame;      /* 
2a200 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74  New vdbe frame t
2a210 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a  o execute in */.
2a220 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
2a230 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62  rogram;   /* Sub
2a240 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63  -program to exec
2a250 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74  ute */.  void *t
2a260 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2a270 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69   /* Token identi
2a280 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f  fying trigger */
2a290 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70  ..  pProgram = p
2a2a0 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b  Op->p4.pProgram;
2a2b0 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70  .  pRt = &aMem[p
2a2c0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
2a2d0 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  t( pProgram->nOp
2a2e0 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66  >0 );.  .  /* If
2a2f0 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20   the p5 flag is 
2a300 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75  clear, then recu
2a310 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
2a320 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20   of triggers is 
2a330 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66  .  ** disabled f
2a340 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
2a350 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69  patibility (p5 i
2a360 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75  s set if this su
2a370 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69  b-program.  ** i
2a380 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67  s really a trigg
2a390 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67  er, not a foreig
2a3a0 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e  n key action, an
2a3b0 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20  d the flag set. 
2a3c0 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20   ** and cleared 
2a3d0 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72  by the "PRAGMA r
2a3e0 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
2a3f0 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c  s" command is cl
2a400 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a  ear)..  ** .  **
2a410 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65   It is recursive
2a420 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
2a430 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20  riggers, at the 
2a440 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20  SQL level, that 
2a450 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
2a460 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73  d. In some cases
2a470 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65   a single trigge
2a480 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d  r may generate m
2a490 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20  ore than one .  
2a4a0 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69  ** SubProgram (i
2a4b0 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61  f the trigger ma
2a4c0 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69  y be executed wi
2a4d0 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  th more than one
2a4e0 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a   different .  **
2a4f0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
2a500 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67  orithm). SubProg
2a510 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61  ram structures a
2a520 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
2a530 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69  .  ** single tri
2a540 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68  gger all have th
2a550 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
2a560 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e   the SubProgram.
2a570 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69  token .  ** vari
2a580 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20  able.  */.  if( 
2a590 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74  pOp->p5 ){.    t
2a5a0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
2a5b0 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61  en;.    for(pFra
2a5c0 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
2a5d0 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e  rame && pFrame->
2a5e0 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65  token!=t; pFrame
2a5f0 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
2a600 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d  );.    if( pFram
2a610 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a  e ) break;.  }..
2a620 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e    if( p->nFrame>
2a630 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  =db->aLimit[SQLI
2a640 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
2a650 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72  _DEPTH] ){.    r
2a660 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
2a670 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  ;.    sqlite3Set
2a680 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2a690 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e  sg, db, "too man
2a6a0 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67  y levels of trig
2a6b0 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b  ger recursion");
2a6c0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
2a6d0 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70  .  /* Register p
2a6e0 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  Rt is used to st
2a6f0 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  ore the memory r
2a700 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20  equired to save 
2a710 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f  the state.  ** o
2a720 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  f the current pr
2a730 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d  ogram, and the m
2a740 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61  emory required a
2a750 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65  t runtime to exe
2a760 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72  cute.  ** the tr
2a770 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49  igger program. I
2a780 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68  f this trigger h
2a790 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65  as been fired be
2a7a0 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a  fore, then pRt .
2a7b0 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20    ** is already 
2a7c0 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72  allocated. Other
2a7d0 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65  wise, it must be
2a7e0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a   initialized.  *
2a7f0 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c  /.  if( (pRt->fl
2a800 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d  ags&MEM_Frame)==
2a810 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50  0 ){.    /* SubP
2a820 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73  rogram.nMem is s
2a830 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
2a840 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
2a850 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20   used by the .  
2a860 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f    ** program sto
2a870 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61  red in SubProgra
2a880 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61  m.aOp. As well a
2a890 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d  s these, one mem
2a8a0 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20  ory.    ** cell 
2a8b0 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
2a8c0 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64  each cursor used
2a8d0 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
2a8e0 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a   Set local.    *
2a8f0 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20  * variable nMem 
2a900 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65  (and later, Vdbe
2a910 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29  Frame.nChildMem)
2a920 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a   to this value..
2a930 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20      */.    nMem 
2a940 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  = pProgram->nMem
2a950 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
2a960 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52  r;.    nByte = R
2a970 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62  OUND8(sizeof(Vdb
2a980 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20  eFrame)).       
2a990 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20         + nMem * 
2a9a0 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20  sizeof(Mem).    
2a9b0 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f            + pPro
2a9c0 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a  gram->nCsr * siz
2a9d0 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a  eof(VdbeCursor *
2a9e0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2a9f0 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63  + pProgram->nOnc
2aa00 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b 0a  e * sizeof(u8);.
2aa10 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c      pFrame = sql
2aa20 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
2aa30 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20  (db, nByte);.   
2aa40 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a   if( !pFrame ){.
2aa50 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
2aa60 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  m;.    }.    sql
2aa70 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
2aa80 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74  se(pRt);.    pRt
2aa90 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72  ->flags = MEM_Fr
2aaa0 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e  ame;.    pRt->u.
2aab0 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
2aac0 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20  ..    pFrame->v 
2aad0 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  = p;.    pFrame-
2aae0 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65  >nChildMem = nMe
2aaf0 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  m;.    pFrame->n
2ab00 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67  ChildCsr = pProg
2ab10 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70  ram->nCsr;.    p
2ab20 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a  Frame->pc = pc;.
2ab30 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d      pFrame->aMem
2ab40 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
2ab50 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pFrame->nMem = p
2ab60 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->nMem;.    pFra
2ab70 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61  me->apCsr = p->a
2ab80 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  pCsr;.    pFrame
2ab90 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e  ->nCursor = p->n
2aba0 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61  Cursor;.    pFra
2abb0 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  me->aOp = p->aOp
2abc0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
2abd0 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20  p = p->nOp;.    
2abe0 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20  pFrame->token = 
2abf0 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
2ac00 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e  .    pFrame->aOn
2ac10 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63  ceFlag = p->aOnc
2ac20 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61 6d  eFlag;.    pFram
2ac30 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70  e->nOnceFlag = p
2ac40 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 0a 20 20  ->nOnceFlag;..  
2ac50 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72    pEnd = &VdbeFr
2ac60 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70  ameMem(pFrame)[p
2ac70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2ac80 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d  ];.    for(pMem=
2ac90 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2aca0 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64  ame); pMem!=pEnd
2acb0 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20  ; pMem++){.     
2acc0 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
2acd0 45 4d 5f 49 6e 76 61 6c 69 64 3b 0a 20 20 20 20  EM_Invalid;.    
2ace0 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b    pMem->db = db;
2acf0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
2ad00 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74      pFrame = pRt
2ad10 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20  ->u.pFrame;.    
2ad20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2ad30 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d  ->nMem+pProgram-
2ad40 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
2ad50 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20  ChildMem );.    
2ad60 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2ad70 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
2ad80 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20  nChildCsr );.   
2ad90 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70 46 72   assert( pc==pFr
2ada0 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a  ame->pc );.  }..
2adb0 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20    p->nFrame++;. 
2adc0 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
2add0 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
2ade0 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69  pFrame->lastRowi
2adf0 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
2ae00 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65   pFrame->nChange
2ae10 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20   = p->nChange;. 
2ae20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
2ae30 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70  .  p->pFrame = p
2ae40 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d  Frame;.  p->aMem
2ae50 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46   = aMem = &VdbeF
2ae60 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
2ae70 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d  -1];.  p->nMem =
2ae80 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
2ae90 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72  em;.  p->nCursor
2aea0 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e   = (u16)pFrame->
2aeb0 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e  nChildCsr;.  p->
2aec0 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72  apCsr = (VdbeCur
2aed0 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e  sor **)&aMem[p->
2aee0 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f  nMem+1];.  p->aO
2aef0 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72  p = aOp = pProgr
2af00 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f  am->aOp;.  p->nO
2af10 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  p = pProgram->nO
2af20 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61  p;.  p->aOnceFla
2af30 67 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e 61 70  g = (u8 *)&p->ap
2af40 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b  Csr[p->nCursor];
2af50 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  .  p->nOnceFlag 
2af60 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63  = pProgram->nOnc
2af70 65 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 20 20  e;.  pc = -1;.  
2af80 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46  memset(p->aOnceF
2af90 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65  lag, 0, p->nOnce
2afa0 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b  Flag);..  break;
2afb0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
2afc0 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  aram P1 P2 * * *
2afd0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2afe0 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20  de is only ever 
2aff0 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70  present in sub-p
2b000 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76  rograms called v
2b010 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72  ia the .** OP_Pr
2b020 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
2b030 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20  n. Copy a value 
2b040 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64  currently stored
2b050 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a   in a memory .**
2b060 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c   cell of the cal
2b070 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72  ling (parent) fr
2b080 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69  ame to cell P2 i
2b090 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  n the current fr
2b0a0 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73  ames .** address
2b0b0 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20   space. This is 
2b0c0 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
2b0d0 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65  programs to acce
2b0e0 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a  ss the new.* .**
2b0f0 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65   and old.* value
2b100 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64  s..**.** The add
2b110 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c  ress of the cell
2b120 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66   in the parent f
2b130 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e  rame is determin
2b140 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20  ed by adding.** 
2b150 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
2b160 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
2b170 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
2b180 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
2b190 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f  the.** calling O
2b1a0 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
2b1b0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2b1c0 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20  P_Param: {      
2b1d0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
2b1e0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62  release */.  Vdb
2b1f0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
2b200 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46    Mem *pIn;.  pF
2b210 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rame = p->pFrame
2b220 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d  ;.  pIn = &pFram
2b230 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20  e->aMem[pOp->p1 
2b240 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46  + pFrame->aOp[pF
2b250 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20  rame->pc].p1];  
2b260 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d   .  sqlite3VdbeM
2b270 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
2b280 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68  ut, pIn, MEM_Eph
2b290 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  em);.  break;.}.
2b2a0 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64  .#endif /* #ifnd
2b2b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2b2c0 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64  RIGGER */..#ifnd
2b2d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
2b2e0 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70  OREIGN_KEY./* Op
2b2f0 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20  code: FkCounter 
2b300 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2b310 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50  ynopsis: fkctr[P
2b320 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63  1]+=P2.**.** Inc
2b330 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72  rement a "constr
2b340 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79  aint counter" by
2b350 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e   P2 (P2 may be n
2b360 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
2b370 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69  ive)..** If P1 i
2b380 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20  s non-zero, the 
2b390 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
2b3a0 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  int counter is i
2b3b0 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28  ncremented .** (
2b3c0 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
2b3d0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2b3e0 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ). Otherwise, if
2b3f0 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
2b400 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63   .** statement c
2b410 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
2b420 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65  ented (immediate
2b430 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2b440 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61  straints)..*/.ca
2b450 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a  se OP_FkCounter:
2b460 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61   {.  if( db->fla
2b470 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65  gs & SQLITE_Defe
2b480 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e  rFKs ){.    db->
2b490 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2b4a0 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
2b4b0 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31  else if( pOp->p1
2b4c0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
2b4d0 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70  erredCons += pOp
2b4e0 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->p2;.  }else{. 
2b4f0 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61     p->nFkConstra
2b500 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  int += pOp->p2;.
2b510 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2b520 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a  /* Opcode: FkIfZ
2b530 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
2b540 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2b550 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74  fkctr[P1]==0 got
2b560 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
2b570 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20  opcode tests if 
2b580 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  a foreign key co
2b590 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
2b5a0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65   is currently ze
2b5b0 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75  ro..** If so, ju
2b5c0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
2b5d0 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
2b5e0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2b5f0 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e   the next .** in
2b600 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
2b610 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
2b620 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d  ro, then the jum
2b630 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
2b640 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74  e database const
2b650 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a  raint-counter.**
2b660 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e   is zero (the on
2b670 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65  e that counts de
2b680 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
2b690 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49  t violations). I
2b6a0 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c  f P1 is.** zero,
2b6b0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2b6c0 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d  en if the statem
2b6d0 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ent constraint-c
2b6e0 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a  ounter is zero.*
2b6f0 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  * (immediate for
2b700 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2b710 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
2b720 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66  .*/.case OP_FkIf
2b730 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Zero: {         
2b740 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
2b750 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
2b760 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  if( db->nDeferre
2b770 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e  dCons==0 && db->
2b780 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2b790 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  ==0 ) pc = pOp->
2b7a0 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  p2-1;.  }else{. 
2b7b0 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e     if( p->nFkCon
2b7c0 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62  straint==0 && db
2b7d0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2b7e0 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70  ns==0 ) pc = pOp
2b7f0 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
2b800 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2b810 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
2b820 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2b830 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2b840 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
2b850 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  REMENT./* Opcode
2b860 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a  : MemMax P1 P2 *
2b870 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2b880 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31  : r[P1]=max(r[P1
2b890 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50  ],r[P2]).**.** P
2b8a0 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  1 is a register 
2b8b0 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
2b8c0 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68  e of this VM (th
2b8d0 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a  e root frame is.
2b8e0 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  ** different fro
2b8f0 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  m the current fr
2b900 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74  ame if this inst
2b910 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67  ruction is being
2b920 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74   executed.** wit
2b930 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61  hin a sub-progra
2b940 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75  m). Set the valu
2b950 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2b960 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   to the maximum 
2b970 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65  of .** its curre
2b980 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  nt value and the
2b990 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2b9a0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
2b9b0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  s instruction th
2b9c0 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
2b9d0 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
2b9e0 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c   is not initiall
2b9f0 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e  y.** an integer.
2ba00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d  .*/.case OP_MemM
2ba10 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ax: {        /* 
2ba20 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  in2 */.  Mem *pI
2ba30 6e 31 3b 0a 20 20 56 64 62 65 46 72 61 6d 65 20  n1;.  VdbeFrame 
2ba40 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70  *pFrame;.  if( p
2ba50 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
2ba60 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
2ba70 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
2ba80 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
2ba90 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
2baa0 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61      pIn1 = &pFra
2bab0 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
2bac0 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
2bad0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2bae0 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73  ->p1];.  }.  ass
2baf0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2bb00 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74  pIn1) );.  sqlit
2bb10 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
2bb20 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
2bb30 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
2bb40 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
2bb50 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
2bb60 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In2);.  if( pIn1
2bb70 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29  ->u.i<pIn2->u.i)
2bb80 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
2bb90 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d  = pIn2->u.i;.  }
2bba0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2bbb0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2bbc0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  T_AUTOINCREMENT 
2bbd0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  */../* Opcode: I
2bbe0 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a  fPos P1 P2 * * *
2bbf0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2bc00 20 72 5b 50 31 5d 3e 30 20 67 6f 74 6f 20 50 32   r[P1]>0 goto P2
2bc10 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
2bc20 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2bc30 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
2bc40 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  er, jump to P2..
2bc50 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
2bc60 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
2bc70 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
2bc80 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
2bc90 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
2bca0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2bcb0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
2bcc0 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
2bcd0 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
2bce0 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
2bcf0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2bd00 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2bd10 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2bd20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2bd30 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2bd40 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
2bd50 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2bd60 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2bd70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2bd80 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20  pcode: IfNeg P1 
2bd90 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2bda0 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 30  psis: if r[P1]<0
2bdb0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49   goto P2.**.** I
2bdc0 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
2bdd0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65  egister P1 is le
2bde0 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75  ss than zero, ju
2bdf0 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  mp to P2. .**.**
2be00 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
2be10 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
2be20 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
2be30 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
2be40 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
2be50 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
2be60 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
2be70 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
2be80 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
2be90 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20  _IfNeg: {       
2bea0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2beb0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2bec0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2bed0 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2bee0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28  MEM_Int );.  if(
2bef0 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a   pIn1->u.i<0 ){.
2bf00 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2bf10 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2bf20 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2bf30 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50  : IfZero P1 P2 P
2bf40 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
2bf50 73 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66  s: r[P1]+=P3, if
2bf60 20 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50   r[P1]==0 goto P
2bf70 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  2.**.** The regi
2bf80 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
2bf90 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2bfa0 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33    Add literal P3
2bfb0 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65   to the.** value
2bfc0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
2bfd0 20 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20    If the result 
2bfe0 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75  is exactly 0, ju
2bff0 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  mp to P2. .**.**
2c000 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
2c010 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
2c020 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
2c030 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
2c040 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
2c050 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
2c060 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
2c070 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
2c080 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
2c090 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  _IfZero: {      
2c0a0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2c0b0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2c0c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2c0d0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2c0e0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49  &MEM_Int );.  pI
2c0f0 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e  n1->u.i += pOp->
2c100 70 33 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  p3;.  if( pIn1->
2c110 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 70  u.i==0 ){.     p
2c120 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2c130 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2c140 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53  ./* Opcode: AggS
2c150 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50  tep * P2 P3 P4 P
2c160 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  5.** Synopsis: a
2c170 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28  ccum=r[P3] step(
2c180 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20  r[P2@P5]).**.** 
2c190 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70  Execute the step
2c1a0 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
2c1b0 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65   aggregate.  The
2c1c0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  .** function has
2c1d0 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   P5 arguments.  
2c1e0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2c1f0 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a   to the FuncDef.
2c200 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ** structure tha
2c210 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
2c220 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72  function.  Use r
2c230 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73  egister.** P3 as
2c240 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
2c250 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61  ..**.** The P5 a
2c260 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b  rguments are tak
2c270 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
2c280 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73   P2 and its.** s
2c290 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61  uccessors..*/.ca
2c2a0 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b  se OP_AggStep: {
2c2b0 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
2c2c0 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a  i;.  Mem *pMem;.
2c2d0 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73    Mem *pRec;.  s
2c2e0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63  qlite3_context c
2c2f0 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  tx;.  sqlite3_va
2c300 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20  lue **apVal;..  
2c310 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61  n = pOp->p5;.  a
2c320 73 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20  ssert( n>=0 );. 
2c330 20 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f   pRec = &aMem[pO
2c340 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20  p->p2];.  apVal 
2c350 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73  = p->apArg;.  as
2c360 73 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e  sert( apVal || n
2c370 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30  ==0 );.  for(i=0
2c380 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63  ; i<n; i++, pRec
2c390 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
2c3a0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
2c3b0 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ) );.    apVal[i
2c3c0 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d 65  ] = pRec;.    me
2c3d0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
2c3e0 2c 20 70 52 65 63 29 3b 0a 20 20 20 20 73 71 6c  , pRec);.    sql
2c3f0 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72 65  ite3VdbeMemStore
2c400 54 79 70 65 28 70 52 65 63 29 3b 0a 20 20 7d 0a  Type(pRec);.  }.
2c410 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
2c420 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61  p->p4.pFunc;.  a
2c430 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2c440 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
2c450 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
2c460 29 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20  ) );.  ctx.pMem 
2c470 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  = pMem = &aMem[p
2c480 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d  Op->p3];.  pMem-
2c490 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c  >n++;.  ctx.s.fl
2c4a0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
2c4b0 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20    ctx.s.z = 0;. 
2c4c0 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d   ctx.s.zMalloc =
2c4d0 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c   0;.  ctx.s.xDel
2c4e0 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62   = 0;.  ctx.s.db
2c4f0 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45   = db;.  ctx.isE
2c500 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e  rror = 0;.  ctx.
2c510 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74 78  pColl = 0;.  ctx
2c520 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  .skipFlag = 0;. 
2c530 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
2c540 66 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c 49  funcFlags & SQLI
2c550 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
2c560 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2c570 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20  pOp>p->aOp );.  
2c580 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
2c590 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ].p4type==P4_COL
2c5a0 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65  LSEQ );.    asse
2c5b0 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
2c5c0 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
2c5d0 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20  ;.    ctx.pColl 
2c5e0 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f  = pOp[-1].p4.pCo
2c5f0 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70  ll;.  }.  (ctx.p
2c600 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74  Func->xStep)(&ct
2c610 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a  x, n, apVal); /*
2c620 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33   IMP: R-24505-23
2c630 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 63 74 78  230 */.  if( ctx
2c640 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
2c650 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2c660 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2c670 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
2c680 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e  value_text(&ctx.
2c690 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74  s));.    rc = ct
2c6a0 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20  x.isError;.  }. 
2c6b0 20 69 66 28 20 63 74 78 2e 73 6b 69 70 46 6c 61   if( ctx.skipFla
2c6c0 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  g ){.    assert(
2c6d0 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
2c6e0 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
2c6f0 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70     i = pOp[-1].p
2c700 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73  1;.    if( i ) s
2c710 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2c720 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20  Int64(&aMem[i], 
2c730 31 29 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74  1);.  }..  sqlit
2c740 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
2c750 28 26 63 74 78 2e 73 29 3b 0a 0a 20 20 62 72 65  (&ctx.s);..  bre
2c760 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2c770 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32  : AggFinal P1 P2
2c780 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
2c790 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d  sis: accum=r[P1]
2c7a0 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63   N=P2.**.** Exec
2c7b0 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65  ute the finalize
2c7c0 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  r function for a
2c7d0 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31  n aggregate.  P1
2c7e0 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72   is.** the memor
2c7f0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
2c800 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  is the accumulat
2c810 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65  or for the aggre
2c820 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  gate..**.** P2 i
2c830 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
2c840 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74  arguments that t
2c850 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2c860 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34   takes and.** P4
2c870 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2c880 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72   the FuncDef for
2c890 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20   this function. 
2c8a0 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d   The P2.** argum
2c8b0 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ent is not used 
2c8c0 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
2c8d0 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72   It is only ther
2c8e0 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74  e to disambiguat
2c8f0 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74  e.** functions t
2c900 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72  hat can take var
2c910 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20  ying numbers of 
2c920 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a  arguments.  The.
2c930 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  ** P4 argument i
2c940 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f  s only needed fo
2c950 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65  r the degenerate
2c960 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74   case where.** t
2c970 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2c980 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75   was not previou
2c990 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63  sly called..*/.c
2c9a0 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a  ase OP_AggFinal:
2c9b0 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
2c9c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c9d0 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
2c9e0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2c9f0 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d  sor) );.  pMem =
2ca00 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2ca10 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2ca20 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f  ->flags & ~(MEM_
2ca30 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d  Null|MEM_Agg))==
2ca40 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
2ca50 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69  te3VdbeMemFinali
2ca60 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34  ze(pMem, pOp->p4
2ca70 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72  .pFunc);.  if( r
2ca80 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
2ca90 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2caa0 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
2cab0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2cac0 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a  ext(pMem));.  }.
2cad0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2cae0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
2caf0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
2cb00 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2cb10 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
2cb20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2cb30 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
2cb40 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
2cb50 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2cb60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2cb70 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
2cb80 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
2cb90 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2cba0 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
2cbb0 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
2cbc0 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
2cbd0 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
2cbe0 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
2cbf0 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
2cc00 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
2cc10 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
2cc20 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53  , FULL.** or RES
2cc30 54 41 52 54 2e 20 20 57 72 69 74 65 20 31 20 6f  TART.  Write 1 o
2cc40 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d  r 0 into mem[P3]
2cc50 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69   if the checkpoi
2cc60 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51  nt returns.** SQ
2cc70 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74  LITE_BUSY or not
2cc80 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2cc90 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65   Write the numbe
2cca0 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
2ccb0 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74  e.** WAL after t
2ccc0 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e  he checkpoint in
2ccd0 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  to mem[P3+1] and
2cce0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2ccf0 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57  ages.** in the W
2cd00 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65  AL that have bee
2cd10 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61  n checkpointed a
2cd20 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
2cd30 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73  int.** completes
2cd40 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e   into mem[P3+2].
2cd50 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20    However on an 
2cd60 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d  error, mem[P3+1]
2cd70 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32   and.** mem[P3+2
2cd80 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  ] are initialize
2cd90 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65  d to -1..*/.case
2cda0 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20   OP_Checkpoint: 
2cdb0 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  {.  int i;      
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdd0 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
2cde0 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65  ter */.  int aRe
2cdf0 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20  s[3];           
2ce00 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
2ce10 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  lts */.  Mem *pM
2ce20 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2ce30 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74           /* Writ
2ce40 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a  e results here *
2ce50 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
2ce60 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2ce70 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20   aRes[0] = 0;.  
2ce80 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32  aRes[1] = aRes[2
2ce90 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74  ] = -1;.  assert
2cea0 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
2ceb0 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
2cec0 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70  SIVE.       || p
2ced0 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
2cee0 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20  HECKPOINT_FULL. 
2cef0 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
2cf00 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2cf10 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 29 3b  INT_RESTART.  );
2cf20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43  .  rc = sqlite3C
2cf30 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f  heckpoint(db, pO
2cf40 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
2cf50 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b  &aRes[1], &aRes[
2cf60 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  2]);.  if( rc==S
2cf70 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
2cf80 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2cf90 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20  ;.    aRes[0] = 
2cfa0 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30  1;.  }.  for(i=0
2cfb0 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  , pMem = &aMem[p
2cfc0 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b  Op->p3]; i<3; i+
2cfd0 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  +, pMem++){.    
2cfe0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2cff0 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36  tInt64(pMem, (i6
2d000 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20  4)aRes[i]);.  } 
2d010 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20     .  break;.}; 
2d020 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65   .#endif..#ifnde
2d030 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
2d040 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  AGMA./* Opcode: 
2d050 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50  JournalMode P1 P
2d060 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
2d070 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e  Change the journ
2d080 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62  al mode of datab
2d090 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33  ase P1 to P3. P3
2d0a0 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
2d0b0 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55  the.** PAGER_JOU
2d0c0 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c  RNALMODE_XXX val
2d0d0 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67  ues. If changing
2d0e0 20 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72   between the var
2d0f0 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  ious rollback.**
2d100 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20   modes (delete, 
2d110 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73  truncate, persis
2d120 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72  t, off and memor
2d130 79 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69  y), this is a si
2d140 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  mple.** operatio
2d150 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75  n. No IO is requ
2d160 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63  ired..**.** If c
2d170 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20  hanging into or 
2d180 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20  out of WAL mode 
2d190 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73  the procedure is
2d1a0 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65   more complicate
2d1b0 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  d..**.** Write a
2d1c0 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
2d1d0 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75  ng the final jou
2d1e0 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67  rnal-mode to reg
2d1f0 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
2d200 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65  e OP_JournalMode
2d210 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70  : {    /* out2-p
2d220 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42  rerelease */.  B
2d230 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
2d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d250 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67  * Btree to chang
2d260 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
2d270 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50  f */.  Pager *pP
2d280 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  ager;           
2d290 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20         /* Pager 
2d2a0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2d2b0 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65  pBt */.  int eNe
2d2c0 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  w;              
2d2d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20           /* New 
2d2e0 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
2d2f0 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20    int eOld;     
2d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d310 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75    /* The old jou
2d320 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66  rnal mode */.#if
2d330 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2d340 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61  _WAL.  const cha
2d350 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20  r *zFilename;   
2d360 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
2d370 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  f database file 
2d380 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65  for pPager */.#e
2d390 6e 64 69 66 0a 0a 20 20 65 4e 65 77 20 3d 20 70  ndif..  eNew = p
2d3a0 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
2d3b0 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2d3c0 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45  URNALMODE_DELETE
2d3d0 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
2d3e0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2d3f0 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20  ODE_TRUNCATE .  
2d400 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2d410 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2d420 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20  PERSIST .       
2d430 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2d440 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20  OURNALMODE_OFF. 
2d450 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
2d460 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2d470 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c  _MEMORY.       |
2d480 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2d490 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2d4a0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2d4b0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2d4c0 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73  QUERY.  );.  ass
2d4d0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2d4e0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2d4f0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2d500 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2d510 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
2d520 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
2d530 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69  .  pPager = sqli
2d540 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
2d550 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c  t);.  eOld = sql
2d560 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72  ite3PagerGetJour
2d570 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b  nalMode(pPager);
2d580 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
2d590 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2d5a0 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f  UERY ) eNew = eO
2d5b0 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  ld;.  if( !sqlit
2d5c0 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67  e3PagerOkToChang
2d5d0 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  eJournalMode(pPa
2d5e0 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f  ger) ) eNew = eO
2d5f0 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ld;..#ifndef SQL
2d600 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a  ITE_OMIT_WAL.  z
2d610 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74  Filename = sqlit
2d620 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28  e3PagerFilename(
2d630 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f  pPager, 1);..  /
2d640 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61  * Do not allow a
2d650 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a   transition to j
2d660 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20  ournal_mode=WAL 
2d670 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20  for a database. 
2d680 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79   ** in temporary
2d690 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74   storage or if t
2d6a0 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20  he VFS does not 
2d6b0 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d  support shared m
2d6c0 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66  emory .  */.  if
2d6d0 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
2d6e0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
2d6f0 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c   && (sqlite3Strl
2d700 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d  en30(zFilename)=
2d710 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  =0           /* 
2d720 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20  Temp file */.   
2d730 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50      || !sqlite3P
2d740 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64  agerWalSupported
2d750 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e  (pPager))   /* N
2d760 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20  o shared-memory 
2d770 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a  support */.  ){.
2d780 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2d790 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65  .  }..  if( (eNe
2d7a0 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28  w!=eOld).   && (
2d7b0 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2d7c0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65  NALMODE_WAL || e
2d7d0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2d7e0 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b  ALMODE_WAL).  ){
2d7f0 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75  .    if( !db->au
2d800 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e  toCommit || db->
2d810 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20  nVdbeRead>1 ){. 
2d820 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
2d830 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71  _ERROR;.      sq
2d840 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2d850 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2d860 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e  .          "cann
2d870 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c  ot change %s wal
2d880 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69   mode from withi
2d890 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
2d8a0 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65  ,.          (eNe
2d8b0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2d8c0 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f  MODE_WAL ? "into
2d8d0 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20  " : "out of").  
2d8e0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65      );.      bre
2d8f0 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ak;.    }else{. 
2d900 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d  .      if( eOld=
2d910 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2d920 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20  DE_WAL ){.      
2d930 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20    /* If leaving 
2d940 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20  WAL mode, close 
2d950 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66  the log file. If
2d960 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
2d970 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a   call.        **
2d980 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61   to PagerCloseWa
2d990 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20  l() checkpoints 
2d9a0 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20  and deletes the 
2d9b0 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20  write-ahead-log 
2d9c0 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65  .        ** file
2d9d0 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  . An EXCLUSIVE l
2d9e0 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ock may still be
2d9f0 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74   held on the dat
2da00 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20  abase file .    
2da10 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73      ** after a s
2da20 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e  uccessful return
2da30 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  . .        */.  
2da40 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2da50 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  e3PagerCloseWal(
2da60 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20  pPager);.       
2da70 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2da80 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
2da90 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2daa0 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2dab0 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20  r, eNew);.      
2dac0 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20    }.      }else 
2dad0 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  if( eOld==PAGER_
2dae0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
2daf0 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  RY ){.        /*
2db00 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69   Cannot transiti
2db10 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d  on directly from
2db20 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20   MEMORY to WAL. 
2db30 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20   Use mode OFF.  
2db40 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69        ** as an i
2db50 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20  ntermediate */. 
2db60 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
2db70 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
2db80 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f  e(pPager, PAGER_
2db90 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29  JOURNALMODE_OFF)
2dba0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
2dbb0 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61     /* Open a tra
2dbc0 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20  nsaction on the 
2dbd0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52  database file. R
2dbe0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
2dbf0 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a   journal.      *
2dc00 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61  * mode, this tra
2dc10 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20  nsaction always 
2dc20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  uses a rollback 
2dc30 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a  journal..      *
2dc40 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
2dc50 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
2dc60 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b  Trans(pBt)==0 );
2dc70 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
2dc80 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2dc90 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2dca0 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28  BtreeSetVersion(
2dcb0 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45  pBt, (eNew==PAGE
2dcc0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2dcd0 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20  L ? 2 : 1));.   
2dce0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23     }.    }.  }.#
2dcf0 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20  endif /* ifndef 
2dd00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20  SQLITE_OMIT_WAL 
2dd10 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  */..  if( rc ){.
2dd20 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
2dd30 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71  .  }.  eNew = sq
2dd40 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
2dd50 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
2dd60 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20   eNew);..  pOut 
2dd70 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2dd80 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
2dd90 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
2dda0 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
2ddb0 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72   pOut->z = (char
2ddc0 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61   *)sqlite3Journa
2ddd0 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b  lModename(eNew);
2dde0 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c  .  pOut->n = sql
2ddf0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75  ite3Strlen30(pOu
2de00 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65  t->z);.  pOut->e
2de10 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38  nc = SQLITE_UTF8
2de20 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
2de30 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
2de40 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ut, encoding);. 
2de50 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69   break;.};.#endi
2de60 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2de70 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20  _PRAGMA */..#if 
2de80 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2de90 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20  OMIT_VACUUM) && 
2dea0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2deb0 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20  OMIT_ATTACH)./* 
2dec0 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a  Opcode: Vacuum *
2ded0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56   * * * *.**.** V
2dee0 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65  acuum the entire
2def0 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73   database.  This
2df00 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75   opcode will cau
2df10 73 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c  se other virtual
2df20 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20  .** machines to 
2df30 62 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72  be created and r
2df40 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20  un.  It may not 
2df50 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  be called from w
2df60 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73  ithin.** a trans
2df70 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  action..*/.case 
2df80 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61  OP_Vacuum: {.  a
2df90 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2dfa0 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ly==0 );.  rc = 
2dfb0 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
2dfc0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2dfd0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2dfe0 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e  ndif..#if !defin
2dff0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2e000 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70  UTOVACUUM)./* Op
2e010 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d  code: IncrVacuum
2e020 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2e030 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e  ** Perform a sin
2e040 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20  gle step of the 
2e050 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  incremental vacu
2e060 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a  um procedure on.
2e070 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61  ** the P1 databa
2e080 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75  se. If the vacuu
2e090 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  m has finished, 
2e0a0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2e0b0 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72  ion.** P2. Other
2e0c0 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
2e0d0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2e0e0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2e0f0 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75  ase OP_IncrVacuu
2e100 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
2e110 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ump */.  Btree *
2e120 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
2e130 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2e140 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2e150 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
2e160 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
2e170 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
2e180 31 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  1))!=0 );.  asse
2e190 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2e1a0 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
2e1b0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
2e1c0 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  Bt;.  rc = sqlit
2e1d0 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75  e3BtreeIncrVacuu
2e1e0 6d 28 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63  m(pBt);.  if( rc
2e1f0 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b  ==SQLITE_DONE ){
2e200 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
2e210 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  2 - 1;.    rc = 
2e220 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20  SQLITE_OK;.  }. 
2e230 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2e240 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70  ../* Opcode: Exp
2e250 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ire P1 * * * *.*
2e260 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f  *.** Cause preco
2e270 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
2e280 73 20 74 6f 20 62 65 63 6f 6d 65 20 65 78 70 69  s to become expi
2e290 72 65 64 2e 20 41 6e 20 65 78 70 69 72 65 64 20  red. An expired 
2e2a0 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 61 69  statement.** fai
2e2b0 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  ls with an error
2e2c0 20 63 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f   code of SQLITE_
2e2d0 53 43 48 45 4d 41 20 69 66 20 69 74 20 69 73 20  SCHEMA if it is 
2e2e0 65 76 65 72 20 65 78 65 63 75 74 65 64 20 0a 2a  ever executed .*
2e2f0 2a 20 28 76 69 61 20 73 71 6c 69 74 65 33 5f 73  * (via sqlite3_s
2e300 74 65 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49  tep())..** .** I
2e310 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20  f P1 is 0, then 
2e320 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  all SQL statemen
2e330 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65  ts become expire
2e340 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  d. If P1 is non-
2e350 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e  zero,.** then on
2e360 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  ly the currently
2e370 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65   executing state
2e380 6d 65 6e 74 20 69 73 20 61 66 66 65 63 74 65 64  ment is affected
2e390 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78  . .*/.case OP_Ex
2e3a0 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70  pire: {.  if( !p
2e3b0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
2e3c0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
2e3d0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
2e3e0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2e3f0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
2e400 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2e410 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2e420 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
2e430 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c  ./* Opcode: Tabl
2e440 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50  eLock P1 P2 P3 P
2e450 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
2e460 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20   iDb=P1 root=P2 
2e470 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  write=P3.**.** O
2e480 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
2e490 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
2e4a0 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
2e4b0 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
2e4c0 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
2e4d0 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
2e4e0 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
2e4f0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
2e500 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
2e510 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
2e520 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
2e530 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
2e540 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
2e550 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
2e560 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
2e570 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
2e580 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
2e590 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
2e5a0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
2e5b0 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
2e5c0 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
2e5d0 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
2e5e0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2e5f0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
2e600 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
2e610 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
2e620 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
2e630 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
2e640 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
2e650 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
2e660 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
2e670 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69  leLock: {.  u8 i
2e680 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
2e690 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20  )pOp->p3;.  if( 
2e6a0 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30  isWriteLock || 0
2e6b0 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ==(db->flags&SQL
2e6c0 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
2e6d0 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  ted) ){.    int 
2e6e0 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20  p1 = pOp->p1; . 
2e6f0 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30     assert( p1>=0
2e700 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29   && p1<db->nDb )
2e710 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
2e720 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
2e730 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 31 29  (yDbMask)1)<<p1)
2e740 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  )!=0 );.    asse
2e750 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d  rt( isWriteLock=
2e760 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63  =0 || isWriteLoc
2e770 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d  k==1 );.    rc =
2e780 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63   sqlite3BtreeLoc
2e790 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70  kTable(db->aDb[p
2e7a0 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  1].pBt, pOp->p2,
2e7b0 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20   isWriteLock);. 
2e7c0 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29     if( (rc&0xFF)
2e7d0 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  ==SQLITE_LOCKED 
2e7e0 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
2e7f0 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34  har *z = pOp->p4
2e800 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  .z;.      sqlite
2e810 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2e820 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74  ErrMsg, db, "dat
2e830 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
2e840 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a  ocked: %s", z);.
2e850 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
2e860 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2e870 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
2e880 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e  D_CACHE */..#ifn
2e890 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2e8a0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2e8b0 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a  Opcode: VBegin *
2e8c0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2e8d0 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e  P4 may be a poin
2e8e0 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
2e8f0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2e900 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68  . If so, call th
2e910 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74  e .** xBegin met
2e920 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
2e930 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20  le..**.** Also, 
2e940 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50  whether or not P
2e950 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20  4 is set, check 
2e960 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74  that this is not
2e970 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
2e980 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63  om.** within a c
2e990 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72  allback to a vir
2e9a0 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63  tual table xSync
2e9b0 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74  () method. If it
2e9c0 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a   is, the error.*
2e9d0 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  * code will be s
2e9e0 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43  et to SQLITE_LOC
2e9f0 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  KED..*/.case OP_
2ea00 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62  VBegin: {.  VTab
2ea10 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54  le *pVTab;.  pVT
2ea20 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
2ea30 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ab;.  rc = sqlit
2ea40 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20  e3VtabBegin(db, 
2ea50 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56  pVTab);.  if( pV
2ea60 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74 61  Tab ) sqlite3Vta
2ea70 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
2ea80 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a   pVTab->pVtab);.
2ea90 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2eaa0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2eab0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2eac0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ead0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2eae0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
2eaf0 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20  reate P1 * * P4 
2eb00 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68  *.**.** P4 is th
2eb10 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
2eb20 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
2eb30 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74  abase P1. Call t
2eb40 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f  he xCreate metho
2eb50 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61  d.** for that ta
2eb60 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
2eb70 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20  VCreate: {.  rc 
2eb80 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  = sqlite3VtabCal
2eb90 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d  lCreate(db, pOp-
2eba0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  >p1, pOp->p4.z, 
2ebb0 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20  &p->zErrMsg);.  
2ebc0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2ebd0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2ebe0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
2ebf0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ec00 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2ec10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73  ./* Opcode: VDes
2ec20 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a  troy P1 * * P4 *
2ec30 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65  .**.** P4 is the
2ec40 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75   name of a virtu
2ec50 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61  al table in data
2ec60 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74  base P1.  Call t
2ec70 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68  he xDestroy meth
2ec80 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61  od.** of that ta
2ec90 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
2eca0 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d  VDestroy: {.  p-
2ecb0 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
2ecc0 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  2;.  rc = sqlite
2ecd0 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
2ece0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2ecf0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69  p->p4.z);.  p->i
2ed00 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b  nVtabMethod = 0;
2ed10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2ed20 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2ed30 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2ed40 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2ed50 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2ed60 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2ed70 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a  Open P1 * * P4 *
2ed80 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
2ed90 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
2eda0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
2edb0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
2edc0 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
2edd0 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e  P1 is a cursor n
2ede0 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63  umber.  This opc
2edf0 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73  ode opens a curs
2ee00 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  or to the virtua
2ee10 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73  l.** table and s
2ee20 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f  tores that curso
2ee30 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  r in P1..*/.case
2ee40 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56   OP_VOpen: {.  V
2ee50 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
2ee60 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
2ee70 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72  cursor *pVtabCur
2ee80 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  sor;.  sqlite3_v
2ee90 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71  tab *pVtab;.  sq
2eea0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2eeb0 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
2eec0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
2eed0 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20  ;.  pCur = 0;.  
2eee0 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b  pVtabCursor = 0;
2eef0 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
2ef00 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
2ef10 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71  .  pModule = (sq
2ef20 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70  lite3_module *)p
2ef30 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
2ef40 20 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26   assert(pVtab &&
2ef50 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20   pModule);.  rc 
2ef60 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e  = pModule->xOpen
2ef70 28 70 56 74 61 62 2c 20 26 70 56 74 61 62 43 75  (pVtab, &pVtabCu
2ef80 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  rsor);.  sqlite3
2ef90 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
2efa0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
2efb0 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20  ( SQLITE_OK==rc 
2efc0 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ){.    /* Initia
2efd0 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61  lize sqlite3_vta
2efe0 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c  b_cursor base cl
2eff0 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62  ass */.    pVtab
2f000 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20  Cursor->pVtab = 
2f010 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49  pVtab;..    /* I
2f020 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63  nitialize vdbe c
2f030 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a  ursor object */.
2f040 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63      pCur = alloc
2f050 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
2f060 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b  ->p1, 0, -1, 0);
2f070 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b  .    if( pCur ){
2f080 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74  .      pCur->pVt
2f090 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62  abCursor = pVtab
2f0a0 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 43  Cursor;.      pC
2f0b0 75 72 2d 3e 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ur->pModule = pV
2f0c0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2f0d0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 7d  ->pModule;.    }
2f0e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
2f0f0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
2f100 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d  ;.      pModule-
2f110 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72  >xClose(pVtabCur
2f120 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
2f130 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2f140 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2f150 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2f160 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2f170 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2f180 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46  LE./* Opcode: VF
2f190 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50  ilter P1 P2 P3 P
2f1a0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
2f1b0 20 69 50 6c 61 6e 3d 72 5b 50 33 5d 20 7a 50 6c   iPlan=r[P3] zPl
2f1c0 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31  an='P4'.**.** P1
2f1d0 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65   is a cursor ope
2f1e0 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e  ned using VOpen.
2f1f0 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65    P2 is an addre
2f200 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
2f210 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64  .** the filtered
2f220 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
2f230 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  mpty..**.** P4 i
2f240 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72  s either NULL or
2f250 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77   a string that w
2f260 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  as generated by 
2f270 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a  the xBestIndex.*
2f280 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  * method of the 
2f290 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74  module.  The int
2f2a0 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
2f2b0 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20  he P4 string is 
2f2c0 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d  left.** to the m
2f2d0 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
2f2e0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
2f2f0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2f300 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
2f310 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  od on the virtua
2f320 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65  l table specifie
2f330 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65  d.** by P1.  The
2f340 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70   integer query p
2f350 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f  lan parameter to
2f360 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72   xFilter is stor
2f370 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
2f380 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50  * P3. Register P
2f390 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61  3+1 stores the a
2f3a0 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f  rgc parameter to
2f3b0 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68   be passed to th
2f3c0 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74  e.** xFilter met
2f3d0 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50  hod. Registers P
2f3e0 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61  3+2..P3+1+argc a
2f3f0 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61  re the argc.** a
2f400 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65  dditional parame
2f410 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70  ters which are p
2f420 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c  assed to.** xFil
2f430 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67  ter as argv. Reg
2f440 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d  ister P3+2 becom
2f450 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20  es argv[0] when 
2f460 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65  passed to xFilte
2f470 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20  r..**.** A jump 
2f480 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66  is made to P2 if
2f490 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
2f4a0 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20  after filtering 
2f4b0 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a  would be empty..
2f4c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74  */.case OP_VFilt
2f4d0 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  er: {   /* jump 
2f4e0 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  */.  int nArg;. 
2f4f0 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63   int iQuery;.  c
2f500 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
2f510 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
2f520 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d  Mem *pQuery;.  M
2f530 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c  em *pArgc;.  sql
2f540 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
2f550 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20   *pVtabCursor;. 
2f560 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2f570 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73  Vtab;.  VdbeCurs
2f580 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20  or *pCur;.  int 
2f590 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  res;.  int i;.  
2f5a0 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20  Mem **apArg;..  
2f5b0 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70  pQuery = &aMem[p
2f5c0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63  Op->p3];.  pArgc
2f5d0 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20   = &pQuery[1];. 
2f5e0 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
2f5f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2f600 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2f610 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47  pQuery) );.  REG
2f620 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
2f630 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20  >p3, pQuery);.  
2f640 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
2f650 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  tabCursor );.  p
2f660 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75  VtabCursor = pCu
2f670 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r->pVtabCursor;.
2f680 20 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43    pVtab = pVtabC
2f690 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
2f6a0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
2f6b0 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20  >pModule;..  /* 
2f6c0 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e  Grab the index n
2f6d0 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70  umber and argc p
2f6e0 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61  arameters */.  a
2f6f0 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e  ssert( (pQuery->
2f700 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d  flags&MEM_Int)!=
2f710 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67  0 && pArgc->flag
2f720 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
2f730 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67  nArg = (int)pArg
2f740 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79  c->u.i;.  iQuery
2f750 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e   = (int)pQuery->
2f760 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  u.i;..  /* Invok
2f770 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  e the xFilter me
2f780 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20  thod */.  {.    
2f790 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41  res = 0;.    apA
2f7a0 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
2f7b0 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c     for(i = 0; i<
2f7c0 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
2f7d0 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41    apArg[i] = &pA
2f7e0 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 20 20  rgc[i+1];.      
2f7f0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
2f800 6f 72 65 54 79 70 65 28 61 70 41 72 67 5b 69 5d  oreType(apArg[i]
2f810 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d  );.    }..    p-
2f820 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
2f830 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  1;.    rc = pMod
2f840 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74  ule->xFilter(pVt
2f850 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79  abCursor, iQuery
2f860 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72  , pOp->p4.z, nAr
2f870 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70  g, apArg);.    p
2f880 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
2f890 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   0;.    sqlite3V
2f8a0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
2f8b0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69  p, pVtab);.    i
2f8c0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2f8d0 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
2f8e0 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56  pModule->xEof(pV
2f8f0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  tabCursor);.    
2f900 7d 0a 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  }..    if( res )
2f910 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
2f920 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
2f930 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c    }.  pCur->null
2f940 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61  Row = 0;..  brea
2f950 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2f960 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2f970 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2f980 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f990 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2f9a0 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20  Opcode: VColumn 
2f9b0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
2f9c0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
2f9d0 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a  vcolumn(P2).**.*
2f9e0 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75  * Store the valu
2f9f0 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63  e of the P2-th c
2fa00 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  olumn of.** the 
2fa10 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75  row of the virtu
2fa20 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68  al-table that th
2fa30 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20  e .** P1 cursor 
2fa40 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69  is pointing to i
2fa50 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
2fa60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c  .*/.case OP_VCol
2fa70 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  umn: {.  sqlite3
2fa80 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
2fa90 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2faa0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
2fab0 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73   Mem *pDest;.  s
2fac0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73  qlite3_context s
2fad0 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65  Context;..  Vdbe
2fae0 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70  Cursor *pCur = p
2faf0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2fb00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
2fb10 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
2fb20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2fb30 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
2fb40 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
2fb50 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74  rsor) );.  pDest
2fb60 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2fb70 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
2fb80 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
2fb90 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
2fba0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
2fbb0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2fbc0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72  l(pDest);.    br
2fbd0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
2fbe0 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
2fbf0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
2fc00 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
2fc10 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
2fc20 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c  t( pModule->xCol
2fc30 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28  umn );.  memset(
2fc40 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69  &sContext, 0, si
2fc50 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b  zeof(sContext));
2fc60 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
2fc70 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
2fc80 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
2fc90 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
2fca0 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e  .  ** the curren
2fcb0 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43  t contents to sC
2fcc0 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63  ontext.s so in c
2fcd0 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e  ase the user-fun
2fce0 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20  ction .  ** can 
2fcf0 75 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20  use the already 
2fd00 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72  allocated buffer
2fd10 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f   instead of allo
2fd20 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e  cating a .  ** n
2fd30 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73  ew one..  */.  s
2fd40 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
2fd50 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70  e(&sContext.s, p
2fd60 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54  Dest);.  MemSetT
2fd70 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78  ypeFlag(&sContex
2fd80 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  t.s, MEM_Null);.
2fd90 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
2fda0 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70  >xColumn(pCur->p
2fdb0 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f  VtabCursor, &sCo
2fdc0 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b  ntext, pOp->p2);
2fdd0 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  .  sqlite3VtabIm
2fde0 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
2fdf0 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e  tab);.  if( sCon
2fe00 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a  text.isError ){.
2fe10 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78      rc = sContex
2fe20 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a  t.isError;.  }..
2fe30 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65    /* Copy the re
2fe40 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
2fe50 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 33 20 72  tion to the P3 r
2fe60 65 67 69 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a  egister. We.  **
2fe70 20 64 6f 20 74 68 69 73 20 72 65 67 61 72 64 6c   do this regardl
2fe80 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
2fe90 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f  r not an error o
2fea0 63 63 75 72 72 65 64 20 74 6f 20 65 6e 73 75 72  ccurred to ensur
2feb0 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d  e any.  ** dynam
2fec0 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ic allocation in
2fed0 20 73 43 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d   sContext.s (a M
2fee0 65 6d 20 73 74 72 75 63 74 29 20 69 73 20 20 72  em struct) is  r
2fef0 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20  eleased..  */.  
2ff00 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
2ff10 65 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74  eEncoding(&sCont
2ff20 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29  ext.s, encoding)
2ff30 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2ff40 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20 26 73  emMove(pDest, &s
2ff50 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20 52 45  Context.s);.  RE
2ff60 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
2ff70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
2ff80 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2ff90 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69  IZE(pDest);..  i
2ffa0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
2ffb0 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29  mTooBig(pDest) )
2ffc0 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
2ffd0 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
2ffe0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2fff0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
30000 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
30010 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
30020 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
30030 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50  code: VNext P1 P
30040 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
30050 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61  vance virtual ta
30060 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65  ble P1 to the ne
30070 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65  xt row in its re
30080 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20  sult set and.** 
30090 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
300a0 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20  ion P2.  Or, if 
300b0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
300c0 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a  e has reached.**
300d0 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20   the end of its 
300e0 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e  result set, then
300f0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
30100 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
30110 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
30120 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20  P_VNext: {   /* 
30130 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65  jump */.  sqlite
30140 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
30150 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
30160 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
30170 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62    int res;.  Vdb
30180 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a  eCursor *pCur;..
30190 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75    res = 0;.  pCu
301a0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
301b0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
301c0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
301d0 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72  or );.  if( pCur
301e0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
301f0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
30200 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  tab = pCur->pVta
30210 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
30220 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
30230 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
30240 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
30250 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  Next );..  /* In
30260 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29  voke the xNext()
30270 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
30280 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20  odule. There is 
30290 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20  no way for the. 
302a0 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69   ** underlying i
302b0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
302c0 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
302d0 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64   if one occurs d
302e0 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74  uring.  ** xNext
302f0 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20  (). Instead, if 
30300 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
30310 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65   true is returne
30320 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68  d (indicating th
30330 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73  at .  ** data is
30340 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20   available) and 
30350 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72  the error code r
30360 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f  eturned when xCo
30370 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d  lumn or.  ** som
30380 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69  e other method i
30390 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f  s next invoked o
303a0 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75  n the save virtu
303b0 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e  al table cursor.
303c0 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61  .  */.  p->inVta
303d0 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72  bMethod = 1;.  r
303e0 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  c = pModule->xNe
303f0 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  xt(pCur->pVtabCu
30400 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74  rsor);.  p->inVt
30410 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20  abMethod = 0;.  
30420 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
30430 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
30440 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
30450 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
30460 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
30470 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  f(pCur->pVtabCur
30480 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  sor);.  }..  if(
30490 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20   !res ){.    /* 
304a0 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61  If there is data
304b0 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  , jump to P2 */.
304c0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
304d0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f   - 1;.  }.  goto
304e0 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
304f0 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  rupt;.}.#endif /
30500 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
30510 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
30520 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30530 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
30540 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61  /* Opcode: VRena
30550 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  me P1 * * P4 *.*
30560 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
30570 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
30580 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
30590 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
305a0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
305b0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
305c0 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
305d0 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  ing xRename meth
305e0 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  od. The value.**
305f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
30600 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
30610 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20   zName argument 
30620 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d  to the xRename m
30630 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ethod..*/.case O
30640 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73  P_VRename: {.  s
30650 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
30660 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65  ab;.  Mem *pName
30670 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
30680 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
30690 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d  b;.  pName = &aM
306a0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
306b0 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d  ssert( pVtab->pM
306c0 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29  odule->xRename )
306d0 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
306e0 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b  sValid(pName) );
306f0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
30700 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52  adOnly==0 );.  R
30710 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
30720 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20  p->p1, pName);. 
30730 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e   assert( pName->
30740 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
30750 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
30760 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
30770 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74  E_UTF8 );.  test
30780 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
30790 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  ==SQLITE_UTF16BE
307a0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
307b0 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
307c0 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20  TE_UTF16LE );.  
307d0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
307e0 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
307f0 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46  Name, SQLITE_UTF
30800 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  8);.  if( rc==SQ
30810 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
30820 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  c = pVtab->pModu
30830 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61  le->xRename(pVta
30840 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20  b, pName->z);.  
30850 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
30860 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
30870 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  ab);.    p->expi
30880 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  red = 0;.  }.  b
30890 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
308a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
308b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
308c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64  ./* Opcode: VUpd
308d0 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ate P1 P2 P3 P4 
308e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64  *.** Synopsis: d
308f0 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a  ata=r[P3@P2].**.
30900 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
30910 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
30920 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
30930 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
30940 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
30950 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
30960 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
30970 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  g xUpdate method
30980 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61  . P2 values.** a
30990 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65  re contiguous me
309a0 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74  mory cells start
309b0 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73  ing at P3 to pas
309c0 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65  s to the xUpdate
309d0 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e   .** invocation.
309e0 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   The value in re
309f0 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29  gister (P3+P2-1)
30a00 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
30a10 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65  the .** p2th ele
30a20 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76  ment of the argv
30a30 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f   array passed to
30a40 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20   xUpdate..**.** 
30a50 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  The xUpdate meth
30a60 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c  od will do a DEL
30a70 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54  ETE or an INSERT
30a80 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65   or both..** The
30a90 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74   argv[0] element
30aa0 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f   (which correspo
30ab0 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65  nds to memory ce
30ac0 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65  ll P3).** is the
30ad0 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20   rowid of a row 
30ae0 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61  to delete.  If a
30af0 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74  rgv[0] is NULL t
30b00 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74  hen no .** delet
30b10 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65  ion occurs.  The
30b20 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74   argv[1] element
30b30 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
30b40 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
30b50 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e  .  This can be N
30b60 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20  ULL to have the 
30b70 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65  virtual table se
30b80 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a  lect the new .**
30b90 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c   rowid for itsel
30ba0 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65  f.  The subseque
30bb0 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  nt elements in t
30bc0 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a  he array are .**
30bd0 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63   the values of c
30be0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65  olumns in the ne
30bf0 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  w row..**.** If 
30c00 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e  P2==1 then no in
30c10 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65  sert is performe
30c20 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74  d.  argv[0] is t
30c30 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61  he rowid of.** a
30c40 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a   row to delete..
30c50 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f  **.** P1 is a bo
30c60 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69  olean flag. If i
30c70 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65  t is set to true
30c80 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65   and the xUpdate
30c90 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63   call.** is succ
30ca0 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65  essful, then the
30cb0 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
30cc0 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  by sqlite3_last_
30cd0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a  insert_rowid() .
30ce0 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ** is set to the
30cf0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
30d00 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20  wid for the row 
30d10 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a  just inserted..*
30d20 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74  /.case OP_VUpdat
30d30 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
30d40 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71  tab *pVtab;.  sq
30d50 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
30d60 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72  odule;.  int nAr
30d70 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71  g;.  int i;.  sq
30d80 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64  lite_int64 rowid
30d90 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b  ;.  Mem **apArg;
30da0 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61  .  Mem *pX;..  a
30db0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d  ssert( pOp->p2==
30dc0 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  1        || pOp-
30dd0 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c  >p5==OE_Fail   |
30de0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f  | pOp->p5==OE_Ro
30df0 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c  llback .       |
30e00 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62  | pOp->p5==OE_Ab
30e10 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ort || pOp->p5==
30e20 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70  OE_Ignore || pOp
30e30 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65  ->p5==OE_Replace
30e40 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  .  );.  assert( 
30e50 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
30e60 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ;.  pVtab = pOp-
30e70 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
30e80 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73  ;.  pModule = (s
30e90 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29  qlite3_module *)
30ea0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
30eb0 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32    nArg = pOp->p2
30ec0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
30ed0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42  >p4type==P4_VTAB
30ee0 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53   );.  if( ALWAYS
30ef0 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74  (pModule->xUpdat
30f00 65 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74 61  e) ){.    u8 vta
30f10 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62  bOnConflict = db
30f20 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
30f30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  ;.    apArg = p-
30f40 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d  >apArg;.    pX =
30f50 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
30f60 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
30f70 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
30f80 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
30f90 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20  alid(pX) );.    
30fa0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
30fb0 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20  ge(p, pX);.     
30fc0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
30fd0 74 6f 72 65 54 79 70 65 28 70 58 29 3b 0a 20 20  toreType(pX);.  
30fe0 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70      apArg[i] = p
30ff0 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20  X;.      pX++;. 
31000 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61     }.    db->vta
31010 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f  bOnConflict = pO
31020 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d 20  p->p5;.    rc = 
31030 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65  pModule->xUpdate
31040 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70  (pVtab, nArg, ap
31050 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  Arg, &rowid);.  
31060 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66    db->vtabOnConf
31070 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e  lict = vtabOnCon
31080 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69 74  flict;.    sqlit
31090 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
310a0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
310b0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
310c0 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29  _OK && pOp->p1 )
310d0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
310e0 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b  nArg>1 && apArg[
310f0 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d  0] && (apArg[0]-
31100 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29  >flags&MEM_Null)
31110 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61   );.      db->la
31120 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
31130 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  wid = rowid;.   
31140 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26 30   }.    if( (rc&0
31150 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e  xff)==SQLITE_CON
31160 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e  STRAINT && pOp->
31170 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74  p4.pVtab->bConst
31180 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69  raint ){.      i
31190 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49  f( pOp->p5==OE_I
311a0 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20  gnore ){.       
311b0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
311c0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
311d0 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63        p->errorAc
311e0 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35  tion = ((pOp->p5
311f0 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20  ==OE_Replace) ? 
31200 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e  OE_Abort : pOp->
31210 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  p5);.      }.   
31220 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d   }else{.      p-
31230 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20  >nChange++;.    
31240 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
31250 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
31260 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
31270 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
31280 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
31290 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
312a0 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20  code: Pagecount 
312b0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
312c0 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
312d0 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  ent number of pa
312e0 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20  ges in database 
312f0 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  P1 to memory cel
31300 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  l P2..*/.case OP
31310 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20  _Pagecount: {   
31320 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
31330 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
31340 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c   pOut->u.i = sql
31350 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67  ite3BtreeLastPag
31360 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  e(db->aDb[pOp->p
31370 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b  1].pBt);.  break
31380 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  ;.}.#endif...#if
31390 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
313a0 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
313b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67  /* Opcode: MaxPg
313c0 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  cnt P1 P2 P3 * *
313d0 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65  .**.** Try to se
313e0 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  t the maximum pa
313f0 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74  ge count for dat
31400 61 62 61 73 65 20 50 31 20 74 6f 20 74 68 65 20  abase P1 to the 
31410 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20  value in P3..** 
31420 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d  Do not let the m
31430 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
31440 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65  t fall below the
31450 20 63 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f   current page co
31460 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f  unt and.** do no
31470 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78  t change the max
31480 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
31490 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a  value if P3==0..
314a0 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
314b0 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
314c0 6e 74 20 61 66 74 65 72 20 74 68 65 20 63 68 61  nt after the cha
314d0 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  nge in register 
314e0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  P2..*/.case OP_M
314f0 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20  axPgcnt: {      
31500 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
31510 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e  erelease */.  un
31520 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61  signed int newMa
31530 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  x;.  Btree *pBt;
31540 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ..  pBt = db->aD
31550 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
31560 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20    newMax = 0;.  
31570 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
31580 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69     newMax = sqli
31590 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
315a0 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e  (pBt);.    if( n
315b0 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65  ewMax < (unsigne
315c0 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d  d)pOp->p3 ) newM
315d0 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70  ax = (unsigned)p
315e0 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f  Op->p3;.  }.  pO
315f0 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65  ut->u.i = sqlite
31600 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75  3BtreeMaxPageCou
31610 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b  nt(pBt, newMax);
31620 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
31630 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  if...#ifndef SQL
31640 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f  ITE_OMIT_TRACE./
31650 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 63 65 20  * Opcode: Trace 
31660 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
31670 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65   If tracing is e
31680 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73  nabled (by the s
31690 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20  qlite3_trace()) 
316a0 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a  interface, then.
316b0 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72  ** the UTF-8 str
316c0 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ing contained in
316d0 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f   P4 is emitted o
316e0 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c  n the trace call
316f0 62 61 63 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  back..*/.case OP
31700 5f 54 72 61 63 65 3a 20 7b 0a 20 20 63 68 61 72  _Trace: {.  char
31710 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68 61 72   *zTrace;.  char
31720 20 2a 7a 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e   *z;..  if( db->
31730 78 54 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d  xTrace.   && !p-
31740 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26  >doingRerun.   &
31750 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  & (zTrace = (pOp
31760 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
31770 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d  .z : p->zSql))!=
31780 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73  0.  ){.    z = s
31790 71 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64  qlite3VdbeExpand
317a0 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a  Sql(p, zTrace);.
317b0 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64      db->xTrace(d
317c0 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29  b->pTraceArg, z)
317d0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
317e0 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a  ree(db, z);.  }.
317f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
31800 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20  E_FCNTL_TRACE.  
31810 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
31820 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
31830 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66  : p->zSql);.  if
31840 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20  ( zTrace ){.    
31850 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69  int i;.    for(i
31860 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
31870 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  ++){.      if( (
31880 28 31 3c 3c 69 29 20 26 20 70 2d 3e 62 74 72 65  (1<<i) & p->btre
31890 65 4d 61 73 6b 29 3d 3d 30 20 29 20 63 6f 6e 74  eMask)==0 ) cont
318a0 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  inue;.      sqli
318b0 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
318c0 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  (db, db->aDb[i].
318d0 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43  zName, SQLITE_FC
318e0 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61 63  NTL_TRACE, zTrac
318f0 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  e);.    }.  }.#e
31900 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55  ndif /* SQLITE_U
31910 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a  SE_FCNTL_TRACE *
31920 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
31930 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d  DEBUG.  if( (db-
31940 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
31950 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20  SqlTrace)!=0.   
31960 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f  && (zTrace = (pO
31970 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
31980 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21  4.z : p->zSql))!
31990 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69  =0.  ){.    sqli
319a0 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22  te3DebugPrintf("
319b0 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22  SQL-trace: %s\n"
319c0 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23  , zTrace);.  }.#
319d0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
319e0 44 45 42 55 47 20 2a 2f 0a 20 20 62 72 65 61 6b  DEBUG */.  break
319f0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ;.}.#endif.../* 
31a00 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a  Opcode: Noop * *
31a10 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20   * * *.**.** Do 
31a20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69  nothing.  This i
31a30 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66  nstruction is of
31a40 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20  ten useful as a 
31a50 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74  jump.** destinat
31a60 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68  ion..*/./*.** Th
31a70 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20  e magic Explain 
31a80 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20  opcode are only 
31a90 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78  inserted when ex
31aa0 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a  plain==2 (which.
31ab0 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65  ** is to say whe
31ac0 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55  n the EXPLAIN QU
31ad0 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20  ERY PLAN syntax 
31ae0 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69  is used.).** Thi
31af0 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73  s opcode records
31b00 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
31b10 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e  m the optimizer.
31b20 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74    It is the.** t
31b30 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d  he same as a no-
31b40 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  op.  This opcode
31b50 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69  snever appears i
31b60 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67  n a real VM prog
31b70 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a  ram..*/.default:
31b80 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54   {          /* T
31b90 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50  his is really OP
31ba0 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70  _Noop and OP_Exp
31bb0 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  lain */.  assert
31bc0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
31bd0 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f  P_Noop || pOp->o
31be0 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
31bf0 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n );.  break;.}.
31c00 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
31c10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31c20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31c30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31c40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
31c50 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20  ** The cases of 
31c60 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
31c70 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20  ment above this 
31c80 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20  line should all 
31c90 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62  be indented.** b
31ca0 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
31cb0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36   the left-most 6
31cc0 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65   spaces have bee
31cd0 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70  n removed to imp
31ce0 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64  rove the.** read
31cf0 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74  ability.  From t
31d00 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77  his point on dow
31d10 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e  n, the normal in
31d20 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20  dentation rules 
31d30 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e  are.** restored.
31d40 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
31d50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31d60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31d70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31d80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
31d90 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44      }..#ifdef VD
31da0 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b  BE_PROFILE.    {
31db0 0a 20 20 20 20 20 20 75 36 34 20 65 6c 61 70 73  .      u64 elaps
31dc0 65 64 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  ed = sqlite3Hwti
31dd0 6d 65 28 29 20 2d 20 73 74 61 72 74 3b 0a 20 20  me() - start;.  
31de0 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c 65 73 20      pOp->cycles 
31df0 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20 20 20 20  += elapsed;.    
31e00 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 23 69    pOp->cnt++;.#i
31e10 66 20 30 0a 20 20 20 20 20 20 20 20 66 70 72 69  f 0.        fpri
31e20 6e 74 66 28 73 74 64 6f 75 74 2c 20 22 25 31 30  ntf(stdout, "%10
31e30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65 64 29 3b  llu ", elapsed);
31e40 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
31e50 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
31e60 75 74 2c 20 6f 72 69 67 50 63 2c 20 26 61 4f 70  ut, origPc, &aOp
31e70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65 6e 64 69  [origPc]);.#endi
31e80 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  f.    }.#endif..
31e90 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
31ea0 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e  wing code adds n
31eb0 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63  othing to the ac
31ec0 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69  tual functionali
31ed0 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ty.    ** of the
31ee0 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73   program.  It is
31ef0 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74   only here for t
31f00 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67  esting and debug
31f10 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20  ging..    ** On 
31f20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20  the other hand, 
31f30 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55  it does burn CPU
31f40 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69   cycles every ti
31f50 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a  me through.    *
31f60 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20  * the evaluator 
31f70 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e  loop.  So we can
31f80 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68   leave it out wh
31f90 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66  en NDEBUG is def
31fa0 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
31fb0 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20  ndef NDEBUG.    
31fc0 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26  assert( pc>=-1 &
31fd0 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a  & pc<p->nOp );..
31fe0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
31ff0 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e 74  BUG.    if( p->t
32000 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66  race ){.      if
32010 28 20 72 63 21 3d 30 20 29 20 66 70 72 69 6e 74  ( rc!=0 ) fprint
32020 66 28 70 2d 3e 74 72 61 63 65 2c 22 72 63 3d 25  f(p->trace,"rc=%
32030 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20  d\n",rc);.      
32040 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  if( pOp->opflags
32050 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50   & (OPFLG_OUT2_P
32060 52 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f  RERELEASE|OPFLG_
32070 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20  OUT2) ){.       
32080 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70   registerTrace(p
32090 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d 3e 70 32  ->trace, pOp->p2
320a0 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
320b0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
320c0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
320d0 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29  s & OPFLG_OUT3 )
320e0 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74  {.        regist
320f0 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61 63 65  erTrace(p->trace
32100 2c 20 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d  , pOp->p3, &aMem
32110 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
32120 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
32130 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55    /* SQLITE_DEBU
32140 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20  G */.#endif  /* 
32150 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f  NDEBUG */.  }  /
32160 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * The end of the
32170 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68   for(;;) loop th
32180 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20  e loops through 
32190 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a  opcodes */..  /*
321a0 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69   If we reach thi
321b0 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e  s point, it mean
321c0 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e  s that execution
321d0 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74   is finished wit
321e0 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20  h.  ** an error 
321f0 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20  of some kind..  
32200 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  */.vdbe_error_ha
32210 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63  lt:.  assert( rc
32220 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63   );.  p->rc = rc
32230 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71  ;.  testcase( sq
32240 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
32250 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73  g.xLog!=0 );.  s
32260 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22  qlite3_log(rc, "
32270 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73  statement aborts
32280 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22   at %d: [%s] %s"
32290 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
322a0 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71        pc, p->zSq
322b0 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  l, p->zErrMsg);.
322c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c    sqlite3VdbeHal
322d0 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  t(p);.  if( rc==
322e0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
322f0 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  EM ) db->mallocF
32300 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  ailed = 1;.  rc 
32310 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
32320 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d    if( resetSchem
32330 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20  aOnFault>0 ){.  
32340 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
32350 65 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65  eSchema(db, rese
32360 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31  tSchemaOnFault-1
32370 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69  );.  }..  /* Thi
32380 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
32390 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72  y out of this pr
323a0 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76  ocedure.  We hav
323b0 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73  e to.  ** releas
323c0 65 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e  e the mutexes on
323d0 20 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72   btrees that wer
323e0 65 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68  e acquired at th
323f0 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76  e.  ** top. */.v
32400 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62  dbe_return:.  db
32410 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
32420 73 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63  stRowid;.  testc
32430 61 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29  ase( nVmStep>0 )
32440 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  ;.  p->aCounter[
32450 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
32460 53 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69  S_VM_STEP] += (i
32470 6e 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71  nt)nVmStep;.  sq
32480 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65 28 70  lite3VdbeLeave(p
32490 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
324a0 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
324b0 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f  re if a string o
324c0 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68  r blob larger th
324d0 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  an SQLITE_MAX_LE
324e0 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63  NGTH.  ** is enc
324f0 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74  ountered..  */.t
32500 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65  oo_big:.  sqlite
32510 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
32520 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72  ErrMsg, db, "str
32530 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20  ing or blob too 
32540 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  big");.  rc = SQ
32550 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67  LITE_TOOBIG;.  g
32560 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
32570 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
32580 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c  to here if a mal
32590 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a  loc() fails..  *
325a0 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e  /.no_mem:.  db->
325b0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
325c0 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  ;.  sqlite3SetSt
325d0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
325e0 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65  , db, "out of me
325f0 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53  mory");.  rc = S
32600 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67  QLITE_NOMEM;.  g
32610 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
32620 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
32630 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20  to here for any 
32640 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61  other kind of fa
32650 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20  tal error.  The 
32660 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20  "rc" variable.  
32670 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74  ** should hold t
32680 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e  he error number.
32690 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
326a0 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65  to_error:.  asse
326b0 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d  rt( p->zErrMsg==
326c0 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d  0 );.  if( db->m
326d0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63  allocFailed ) rc
326e0 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
326f0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
32700 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b  E_IOERR_NOMEM ){
32710 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
32720 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
32730 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
32740 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
32750 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65  .  }.  goto vdbe
32760 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
32770 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
32780 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69  if the sqlite3_i
32790 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73  nterrupt() API s
327a0 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70  ets the interrup
327b0 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a  t.  ** flag..  *
327c0 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  /.abort_due_to_i
327d0 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65  nterrupt:.  asse
327e0 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  rt( db->u1.isInt
327f0 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63  errupted );.  rc
32800 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
32810 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  UPT;.  p->rc = r
32820 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  c;.  sqlite3SetS
32830 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
32840 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
32850 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
32860 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
32870 6f 72 5f 68 61 6c 74 3b 0a 7d 0a                 or_halt;.}.