/ Hex Artifact Content
Login

Artifact a7f8f72ae817f7f81a25be6e18d9a37e09b0649f:


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 50 72 65 70  lite3VdbeMemPrep
0940: 61 72 65 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29  areToChange(P,M)
0950: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
0960: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
0970: 28 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (P,M).#endif../*
0980: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
0990: 67 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  g global variabl
09a0: 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
09b0: 20 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75   every time a cu
09c0: 72 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65  rsor.** moves, e
09d0: 69 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f  ither by the OP_
09e0: 53 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c  SeekXX, OP_Next,
09f0: 20 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f   or OP_Prev opco
0a00: 64 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a  des.  The test.*
0a10: 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
0a20: 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   this informatio
0a30: 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  n to make sure t
0a40: 68 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a  hat indices are.
0a50: 2a 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65  ** working corre
0a60: 63 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69  ctly.  This vari
0a70: 61 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63  able has no func
0a80: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0a90: 74 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66  to.** help verif
0aa0: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ab0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c  eration of the l
0ac0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ad0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ae0: 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
0af0: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0b00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74  if../*.** When t
0b10: 68 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  his global varia
0b20: 62 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c  ble is positive,
0b30: 20 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65   it gets decreme
0b40: 6e 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65  nted once before
0b50: 0a 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63  .** each instruc
0b60: 74 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45  tion in the VDBE
0b70: 2e 20 20 57 68 65 6e 20 72 65 61 63 68 65 73 20  .  When reaches 
0b80: 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69 73 49  zero, the u1.isI
0b90: 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20 66 69  nterrupted.** fi
0ba0: 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74  eld of the sqlit
0bb0: 65 33 20 73 74 72 75 63 74 75 72 65 20 69 73 20  e3 structure is 
0bc0: 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  set in order to 
0bd0: 73 69 6d 75 6c 61 74 65 20 61 6e 64 20 69 6e 74  simulate and 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 0a 2a 2a 20 43 61 6c 6c  em;}../*.** Call
1620: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
1630: 78 70 61 6e 64 42 6c 6f 62 28 29 20 6f 6e 20 74  xpandBlob() on t
1640: 68 65 20 73 75 70 70 6c 69 65 64 20 76 61 6c 75  he supplied valu
1650: 65 20 28 74 79 70 65 20 4d 65 6d 2a 29 0a 2a 2a  e (type Mem*).**
1660: 20 50 20 69 66 20 72 65 71 75 69 72 65 64 2e 0a   P if required..
1670: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 61 6e  */.#define Expan
1680: 64 42 6c 6f 62 28 50 29 20 28 28 28 50 29 2d 3e  dBlob(P) (((P)->
1690: 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f 29 3f  flags&MEM_Zero)?
16a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
16b0: 70 61 6e 64 42 6c 6f 62 28 50 29 3a 30 29 0a 0a  pandBlob(P):0)..
16c0: 2f 2a 0a 2a 2a 20 41 72 67 75 6d 65 6e 74 20 70  /*.** Argument p
16d0: 4d 65 6d 20 70 6f 69 6e 74 73 20 61 74 20 61 20  Mem points at a 
16e0: 72 65 67 69 73 74 65 72 20 74 68 61 74 20 77 69  register that wi
16f0: 6c 6c 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  ll be passed to 
1700: 61 0a 2a 2a 20 75 73 65 72 2d 64 65 66 69 6e 65  a.** user-define
1710: 64 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 72 65  d function or re
1720: 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
1730: 65 72 20 61 73 20 74 68 65 20 72 65 73 75 6c 74  er as the result
1740: 20 6f 66 20 61 20 71 75 65 72 79 2e 0a 2a 2a 20   of a query..** 
1750: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
1760: 73 20 74 68 65 20 70 4d 65 6d 2d 3e 74 79 70 65  s the pMem->type
1770: 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 62   variable used b
1780: 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 61  y the sqlite3_va
1790: 6c 75 65 5f 2a 28 29 20 0a 2a 2a 20 72 6f 75 74  lue_*() .** rout
17a0: 69 6e 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  ines..*/.void sq
17b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
17c0: 65 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29  eType(Mem *pMem)
17d0: 7b 0a 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20  {.  int flags = 
17e0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pMem->flags;.  i
17f0: 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  f( flags & MEM_N
1800: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  ull ){.    pMem-
1810: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 4e  >type = SQLITE_N
1820: 55 4c 4c 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  ULL;.  }.  else 
1830: 69 66 28 20 66 6c 61 67 73 20 26 20 4d 45 4d 5f  if( flags & MEM_
1840: 49 6e 74 20 29 7b 0a 20 20 20 20 70 4d 65 6d 2d  Int ){.    pMem-
1850: 3e 74 79 70 65 20 3d 20 53 51 4c 49 54 45 5f 49  >type = SQLITE_I
1860: 4e 54 45 47 45 52 3b 0a 20 20 7d 0a 20 20 65 6c  NTEGER;.  }.  el
1870: 73 65 20 69 66 28 20 66 6c 61 67 73 20 26 20 4d  se if( flags & M
1880: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
1890: 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c 49  Mem->type = SQLI
18a0: 54 45 5f 46 4c 4f 41 54 3b 0a 20 20 7d 0a 20 20  TE_FLOAT;.  }.  
18b0: 65 6c 73 65 20 69 66 28 20 66 6c 61 67 73 20 26  else if( flags &
18c0: 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20   MEM_Str ){.    
18d0: 70 4d 65 6d 2d 3e 74 79 70 65 20 3d 20 53 51 4c  pMem->type = SQL
18e0: 49 54 45 5f 54 45 58 54 3b 0a 20 20 7d 65 6c 73  ITE_TEXT;.  }els
18f0: 65 7b 0a 20 20 20 20 70 4d 65 6d 2d 3e 74 79 70  e{.    pMem->typ
1900: 65 20 3d 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3b  e = SQLITE_BLOB;
1910: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  .  }.}../*.** Al
1920: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1930: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1940: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1950: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1960: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1970: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1980: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1990: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
19a0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
19b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
19c0: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
19d0: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
19e0: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
19f0: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1a00: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1a10: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1a30: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1a40: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1a50: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1a60: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1a70: 2f 2a 20 57 68 65 6e 20 64 61 74 61 62 61 73 65  /* When database
1a80: 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f   the cursor belo
1a90: 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f  ngs to, or -1 */
1aa0: 0a 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75  .  int isBtreeCu
1ab0: 72 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65  rsor     /* True
1ac0: 20 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61   for B-Tree.  Fa
1ad0: 6c 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74  lse for pseudo-t
1ae0: 61 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a  able or vtab */.
1af0: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b00: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b10: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b20: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b30: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b40: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b50: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b60: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b70: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1b80: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1b90: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1ba0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bb0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1bc0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bd0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1be0: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1bf0: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c00: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c10: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c20: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c30: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c40: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c50: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c60: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c70: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1c80: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1c90: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1ca0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cb0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1cc0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cd0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1ce0: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1cf0: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d00: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d10: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d20: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d30: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d40: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d50: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d60: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d70: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1d80: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1d90: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1da0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1db0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1dc0: 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66  * Memory cells f
1dd0: 6f 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  or cursors are a
1de0: 6c 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20  llocated at the 
1df0: 74 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65  top of the addre
1e00: 73 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d  ss.  ** space. M
1e10: 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e  emory cell (p->n
1e20: 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  Mem) corresponds
1e30: 20 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70   to cursor 0. Sp
1e40: 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72  ace for.  ** cur
1e50: 73 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64  sor 1 is managed
1e60: 20 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   by memory cell 
1e70: 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63  (p->nMem-1), etc
1e80: 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ..  */.  Mem *pM
1e90: 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d  em = &p->aMem[p-
1ea0: 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20  >nMem-iCur];..  
1eb0: 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62  int nByte;.  Vdb
1ec0: 65 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30  eCursor *pCx = 0
1ed0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20  ;.  nByte = .   
1ee0: 20 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66     ROUND8(sizeof
1ef0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20  (VdbeCursor)) + 
1f00: 0a 20 20 20 20 20 20 28 69 73 42 74 72 65 65 43  .      (isBtreeC
1f10: 75 72 73 6f 72 3f 73 71 6c 69 74 65 33 42 74 72  ursor?sqlite3Btr
1f20: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
1f30: 29 20 2b 20 0a 20 20 20 20 20 20 32 2a 6e 46 69  ) + .      2*nFi
1f40: 65 6c 64 2a 73 69 7a 65 6f 66 28 75 33 32 29 3b  eld*sizeof(u32);
1f50: 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75 72  ..  assert( iCur
1f60: 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f70: 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43   if( p->apCsr[iC
1f80: 75 72 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ur] ){.    sqlit
1f90: 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1fa0: 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75  (p, p->apCsr[iCu
1fb0: 72 5d 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73  r]);.    p->apCs
1fc0: 72 5b 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d  r[iCur] = 0;.  }
1fd0: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
1fe0: 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ==sqlite3VdbeMem
1ff0: 47 72 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65  Grow(pMem, nByte
2000: 2c 20 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61  , 0) ){.    p->a
2010: 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78  pCsr[iCur] = pCx
2020: 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29   = (VdbeCursor*)
2030: 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d  pMem->z;.    mem
2040: 73 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65  set(pCx, 0, size
2050: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b  of(VdbeCursor));
2060: 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20  .    pCx->iDb = 
2070: 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46  iDb;.    pCx->nF
2080: 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20  ield = nField;. 
2090: 20 20 20 69 66 28 20 6e 46 69 65 6c 64 20 29 7b     if( nField ){
20a0: 0a 20 20 20 20 20 20 70 43 78 2d 3e 61 54 79 70  .      pCx->aTyp
20b0: 65 20 3d 20 28 75 33 32 20 2a 29 26 70 4d 65 6d  e = (u32 *)&pMem
20c0: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
20d0: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 5d 3b  f(VdbeCursor))];
20e0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
20f0: 73 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a  sBtreeCursor ){.
2100: 20 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73        pCx->pCurs
2110: 6f 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29  or = (BtCursor*)
2120: 0a 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d  .          &pMem
2130: 2d 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  ->z[ROUND8(sizeo
2140: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32  f(VdbeCursor))+2
2150: 2a 6e 46 69 65 6c 64 2a 73 69 7a 65 6f 66 28 75  *nField*sizeof(u
2160: 33 32 29 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  32)];.      sqli
2170: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65  te3BtreeCursorZe
2180: 72 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  ro(pCx->pCursor)
2190: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
21a0: 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a  turn pCx;.}../*.
21b0: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
21c0: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
21d0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
21e0: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
21f0: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
2200: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
2210: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
2220: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
2230: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
2240: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
2250: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
2260: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
2270: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
2280: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2290: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
22a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
22b0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
22c0: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a  ity(Mem *pRec){.
22d0: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
22e0: 67 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d  gs & (MEM_Real|M
22f0: 45 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20  EM_Int))==0 ){. 
2300: 20 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65     double rValue
2310: 3b 0a 20 20 20 20 69 36 34 20 69 56 61 6c 75 65  ;.    i64 iValue
2320: 3b 0a 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70  ;.    u8 enc = p
2330: 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66  Rec->enc;.    if
2340: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d  ( (pRec->flags&M
2350: 45 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74  EM_Str)==0 ) ret
2360: 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  urn;.    if( sql
2370: 69 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a  ite3AtoF(pRec->z
2380: 2c 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &rValue, pRec-
2390: 3e 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65  >n, enc)==0 ) re
23a0: 74 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d  turn;.    if( 0=
23b0: 3d 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70  =sqlite3Atoi64(p
23c0: 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c  Rec->z, &iValue,
23d0: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29   pRec->n, enc) )
23e0: 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e  {.      pRec->u.
23f0: 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20  i = iValue;.    
2400: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2410: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65   MEM_Int;.    }e
2420: 6c 73 65 7b 0a 20 20 20 20 20 20 70 52 65 63 2d  lse{.      pRec-
2430: 3e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  >r = rValue;.   
2440: 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c     pRec->flags |
2450: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20  = MEM_Real;.    
2460: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  }.  }.}../*.** P
2470: 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74  rocessing is det
2480: 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66  ermine by the af
2490: 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72  finity parameter
24a0: 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  :.**.** SQLITE_A
24b0: 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53  FF_INTEGER:.** S
24c0: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a  QLITE_AFF_REAL:.
24d0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ** SQLITE_AFF_NU
24e0: 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79  MERIC:.**    Try
24f0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63   to convert pRec
2500: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72   to an integer r
2510: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72  epresentation or
2520: 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69   a .**    floati
2530: 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65  ng-point represe
2540: 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e  ntation if an in
2550: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2560: 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f  tion.**    is no
2570: 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74  t possible.  Not
2580: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67  e that the integ
2590: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
25a0: 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79  n is.**    alway
25b0: 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65  s preferred, eve
25c0: 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74  n if the affinit
25d0: 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75  y is REAL, becau
25e0: 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65  se.**    an inte
25f0: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2600: 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65  on is more space
2610: 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69   efficient on di
2620: 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  sk..**.** SQLITE
2630: 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20  _AFF_TEXT:.**   
2640: 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f   Convert pRec to
2650: 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e   a text represen
2660: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51  tation..**.** SQ
2670: 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a  LITE_AFF_NONE:.*
2680: 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65  *    No-op.  pRe
2690: 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  c is unchanged..
26a0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
26b0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20  pplyAffinity(.  
26c0: 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20  Mem *pRec,      
26d0: 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65      /* The value
26e0: 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69   to apply affini
26f0: 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20  ty to */.  char 
2700: 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f  affinity,      /
2710: 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
2720: 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
2730: 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20    u8 enc        
2740: 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69        /* Use thi
2750: 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  s text encoding 
2760: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69  */.){.  if( affi
2770: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
2780: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20  _TEXT ){.    /* 
2790: 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65  Only attempt the
27a0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54   conversion to T
27b0: 45 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20  EXT if there is 
27c0: 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65  an integer or re
27d0: 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  al.    ** repres
27e0: 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61  entation (blob a
27f0: 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67  nd NULL do not g
2800: 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75  et converted) bu
2810: 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20  t no string.    
2820: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
2830: 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  n..    */.    if
2840: 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67  ( 0==(pRec->flag
2850: 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70  s&MEM_Str) && (p
2860: 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  Rec->flags&(MEM_
2870: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29  Real|MEM_Int)) )
2880: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
2890: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
28a0: 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20  pRec, enc);.    
28b0: 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67  }.    pRec->flag
28c0: 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c  s &= ~(MEM_Real|
28d0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
28e0: 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d  e if( affinity!=
28f0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20  SQLITE_AFF_NONE 
2900: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  ){.    assert( a
2910: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2920: 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61  AFF_INTEGER || a
2930: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
2940: 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20  AFF_REAL.       
2950: 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74        || affinit
2960: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y==SQLITE_AFF_NU
2970: 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70  MERIC );.    app
2980: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
2990: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28  y(pRec);.    if(
29a0: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
29b0: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20  EM_Real ){.     
29c0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
29d0: 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63  gerAffinity(pRec
29e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  );.    }.  }.}..
29f0: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
2a00: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
2a10: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
2a20: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
2a30: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
2a40: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
2a50: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
2a60: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
2a70: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
2a80: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
2a90: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
2aa0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
2ab0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
2ac0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
2ad0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
2ae0: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
2af0: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
2b00: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
2b10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
2b20: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
2b30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
2b40: 61 6c 29 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  al){.  Mem *pMem
2b50: 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20   = (Mem*)pVal;. 
2b60: 20 69 66 28 20 70 4d 65 6d 2d 3e 74 79 70 65 3d   if( pMem->type=
2b70: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2b80: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2b90: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a  Affinity(pMem);.
2ba0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2bb0: 65 6d 53 74 6f 72 65 54 79 70 65 28 70 4d 65 6d  emStoreType(pMem
2bc0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2bd0: 70 4d 65 6d 2d 3e 74 79 70 65 3b 0a 7d 0a 0a 2f  pMem->type;.}../
2be0: 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76 65  *.** Exported ve
2bf0: 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66  rsion of applyAf
2c00: 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20 6f  finity(). This o
2c10: 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69  ne works on sqli
2c20: 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20  te3_value*, .** 
2c30: 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  not the internal
2c40: 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76   Mem* type..*/.v
2c50: 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2c60: 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  ApplyAffinity(. 
2c70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2c80: 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66 69  pVal, .  u8 affi
2c90: 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a  nity, .  u8 enc.
2ca0: 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69  ){.  applyAffini
2cb0: 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20  ty((Mem *)pVal, 
2cc0: 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a  affinity, enc);.
2cd0: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
2ce0: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69  _DEBUG./*.** Wri
2cf0: 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67  te a nice string
2d00: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2d10: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  of the contents 
2d20: 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20  of cell pMem.** 
2d30: 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66  into buffer zBuf
2d40: 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a  , length nBuf..*
2d50: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
2d60: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
2d70: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72  (Mem *pMem, char
2d80: 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20   *zBuf){.  char 
2d90: 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20  *zCsr = zBuf;.  
2da0: 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c  int f = pMem->fl
2db0: 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  ags;..  static c
2dc0: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
2dd0: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22   encnames[] = {"
2de0: 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31  (X)", "(8)", "(1
2df0: 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d  6LE)", "(16BE)"}
2e00: 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42  ;..  if( f&MEM_B
2e10: 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  lob ){.    int i
2e20: 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20  ;.    char c;.  
2e30: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
2e40: 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  n ){.      c = '
2e50: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
2e60: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2e70: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
2e80: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
2e90: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
2ea0: 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  c ){.      c = '
2eb0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
2ec0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
2ed0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
2ee0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
2ef0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
2f00: 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a  .      c = 'e';.
2f10: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
2f20: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
2f30: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
2f40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2f50: 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a  c = 's';.    }..
2f60: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
2f70: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
2f80: 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43  "%c", c);.    zC
2f90: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
2fa0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
2fb0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
2fc0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64  f(100, zCsr, "%d
2fd0: 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  [", pMem->n);.  
2fe0: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
2ff0: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3000: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3010: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3020: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
3030: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3040: 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c  0, zCsr, "%02X",
3050: 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69   ((int)pMem->z[i
3060: 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20  ] & 0xFF));.    
3070: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
3080: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3090: 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69  .    }.    for(i
30a0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
30b0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
30c0: 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d     char z = pMem
30d0: 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[i];.      if
30e0: 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20  ( z<32 || z>126 
30f0: 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b  ) *zCsr++ = '.';
3100: 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73  .      else *zCs
3110: 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a  r++ = z;.    }..
3120: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3130: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
3140: 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b  "]%s", encnames[
3150: 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20  pMem->enc]);.   
3160: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
3170: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
3180: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
3190: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
31a0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
31b0: 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c  00, zCsr,"+%dz",
31c0: 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a  pMem->u.nZero);.
31d0: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
31e0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
31f0: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a  sr);.    }.    *
3200: 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d  zCsr = '\0';.  }
3210: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3220: 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20  _Str ){.    int 
3230: 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30  j, k;.    zBuf[0
3240: 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28  ] = ' ';.    if(
3250: 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a   f & MEM_Dyn ){.
3260: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3270: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
3280: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3290: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
32a0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
32b0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
32c0: 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  ic ){.      zBuf
32d0: 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20  [1] = 't';.     
32e0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
32f0: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
3300: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3310: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45  se if( f & MEM_E
3320: 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42  phem ){.      zB
3330: 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20  uf[1] = 'e';.   
3340: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3350: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3360: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
3370: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75  }else{.      zBu
3380: 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20  f[1] = 's';.    
3390: 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20  }.    k = 2;.   
33a0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
33b0: 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c  f(100, &zBuf[k],
33c0: 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b   "%d", pMem->n);
33d0: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
33e0: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
33f0: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3400: 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f  +] = '[';.    fo
3410: 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a  r(j=0; j<15 && j
3420: 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a  <pMem->n; j++){.
3430: 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65        u8 c = pMe
3440: 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69  m->z[j];.      i
3450: 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c  f( c>=0x20 && c<
3460: 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20  0x7f ){.        
3470: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20  zBuf[k++] = c;. 
3480: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
3490: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
34a0: 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  '.';.      }.   
34b0: 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d   }.    zBuf[k++]
34c0: 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69   = ']';.    sqli
34d0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
34e0: 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61  ,&zBuf[k], encna
34f0: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3500: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
3510: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
3520: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3530: 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  +] = 0;.  }.}.#e
3540: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
3550: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
3560: 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20  Print the value 
3570: 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f  of a register fo
3580: 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73  r tracing purpos
3590: 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es:.*/.static vo
35a0: 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  id memTracePrint
35b0: 28 46 49 4c 45 20 2a 6f 75 74 2c 20 4d 65 6d 20  (FILE *out, Mem 
35c0: 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c  *p){.  if( p->fl
35d0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
35e0: 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  {.    fprintf(ou
35f0: 74 2c 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d  t, " NULL");.  }
3600: 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61  else if( (p->fla
3610: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
3620: 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e  M_Str))==(MEM_In
3630: 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20  t|MEM_Str) ){.  
3640: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3650: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3660: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3670: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3680: 6e 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  nt ){.    fprint
3690: 66 28 6f 75 74 2c 20 22 20 69 3a 25 6c 6c 64 22  f(out, " i:%lld"
36a0: 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64  , p->u.i);.#ifnd
36b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
36c0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
36d0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
36e0: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b  gs & MEM_Real ){
36f0: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74  .    fprintf(out
3700: 2c 20 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29  , " r:%g", p->r)
3710: 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  ;.#endif.  }else
3720: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3730: 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20  MEM_RowSet ){.  
3740: 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c 20 22    fprintf(out, "
3750: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3760: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3770: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3780: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3790: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
37a0: 3b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 6f 75  ;.    fprintf(ou
37b0: 74 2c 20 22 20 22 29 3b 0a 20 20 20 20 66 70 72  t, " ");.    fpr
37c0: 69 6e 74 66 28 6f 75 74 2c 20 22 25 73 22 2c 20  intf(out, "%s", 
37d0: 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61  zBuf);.  }.}.sta
37e0: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
37f0: 72 54 72 61 63 65 28 46 49 4c 45 20 2a 6f 75 74  rTrace(FILE *out
3800: 2c 20 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20  , int iReg, Mem 
3810: 2a 70 29 7b 0a 20 20 66 70 72 69 6e 74 66 28 6f  *p){.  fprintf(o
3820: 75 74 2c 20 22 52 45 47 5b 25 64 5d 20 3d 20 22  ut, "REG[%d] = "
3830: 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72  , iReg);.  memTr
3840: 61 63 65 50 72 69 6e 74 28 6f 75 74 2c 20 70 29  acePrint(out, p)
3850: 3b 0a 20 20 66 70 72 69 6e 74 66 28 6f 75 74 2c  ;.  fprintf(out,
3860: 20 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66   "\n");.}.#endif
3870: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3880: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
3890: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
38a0: 2c 4d 29 20 69 66 28 70 2d 3e 74 72 61 63 65 29  ,M) if(p->trace)
38b0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 2d  registerTrace(p-
38c0: 3e 74 72 61 63 65 2c 52 2c 4d 29 0a 23 65 6c 73  >trace,R,M).#els
38d0: 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  e.#  define REGI
38e0: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a  STER_TRACE(R,M).
38f0: 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66 20  #endif...#ifdef 
3900: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a  VDBE_PROFILE../*
3910: 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f   .** hwtime.h co
3920: 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73  ntains inline as
3930: 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f 72  sembler code for
3940: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a   implementing .*
3950: 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e  * high-performan
3960: 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e  ce timing routin
3970: 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  es..*/.#include 
3980: 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64  "hwtime.h"..#end
3990: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 43 48  if../*.** The CH
39a0: 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50  ECK_FOR_INTERRUP
39b0: 54 20 6d 61 63 72 6f 20 64 65 66 69 6e 65 64 20  T macro defined 
39c0: 68 65 72 65 20 6c 6f 6f 6b 73 20 74 6f 20 73 65  here looks to se
39d0: 65 20 69 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  e if the.** sqli
39e0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
39f0: 72 6f 75 74 69 6e 65 20 68 61 73 20 62 65 65 6e  routine has been
3a00: 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 69 74 20   called.  If it 
3a10: 68 61 73 20 62 65 65 6e 2c 20 74 68 65 6e 0a 2a  has been, then.*
3a20: 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 66 20  * processing of 
3a30: 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d  the VDBE program
3a40: 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 2e   is interrupted.
3a50: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  .**.** This macr
3a60: 6f 20 61 64 64 65 64 20 74 6f 20 65 76 65 72 79  o added to every
3a70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 61   instruction tha
3a80: 74 20 64 6f 65 73 20 61 20 6a 75 6d 70 20 69 6e  t does a jump in
3a90: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 69 6d 70   order to.** imp
3aa0: 6c 65 6d 65 6e 74 20 61 20 6c 6f 6f 70 2e 20 20  lement a loop.  
3ab0: 54 68 69 73 20 74 65 73 74 20 75 73 65 64 20 74  This test used t
3ac0: 6f 20 62 65 20 6f 6e 20 65 76 65 72 79 20 73 69  o be on every si
3ad0: 6e 67 6c 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  ngle instruction
3ae0: 2c 0a 2a 2a 20 62 75 74 20 74 68 61 74 20 6d 65  ,.** but that me
3af0: 61 6e 74 20 77 65 20 6d 6f 72 65 20 74 65 73 74  ant we more test
3b00: 69 6e 67 20 74 68 61 74 20 77 65 20 6e 65 65 64  ing that we need
3b10: 65 64 2e 20 20 42 79 20 6f 6e 6c 79 20 74 65 73  ed.  By only tes
3b20: 74 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6c 61 67  ting the.** flag
3b30: 20 6f 6e 20 6a 75 6d 70 20 69 6e 73 74 72 75 63   on jump instruc
3b40: 74 69 6f 6e 73 2c 20 77 65 20 67 65 74 20 61 20  tions, we get a 
3b50: 28 73 6d 61 6c 6c 29 20 73 70 65 65 64 20 69 6d  (small) speed im
3b60: 70 72 6f 76 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 64  provement..*/.#d
3b70: 65 66 69 6e 65 20 43 48 45 43 4b 5f 46 4f 52 5f  efine CHECK_FOR_
3b80: 49 4e 54 45 52 52 55 50 54 20 5c 0a 20 20 20 69  INTERRUPT \.   i
3b90: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
3ba0: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
3bb0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
3bc0: 72 72 75 70 74 3b 0a 0a 0a 23 69 66 6e 64 65 66  rrupt;...#ifndef
3bd0: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
3be0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
3bf0: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
3c00: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
3c10: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
3c20: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
3c30: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
3c40: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
3c50: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
3c60: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
3c70: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
3c80: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
3c90: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
3ca0: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
3cb0: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
3cc0: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
3cd0: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
3ce0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
3cf0: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
3d00: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
3d10: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
3d20: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
3d30: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
3d40: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
3d50: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
3d60: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
3d70: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
3d80: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
3d90: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
3da0: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
3db0: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
3dc0: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
3dd0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
3de0: 2a 20 54 72 61 6e 73 66 65 72 20 65 72 72 6f 72  * Transfer error
3df0: 20 6d 65 73 73 61 67 65 20 74 65 78 74 20 66 72   message text fr
3e00: 6f 6d 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  om an sqlite3_vt
3e10: 61 62 2e 7a 45 72 72 4d 73 67 20 28 74 65 78 74  ab.zErrMsg (text
3e20: 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 6d 65   stored.** in me
3e30: 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 20 66 72  mory obtained fr
3e40: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
3e50: 63 29 20 69 6e 74 6f 20 61 20 56 64 62 65 2e 7a  c) into a Vdbe.z
3e60: 45 72 72 4d 73 67 20 28 74 65 78 74 20 73 74 6f  ErrMsg (text sto
3e70: 72 65 64 0a 2a 2a 20 69 6e 20 6d 65 6d 6f 72 79  red.** in memory
3e80: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
3e90: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 29 2e  qlite3DbMalloc).
3ea0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3eb0: 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
3ec0: 28 56 64 62 65 20 2a 70 2c 20 73 71 6c 69 74 65  (Vdbe *p, sqlite
3ed0: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 29 7b 0a  3_vtab *pVtab){.
3ee0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
3ef0: 70 2d 3e 64 62 3b 0a 20 20 73 71 6c 69 74 65 33  p->db;.  sqlite3
3f00: 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45  DbFree(db, p->zE
3f10: 72 72 4d 73 67 29 3b 0a 20 20 70 2d 3e 7a 45 72  rrMsg);.  p->zEr
3f20: 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62  rMsg = sqlite3Db
3f30: 53 74 72 44 75 70 28 64 62 2c 20 70 56 74 61 62  StrDup(db, pVtab
3f40: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71  ->zErrMsg);.  sq
3f50: 6c 69 74 65 33 5f 66 72 65 65 28 70 56 74 61 62  lite3_free(pVtab
3f60: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 70 56  ->zErrMsg);.  pV
3f70: 74 61 62 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 30  tab->zErrMsg = 0
3f80: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  ;.}.../*.** Exec
3f90: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
3fa0: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
3fb0: 20 77 65 20 63 61 6e 20 74 68 65 6e 20 72 65 74   we can then ret
3fc0: 75 72 6e 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  urn..**.** sqlit
3fd0: 65 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28  e3VdbeMakeReady(
3fe0: 29 20 6d 75 73 74 20 62 65 20 63 61 6c 6c 65 64  ) must be called
3ff0: 20 62 65 66 6f 72 65 20 74 68 69 73 20 72 6f 75   before this rou
4000: 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
4010: 0a 2a 2a 20 63 6c 6f 73 65 20 74 68 65 20 70 72  .** close the pr
4020: 6f 67 72 61 6d 20 77 69 74 68 20 61 20 66 69 6e  ogram with a fin
4030: 61 6c 20 4f 50 5f 48 61 6c 74 20 61 6e 64 20 74  al OP_Halt and t
4040: 6f 20 73 65 74 20 75 70 20 74 68 65 20 63 61 6c  o set up the cal
4050: 6c 62 61 63 6b 73 0a 2a 2a 20 61 6e 64 20 74 68  lbacks.** and th
4060: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
4070: 70 6f 69 6e 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 57  pointer..**.** W
4080: 68 65 6e 65 76 65 72 20 61 20 72 6f 77 20 6f 72  henever a row or
4090: 20 72 65 73 75 6c 74 20 64 61 74 61 20 69 73 20   result data is 
40a0: 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 20  available, this 
40b0: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 65 69 74  routine will eit
40c0: 68 65 72 0a 2a 2a 20 69 6e 76 6f 6b 65 20 74 68  her.** invoke th
40d0: 65 20 72 65 73 75 6c 74 20 63 61 6c 6c 62 61 63  e result callbac
40e0: 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6f  k (if there is o
40f0: 6e 65 29 20 6f 72 20 72 65 74 75 72 6e 20 77 69  ne) or return wi
4100: 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 52 4f 57  th.** SQLITE_ROW
4110: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 61 74  ..**.** If an at
4120: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
4130: 20 6f 70 65 6e 20 61 20 6c 6f 63 6b 65 64 20 64   open a locked d
4140: 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
4150: 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 77 69  is routine.** wi
4160: 6c 6c 20 65 69 74 68 65 72 20 69 6e 76 6f 6b 65  ll either invoke
4170: 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   the busy callba
4180: 63 6b 20 28 69 66 20 74 68 65 72 65 20 69 73 20  ck (if there is 
4190: 6f 6e 65 29 20 6f 72 20 69 74 20 77 69 6c 6c 0a  one) or it will.
41a0: 2a 2a 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ** return SQLITE
41b0: 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  _BUSY..**.** If 
41c0: 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
41d0: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
41e0: 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 6f 20  e is written to 
41f0: 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e 65 64 0a  memory obtained.
4200: 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ** from sqlite3_
4210: 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 70 2d 3e  malloc() and p->
4220: 7a 45 72 72 4d 73 67 20 69 73 20 6d 61 64 65 20  zErrMsg is made 
4230: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 61 74  to point to that
4240: 20 6d 65 6d 6f 72 79 2e 0a 2a 2a 20 54 68 65 20   memory..** The 
4250: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 73 74  error code is st
4260: 6f 72 65 64 20 69 6e 20 70 2d 3e 72 63 20 61 6e  ored in p->rc an
4270: 64 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  d this routine r
4280: 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 52  eturns SQLITE_ER
4290: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ROR..**.** If th
42a0: 65 20 63 61 6c 6c 62 61 63 6b 20 65 76 65 72 20  e callback ever 
42b0: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
42c0: 2c 20 74 68 65 6e 20 74 68 65 20 70 72 6f 67 72  , then the progr
42d0: 61 6d 20 65 78 69 74 73 0a 2a 2a 20 69 6d 6d 65  am exits.** imme
42e0: 64 69 61 74 65 6c 79 2e 20 20 54 68 65 72 65 20  diately.  There 
42f0: 77 69 6c 6c 20 62 65 20 6e 6f 20 65 72 72 6f 72  will be no error
4300: 20 6d 65 73 73 61 67 65 20 62 75 74 20 74 68 65   message but the
4310: 20 70 2d 3e 72 63 20 66 69 65 6c 64 20 69 73 0a   p->rc field is.
4320: 2a 2a 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45  ** set to SQLITE
4330: 5f 41 42 4f 52 54 20 61 6e 64 20 74 68 69 73 20  _ABORT and this 
4340: 72 6f 75 74 69 6e 65 20 77 69 6c 6c 20 72 65 74  routine will ret
4350: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
4360: 2e 0a 2a 2a 0a 2a 2a 20 41 20 6d 65 6d 6f 72 79  ..**.** A memory
4370: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72 6f   allocation erro
4380: 72 20 63 61 75 73 65 73 20 70 2d 3e 72 63 20 74  r causes p->rc t
4390: 6f 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  o be set to SQLI
43a0: 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20 74 68 69  TE_NOMEM and thi
43b0: 73 0a 2a 2a 20 72 6f 75 74 69 6e 65 20 74 6f 20  s.** routine to 
43c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
43d0: 52 4f 52 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  ROR..**.** Other
43e0: 20 66 61 74 61 6c 20 65 72 72 6f 72 73 20 72 65   fatal errors re
43f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
4400: 52 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 74  R..**.** After t
4410: 68 69 73 20 72 6f 75 74 69 6e 65 20 68 61 73 20  his routine has 
4420: 66 69 6e 69 73 68 65 64 2c 20 73 71 6c 69 74 65  finished, sqlite
4430: 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 29 20  3VdbeFinalize() 
4440: 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 75 73 65  should be.** use
4450: 64 20 74 6f 20 63 6c 65 61 6e 20 75 70 20 74 68  d to clean up th
4460: 65 20 6d 65 73 73 20 74 68 61 74 20 77 61 73 20  e mess that was 
4470: 6c 65 66 74 20 62 65 68 69 6e 64 2e 0a 2a 2f 0a  left behind..*/.
4480: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
4490: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44b0: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
44c0: 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b 20  .){.  int pc=0; 
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d 20   /* The program 
44f0: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70 20  counter */.  Op 
4500: 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20  *aOp = p->aOp;  
4510: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
4520: 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f  of p->aOp */.  O
4530: 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20 20  p *pOp;         
4540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
4550: 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a  rent operation *
4560: 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  /.  int rc = SQL
4570: 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f  ITE_OK;        /
4580: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
4590: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  n */.  sqlite3 *
45a0: 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20  db = p->db;     
45b0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
45c0: 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53  e */.  u8 resetS
45d0: 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30  chemaOnFault = 0
45e0: 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d  ; /* Reset schem
45f0: 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  a after an error
4600: 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a   if positive */.
4610: 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20    u8 encoding = 
4620: 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20  ENC(db);     /* 
4630: 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  The database enc
4640: 6f 64 69 6e 67 20 2a 2f 0a 23 69 66 6e 64 65 66  oding */.#ifndef
4650: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4660: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
4670: 20 69 6e 74 20 63 68 65 63 6b 50 72 6f 67 72 65   int checkProgre
4680: 73 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ss;         /* T
4690: 72 75 65 20 69 66 20 70 72 6f 67 72 65 73 73 20  rue if progress 
46a0: 63 61 6c 6c 62 61 63 6b 73 20 61 72 65 20 65 6e  callbacks are en
46b0: 61 62 6c 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  abled */.  int n
46c0: 50 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b  ProgressOps = 0;
46d0: 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 73        /* Opcodes
46e0: 20 65 78 65 63 75 74 65 64 20 73 69 6e 63 65 20   executed since 
46f0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
4700: 6b 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d  k. */.#endif.  M
4710: 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d  em *aMem = p->aM
4720: 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  em;       /* Cop
4730: 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a  y of p->aMem */.
4740: 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b    Mem *pIn1 = 0;
4750: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4760: 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  1st input operan
4770: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32  d */.  Mem *pIn2
4780: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4790: 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f    /* 2nd input o
47a0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
47b0: 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20  *pIn3 = 0;      
47c0: 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e         /* 3rd in
47d0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
47e0: 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20   Mem *pOut = 0; 
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
4800: 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  utput operand */
4810: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4820: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4830: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4840: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4850: 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  tion */.  int *a
4860: 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20  Permute = 0;    
4870: 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61 74       /* Permutat
4880: 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ion of columns f
4890: 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f  or OP_Compare */
48a0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
48b0: 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74  FILE.  u64 start
48c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
48d0: 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63    /* CPU clock c
48e0: 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66  ount at start of
48f0: 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74   opcode */.  int
4900: 20 6f 72 69 67 50 63 3b 20 20 20 20 20 20 20 20   origPc;        
4910: 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f 67 72          /* Progr
4920: 61 6d 20 63 6f 75 6e 74 65 72 20 61 74 20 73 74  am counter at st
4930: 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f  art of opcode */
4940: 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49  .#endif.  /*** I
4950: 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f  NSERT STACK UNIO
4960: 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61  N HERE ***/..  a
4970: 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d  ssert( p->magic=
4980: 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
4990: 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73  );  /* sqlite3_s
49a0: 74 65 70 28 29 20 76 65 72 69 66 69 65 73 20 74  tep() verifies t
49b0: 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  his */.  sqlite3
49c0: 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20  VdbeEnter(p);.  
49d0: 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  if( p->rc==SQLIT
49e0: 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f  E_NOMEM ){.    /
49f0: 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69  * This happens i
4a00: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73  f a malloc() ins
4a10: 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71  ide a call to sq
4a20: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
4a30: 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71  t() or.    ** sq
4a40: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
4a50: 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a  t16() failed.  *
4a60: 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  /.    goto no_me
4a70: 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  m;.  }.  assert(
4a80: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
4a90: 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  K || p->rc==SQLI
4aa0: 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 70 2d 3e  TE_BUSY );.  p->
4ab0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
4ac0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70    assert( p->exp
4ad0: 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e  lain==0 );.  p->
4ae0: 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a  pResultSet = 0;.
4af0: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
4b00: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 43  r.nBusy = 0;.  C
4b10: 48 45 43 4b 5f 46 4f 52 5f 49 4e 54 45 52 52 55  HECK_FOR_INTERRU
4b20: 50 54 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  PT;.  sqlite3Vdb
4b30: 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a  eIOTraceSql(p);.
4b40: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4b50: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
4b60: 4c 42 41 43 4b 0a 20 20 63 68 65 63 6b 50 72 6f  LBACK.  checkPro
4b70: 67 72 65 73 73 20 3d 20 64 62 2d 3e 78 50 72 6f  gress = db->xPro
4b80: 67 72 65 73 73 21 3d 30 3b 0a 23 65 6e 64 69 66  gress!=0;.#endif
4b90: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4ba0: 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65  EBUG.  sqlite3Be
4bb0: 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
4bc0: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d  );.  if( p->pc==
4bd0: 30 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c  0  && (p->db->fl
4be0: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
4bf0: 65 4c 69 73 74 69 6e 67 29 21 3d 30 20 29 7b 0a  eListing)!=0 ){.
4c00: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70      int i;.    p
4c10: 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f 67  rintf("VDBE Prog
4c20: 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29  ram Listing:\n")
4c30: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4c40: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4c50: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
4c60: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
4c70: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4c80: 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26  tOp(stdout, i, &
4c90: 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20  aOp[i]);.    }. 
4ca0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
4cb0: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
4cc0: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70  endif.  for(pc=p
4cd0: 2d 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45  ->pc; rc==SQLITE
4ce0: 5f 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20  _OK; pc++){.    
4cf0: 61 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26  assert( pc>=0 &&
4d00: 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20   pc<p->nOp );.  
4d10: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
4d20: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
4d30: 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42  _mem;.#ifdef VDB
4d40: 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 6f 72  E_PROFILE.    or
4d50: 69 67 50 63 20 3d 20 70 63 3b 0a 20 20 20 20 73  igPc = pc;.    s
4d60: 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77  tart = sqlite3Hw
4d70: 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20  time();.#endif. 
4d80: 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63     pOp = &aOp[pc
4d90: 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20  ];..    /* Only 
4da0: 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66  allow tracing if
4db0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
4dc0: 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
4dd0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4de0: 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 2d 3e  EBUG.    if( p->
4df0: 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69  trace ){.      i
4e00: 66 28 20 70 63 3d 3d 30 20 29 7b 0a 20 20 20 20  f( pc==0 ){.    
4e10: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
4e20: 20 45 78 65 63 75 74 69 6f 6e 20 54 72 61 63 65   Execution Trace
4e30: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 73  :\n");.        s
4e40: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4e50: 71 6c 28 70 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ql(p);.      }. 
4e60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4e70: 50 72 69 6e 74 4f 70 28 70 2d 3e 74 72 61 63 65  PrintOp(p->trace
4e80: 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20  , pc, pOp);.    
4e90: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a  }.#endif.      .
4ea0: 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f  .    /* Check to
4eb0: 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64 20   see if we need 
4ec0: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
4ed0: 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73 20  nterrupt.  This 
4ee0: 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20  only happens.   
4ef0: 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20 61   ** if we have a
4f00: 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62 75   special test bu
4f10: 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ild..    */.#ifd
4f20: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
4f30: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
4f40: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30  nterrupt_count>0
4f50: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
4f60: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4f70: 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73  t--;.      if( s
4f80: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4f90: 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  _count==0 ){.   
4fa0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
4fb0: 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20  errupt(db);.    
4fc0: 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
4fd0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
4fe0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4ff0: 41 4c 4c 42 41 43 4b 0a 20 20 20 20 2f 2a 20 43  ALLBACK.    /* C
5000: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
5010: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
5020: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
5030: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
5040: 75 6d 62 65 72 0a 20 20 20 20 2a 2a 20 6f 66 20  umber.    ** of 
5050: 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62 65  VDBE ops have be
5060: 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69 74  en executed (eit
5070: 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20 69  her since this i
5080: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 20  nvocation of.   
5090: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
50a0: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
50b0: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
50c0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
50d0: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 20 20  as called)..    
50e0: 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65  ** If the progre
50f0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75  ss callback retu
5100: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78  rns non-zero, ex
5110: 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  it the virtual m
5120: 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 20 20  achine with.    
5130: 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65  ** a return code
5140: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20   SQLITE_ABORT.. 
5150: 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 63 68     */.    if( ch
5160: 65 63 6b 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  eckProgress ){. 
5170: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 50 72       if( db->nPr
5180: 6f 67 72 65 73 73 4f 70 73 3d 3d 6e 50 72 6f 67  ogressOps==nProg
5190: 72 65 73 73 4f 70 73 20 29 7b 0a 20 20 20 20 20  ressOps ){.     
51a0: 20 20 20 69 6e 74 20 70 72 63 3b 0a 20 20 20 20     int prc;.    
51b0: 20 20 20 20 70 72 63 20 3d 20 64 62 2d 3e 78 50      prc = db->xP
51c0: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
51d0: 67 72 65 73 73 41 72 67 29 3b 0a 20 20 20 20 20  gressArg);.     
51e0: 20 20 20 69 66 28 20 70 72 63 21 3d 30 20 29 7b     if( prc!=0 ){
51f0: 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
5200: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
5210: 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
5220: 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
5230: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
5240: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70 73      nProgressOps
5250: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
5260: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4f 70 73      nProgressOps
5270: 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ++;.    }.#endif
5280: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61 6e 79 20  ..    /* On any 
5290: 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
52a0: 22 6f 75 74 32 2d 70 72 65 72 65 6c 61 73 65 22  "out2-prerelase"
52b0: 20 74 61 67 2c 20 66 72 65 65 20 61 6e 79 0a 20   tag, free any. 
52c0: 20 20 20 2a 2a 20 65 78 74 65 72 6e 61 6c 20 61     ** external a
52d0: 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75 74 20 6f  llocations out o
52e0: 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64 20 73 65  f mem[p2] and se
52f0: 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 62 65 0a  t mem[p2] to be.
5300: 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64 65 66 69      ** an undefi
5310: 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20 4f 70  ned integer.  Op
5320: 63 6f 64 65 73 20 77 69 6c 6c 20 65 69 74 68 65  codes will eithe
5330: 72 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 69 6e  r fill in the in
5340: 74 65 67 65 72 0a 20 20 20 20 2a 2a 20 76 61 6c  teger.    ** val
5350: 75 65 20 6f 72 20 63 6f 6e 76 65 72 74 20 6d 65  ue or convert me
5360: 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69 66 66 65  m[p2] to a diffe
5370: 72 65 6e 74 20 74 79 70 65 2e 0a 20 20 20 20 2a  rent type..    *
5380: 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  /.    assert( pO
5390: 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c 69  p->opflags==sqli
53a0: 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
53b0: 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20 29  y[pOp->opcode] )
53c0: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
53d0: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
53e0: 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 20 29  UT2_PRERELEASE )
53f0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5400: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5410: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5420: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
5430: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
5440: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
5450: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
5460: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
5470: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
5480: 6d 52 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c  mReleaseExternal
5490: 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f  (pOut);.      pO
54a0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
54b0: 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  Int;.    }..    
54c0: 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69  /* Sanity checki
54d0: 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72  ng on other oper
54e0: 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ands */.#ifdef S
54f0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
5500: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
5510: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d  s & OPFLG_IN1)!=
5520: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5530: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
5540: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5550: 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d 65 6d 20 29  p->p1<=p->nMem )
5560: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5570: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5580: 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20  [pOp->p1]) );.  
5590: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
55a0: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65  CE(pOp->p1, &aMe
55b0: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20  m[pOp->p1]);.   
55c0: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
55d0: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
55e0: 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN2)!=0 ){.    
55f0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5600: 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2>0 );.      ass
5610: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d  ert( pOp->p2<=p-
5620: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61  >nMem );.      a
5630: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5640: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  d(&aMem[pOp->p2]
5650: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
5660: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5670: 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
5680: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5690: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
56a0: 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20  & OPFLG_IN3)!=0 
56b0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
56c0: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
56d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
56e0: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
56f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5700: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5710: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
5720: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5730: 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b  (pOp->p3, &aMem[
5740: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d  pOp->p3]);.    }
5750: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5760: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
5770: 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT2)!=0 ){.     
5780: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5790: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
57a0: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e  rt( pOp->p2<=p->
57b0: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 6d 65  nMem );.      me
57c0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
57d0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
57e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
57f0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
5800: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
5810: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
5820: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
5830: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5840: 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a  >p3<=p->nMem );.
5850: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
5860: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
5870: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d  pOp->p3]);.    }
5880: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73  .#endif.  .    s
5890: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
58a0: 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  de ){../********
58b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
58f0: 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f  *****.** What fo
5900: 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69  llows is a massi
5910: 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  ve switch statem
5920: 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20 63  ent where each c
5930: 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ase implements a
5940: 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73  .** separate ins
5950: 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  truction in the 
5960: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
5970: 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74    If we follow t
5980: 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65  he usual.** inde
5990: 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69  ntation conventi
59a0: 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20 73  ons, each case s
59b0: 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65  hould be indente
59c0: 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  d by 6 spaces.  
59d0: 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61  But.** that is a
59e0: 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73   lot of wasted s
59f0: 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  pace on the left
5a00: 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65   margin.  So the
5a10: 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20   code within.** 
5a20: 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
5a30: 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20  ment will break 
5a40: 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20  with convention 
5a50: 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66  and be flush-lef
5a60: 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69  t. Another.** bi
5a70: 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c  g comment (simil
5a80: 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20  ar to this one) 
5a90: 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f  will mark the po
5aa0: 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20  int in the code 
5ab0: 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e  where.** we tran
5ac0: 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e  sition back to n
5ad0: 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f  ormal indentatio
5ae0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72  n..**.** The for
5af0: 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20  matting of each 
5b00: 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e  case is importan
5b10: 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65  t.  The makefile
5b20: 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67   for SQLite.** g
5b30: 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20 66  enerates two C f
5b40: 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22  iles "opcodes.h"
5b50: 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22   and "opcodes.c"
5b60: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
5b70: 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e  s.** file lookin
5b80: 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74  g for lines that
5b90: 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61 73   begin with "cas
5ba0: 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63  e OP_".  The opc
5bb0: 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20  odes.h files.** 
5bc0: 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77  will be filled w
5bd0: 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68 61  ith #defines tha
5be0: 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e  t give unique in
5bf0: 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20  teger values to 
5c00: 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61  each.** opcode a
5c10: 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63  nd the opcodes.c
5c20: 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20   file is filled 
5c30: 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66  with an array of
5c40: 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a   strings where.*
5c50: 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69 73  * each string is
5c60: 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61   the symbolic na
5c70: 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65  me for the corre
5c80: 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e  sponding opcode.
5c90: 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65    If the.** case
5ca0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f   statement is fo
5cb0: 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d  llowed by a comm
5cc0: 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ent of the form 
5cd0: 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20  "/# same as ... 
5ce0: 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d  #/".** that comm
5cf0: 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 64  ent is used to d
5d00: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72  etermine the par
5d10: 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66  ticular value of
5d20: 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a   the opcode..**.
5d30: 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64  ** Other keyword
5d40: 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74  s in the comment
5d50: 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61   that follows ea
5d60: 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65 64  ch case are used
5d70: 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74   to.** construct
5d80: 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49   the OPFLG_INITI
5d90: 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61  ALIZER value tha
5da0: 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70  t initializes op
5db0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a  codeProperty[]..
5dc0: 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c  ** Keywords incl
5dd0: 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69  ude: in1, in2, i
5de0: 6e 33 2c 20 6f 75 74 32 5f 70 72 65 72 65 6c 65  n3, out2_prerele
5df0: 61 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e  ase, out2, out3.
5e00: 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f    See.** the mko
5e10: 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70  pcodeh.awk scrip
5e20: 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
5e30: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
5e40: 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f  .** Documentatio
5e50: 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63  n about VDBE opc
5e60: 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65  odes is generate
5e70: 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  d by scanning th
5e80: 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c  is file.** for l
5e90: 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e  ines of that con
5ea0: 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20  tain "Opcode:". 
5eb0: 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61   That line and a
5ec0: 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  ll subsequent.**
5ed0: 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61   comment lines a
5ee0: 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  re used in the g
5ef0: 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
5f00: 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63   opcode.html doc
5f10: 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69  umentation.** fi
5f20: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52  le..**.** SUMMAR
5f30: 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72  Y:.**.**     For
5f40: 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72  matting is impor
5f50: 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20  tant to scripts 
5f60: 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66  that scan this f
5f70: 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e  ile..**     Do n
5f80: 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20  ot deviate from 
5f90: 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73  the formatting s
5fa0: 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69  tyle currently i
5fb0: 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a  n use..**.******
5fc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5fd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5fe0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ff0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6000: 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63  *******/../* Opc
6010: 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20  ode:  Goto * P2 
6020: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75  * * *.**.** An u
6030: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d  nconditional jum
6040: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
6050: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73  .** The next ins
6060: 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65  truction execute
6070: 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68  d will be .** th
6080: 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50  e one at index P
6090: 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  2 from the begin
60a0: 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70  ning of.** the p
60b0: 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20  rogram..*/.case 
60c0: 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20  OP_Goto: {      
60d0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
60e0: 2f 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e  /.  CHECK_FOR_IN
60f0: 54 45 52 52 55 50 54 3b 0a 20 20 70 63 20 3d 20  TERRUPT;.  pc = 
6100: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62  pOp->p2 - 1;.  b
6110: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6120: 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32  de:  Gosub P1 P2
6130: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
6140: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  te the current a
6150: 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69  ddress onto regi
6160: 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74  ster P1.** and t
6170: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  hen jump to addr
6180: 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ess P2..*/.case 
6190: 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20  OP_Gosub: {     
61a0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
61b0: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
61c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
61d0: 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d    assert( (pIn1-
61e0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
61f0: 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f  )==0 );.  memAbo
6200: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
6210: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  n1);.  pIn1->fla
6220: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6230: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
6240: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
6250: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
6260: 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20  .  pc = pOp->p2 
6270: 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  - 1;.  break;.}.
6280: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74  ./* Opcode:  Ret
6290: 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  urn P1 * * * *.*
62a0: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
62b0: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
62c0: 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72  n after the addr
62d0: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
62e0: 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P1..*/.case OP_R
62f0: 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20  eturn: {        
6300: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
6310: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6320: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6330: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
6340: 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d 20  M_Int );.  pc = 
6350: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
6360: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6370: 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31  pcode:  Yield P1
6380: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53   * * * *.**.** S
6390: 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20  wap the program 
63a0: 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65  counter with the
63b0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
63c0: 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P1..*/.case O
63d0: 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20  P_Yield: {      
63e0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
63f0: 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20    int pcDest;.  
6400: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
6410: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6420: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
6430: 4d 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20  MEM_Dyn)==0 );. 
6440: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6450: 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74  EM_Int;.  pcDest
6460: 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e   = (int)pIn1->u.
6470: 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  i;.  pIn1->u.i =
6480: 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f   pc;.  REGISTER_
6490: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
64a0: 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 63 44  In1);.  pc = pcD
64b0: 65 73 74 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  est;.  break;.}.
64c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
64d0: 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50  tIfNull  P1 P2 P
64e0: 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  3 P4 *.**.** Che
64f0: 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ck the value in 
6500: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66  register P3.  If
6510: 20 69 73 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   is is NULL then
6520: 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70   Halt using.** p
6530: 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c  arameter P1, P2,
6540: 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74 68   and P4 as if th
6550: 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20 69  is were a Halt i
6560: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20  nstruction.  If 
6570: 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
6580: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6e  register P3 is n
6590: 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
65a0: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  is routine is a 
65b0: 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
65c0: 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20  P_HaltIfNull: { 
65d0: 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20       /* in3 */. 
65e0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
65f0: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
6600: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
6610: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61  _Null)==0 ) brea
6620: 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
6630: 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c  ough into OP_Hal
6640: 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  t */.}../* Opcod
6650: 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a  e:  Halt P1 P2 *
6660: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 69 74   P4 *.**.** Exit
6670: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41   immediately.  A
6680: 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c  ll open cursors,
6690: 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a   etc are closed.
66a0: 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
66b0: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
66c0: 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  e result code re
66d0: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
66e0: 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65  3_exec(), sqlite
66f0: 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72  3_reset(),.** or
6700: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6710: 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d  e().  For a norm
6720: 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68  al halt, this sh
6730: 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f  ould be SQLITE_O
6740: 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72  K (0)..** For er
6750: 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20  rors, it can be 
6760: 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65  some other value
6770: 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e  .  If P1!=0 then
6780: 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69   P2 will determi
6790: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72  ne.** whether or
67a0: 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b   not to rollback
67b0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
67c0: 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f  nsaction.  Do no
67d0: 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66  t rollback.** if
67e0: 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f   P2==OE_Fail. Do
67f0: 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66   the rollback if
6800: 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b   P2==OE_Rollback
6810: 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f  .  If P2==OE_Abo
6820: 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b  rt,.** then back
6830: 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73   out all changes
6840: 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72   that have occur
6850: 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20  red during this 
6860: 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65  execution of the
6870: 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f  .** VDBE, but do
6880: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68   not rollback th
6890: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a  e transaction. .
68a0: 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
68b0: 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20  ot null then it 
68c0: 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  is an error mess
68d0: 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a  age string..**.*
68e0: 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d  * There is an im
68f0: 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20  plied "Halt 0 0 
6900: 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  0" instruction i
6910: 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76  nserted at the v
6920: 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76  ery end of.** ev
6930: 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f  ery program.  So
6940: 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65   a jump past the
6950: 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f   last instructio
6960: 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  n of the program
6970: 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20  .** is the same 
6980: 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c  as executing Hal
6990: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  t..*/.case OP_Ha
69a0: 6c 74 3a 20 7b 0a 20 20 69 66 28 20 70 4f 70 2d  lt: {.  if( pOp-
69b0: 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26  >p1==SQLITE_OK &
69c0: 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  & p->pFrame ){. 
69d0: 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73     /* Halt the s
69e0: 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75  ub-program. Retu
69f0: 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  rn control to th
6a00: 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20  e parent frame. 
6a10: 2a 2f 0a 20 20 20 20 56 64 62 65 46 72 61 6d 65  */.    VdbeFrame
6a20: 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46   *pFrame = p->pF
6a30: 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72  rame;.    p->pFr
6a40: 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50  ame = pFrame->pP
6a50: 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46  arent;.    p->nF
6a60: 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69  rame--;.    sqli
6a70: 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
6a80: 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
6a90: 29 3b 0a 20 20 20 20 70 63 20 3d 20 73 71 6c 69  );.    pc = sqli
6aa0: 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73 74  te3VdbeFrameRest
6ab0: 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20  ore(pFrame);.   
6ac0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
6ad0: 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
6ae0: 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20   /* Instruction 
6af0: 70 63 20 69 73 20 74 68 65 20 4f 50 5f 50 72 6f  pc is the OP_Pro
6b00: 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65  gram that invoke
6b10: 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  d the sub-progra
6b20: 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72  m .      ** curr
6b30: 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c 74  ently being halt
6b40: 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69 6e  ed. If the p2 in
6b50: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 69  struction of thi
6b60: 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20 20  s OP_Halt.      
6b70: 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  ** instruction i
6b80: 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f  s set to OE_Igno
6b90: 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62  re, then the sub
6ba0: 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72 6f  -program is thro
6bb0: 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e  wing.      ** an
6bc0: 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69 6f   IGNORE exceptio
6bd0: 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  n. In this case 
6be0: 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64 72  jump to the addr
6bf0: 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20 20  ess specified.  
6c00: 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70 32      ** as the p2
6c10: 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
6c20: 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a  OP_Program.  */.
6c30: 20 20 20 20 20 20 70 63 20 3d 20 70 2d 3e 61 4f        pc = p->aO
6c40: 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20 20 20  p[pc].p2-1;.    
6c50: 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61  }.    aOp = p->a
6c60: 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70  Op;.    aMem = p
6c70: 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62 72 65 61  ->aMem;.    brea
6c80: 6b 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 72 63 20  k;.  }..  p->rc 
6c90: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e  = pOp->p1;.  p->
6ca0: 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75  errorAction = (u
6cb0: 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e  8)pOp->p2;.  p->
6cc0: 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28 20 70  pc = pc;.  if( p
6cd0: 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
6ce0: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 21 3d 53  assert( p->rc!=S
6cf0: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
6d00: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
6d10: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
6d20: 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e  , "%s", pOp->p4.
6d30: 7a 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65  z);.    testcase
6d40: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
6d50: 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
6d60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
6d70: 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72 74  (pOp->p1, "abort
6d80: 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20   at %d in [%s]: 
6d90: 25 73 22 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c  %s", pc, p->zSql
6da0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
6db0: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 72 63 20  }else if( p->rc 
6dc0: 29 7b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  ){.    testcase(
6dd0: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
6de0: 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a  nfig.xLog!=0 );.
6df0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28      sqlite3_log(
6e00: 70 4f 70 2d 3e 70 31 2c 20 22 63 6f 6e 73 74 72  pOp->p1, "constr
6e10: 61 69 6e 74 20 66 61 69 6c 65 64 20 61 74 20 25  aint failed at %
6e20: 64 20 69 6e 20 5b 25 73 5d 22 2c 20 70 63 2c 20  d in [%s]", pc, 
6e30: 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 7d 0a 20 20  p->zSql);.  }.  
6e40: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
6e50: 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72  Halt(p);.  asser
6e60: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  t( rc==SQLITE_BU
6e70: 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  SY || rc==SQLITE
6e80: 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  _OK || rc==SQLIT
6e90: 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28  E_ERROR );.  if(
6ea0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
6eb0: 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20   ){.    p->rc = 
6ec0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
6ed0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
6ee0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
6ef0: 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53  E_OK || p->rc==S
6f00: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
6f10: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
6f20: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
6f30: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
6f40: 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  ns>0 );.    rc =
6f50: 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f   p->rc ? SQLITE_
6f60: 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44  ERROR : SQLITE_D
6f70: 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  ONE;.  }.  goto 
6f80: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
6f90: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
6fa0: 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
6fb0: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
6fc0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
6fd0: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
6fe0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
6ff0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
7000: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
7010: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7020: 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  /.  pOut->u.i = 
7030: 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b  pOp->p1;.  break
7040: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7050: 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20  Int64 * P2 * P4 
7060: 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
7070: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d  pointer to a 64-
7080: 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
7090: 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74  e..** Write that
70a0: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
70b0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
70c0: 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20   OP_Int64: {    
70d0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
70e0: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
70f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70  ssert( pOp->p4.p
7100: 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  I64!=0 );.  pOut
7110: 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.i = *pOp->p4
7120: 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pI64;.  break;.
7130: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
7140: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
7150: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
7160: 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20   Real * P2 * P4 
7170: 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
7180: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d  pointer to a 64-
7190: 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  bit floating poi
71a0: 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  nt value..** Wri
71b0: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
71c0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
71d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a  */.case OP_Real:
71e0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
71f0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41   same as TK_FLOA
7200: 54 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  T, out2-prerelea
7210: 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c  se */.  pOut->fl
7220: 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a  ags = MEM_Real;.
7230: 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74    assert( !sqlit
7240: 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34  e3IsNaN(*pOp->p4
7250: 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75  .pReal) );.  pOu
7260: 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  t->r = *pOp->p4.
7270: 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a  pReal;.  break;.
7280: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
7290: 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50  ode: String8 * P
72a0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  2 * P4 *.**.** P
72b0: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75  4 points to a nu
72c0: 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  l terminated UTF
72d0: 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20  -8 string. This 
72e0: 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66  opcode is transf
72f0: 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61  ormed .** into a
7300: 6e 20 4f 50 5f 53 74 72 69 6e 67 20 62 65 66 6f  n OP_String befo
7310: 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65  re it is execute
7320: 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  d for the first 
7330: 74 69 6d 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  time..*/.case OP
7340: 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20  _String8: {     
7350: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
7360: 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70  K_STRING, out2-p
7370: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7380: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7390: 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70  !=0 );.  pOp->op
73a0: 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67  code = OP_String
73b0: 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71  ;.  pOp->p1 = sq
73c0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
73d0: 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64  p->p4.z);..#ifnd
73e0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
73f0: 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64  TF16.  if( encod
7400: 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38  ing!=SQLITE_UTF8
7410: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
7420: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
7430: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
7440: 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
7450: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
7460: 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  C);.    if( rc==
7470: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20  SQLITE_TOOBIG ) 
7480: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
7490: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
74a0: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
74b0: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
74c0: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
74d0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
74e0: 73 65 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c  sert( pOut->zMal
74f0: 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a  loc==pOut->z );.
7500: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
7510: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
7520: 6e 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a  n );.    pOut->z
7530: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
7540: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
7550: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 70  EM_Static;.    p
7560: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d  Out->flags &= ~M
7570: 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 69 66 28 20  EM_Dyn;.    if( 
7580: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
7590: 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20  DYNAMIC ){.     
75a0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
75b0: 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  b, pOp->p4.z);. 
75c0: 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34     }.    pOp->p4
75d0: 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49  type = P4_DYNAMI
75e0: 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a  C;.    pOp->p4.z
75f0: 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20   = pOut->z;.    
7600: 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e  pOp->p1 = pOut->
7610: 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  n;.  }.#endif.  
7620: 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e  if( pOp->p1>db->
7630: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
7640: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
7650: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
7660: 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  .  }.  /* Fall t
7670: 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
7680: 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69  xt case, OP_Stri
7690: 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70  ng */.}.  ./* Op
76a0: 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20  code: String P1 
76b0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
76c0: 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  The string value
76d0: 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31   P4 of length P1
76e0: 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72   (bytes) is stor
76f0: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
7700: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  2..*/.case OP_St
7710: 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20  ring: {         
7720: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
7730: 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
7740: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7750: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
7760: 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
7770: 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
7780: 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70  pOut->z = pOp->p
7790: 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  4.z;.  pOut->n =
77a0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74   pOp->p1;.  pOut
77b0: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
77c0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
77d0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
77e0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
77f0: 63 6f 64 65 3a 20 4e 75 6c 6c 20 2a 20 50 32 20  code: Null * P2 
7800: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
7810: 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  e a NULL into re
7820: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
7830: 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20  se OP_Null: {   
7840: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
7850: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
7860: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
7870: 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b  M_Null;.  break;
7880: 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
7890: 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 0a  Blob P1 P2 * P4.
78a0: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
78b0: 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74  to a blob of dat
78c0: 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e  a P1 bytes long.
78d0: 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20    Store this.** 
78e0: 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
78f0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7900: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
7910: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7920: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7930: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c  ssert( pOp->p1 <
7940: 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  = SQLITE_MAX_LEN
7950: 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  GTH );.  sqlite3
7960: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
7970: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  ut, pOp->p4.z, p
7980: 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20  Op->p1, 0, 0);. 
7990: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
79a0: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
79b0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
79c0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
79d0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
79e0: 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ble P1 P2 * P4 *
79f0: 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  .**.** Transfer 
7a00: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f  the values of bo
7a10: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31  und parameter P1
7a20: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7a30: 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70  2.**.** If the p
7a40: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65  arameter is name
7a50: 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65  d, then its name
7a60: 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 20 61   appears in P4 a
7a70: 6e 64 20 50 33 3d 3d 31 2e 0a 2a 2a 20 54 68 65  nd P3==1..** The
7a80: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
7a90: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
7aa0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
7ab0: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
7ac0: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
7ad0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
7ae0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65  erelease */.  Me
7af0: 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f  m *pVar;       /
7b00: 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72  * Value being tr
7b10: 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20  ansferred */..  
7b20: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
7b30: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
7b40: 3e 6e 56 61 72 20 29 3b 0a 20 20 70 56 61 72 20  >nVar );.  pVar 
7b50: 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e  = &p->aVar[pOp->
7b60: 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73  p1 - 1];.  if( s
7b70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
7b80: 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20  Big(pVar) ){.   
7b90: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
7ba0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
7bb0: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
7bc0: 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53  Out, pVar, MEM_S
7bd0: 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45  tatic);.  UPDATE
7be0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
7bf0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
7c00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65  ./* Opcode: Move
7c10: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
7c20: 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 76 61 6c  .** Move the val
7c30: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
7c40: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72  P1..P1+P3-1 over
7c50: 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
7c60: 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20  rs P2..P2+P3-1. 
7c70: 20 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50   Registers P1..P
7c80: 31 2b 50 31 2d 31 20 61 72 65 0a 2a 2a 20 6c 65  1+P1-1 are.** le
7c90: 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c  ft holding a NUL
7ca0: 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72  L.  It is an err
7cb0: 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20  or for register 
7cc0: 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31  ranges.** P1..P1
7cd0: 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32  +P3-1 and P2..P2
7ce0: 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70  +P3-1 to overlap
7cf0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76  ..*/.case OP_Mov
7d00: 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61  e: {.  char *zMa
7d10: 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69  lloc;   /* Holdi
7d20: 6e 67 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20  ng variable for 
7d30: 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79  allocated memory
7d40: 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
7d50: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7d60: 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65   of registers le
7d70: 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20  ft to copy */.  
7d80: 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
7d90: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
7da0: 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69  copy from */.  i
7db0: 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  nt p2;          
7dc0: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
7dd0: 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d  opy to */..  n =
7de0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d   pOp->p3;.  p1 =
7df0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
7e00: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
7e10: 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20  rt( n>0 && p1>0 
7e20: 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  && p2>0 );.  ass
7e30: 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c  ert( p1+n<=p2 ||
7e40: 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20   p2+n<=p1 );..  
7e50: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d  pIn1 = &aMem[p1]
7e60: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
7e70: 5b 70 32 5d 3b 0a 20 20 77 68 69 6c 65 28 20 6e  [p2];.  while( n
7e80: 2d 2d 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  -- ){.    assert
7e90: 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 70 2d  ( pOut<=&aMem[p-
7ea0: 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20 61 73  >nMem] );.    as
7eb0: 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65  sert( pIn1<=&aMe
7ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20  m[p->nMem] );.  
7ed0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
7ee0: 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
7ef0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
7f00: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
7f10: 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74 2d   zMalloc = pOut-
7f20: 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 70 4f  >zMalloc;.    pO
7f30: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  ut->zMalloc = 0;
7f40: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7f50: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49  MemMove(pOut, pI
7f60: 6e 31 29 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a  n1);.    pIn1->z
7f70: 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63  Malloc = zMalloc
7f80: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
7f90: 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29  RACE(p2++, pOut)
7fa0: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
7fb0: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 0a 20 20    pOut++;.  }.  
7fc0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7fd0: 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20  ode: Copy P1 P2 
7fe0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  * * *.**.** Make
7ff0: 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73   a copy of regis
8000: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
8010: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
8020: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
8030: 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70  makes a deep cop
8040: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
8050: 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20   A duplicate.** 
8060: 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73  is made of any s
8070: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f  tring or blob co
8080: 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73  nstant.  See als
8090: 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63  o OP_SCopy..*/.c
80a0: 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 20 20  ase OP_Copy: {  
80b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
80c0: 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
80d0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
80e0: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
80f0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
8100: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
8110: 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
8120: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
8130: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
8140: 5f 45 70 68 65 6d 29 3b 0a 20 20 44 65 65 70 68  _Ephem);.  Deeph
8150: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
8160: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
8170: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
8180: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8190: 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50   Opcode: SCopy P
81a0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
81b0: 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20   Make a shallow 
81c0: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
81d0: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
81e0: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
81f0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
8200: 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  es a shallow cop
8210: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
8220: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
8230: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
8240: 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63  blob, then the c
8250: 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f  opy is only a po
8260: 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20  inter to the.** 
8270: 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e  original and hen
8280: 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  ce if the origin
8290: 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69  al changes so wi
82a0: 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20  ll the copy..** 
82b0: 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72  Worse, if the or
82c0: 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f  iginal is deallo
82d0: 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20  cated, the copy 
82e0: 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e  becomes invalid.
82f0: 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f  .** Thus the pro
8300: 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e  gram must guaran
8310: 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69  tee that the ori
8320: 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63  ginal will not c
8330: 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20  hange.** during 
8340: 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20  the lifetime of 
8350: 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f  the copy.  Use O
8360: 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61  P_Copy to make a
8370: 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70   complete.** cop
8380: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43  y..*/.case OP_SC
8390: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
83a0: 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a    /* in1, out2 *
83b0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
83c0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
83d0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
83e0: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
83f0: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
8400: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
8410: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
8420: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
8430: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
8440: 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e  BUG.  if( pOut->
8450: 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20  pScopyFrom==0 ) 
8460: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
8470: 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a   = pIn1;.#endif.
8480: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
8490: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
84a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
84b0: 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f  Opcode: ResultRo
84c0: 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  w P1 P2 * * *.**
84d0: 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
84e0: 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b  s P1 through P1+
84f0: 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73  P2-1 contain a s
8500: 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20  ingle row of.** 
8510: 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70  results. This op
8520: 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20  code causes the 
8530: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
8540: 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  all to terminate
8550: 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49  .** with an SQLI
8560: 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f  TE_ROW return co
8570: 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75  de and it sets u
8580: 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  p the sqlite3_st
8590: 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  mt.** structure 
85a0: 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73  to provide acces
85b0: 73 20 74 6f 20 74 68 65 20 74 6f 70 20 50 31 20  s to the top P1 
85c0: 76 61 6c 75 65 73 20 61 73 20 74 68 65 20 72 65  values as the re
85d0: 73 75 6c 74 0a 2a 2a 20 72 6f 77 2e 0a 2a 2f 0a  sult.** row..*/.
85e0: 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f  case OP_ResultRo
85f0: 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  w: {.  Mem *pMem
8600: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73  ;.  int i;.  ass
8610: 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75  ert( p->nResColu
8620: 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  mn==pOp->p2 );. 
8630: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
8640: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
8650: 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c  pOp->p1+pOp->p2<
8660: 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 0a 20  =p->nMem+1 );.. 
8670: 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74   /* If this stat
8680: 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74  ement has violat
8690: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  ed immediate for
86a0: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
86b0: 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f  ints, do.  ** no
86c0: 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  t return the num
86d0: 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69  ber of rows modi
86e0: 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74  fied. And do not
86f0: 20 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61   RELEASE the sta
8700: 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e  tement.  ** tran
8710: 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64  saction. It need
8720: 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
8730: 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53  ack.  */.  if( S
8740: 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20  QLITE_OK!=(rc = 
8750: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
8760: 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20  Fk(p, 0)) ){.   
8770: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61   assert( db->fla
8780: 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  gs&SQLITE_CountR
8790: 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ows );.    asser
87a0: 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f  t( p->usesStmtJo
87b0: 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72 65  urnal );.    bre
87c0: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  ak;.  }..  /* If
87d0: 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e   the SQLITE_Coun
87e0: 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65  tRows flag is se
87f0: 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61  t in sqlite3.fla
8800: 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20  gs mask, then . 
8810: 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e   ** DML statemen
8820: 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  ts invoke this o
8830: 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20  pcode to return 
8840: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
8850: 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65  ws .  ** modifie
8860: 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  d to the user. T
8870: 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
8880: 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68  way that a VM th
8890: 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20  at.  ** opens a 
88a0: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
88b0: 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65  ction may invoke
88c0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20   this opcode..  
88d0: 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20  **.  ** In case 
88e0: 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73  this is such a s
88f0: 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20  tatement, close 
8900: 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72  any statement tr
8910: 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f  ansaction.  ** o
8920: 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d  pened by this VM
8930: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
8940: 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  g control to the
8950: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
8960: 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68  o.  ** ensure th
8970: 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  at statement-tra
8980: 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  nsactions are al
8990: 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74  ways nested, not
89a0: 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20   overlapping..  
89b0: 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73  ** If the open s
89c0: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
89d0: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73  tion is not clos
89e0: 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68  ed here, then th
89f0: 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20  e user.  ** may 
8a00: 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20  step another VM 
8a10: 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f  that opens its o
8a20: 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  wn statement tra
8a30: 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20  nsaction. This. 
8a40: 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20   ** may lead to 
8a50: 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74  overlapping stat
8a60: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
8a70: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ns..  **.  ** Th
8a80: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
8a90: 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72  saction is never
8aa0: 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61   a top-level tra
8ab0: 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nsaction.  Hence
8ac0: 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53  .  ** the RELEAS
8ad0: 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e  E call below can
8ae0: 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a   never fail..  *
8af0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69  /.  assert( p->i
8b00: 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20  Statement==0 || 
8b10: 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
8b20: 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20  _CountRows );.  
8b30: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
8b40: 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70  CloseStatement(p
8b50: 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  , SAVEPOINT_RELE
8b60: 41 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  ASE);.  if( NEVE
8b70: 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
8b80: 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
8b90: 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64   }..  /* Invalid
8ba0: 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61  ate all ephemera
8bb0: 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63  l cursor row cac
8bc0: 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68  hes */.  p->cach
8bd0: 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65  eCtr = (p->cache
8be0: 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f  Ctr + 2)|1;..  /
8bf0: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
8c00: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
8c10: 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c  urrent row are \
8c20: 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20  000 terminated. 
8c30: 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20   ** and have an 
8c40: 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20  assigned type.  
8c50: 54 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  The results are 
8c60: 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64  de-ephemeralized
8c70: 20 61 73 0a 20 20 2a 2a 20 61 73 20 73 69 64 65   as.  ** as side
8c80: 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20   effect..  */.  
8c90: 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c  pMem = p->pResul
8ca0: 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  tSet = &aMem[pOp
8cb0: 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p1];.  for(i=0
8cc0: 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b  ; i<pOp->p2; i++
8cd0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
8ce0: 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b  emIsValid(&pMem[
8cf0: 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68  i]) );.    Deeph
8d00: 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b  emeralize(&pMem[
8d10: 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  i]);.    assert(
8d20: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
8d30: 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a  & MEM_Ephem)==0.
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28              || (
8d50: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
8d60: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
8d70: 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  b))==0 );.    sq
8d80: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54  lite3VdbeMemNulT
8d90: 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69  erminate(&pMem[i
8da0: 5d 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ]);.    sqlite3V
8db0: 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28  dbeMemStoreType(
8dc0: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52  &pMem[i]);.    R
8dd0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
8de0: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
8df0: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
8e00: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
8e10: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
8e20: 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54   /* Return SQLIT
8e30: 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e  E_ROW.  */.  p->
8e40: 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72  pc = pc + 1;.  r
8e50: 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a  c = SQLITE_ROW;.
8e60: 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
8e70: 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  rn;.}../* Opcode
8e80: 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50  : Concat P1 P2 P
8e90: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64 20  3 * *.**.** Add 
8ea0: 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69  the text in regi
8eb0: 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65  ster P1 onto the
8ec0: 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74   end of the text
8ed0: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
8ee0: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
8ef0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
8f00: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
8f10: 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50  ther the P1 or P
8f20: 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20  2 text are NULL 
8f30: 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20  then store NULL 
8f40: 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50  in P3..**.**   P
8f50: 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a  3 = P2 || P1.**.
8f60: 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
8f70: 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74   for P1 and P3 t
8f80: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65  o be the same re
8f90: 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65  gister. Sometime
8fa0: 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74  s,.** if P3 is t
8fb0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
8fc0: 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c   as P2, the impl
8fd0: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62  ementation is ab
8fe0: 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61  le.** to avoid a
8ff0: 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61   memcpy()..*/.ca
9000: 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20  se OP_Concat: { 
9010: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
9020: 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20  e as TK_CONCAT, 
9030: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
9040: 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a  /.  i64 nByte;..
9050: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9060: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
9070: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
9080: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
9090: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
90a0: 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20  ert( pIn1!=pOut 
90b0: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
90c0: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
90d0: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
90e0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
90f0: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
9100: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
9110: 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42   }.  if( ExpandB
9120: 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70  lob(pIn1) || Exp
9130: 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20  andBlob(pIn2) ) 
9140: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53  goto no_mem;.  S
9150: 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65  tringify(pIn1, e
9160: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69  ncoding);.  Stri
9170: 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f  ngify(pIn2, enco
9180: 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d  ding);.  nByte =
9190: 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d   pIn1->n + pIn2-
91a0: 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e  >n;.  if( nByte>
91b0: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
91c0: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
91d0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
91e0: 62 69 67 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65  big;.  }.  MemSe
91f0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
9200: 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20  MEM_Str);.  if( 
9210: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
9220: 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
9230: 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e  yte+2, pOut==pIn
9240: 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  2) ){.    goto n
9250: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 69 66 28  o_mem;.  }.  if(
9260: 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20   pOut!=pIn2 ){. 
9270: 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e     memcpy(pOut->
9280: 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32  z, pIn2->z, pIn2
9290: 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63  ->n);.  }.  memc
92a0: 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32  py(&pOut->z[pIn2
92b0: 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70  ->n], pIn1->z, p
92c0: 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d  In1->n);.  pOut-
92d0: 3e 7a 5b 6e 42 79 74 65 5d 20 3d 20 30 3b 0a 20  >z[nByte] = 0;. 
92e0: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31   pOut->z[nByte+1
92f0: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66  ] = 0;.  pOut->f
9300: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
9310: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
9320: 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
9330: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
9340: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
9350: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9360: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9370: 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20  code: Add P1 P2 
9380: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 64  P3 * *.**.** Add
9390: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
93a0: 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
93b0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
93c0: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
93d0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
93e0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
93f0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
9400: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
9410: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
9420: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74  ./* Opcode: Mult
9430: 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20  iply P1 P2 P3 * 
9440: 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69  *.**.**.** Multi
9450: 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ply the value in
9460: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
9470: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
9480: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
9490: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
94a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
94b0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
94c0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
94d0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
94e0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
94f0: 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33  ubtract P1 P2 P3
9500: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72   * *.**.** Subtr
9510: 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  act the value in
9520: 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f   register P1 fro
9530: 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
9540: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
9550: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
9560: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
9570: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
9580: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
9590: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
95a0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
95b0: 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33   Divide P1 P2 P3
95c0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64   * *.**.** Divid
95d0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
95e0: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
95f0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
9600: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
9610: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
9620: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50  n register P3 (P
9630: 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65  3=P2/P1). If the
9640: 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65   value in .** re
9650: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
9660: 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  o, then the resu
9670: 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65  lt is NULL. If e
9680: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a  ither input is .
9690: 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  ** NULL, the res
96a0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
96b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69  /* Opcode: Remai
96c0: 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20  nder P1 P2 P3 * 
96d0: 2a 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20  *.**.** Compute 
96e0: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66  the remainder af
96f0: 74 65 72 20 69 6e 74 65 67 65 72 20 64 69 76 69  ter integer divi
9700: 73 69 6f 6e 20 6f 66 20 74 68 65 20 76 61 6c 75  sion of the valu
9710: 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
9720: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
9730: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
9740: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9750: 73 75 6c 74 20 69 6e 20 50 33 2e 20 0a 2a 2a 20  sult in P3. .** 
9760: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
9770: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 7a  register P2 is z
9780: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
9790: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
97a0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
97b0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
97c0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
97d0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
97f0: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
9800: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
9810: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
9820: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
9830: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
9840: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
9850: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
9860: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
9870: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9880: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
9890: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
98a0: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
98c0: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
98d0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
98e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
98f0: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
9900: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9910: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
9920: 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  ut3 */.  int fla
9930: 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62  gs;      /* Comb
9940: 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73  ined MEM_* flags
9950: 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74   from both input
9960: 73 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20  s */.  i64 iA;  
9970: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
9980: 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  r value of left 
9990: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34  operand */.  i64
99a0: 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iB;         /* 
99b0: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
99c0: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
99d0: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20  /.  double rA;  
99e0: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
99f0: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
9a00: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42  d */.  double rB
9a10: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
9a20: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
9a30: 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31  erand */..  pIn1
9a40: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
9a50: 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d 65 72 69  ];.  applyNumeri
9a60: 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 29 3b  cAffinity(pIn1);
9a70: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
9a80: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 70 6c  pOp->p2];.  appl
9a90: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
9aa0: 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d  (pIn2);.  pOut =
9ab0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
9ac0: 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d  .  flags = pIn1-
9ad0: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
9ae0: 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61  lags;.  if( (fla
9af0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
9b00: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
9b10: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
9b20: 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  ll;.  if( (pIn1-
9b30: 3e 66 6c 61 67 73 20 26 20 70 49 6e 32 2d 3e 66  >flags & pIn2->f
9b40: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
9b50: 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20  =MEM_Int ){.    
9b60: 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a  iA = pIn1->u.i;.
9b70: 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75      iB = pIn2->u
9b80: 2e 69 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20  .i;.    switch( 
9b90: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
9ba0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64       case OP_Add
9bb0: 3a 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  :       if( sqli
9bc0: 74 65 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c  te3AddInt64(&iB,
9bd0: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
9be0: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
9bf0: 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61    case OP_Subtra
9c00: 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ct:  if( sqlite3
9c10: 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29  SubInt64(&iB,iA)
9c20: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
9c30: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9c40: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
9c50: 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c    if( sqlite3Mul
9c60: 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20  Int64(&iB,iA) ) 
9c70: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62  goto fp_math;  b
9c80: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
9c90: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
9ca0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
9cb0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
9cc0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
9cd0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
9ce0: 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c  ==-1 && iB==SMAL
9cf0: 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74  LEST_INT64 ) got
9d00: 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20  o fp_math;.     
9d10: 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20     iB /= iA;.   
9d20: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
9d30: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
9d40: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  t: {.        if(
9d50: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
9d60: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
9d70: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
9d80: 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41   if( iA==-1 ) iA
9d90: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42   = 1;.        iB
9da0: 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20   %= iA;.        
9db0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
9dc0: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75     }.    pOut->u
9dd0: 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d  .i = iB;.    Mem
9de0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
9df0: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65  , MEM_Int);.  }e
9e00: 6c 73 65 7b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20  lse{.fp_math:.  
9e10: 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64    rA = sqlite3Vd
9e20: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
9e30: 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69  );.    rB = sqli
9e40: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
9e50: 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74  (pIn2);.    swit
9e60: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
9e70: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
9e80: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42  _Add:         rB
9e90: 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   += rA;       br
9ea0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
9eb0: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
9ec0: 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20  rB -= rA;       
9ed0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9ee0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
9ef0: 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20    rB *= rA;     
9f00: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9f10: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
9f20: 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75  .        /* (dou
9f30: 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66  ble)0 In case of
9f40: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
9f50: 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a  ATING_POINT... *
9f60: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41  /.        if( rA
9f70: 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f  ==(double)0 ) go
9f80: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
9f90: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
9fa0: 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a        rB /= rA;.
9fb0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
9fc0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
9fd0: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
9fe0: 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20  iA = (i64)rA;.  
9ff0: 20 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29        iB = (i64)
a000: 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  rB;.        if( 
a010: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
a020: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
a030: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
a040: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
a050: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20  = 1;.        rB 
a060: 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20  = (double)(iB % 
a070: 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  iA);.        bre
a080: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
a090: 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
a0a0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
a0b0: 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  INT.    pOut->u.
a0c0: 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53  i = rB;.    MemS
a0d0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
a0e0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65   MEM_Int);.#else
a0f0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
a100: 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20  IsNaN(rB) ){.   
a110: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
a120: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
a130: 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  l;.    }.    pOu
a140: 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d  t->r = rB;.    M
a150: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
a160: 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20  ut, MEM_Real);. 
a170: 20 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20     if( (flags & 
a180: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
a190: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a1a0: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
a1b0: 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65  (pOut);.    }.#e
a1c0: 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
a1d0: 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65  ;..arithmetic_re
a1e0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20  sult_is_null:.  
a1f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
a200: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62  tNull(pOut);.  b
a210: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a220: 64 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20 2a 20  de: CollSeq * * 
a230: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
a240: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f   pointer to a Co
a250: 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66  llSeq struct. If
a260: 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74   the next call t
a270: 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  o a user functio
a280: 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74  n.** or aggregat
a290: 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47  e calls sqlite3G
a2a0: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c  etFuncCollSeq(),
a2b0: 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20   this collation 
a2c0: 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a  sequence will.**
a2d0: 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68   be returned. Th
a2e0: 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68  is is used by th
a2f0: 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29  e built-in min()
a300: 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c  , max() and null
a310: 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  if().** function
a320: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  s..**.** The int
a330: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
a340: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
a350: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
a360: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
a370: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
a380: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
a390: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
a3a0: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
a3b0: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
a3c0: 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f  ublicly, only to
a3d0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20   user functions 
a3e0: 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e  defined in func.
a3f0: 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  c..*/.case OP_Co
a400: 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72  llSeq: {.  asser
a410: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
a420: 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
a430: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a440: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31  ode: Function P1
a450: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
a460: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
a470: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
a480: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
a490: 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75  Function structu
a4a0: 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e  re that.** defin
a4b0: 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29  es the function)
a4c0: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
a4d0: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  ts taken from re
a4e0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a  gister P2 and.**
a4f0: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
a500: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
a510: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
a520: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
a530: 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  3..** Register P
a540: 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e  3 must not be on
a550: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
a560: 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20  n inputs..**.** 
a570: 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62  P1 is a 32-bit b
a580: 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e  itmask indicatin
a590: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
a5a0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74   each argument t
a5b0: 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69  o the .** functi
a5c0: 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65  on was determine
a5d0: 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74  d to be constant
a5e0: 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65   at compile time
a5f0: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a  . If the first.*
a600: 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63  * argument was c
a610: 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74  onstant then bit
a620: 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e   0 of P1 is set.
a630: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
a640: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
a650: 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20  ether meta data 
a660: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
a670: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
a680: 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74  argument using t
a690: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65  he.** sqlite3_se
a6a0: 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20  t_auxdata() API 
a6b0: 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65  may be safely re
a6c0: 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65  tained until the
a6d0: 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74   next.** invocat
a6e0: 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  ion of this opco
a6f0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
a700: 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20  so: AggStep and 
a710: 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65  AggFinal.*/.case
a720: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a   OP_Function: {.
a730: 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
a740: 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pArg;.  sqlite3_
a750: 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
a760: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
a770: 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  pVal;.  int n;..
a780: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
a790: 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
a7a0: 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
a7b0: 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
a7c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
a7d0: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d  0 && pOp->p3<=p-
a7e0: 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20  >nMem );.  pOut 
a7f0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
a800: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
a810: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
a820: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
a830: 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
a840: 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d  pOp->p2+n<=p->nM
a850: 65 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  em+1) );.  asser
a860: 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
a870: 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
a880: 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41  Op->p2+n );.  pA
a890: 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rg = &aMem[pOp->
a8a0: 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p2];.  for(i=0; 
a8b0: 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b  i<n; i++, pArg++
a8c0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
a8d0: 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67 29 20  emIsValid(pArg) 
a8e0: 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
a8f0: 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70  = pArg;.    Deep
a900: 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29  hemeralize(pArg)
a910: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
a920: 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41  eMemStoreType(pA
a930: 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  rg);.    REGISTE
a940: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
a950: 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20  i, pArg);.  }.. 
a960: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
a970: 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
a980: 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   || pOp->p4type=
a990: 3d 50 34 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a  =P4_VDBEFUNC );.
a9a0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
a9b0: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 7b  e==P4_FUNCDEF ){
a9c0: 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  .    ctx.pFunc =
a9d0: 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
a9e0: 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e      ctx.pVdbeFun
a9f0: 63 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  c = 0;.  }else{.
aa00: 20 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e      ctx.pVdbeFun
aa10: 63 20 3d 20 28 56 64 62 65 46 75 6e 63 2a 29 70  c = (VdbeFunc*)p
aa20: 4f 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63  Op->p4.pVdbeFunc
aa30: 3b 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20  ;.    ctx.pFunc 
aa40: 3d 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2d  = ctx.pVdbeFunc-
aa50: 3e 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 63  >pFunc;.  }..  c
aa60: 74 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d  tx.s.flags = MEM
aa70: 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 64  _Null;.  ctx.s.d
aa80: 62 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 73 2e  b = db;.  ctx.s.
aa90: 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e  xDel = 0;.  ctx.
aaa0: 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a  s.zMalloc = 0;..
aab0: 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20    /* The output 
aac0: 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79  cell may already
aad0: 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61   have a buffer a
aae0: 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20  llocated. Move. 
aaf0: 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72 20   ** the pointer 
ab00: 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20 63  to ctx.s so in c
ab10: 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e  ase the user-fun
ab20: 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20  ction can use.  
ab30: 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20 61  ** the already a
ab40: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20  llocated buffer 
ab50: 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63  instead of alloc
ab60: 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e  ating a new one.
ab70: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
ab80: 64 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e  dbeMemMove(&ctx.
ab90: 73 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53  s, pOut);.  MemS
aba0: 65 74 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e  etTypeFlag(&ctx.
abb0: 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20  s, MEM_Null);.. 
abc0: 20 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30   ctx.isError = 0
abd0: 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e  ;.  if( ctx.pFun
abe0: 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  c->flags & SQLIT
abf0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
ac00: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
ac10: 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  Op>aOp );.    as
ac20: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34  sert( pOp[-1].p4
ac30: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
ac40: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
ac50: 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
ac60: 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
ac70: 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f    ctx.pColl = pO
ac80: 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a  p[-1].p4.pColl;.
ac90: 20 20 7d 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e    }.  (*ctx.pFun
aca0: 63 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20  c->xFunc)(&ctx, 
acb0: 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d  n, apVal); /* IM
acc0: 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30  P: R-24505-23230
acd0: 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61   */.  if( db->ma
ace0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20  llocFailed ){.  
acf0: 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68    /* Even though
ad00: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20   a malloc() has 
ad10: 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c  failed, the impl
ad20: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
ad30: 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75  e.    ** user fu
ad40: 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20  nction may have 
ad50: 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65  called an sqlite
ad60: 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66  3_result_XXX() f
ad70: 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74  unction.    ** t
ad80: 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65  o return a value
ad90: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
ada0: 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e  call releases an
adb0: 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20  y resources.    
adc0: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
add0: 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e  th such a value.
ade0: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
adf0: 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
ae00: 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67  e(&ctx.s);.    g
ae10: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
ae20: 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75 78  .  /* If any aux
ae30: 69 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e 63  iliary data func
ae40: 74 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20  tions have been 
ae50: 63 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20 75  called by this u
ae60: 73 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20  ser function,.  
ae70: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63  ** immediately c
ae80: 61 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63 74  all the destruct
ae90: 6f 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73  or for any non-s
aea0: 74 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20 20  tatic values..  
aeb0: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56 64  */.  if( ctx.pVd
aec0: 62 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73 71  beFunc ){.    sq
aed0: 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41  lite3VdbeDeleteA
aee0: 75 78 44 61 74 61 28 63 74 78 2e 70 56 64 62 65  uxData(ctx.pVdbe
aef0: 46 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  Func, pOp->p1);.
af00: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62      pOp->p4.pVdb
af10: 65 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62  eFunc = ctx.pVdb
af20: 65 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e  eFunc;.    pOp->
af30: 70 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42 45  p4type = P4_VDBE
af40: 46 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  FUNC;.  }..  /* 
af50: 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  If the function 
af60: 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f  returned an erro
af70: 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65  r, throw an exce
af80: 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63  ption */.  if( c
af90: 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  tx.isError ){.  
afa0: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
afb0: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
afc0: 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
afd0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74  3_value_text(&ct
afe0: 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20  x.s));.    rc = 
aff0: 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ctx.isError;.  }
b000: 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
b010: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
b020: 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69  nction into regi
b030: 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c  ster P3 */.  sql
b040: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
b050: 63 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65  coding(&ctx.s, e
b060: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69  ncoding);.  sqli
b070: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
b080: 4f 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20  Out, &ctx.s);.  
b090: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
b0a0: 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29  emTooBig(pOut) )
b0b0: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
b0c0: 69 67 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20  ig;.  }..#if 0. 
b0d0: 20 2f 2a 20 54 68 65 20 61 70 70 2d 64 65 66 69   /* The app-defi
b0e0: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  ned function has
b0f0: 20 64 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20   done something 
b100: 74 68 61 74 20 61 73 20 63 61 75 73 65 64 20 74  that as caused t
b110: 68 69 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65  his.  ** stateme
b120: 6e 74 20 74 6f 20 65 78 70 69 72 65 2e 20 20 28  nt to expire.  (
b130: 50 65 72 68 61 70 73 20 74 68 65 20 66 75 6e 63  Perhaps the func
b140: 74 69 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69  tion called sqli
b150: 74 65 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20  te3_exec().  ** 
b160: 77 69 74 68 20 61 20 43 52 45 41 54 45 20 54 41  with a CREATE TA
b170: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a  BLE statement.).
b180: 20 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78    */.  if( p->ex
b190: 70 69 72 65 64 20 29 20 72 63 20 3d 20 53 51 4c  pired ) rc = SQL
b1a0: 49 54 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69  ITE_ABORT;.#endi
b1b0: 66 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  f..  REGISTER_TR
b1c0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
b1d0: 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
b1e0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
b1f0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b200: 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50  Opcode: BitAnd P
b210: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
b220: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
b230: 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76  ise AND of the v
b240: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
b250: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
b260: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
b270: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b280: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b290: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b2a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b2b0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b2c0: 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33  : BitOr P1 P2 P3
b2d0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20   * *.**.** Take 
b2e0: 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20  the bit-wise OR 
b2f0: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
b300: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
b310: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
b320: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b330: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b340: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b350: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b360: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b370: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c  * Opcode: ShiftL
b380: 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  eft P1 P2 P3 * *
b390: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
b3a0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
b3b0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
b3c0: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
b3d0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
b3e0: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
b3f0: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
b400: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
b410: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b420: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b430: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b440: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b450: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b460: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
b470: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
b480: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66  3 * *.**.** Shif
b490: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
b4a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b4b0: 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  P2 to the right 
b4c0: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
b4d0: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
b4e0: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
b4f0: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
b500: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
b510: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b520: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b530: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b540: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b550: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
b560: 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20  _BitAnd:        
b570: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b580: 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69   as TK_BITAND, i
b590: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b5a0: 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20  .case OP_BitOr: 
b5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5c0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
b5d0: 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  ITOR, in1, in2, 
b5e0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b5f0: 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20  ShiftLeft:      
b600: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b610: 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e  as TK_LSHIFT, in
b620: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b630: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67  case OP_ShiftRig
b640: 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ht: {           
b650: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53  /* same as TK_RS
b660: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
b670: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41  out3 */.  i64 iA
b680: 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36  ;.  u64 uA;.  i6
b690: 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a  4 iB;.  u8 op;..
b6a0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
b6b0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
b6c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
b6d0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
b6e0: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
b6f0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
b700: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
b710: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
b720: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
b730: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
b740: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20  break;.  }.  iA 
b750: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
b760: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69  Value(pIn2);.  i
b770: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  B = sqlite3VdbeI
b780: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
b790: 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   op = pOp->opcod
b7a0: 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f  e;.  if( op==OP_
b7b0: 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41  BitAnd ){.    iA
b7c0: 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20   &= iB;.  }else 
b7d0: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72  if( op==OP_BitOr
b7e0: 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42   ){.    iA |= iB
b7f0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42  ;.  }else if( iB
b800: 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
b810: 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52  t( op==OP_ShiftR
b820: 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  ight || op==OP_S
b830: 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20  hiftLeft );..   
b840: 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20   /* If shifting 
b850: 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d  by a negative am
b860: 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74  ount, shift in t
b870: 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69  he other directi
b880: 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42  on */.    if( iB
b890: 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  <0 ){.      asse
b8a0: 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68  rt( OP_ShiftRigh
b8b0: 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b  t==OP_ShiftLeft+
b8c0: 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20  1 );.      op = 
b8d0: 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b  2*OP_ShiftLeft +
b8e0: 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69   1 - op;.      i
b8f0: 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d  B = iB>(-64) ? -
b900: 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a  iB : 64;.    }..
b910: 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29      if( iB>=64 )
b920: 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41  {.      iA = (iA
b930: 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  >=0 || op==OP_Sh
b940: 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d  iftLeft) ? 0 : -
b950: 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
b960: 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20      memcpy(&uA, 
b970: 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29  &iA, sizeof(uA))
b980: 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d  ;.      if( op==
b990: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a  OP_ShiftLeft ){.
b9a0: 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69          uA <<= i
b9b0: 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  B;.      }else{.
b9c0: 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69          uA >>= i
b9d0: 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69  B;.        /* Si
b9e0: 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72  gn-extend on a r
b9f0: 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20  ight shift of a 
ba00: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
ba10: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  */.        if( i
ba20: 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28  A<0 ) uA |= ((((
ba30: 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c  u64)0xffffffff)<
ba40: 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29  <32)|0xffffffff)
ba50: 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20   << (64-iB);.   
ba60: 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70     }.      memcp
ba70: 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65  y(&iA, &uA, size
ba80: 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20  of(iA));.    }. 
ba90: 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
baa0: 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70   iA;.  MemSetTyp
bab0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
bac0: 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
bad0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64  ../* Opcode: Add
bae0: 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a  Imm  P1 P2 * * *
baf0: 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20  .** .** Add the 
bb00: 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74  constant P2 to t
bb10: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
bb20: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  ster P1..** The 
bb30: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
bb40: 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a   an integer..**.
bb50: 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20  ** To force any 
bb60: 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61  register to be a
bb70: 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20  n integer, just 
bb80: 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f  add 0..*/.case O
bb90: 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20  P_AddImm: {     
bba0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
bbb0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
bbc0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
bbd0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
bbe0: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
bbf0: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
bc00: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  y(pIn1);.  pIn1-
bc10: 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  >u.i += pOp->p2;
bc20: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
bc30: 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e  Opcode: MustBeIn
bc40: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
bc50: 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76   .** Force the v
bc60: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
bc70: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
bc80: 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61  eger.  If the va
bc90: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
bca0: 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
bcb0: 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  nd cannot be con
bcc0: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
bcd0: 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75  nteger.** withou
bce0: 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65  t data loss, the
bcf0: 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
bd00: 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20  ly to P2, or if 
bd10: 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61  P2==0.** raise a
bd20: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  n SQLITE_MISMATC
bd30: 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a  H exception..*/.
bd40: 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e  case OP_MustBeIn
bd50: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
bd60: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
bd70: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
bd80: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79  Op->p1];.  apply
bd90: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
bda0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
bdb0: 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
bdc0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
bdd0: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
bde0: 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
bdf0: 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  2==0 ){.      rc
be00: 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54   = SQLITE_MISMAT
be10: 43 48 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  CH;.      goto a
be20: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
be30: 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  r;.    }else{.  
be40: 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
be50: 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   - 1;.    }.  }e
be60: 6c 73 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  lse{.    MemSetT
be70: 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45  ypeFlag(pIn1, ME
be80: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72  M_Int);.  }.  br
be90: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
bea0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
beb0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
bec0: 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69  code: RealAffini
bed0: 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ty P1 * * * *.**
bee0: 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
bef0: 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  P1 holds an inte
bf00: 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ger convert it t
bf10: 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  o a real value..
bf20: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
bf30: 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65  e is used when e
bf40: 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d  xtracting inform
bf50: 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c  ation from a col
bf60: 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20  umn that.** has 
bf70: 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20  REAL affinity.  
bf80: 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  Such column valu
bf90: 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  es may still be 
bfa0: 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74  stored as.** int
bfb0: 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65  egers, for space
bfc0: 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74   efficiency, but
bfd0: 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f   after extractio
bfe0: 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a  n we want them.*
bff0: 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61  * to have only a
c000: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a   real value..*/.
c010: 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69  case OP_RealAffi
c020: 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20  nity: {         
c030: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
c040: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c050: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
c060: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
c070: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73  MEM_Int ){.    s
c080: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61  qlite3VdbeMemRea
c090: 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  lify(pIn1);.  }.
c0a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
c0b0: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
c0c0: 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f  E_OMIT_CAST./* O
c0d0: 70 63 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31  pcode: ToText P1
c0e0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
c0f0: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
c100: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
c110: 20 62 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20   be text..** If 
c120: 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d  the value is num
c130: 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74  eric, convert it
c140: 20 74 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69   to a string usi
c150: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
c160: 6c 65 6e 74 20 6f 66 20 70 72 69 6e 74 66 28 29  lent of printf()
c170: 2e 20 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61  .  Blob values a
c180: 72 65 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  re unchanged and
c190: 0a 2a 2a 20 61 72 65 20 61 66 74 65 72 77 61 72  .** are afterwar
c1a0: 64 73 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70  ds simply interp
c1b0: 72 65 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a  reted as text..*
c1c0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
c1d0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
c1e0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
c1f0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
c200: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
c210: 6f 54 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20  oText: {        
c220: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c230: 65 20 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c  e as TK_TO_TEXT,
c240: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
c250: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
c260: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
c270: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
c280: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
c290: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65  & MEM_Null ) bre
c2a0: 61 6b 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45  ak;.  assert( ME
c2b0: 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62  M_Str==(MEM_Blob
c2c0: 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  >>3) );.  pIn1->
c2d0: 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e  flags |= (pIn1->
c2e0: 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e  flags&MEM_Blob)>
c2f0: 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  >3;.  applyAffin
c300: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
c310: 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64  _AFF_TEXT, encod
c320: 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  ing);.  rc = Exp
c330: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
c340: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
c350: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c  lags & MEM_Str |
c360: 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
c370: 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  ed );.  pIn1->fl
c380: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74  ags &= ~(MEM_Int
c390: 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c  |MEM_Real|MEM_Bl
c3a0: 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20  ob|MEM_Zero);.  
c3b0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
c3c0: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  IZE(pIn1);.  bre
c3d0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c3e0: 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20  : ToBlob P1 * * 
c3f0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
c400: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c410: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
c420: 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65   BLOB..** If the
c430: 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69   value is numeri
c440: 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  c, convert it to
c450: 20 61 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e   a string first.
c460: 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20  .** Strings are 
c470: 73 69 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72  simply reinterpr
c480: 65 74 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69  eted as blobs wi
c490: 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20  th no change.** 
c4a0: 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  to the underlyin
c4b0: 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20  g data..**.** A 
c4c0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
c4d0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
c4e0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
c4f0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
c500: 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20  case OP_ToBlob: 
c510: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
c520: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c530: 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f  _TO_BLOB, in1 */
c540: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
c550: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
c560: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
c570: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a  M_Null ) break;.
c580: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
c590: 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d  gs & MEM_Blob)==
c5a0: 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
c5b0: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
c5c0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e  ITE_AFF_TEXT, en
c5d0: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73  coding);.    ass
c5e0: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
c5f0: 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62   & MEM_Str || db
c600: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
c610: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
c620: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42  Flag(pIn1, MEM_B
c630: 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  lob);.  }else{. 
c640: 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26     pIn1->flags &
c650: 3d 20 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  = ~(MEM_TypeMask
c660: 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d  &~MEM_Blob);.  }
c670: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
c680: 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
c690: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c6a0: 6f 64 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50  ode: ToNumeric P
c6b0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
c6c0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
c6d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
c6e0: 6f 20 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69  o be numeric (ei
c6f0: 74 68 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67  ther an.** integ
c700: 65 72 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67  er or a floating
c710: 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a  -point number.).
c720: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
c730: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
c740: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
c750: 69 74 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74  it to an using t
c760: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
c770: 20 6f 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74   of atoi() or at
c780: 6f 66 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  of() and store 0
c790: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
c7a0: 65 72 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f  ersion .** is po
c7b0: 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ssible..**.** A 
c7c0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
c7d0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
c7e0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
c7f0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
c800: 63 61 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69  case OP_ToNumeri
c810: 63 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  c: {            
c820: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
c830: 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20   TK_TO_NUMERIC, 
c840: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
c850: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
c860: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
c870: 4e 75 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  Numerify(pIn1);.
c880: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
c890: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
c8a0: 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  _CAST */../* Opc
c8b0: 6f 64 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20  ode: ToInt P1 * 
c8c0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
c8d0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
c8e0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
c8f0: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
c900: 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73  .** The value is
c910: 20 63 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61   currently a rea
c920: 6c 20 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69  l number, drop i
c930: 74 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61  ts fractional pa
c940: 72 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  rt..** If the va
c950: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
c960: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
c970: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74  ert it to an int
c980: 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a  eger using the.*
c990: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
c9a0: 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65  atoi() and store
c9b0: 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f   0 if no such co
c9c0: 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73  nversion is poss
c9d0: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
c9e0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
c9f0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
ca00: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
ca10: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
ca20: 73 65 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20  se OP_ToInt: {  
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca40: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
ca50: 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  _INT, in1 */.  p
ca60: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
ca70: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
ca80: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
ca90: 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  ull)==0 ){.    s
caa0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
cab0: 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
cac0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
cad0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
cae0: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26  TE_OMIT_CAST) &&
caf0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
cb00: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
cb10: 4f 49 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  OINT)./* Opcode:
cb20: 20 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a   ToReal P1 * * *
cb30: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
cb40: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
cb50: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20  ster P1 to be a 
cb60: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
cb70: 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65  umber..** If The
cb80: 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e   value is curren
cb90: 74 6c 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20  tly an integer, 
cba0: 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49  convert it..** I
cbb0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
cbc0: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
cbd0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
cbe0: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69  o an integer usi
cbf0: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
cc00: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61  lent of atoi() a
cc10: 6e 64 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20  nd store 0.0 if 
cc20: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
cc30: 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  on is possible..
cc40: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
cc50: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
cc60: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
cc70: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
cc80: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
cc90: 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  ToReal: {       
cca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ccb0: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c  me as TK_TO_REAL
ccc0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
ccd0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
cce0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
ccf0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
cd00: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
cd10: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
cd20: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
cd30: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49  dbeMemRealify(pI
cd40: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
cd50: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ;.}.#endif /* !d
cd60: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
cd70: 49 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66  IT_CAST) && !def
cd80: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
cd90: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29  _FLOATING_POINT)
cda0: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
cdb0: 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Lt P1 P2 P3 P4 P
cdc0: 35 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  5.**.** Compare 
cdd0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
cde0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33  gister P1 and P3
cdf0: 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65  .  If reg(P3)<re
ce00: 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75  g(P1) then.** ju
ce10: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
ce20: 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  .  .**.** If the
ce30: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
ce40: 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  LL bit of P5 is 
ce50: 73 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72  set and either r
ce60: 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67  eg(P1) or.** reg
ce70: 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65  (P3) is NULL the
ce80: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  n take the jump.
ce90: 20 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f    If the SQLITE_
cea0: 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62  JUMPIFNULL .** b
ceb0: 69 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e  it is clear then
cec0: 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66   fall through if
ced0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
cee0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54  is NULL..**.** T
cef0: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
cf00: 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35  SK portion of P5
cf10: 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69   must be an affi
cf20: 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d  nity character -
cf30: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
cf40: 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  EXT, SQLITE_AFF_
cf50: 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20  INTEGER, and so 
cf60: 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70  forth. An attemp
cf70: 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f  t is made .** to
cf80: 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70   coerce both inp
cf90: 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  uts according to
cfa0: 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62   this affinity b
cfb0: 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d  efore the.** com
cfc0: 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e  parison is made.
cfd0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   If the SQLITE_A
cfe0: 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c  FF_MASK is 0x00,
cff0: 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a   then numeric.**
d000: 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65   affinity is use
d010: 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  d. Note that the
d020: 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72   affinity conver
d030: 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64  sions are stored
d040: 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  .** back into th
d050: 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
d060: 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f  s P1 and P3.  So
d070: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e   this opcode can
d080: 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73   cause.** persis
d090: 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20  tent changes to 
d0a0: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
d0b0: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20   P3..**.** Once 
d0c0: 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  any conversions 
d0d0: 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65  have taken place
d0e0: 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61  , and neither va
d0f0: 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a  lue is NULL, .**
d100: 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20   the values are 
d110: 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74  compared. If bot
d120: 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f  h values are blo
d130: 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29  bs then memcmp()
d140: 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64   is.** used to d
d150: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73  etermine the res
d160: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  ults of the comp
d170: 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68  arison.  If both
d180: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74   values.** are t
d190: 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70  ext, then the ap
d1a0: 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74  propriate collat
d1b0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
d1c0: 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20  cified in.** P4 
d1d0: 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74  is  used to do t
d1e0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
d1f0: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65  If P4 is not spe
d200: 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d  cified then.** m
d210: 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20  emcmp() is used 
d220: 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
d230: 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68  string.  If both
d240: 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e   values are.** n
d250: 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e  umeric, then a n
d260: 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f  umeric compariso
d270: 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68  n is used. If th
d280: 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20  e two values.** 
d290: 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  are of different
d2a0: 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d   types, then num
d2b0: 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65  bers are conside
d2c0: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  red less than.**
d2d0: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72   strings and str
d2e0: 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65  ings are conside
d2f0: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  red less than bl
d300: 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  obs..**.** If th
d310: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
d320: 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65   bit of P5 is se
d330: 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a  t, then do not j
d340: 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a  ump.  Instead,.*
d350: 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61  * store a boolea
d360: 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68 65 72  n result (either
d370: 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c   0, or 1, or NUL
d380: 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  L) in register P
d390: 32 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  2..*/./* Opcode:
d3a0: 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ne P1 P2 P3 P4 
d3b0: 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P5.**.** This wo
d3c0: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
d3d0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
d3e0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
d3f0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
d400: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
d410: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
d420: 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61   P3 are not equa
d430: 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  l.  See the Lt o
d440: 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64  pcode for.** add
d450: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
d460: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
d470: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
d480: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
d490: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
d4a0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
d4b0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
d4c0: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
d4d0: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
d4e0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
d4f0: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
d500: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
d510: 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65  parison is false
d520: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
d530: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
d540: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
d550: 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  true..** If neit
d560: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
d570: 55 4c 4c 20 74 68 65 20 74 68 65 20 72 65 73 75  ULL the the resu
d580: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
d590: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
d5a0: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
d5b0: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
d5c0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
d5d0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  .*/./* Opcode: E
d5e0: 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  q P1 P2 P3 P4 P5
d5f0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
d600: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
d610: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
d620: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
d630: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
d640: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
d650: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
d660: 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20  3 are equal..** 
d670: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
d680: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
d690: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
d6a0: 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55  .** If SQLITE_NU
d6b0: 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50  LLEQ is set in P
d6c0: 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  5 then the resul
d6d0: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
d6e0: 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  is always either
d6f0: 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73  .** true or fals
d700: 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e  e and is never N
d710: 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70  ULL.  If both op
d720: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
d730: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a  then the result.
d740: 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  ** of comparison
d750: 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 65 69   is true.  If ei
d760: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
d770: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
d780: 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a  sult is false..*
d790: 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65  * If neither ope
d7a0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
d7b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
d7c0: 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f  he same as it wo
d7d0: 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65  uld be if.** the
d7e0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66   SQLITE_NULLEQ f
d7f0: 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64  lag were omitted
d800: 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20   from P5..*/./* 
d810: 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32  Opcode: Le P1 P2
d820: 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
d830: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
d840: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
d850: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
d860: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
d870: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
d880: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
d890: 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  3 is less than o
d8a0: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
d8b0: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
d8c0: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
d8d0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
d8e0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
d8f0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
d900: 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20  pcode: Gt P1 P2 
d910: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
d920: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
d930: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
d940: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
d950: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
d960: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
d970: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
d980: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
d990: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
d9a0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
d9b0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
d9c0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
d9d0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
d9e0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
d9f0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
da00: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
da10: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
da20: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
da30: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
da40: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
da50: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
da60: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
da70: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
da80: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
da90: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
daa0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
dab0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
dac0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
dad0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20  .*/.case OP_Eq: 
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
daf0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20   same as TK_EQ, 
db00: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
db10: 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20  /.case OP_Ne:   
db20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
db30: 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75  ame as TK_NE, ju
db40: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
db50: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20  case OP_Lt:     
db60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
db70: 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70  e as TK_LT, jump
db80: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
db90: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20  se OP_Le:       
dba0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
dbb0: 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20  as TK_LE, jump, 
dbc0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
dbd0: 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20   OP_Gt:         
dbe0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
dbf0: 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GT, jump, in
dc00: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
dc10: 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Ge: {         
dc20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
dc30: 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GE, jump, in1,
dc40: 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
dc50: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
dc60: 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63   Result of the c
dc70: 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e  omparison of pIn
dc80: 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a  1 against pIn3 *
dc90: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
dca0: 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  y;      /* Affin
dcb0: 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63  ity to use for c
dcc0: 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75  omparison */.  u
dcd0: 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20  16 flags1;      
dce0: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
dcf0: 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
dd00: 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20  In1->flags */.  
dd10: 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20  u16 flags3;     
dd20: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
dd30: 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
dd40: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a  pIn3->flags */..
dd50: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
dd60: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
dd70: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
dd80: 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e  ;.  flags1 = pIn
dd90: 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67  1->flags;.  flag
dda0: 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
ddb0: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
ddc0: 6c 61 67 73 20 7c 20 70 49 6e 33 2d 3e 66 6c 61  lags | pIn3->fla
ddd0: 67 73 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  gs)&MEM_Null ){.
dde0: 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f      /* One or bo
ddf0: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
de00: 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20  NULL */.    if( 
de10: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
de20: 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20  _NULLEQ ){.     
de30: 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55   /* If SQLITE_NU
de40: 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77 68 69  LLEQ is set (whi
de50: 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70  ch will only hap
de60: 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61  pen if the opera
de70: 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20  tor is.      ** 
de80: 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20  OP_Eq or OP_Ne) 
de90: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
dea0: 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64  mp or not depend
deb0: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20  ing on whether. 
dec0: 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62       ** or not b
ded0: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
dee0: 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a   null..      */.
def0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
df00: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71  p->opcode==OP_Eq
df10: 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
df20: 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20  =OP_Ne );.      
df30: 72 65 73 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  res = (pIn1->fla
df40: 67 73 20 26 20 70 49 6e 33 2d 3e 66 6c 61 67 73  gs & pIn3->flags
df50: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 3b   & MEM_Null)==0;
df60: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
df70: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c    /* SQLITE_NULL
df80: 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20  EQ is clear and 
df90: 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65  at least one ope
dfa0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20  rand is NULL,.  
dfb0: 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20      ** then the 
dfc0: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
dfd0: 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20   NULL..      ** 
dfe0: 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  The jump is take
dff0: 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  n if the SQLITE_
e000: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69  JUMPIFNULL bit i
e010: 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a  s set..      */.
e020: 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
e030: 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
e040: 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f  P2 ){.        pO
e050: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
e060: 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d  p2];.        Mem
e070: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
e080: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20  , MEM_Null);.   
e090: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
e0a0: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
e0b0: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  t);.      }else 
e0c0: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
e0d0: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
e0e0: 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20  ){.        pc = 
e0f0: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20  pOp->p2-1;.     
e100: 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a   }.      break;.
e110: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
e120: 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70     /* Neither op
e130: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20  erand is NULL.  
e140: 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  Do a comparison.
e150: 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79   */.    affinity
e160: 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c   = pOp->p5 & SQL
e170: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20  ITE_AFF_MASK;.  
e180: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 20 29    if( affinity )
e190: 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
e1a0: 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66 69  inity(pIn1, affi
e1b0: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
e1c0: 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
e1d0: 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69 6e  nity(pIn3, affin
e1e0: 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ity, encoding);.
e1f0: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61        if( db->ma
e200: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
e210: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a  o no_mem;.    }.
e220: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
e230: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
e240: 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  LSEQ || pOp->p4.
e250: 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20  pColl==0 );.    
e260: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
e270: 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  ;.    ExpandBlob
e280: 28 70 49 6e 33 29 3b 0a 20 20 20 20 72 65 73 20  (pIn3);.    res 
e290: 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
e2a0: 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20  are(pIn3, pIn1, 
e2b0: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a  pOp->p4.pColl);.
e2c0: 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f    }.  switch( pO
e2d0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
e2e0: 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20   case OP_Eq:    
e2f0: 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20  res = res==0;   
e300: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
e310: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20  e OP_Ne:    res 
e320: 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72  = res!=0;     br
e330: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
e340: 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Lt:    res = re
e350: 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s<0;      break;
e360: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a  .    case OP_Le:
e370: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30      res = res<=0
e380: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
e390: 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20   case OP_Gt:    
e3a0: 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20  res = res>0;    
e3b0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
e3c0: 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20  ault:       res 
e3d0: 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72  = res>=0;     br
e3e0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
e3f0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
e400: 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
e410: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
e420: 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62  ->p2];.    memAb
e430: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
e440: 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  Out);.    MemSet
e450: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
e460: 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
e470: 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20  t->u.i = res;.  
e480: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
e490: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
e4a0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 65 73  .  }else if( res
e4b0: 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
e4c0: 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 0a 20 20 2f  ->p2-1;.  }..  /
e4d0: 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67  * Undo any chang
e4e0: 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79  es made by apply
e4f0: 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68  Affinity() to th
e500: 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
e510: 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c  s. */.  pIn1->fl
e520: 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  ags = (pIn1->fla
e530: 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  gs&~MEM_TypeMask
e540: 29 20 7c 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f  ) | (flags1&MEM_
e550: 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70 49 6e  TypeMask);.  pIn
e560: 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 33  3->flags = (pIn3
e570: 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70  ->flags&~MEM_Typ
e580: 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 33  eMask) | (flags3
e590: 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a  &MEM_TypeMask);.
e5a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
e5b0: 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69  pcode: Permutati
e5c0: 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  on * * * P4 *.**
e5d0: 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d  .** Set the perm
e5e0: 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  utation used by 
e5f0: 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f  the OP_Compare o
e600: 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68  perator to be th
e610: 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e  e array.** of in
e620: 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a  tegers in P4..**
e630: 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74  .** The permutat
e640: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ion is only vali
e650: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
e660: 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 2c   OP_Permutation,
e670: 20 4f 50 5f 43 6f 6d 70 61 72 65 2c 0a 2a 2a 20   OP_Compare,.** 
e680: 4f 50 5f 48 61 6c 74 2c 20 6f 72 20 4f 50 5f 52  OP_Halt, or OP_R
e690: 65 73 75 6c 74 52 6f 77 2e 20 20 54 79 70 69 63  esultRow.  Typic
e6a0: 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d  ally the OP_Perm
e6b0: 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6f  utation should o
e6c0: 63 63 75 72 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  ccur.** immediat
e6d0: 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65  ely prior to the
e6e0: 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a   OP_Compare..*/.
e6f0: 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74  case OP_Permutat
e700: 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ion: {.  assert(
e710: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
e720: 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61  _INTARRAY );.  a
e730: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61  ssert( pOp->p4.a
e740: 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20  i );.  aPermute 
e750: 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20  = pOp->p4.ai;.  
e760: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
e770: 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
e780: 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
e790: 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63   Compare two vec
e7a0: 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65 72  tors of register
e7b0: 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65  s in reg(P1)..re
e7c0: 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c  g(P1+P3-1) (call
e7d0: 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20   this.** vector 
e7e0: 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28  "A") and in reg(
e7f0: 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31  P2)..reg(P2+P3-1
e800: 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20 74  ) ("B").  Save t
e810: 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20  he result of.** 
e820: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  the comparison f
e830: 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e 65  or use by the ne
e840: 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  xt OP_Jump instr
e850: 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  uct..**.** P4 is
e860: 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
e870: 74 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65  ture that define
e880: 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  s collating sequ
e890: 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a  ences and sort.*
e8a0: 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65  * orders for the
e8b0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
e8c0: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70  e permutation ap
e8d0: 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65  plies to registe
e8e0: 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65  rs.** only.  The
e8f0: 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74   KeyInfo element
e900: 73 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65  s are used seque
e910: 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54  ntially..**.** T
e920: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
e930: 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73   a sort comparis
e940: 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d  on, so NULLs com
e950: 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e  pare equal,.** N
e960: 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68  ULLs are less th
e970: 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62  an numbers, numb
e980: 65 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ers are less tha
e990: 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e  n strings,.** an
e9a0: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65  d strings are le
e9b0: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
e9c0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72  /.case OP_Compar
e9d0: 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  e: {.  int n;.  
e9e0: 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b  int i;.  int p1;
e9f0: 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e  .  int p2;.  con
ea00: 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  st KeyInfo *pKey
ea10: 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b  Info;.  int idx;
ea20: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  .  CollSeq *pCol
ea30: 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  l;    /* Collati
ea40: 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75  ng sequence to u
ea50: 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20  se on this term 
ea60: 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20  */.  int bRev;  
ea70: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
ea80: 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73  for DESCENDING s
ea90: 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20  ort order */..  
eaa0: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
eab0: 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
eac0: 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
ead0: 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61  sert( n>0 );.  a
eae0: 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21  ssert( pKeyInfo!
eaf0: 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70  =0 );.  p1 = pOp
eb00: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
eb10: 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45  ->p2;.#if SQLITE
eb20: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61 50 65  _DEBUG.  if( aPe
eb30: 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74  rmute ){.    int
eb40: 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20   k, mx = 0;.    
eb50: 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b  for(k=0; k<n; k+
eb60: 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b  +) if( aPermute[
eb70: 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65  k]>mx ) mx = aPe
eb80: 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73  rmute[k];.    as
eb90: 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
eba0: 2b 6d 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29  +mx<=p->nMem+1 )
ebb0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
ebc0: 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 70 2d 3e  >0 && p2+mx<=p->
ebd0: 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  nMem+1 );.  }els
ebe0: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
ebf0: 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 70 2d 3e  1>0 && p1+n<=p->
ec00: 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73  nMem+1 );.    as
ec10: 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
ec20: 2b 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  +n<=p->nMem+1 );
ec30: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
ec40: 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20  QLITE_DEBUG */. 
ec50: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
ec60: 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61  ++){.    idx = a
ec70: 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75  Permute ? aPermu
ec80: 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61  te[i] : i;.    a
ec90: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
eca0: 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  d(&aMem[p1+idx])
ecb0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
ecc0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
ecd0: 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p2+idx]) );.   
ece0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
ecf0: 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31  p1+idx, &aMem[p1
ed00: 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49  +idx]);.    REGI
ed10: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64  STER_TRACE(p2+id
ed20: 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  x, &aMem[p2+idx]
ed30: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
ed40: 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c  <pKeyInfo->nFiel
ed50: 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d  d );.    pColl =
ed60: 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c   pKeyInfo->aColl
ed70: 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20  [i];.    bRev = 
ed80: 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f  pKeyInfo->aSortO
ed90: 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f  rder[i];.    iCo
eda0: 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d  mpare = sqlite3M
edb0: 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b  emCompare(&aMem[
edc0: 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70  p1+idx], &aMem[p
edd0: 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a  2+idx], pColl);.
ede0: 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65      if( iCompare
edf0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52   ){.      if( bR
ee00: 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20  ev ) iCompare = 
ee10: 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20  -iCompare;.     
ee20: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
ee30: 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30  }.  aPermute = 0
ee40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
ee50: 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31   Opcode: Jump P1
ee60: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
ee70: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73   Jump to the ins
ee80: 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72  truction at addr
ee90: 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50  ess P1, P2, or P
eea0: 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  3 depending on w
eeb0: 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65  hether.** in the
eec0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f   most recent OP_
eed0: 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74  Compare instruct
eee0: 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f  ion the P1 vecto
eef0: 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a  r was less than.
ef00: 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20  ** equal to, or 
ef10: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
ef20: 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70   P2 vector, resp
ef30: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73  ectively..*/.cas
ef40: 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20  e OP_Jump: {    
ef50: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
ef60: 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61   */.  if( iCompa
ef70: 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  re<0 ){.    pc =
ef80: 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 0a 20 20   pOp->p1 - 1;.  
ef90: 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61  }else if( iCompa
efa0: 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  re==0 ){.    pc 
efb0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
efc0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d   }else{.    pc =
efd0: 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20   pOp->p3 - 1;.  
efe0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
eff0: 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20   Opcode: And P1 
f000: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
f010: 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
f020: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
f030: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  es in registers 
f040: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
f050: 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c   write the resul
f060: 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
f070: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
f080: 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
f090: 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74  0 (false) then t
f0a0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65  he result is 0 e
f0b0: 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74  ven if.** the ot
f0c0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
f0d0: 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74  L.  A NULL and t
f0e0: 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  rue or two NULLs
f0f0: 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20   give.** a NULL 
f100: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  output..*/./* Op
f110: 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50  code: Or P1 P2 P
f120: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  3 * *.**.** Take
f130: 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20   the logical OR 
f140: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
f150: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
f160: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
f170: 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72   the answer in r
f180: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
f190: 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
f1a0: 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20  r P2 is nonzero 
f1b0: 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20  (true) then the 
f1c0: 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75  result is 1 (tru
f1d0: 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68  e).** even if th
f1e0: 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
f1f0: 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
f200: 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20  nd false or two 
f210: 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20  NULLs.** give a 
f220: 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  NULL output..*/.
f230: 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20  case OP_And:    
f240: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f250: 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31  e as TK_AND, in1
f260: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
f270: 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20  ase OP_Or: {    
f280: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f290: 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20   as TK_OR, in1, 
f2a0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
f2b0: 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66  nt v1;    /* Lef
f2c0: 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46  t operand:  0==F
f2d0: 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
f2e0: 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
f2f0: 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20  L */.  int v2;  
f300: 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61    /* Right opera
f310: 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d  nd: 0==FALSE, 1=
f320: 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
f330: 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20  N or NULL */..  
f340: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
f350: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
f360: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
f370: 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20  ull ){.    v1 = 
f380: 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
f390: 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v1 = sqlite3Vdbe
f3a0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
f3b0: 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20  0;.  }.  pIn2 = 
f3c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
f3d0: 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67    if( pIn2->flag
f3e0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
f3f0: 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65      v2 = 2;.  }e
f400: 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71  lse{.    v2 = sq
f410: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
f420: 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a  e(pIn2)!=0;.  }.
f430: 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
f440: 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20  e==OP_And ){.   
f450: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
f460: 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f  signed char and_
f470: 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30  logic[] = { 0, 0
f480: 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c  , 0, 0, 1, 2, 0,
f490: 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   2, 2 };.    v1 
f4a0: 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33  = and_logic[v1*3
f4b0: 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +v2];.  }else{. 
f4c0: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
f4d0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72  unsigned char or
f4e0: 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
f4f0: 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32  1, 2, 1, 1, 1, 2
f500: 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 1, 2 };.    v1
f510: 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33   = or_logic[v1*3
f520: 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  +v2];.  }.  pOut
f530: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
f540: 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29  ];.  if( v1==2 )
f550: 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
f560: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
f570: 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ull);.  }else{. 
f580: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76     pOut->u.i = v
f590: 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  1;.    MemSetTyp
f5a0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
f5b0: 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
f5c0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
f5d0: 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a   Not P1 P2 * * *
f5e0: 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
f5f0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
f600: 67 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62  gister P1 as a b
f610: 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53  oolean value.  S
f620: 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c  tore the.** bool
f630: 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  ean complement i
f640: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
f650: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
f660: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a  register P1 is .
f670: 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20  ** NULL, then a 
f680: 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69  NULL is stored i
f690: 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
f6a0: 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  _Not: {         
f6b0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
f6c0: 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f  s TK_NOT, in1, o
f6d0: 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
f6e0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
f6f0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
f700: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70  Op->p2];.  if( p
f710: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
f720: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
f730: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
f740: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  ll(pOut);.  }els
f750: 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
f760: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
f770: 75 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65  ut, !sqlite3Vdbe
f780: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b  IntValue(pIn1));
f790: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
f7a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e  ./* Opcode: BitN
f7b0: 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
f7c0: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
f7d0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
f7e0: 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e 20  gister P1 as an 
f7f0: 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20  integer.  Store 
f800: 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70  the.** ones-comp
f810: 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31  lement of the P1
f820: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
f830: 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31 20  ster P2.  If P1 
f840: 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20  holds.** a NULL 
f850: 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c  then store a NUL
f860: 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  L in P2..*/.case
f870: 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20   OP_BitNot: {   
f880: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f890: 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20  e as TK_BITNOT, 
f8a0: 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
f8b0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
f8c0: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
f8d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
f8e0: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
f8f0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
f900: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
f910: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
f920: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
f930: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
f940: 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69 74  t64(pOut, ~sqlit
f950: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
f960: 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65  In1));.  }.  bre
f970: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
f980: 3a 20 49 66 20 50 31 20 50 32 20 50 33 20 2a 20  : If P1 P2 P3 * 
f990: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
f9a0: 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
f9b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
f9c0: 73 20 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c  s true.  The val
f9d0: 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f 6e 73  ue is.** is cons
f9e0: 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69  idered true if i
f9f0: 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64  t is numeric and
fa00: 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74   non-zero.  If t
fa10: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
fa20: 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
fa30: 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
fa40: 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 2f  P3 is true..*/./
fa50: 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20  * Opcode: IfNot 
fa60: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
fa70: 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
fa80: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
fa90: 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c  gister P1 is Fal
faa0: 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69  se.  The value i
fab0: 73 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  s.** is consider
fac0: 65 64 20 74 72 75 65 20 69 66 20 69 74 20 68 61  ed true if it ha
fad0: 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  s a numeric valu
fae0: 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74  e of zero.  If t
faf0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
fb00: 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
fb10: 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
fb20: 50 33 20 69 73 20 74 72 75 65 2e 0a 2a 2f 0a 63  P3 is true..*/.c
fb30: 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20  ase OP_If:      
fb40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
fb50: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20  mp, in1 */.case 
fb60: 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20  OP_IfNot: {     
fb70: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
fb80: 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a  in1 */.  int c;.
fb90: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
fba0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
fbb0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
fbc0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d  _Null ){.    c =
fbd0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73   pOp->p3;.  }els
fbe0: 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  e{.#ifdef SQLITE
fbf0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
fc00: 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c  OINT.    c = sql
fc10: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
fc20: 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65  (pIn1)!=0;.#else
fc30: 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33  .    c = sqlite3
fc40: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
fc50: 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66  n1)!=0.0;.#endif
fc60: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
fc70: 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29  code==OP_IfNot )
fc80: 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 69   c = !c;.  }.  i
fc90: 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20 3d  f( c ){.    pc =
fca0: 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
fcb0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
fcc0: 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31  pcode: IsNull P1
fcd0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
fce0: 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
fcf0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
fd00: 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a  ter P1 is NULL..
fd10: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c  */.case OP_IsNul
fd20: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
fd30: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53  /* same as TK_IS
fd40: 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
fd50: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
fd60: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
fd70: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
fd80: 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b   MEM_Null)!=0 ){
fd90: 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
fda0: 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
fdb0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
fdc0: 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20  : NotNull P1 P2 
fdd0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  * * *.**.** Jump
fde0: 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
fdf0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
fe00: 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20  P1 is not NULL. 
fe10: 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74   .*/.case OP_Not
fe20: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
fe30: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
fe40: 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  _NOTNULL, jump, 
fe50: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
fe60: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
fe70: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
fe80: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
fe90: 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
fea0: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
feb0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
fec0: 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20  code: Column P1 
fed0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
fee0: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
fef0: 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72  data that cursor
ff00: 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73   P1 points to as
ff10: 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69   a structure bui
ff20: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  lt using.** the 
ff30: 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
ff40: 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68  uction.  (See th
ff50: 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  e MakeRecord opc
ff60: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
ff70: 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  al.** informatio
ff80: 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d  n about the form
ff90: 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29  at of the data.)
ffa0: 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32    Extract the P2
ffb0: 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72  -th column.** fr
ffc0: 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20  om this record. 
ffd0: 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65   If there are le
ffe0: 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a  ss that (P2+1) .
fff0: 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ** values in the
10000 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74   record, extract
10010 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54   a NULL..**.** T
10020 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74  he value extract
10030 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ed is stored in 
10040 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
10050 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ** If the column
10060 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20   contains fewer 
10070 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20  than P2 fields, 
10080 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e  then extract a N
10090 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20  ULL.  Or,.** if 
100a0 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
100b0 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20  is a P4_MEM use 
100c0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
100d0 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a   P4 argument as.
100e0 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a  ** the result..*
100f0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
10100 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69  AG_CLEARCACHE bi
10110 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61  t is set on P5 a
10120 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64  nd P1 is a pseud
10130 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a  o-table cursor,.
10140 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68  ** then the cach
10150 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20  e of the cursor 
10160 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74  is reset prior t
10170 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65  o extracting the
10180 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20   column..** The 
10190 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20  first OP_Column 
101a0 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f  against a pseudo
101b0 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65  -table after the
101c0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
101d0 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65  ntent.** registe
101e0 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68  r has changed sh
101f0 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62  ould have this b
10200 69 74 20 73 65 74 2e 0a 2a 2f 0a 63 61 73 65 20  it set..*/.case 
10210 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 75  OP_Column: {.  u
10220 33 32 20 70 61 79 6c 6f 61 64 53 69 7a 65 3b 20  32 payloadSize; 
10230 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
10240 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
10250 72 64 20 2a 2f 0a 20 20 69 36 34 20 70 61 79 6c  rd */.  i64 payl
10260 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75  oadSize64; /* Nu
10270 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
10280 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
10290 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
102a0 20 20 20 20 2f 2a 20 50 31 20 76 61 6c 75 65 20      /* P1 value 
102b0 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 20 2a 2f  of the opcode */
102c0 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
102d0 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20        /* column 
102e0 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65  number to retrie
102f0 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ve */.  VdbeCurs
10300 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
10310 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
10320 0a 20 20 63 68 61 72 20 2a 7a 52 65 63 3b 20 20  .  char *zRec;  
10330 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
10340 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 72 65 63   to complete rec
10350 6f 72 64 2d 64 61 74 61 20 2a 2f 0a 20 20 42 74  ord-data */.  Bt
10360 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
10370 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
10380 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
10390 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Type;        /* 
103a0 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74  aType[i] holds t
103b0 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
103c0 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75  of the i-th colu
103d0 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  mn */.  u32 *aOf
103e0 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
103f0 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
10400 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
10410 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
10420 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  umn */.  int nFi
10430 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 6e  eld;        /* n
10440 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
10450 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
10460 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20  .  int len;     
10470 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e        /* The len
10480 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61  gth of the seria
10490 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74  lized data for t
104a0 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  he column */.  i
104b0 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
104c0 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
104d0 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 61  r */.  char *zDa
104e0 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 50 61 72  ta;       /* Par
104f0 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  t of the record 
10500 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
10510 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20  .  Mem *pDest;  
10520 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74        /* Where t
10530 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72  o write the extr
10540 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20  acted value */. 
10550 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
10560 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
10570 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
10580 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
10590 20 75 38 20 2a 7a 49 64 78 3b 20 20 20 20 20 20   u8 *zIdx;      
105a0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
105b0 6f 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 38  o header */.  u8
105c0 20 2a 7a 45 6e 64 48 64 72 3b 20 20 20 20 20 20   *zEndHdr;      
105d0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66   /* Pointer to f
105e0 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20  irst byte after 
105f0 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
10600 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20  u32 offset;     
10610 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74     /* Offset int
10620 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20  o the data */.  
10630 75 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20 20  u32 szField;    
10640 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10650 62 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6e  bytes in the con
10660 74 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64 20  tent of a field 
10670 2a 2f 0a 20 20 69 6e 74 20 73 7a 48 64 72 3b 20  */.  int szHdr; 
10680 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
10690 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 73 69  of the header si
106a0 7a 65 20 66 69 65 6c 64 20 61 74 20 73 74 61 72  ze field at star
106b0 74 20 6f 66 20 72 65 63 6f 72 64 20 2a 2f 0a 20  t of record */. 
106c0 20 69 6e 74 20 61 76 61 69 6c 3b 20 20 20 20 20   int avail;     
106d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
106e0 20 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61   bytes of availa
106f0 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 4d 65  ble data */.  Me
10700 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20  m *pReg;        
10710 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20   /* PseudoTable 
10720 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  input register *
10730 2f 0a 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  /...  p1 = pOp->
10740 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
10750 70 32 3b 0a 20 20 70 43 20 3d 20 30 3b 0a 20 20  p2;.  pC = 0;.  
10760 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
10770 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
10780 20 20 61 73 73 65 72 74 28 20 70 31 3c 70 2d 3e    assert( p1<p->
10790 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
107a0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
107b0 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  & pOp->p3<=p->nM
107c0 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  em );.  pDest = 
107d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
107e0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
107f0 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
10800 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
10810 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
10820 0a 20 20 7a 52 65 63 20 3d 20 30 3b 0a 0a 20 20  .  zRec = 0;..  
10830 2f 2a 20 54 68 69 73 20 62 6c 6f 63 6b 20 73 65  /* This block se
10840 74 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  ts the variable 
10850 70 61 79 6c 6f 61 64 53 69 7a 65 20 74 6f 20 62  payloadSize to b
10860 65 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  e the total numb
10870 65 72 20 6f 66 0a 20 20 2a 2a 20 62 79 74 65 73  er of.  ** bytes
10880 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   in the record..
10890 20 20 2a 2a 0a 20 20 2a 2a 20 7a 52 65 63 20 69    **.  ** zRec i
108a0 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20  s set to be the 
108b0 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  complete text of
108c0 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69   the record if i
108d0 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a  t is available..
108e0 20 20 2a 2a 20 54 68 65 20 63 6f 6d 70 6c 65 74    ** The complet
108f0 65 20 72 65 63 6f 72 64 20 74 65 78 74 20 69 73  e record text is
10900 20 61 6c 77 61 79 73 20 61 76 61 69 6c 61 62 6c   always availabl
10910 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62  e for pseudo-tab
10920 6c 65 73 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  les.  ** If the 
10930 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64  record is stored
10940 20 69 6e 20 61 20 63 75 72 73 6f 72 2c 20 74 68   in a cursor, th
10950 65 20 63 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72  e complete recor
10960 64 20 74 65 78 74 0a 20 20 2a 2a 20 6d 69 67 68  d text.  ** migh
10970 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 69  t be available i
10980 6e 20 74 68 65 20 20 70 43 2d 3e 61 52 6f 77 20  n the  pC->aRow 
10990 63 61 63 68 65 2e 20 20 4f 72 20 69 74 20 6d 69  cache.  Or it mi
109a0 67 68 74 20 6e 6f 74 20 62 65 2e 0a 20 20 2a 2a  ght not be..  **
109b0 20 49 66 20 74 68 65 20 64 61 74 61 20 69 73 20   If the data is 
109c0 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 20 7a 52  unavailable,  zR
109d0 65 63 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ec is set to NUL
109e0 4c 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20  L..  **.  ** We 
109f0 61 6c 73 6f 20 63 6f 6d 70 75 74 65 20 74 68 65  also compute the
10a00 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
10a10 6e 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ns in the record
10a20 2e 20 20 46 6f 72 20 63 75 72 73 6f 72 73 2c 0a  .  For cursors,.
10a30 20 20 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20    ** the number 
10a40 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 73 20 73 74  of columns is st
10a50 6f 72 65 64 20 69 6e 20 74 68 65 20 56 64 62 65  ored in the Vdbe
10a60 43 75 72 73 6f 72 2e 6e 46 69 65 6c 64 20 65 6c  Cursor.nField el
10a70 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 70 43  ement..  */.  pC
10a80 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 31 5d 3b   = p->apCsr[p1];
10a90 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
10aa0 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
10ab0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
10ac0 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20 70  ABLE.  assert( p
10ad0 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d 3d  C->pVtabCursor==
10ae0 30 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 70 43  0 );.#endif.  pC
10af0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
10b00 72 3b 0a 20 20 69 66 28 20 70 43 72 73 72 21 3d  r;.  if( pCrsr!=
10b10 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  0 ){.    /* The 
10b20 72 65 63 6f 72 64 20 69 73 20 73 74 6f 72 65 64  record is stored
10b30 20 69 6e 20 61 20 42 2d 54 72 65 65 20 2a 2f 0a   in a B-Tree */.
10b40 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
10b50 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
10b60 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
10b70 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
10b80 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
10b90 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
10ba0 29 7b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64  ){.      payload
10bb0 53 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65  Size = 0;.    }e
10bc0 6c 73 65 20 69 66 28 20 70 43 2d 3e 63 61 63 68  lse if( pC->cach
10bd0 65 53 74 61 74 75 73 3d 3d 70 2d 3e 63 61 63 68  eStatus==p->cach
10be0 65 43 74 72 20 29 7b 0a 20 20 20 20 20 20 70 61  eCtr ){.      pa
10bf0 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e  yloadSize = pC->
10c00 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20  payloadSize;.   
10c10 20 20 20 7a 52 65 63 20 3d 20 28 63 68 61 72 2a     zRec = (char*
10c20 29 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 7d  )pC->aRow;.    }
10c30 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 69 73 49  else if( pC->isI
10c40 6e 64 65 78 20 29 7b 0a 20 20 20 20 20 20 61 73  ndex ){.      as
10c50 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
10c60 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
10c70 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
10c80 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
10c90 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20  eKeySize(pCrsr, 
10ca0 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b  &payloadSize64);
10cb0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
10cc0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
10cd0 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73    /* True becaus
10ce0 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
10cf0 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
10d00 2f 0a 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74  /.      /* sqlit
10d10 65 33 42 74 72 65 65 50 61 72 73 65 43 65 6c 6c  e3BtreeParseCell
10d20 50 74 72 28 29 20 75 73 65 73 20 67 65 74 56 61  Ptr() uses getVa
10d30 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78 74 72  rint32() to extr
10d40 61 63 74 20 74 68 65 0a 20 20 20 20 20 20 2a 2a  act the.      **
10d50 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73   payload size, s
10d60 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62  o it is impossib
10d70 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64 53 69  le for payloadSi
10d80 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20 20 20  ze64 to be.     
10d90 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20   ** larger than 
10da0 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20  32 bits. */.    
10db0 20 20 61 73 73 65 72 74 28 20 28 70 61 79 6c 6f    assert( (paylo
10dc0 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c 49 54  adSize64 & SQLIT
10dd0 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36 34  E_MAX_U32)==(u64
10de0 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 29  )payloadSize64 )
10df0 3b 0a 20 20 20 20 20 20 70 61 79 6c 6f 61 64 53  ;.      payloadS
10e00 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79 6c 6f  ize = (u32)paylo
10e10 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 7d 65  adSize64;.    }e
10e20 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
10e30 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
10e40 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
10e50 73 72 29 20 29 3b 0a 20 20 20 20 20 20 72 63 20  sr) );.      rc 
10e60 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
10e70 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70  taSize(pCrsr, &p
10e80 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20  ayloadSize);.   
10e90 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
10ea0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
10eb0 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e   DataSize() cann
10ec0 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 7d  ot fail */.    }
10ed0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d  .  }else if( pC-
10ee0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e  >pseudoTableReg>
10ef0 30 20 29 7b 0a 20 20 20 20 70 52 65 67 20 3d 20  0 ){.    pReg = 
10f00 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f  &aMem[pC->pseudo
10f10 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 61  TableReg];.    a
10f20 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61  ssert( pReg->fla
10f30 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
10f40 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
10f50 49 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b  IsValid(pReg) );
10f60 0a 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65  .    payloadSize
10f70 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20   = pReg->n;.    
10f80 7a 52 65 63 20 3d 20 70 52 65 67 2d 3e 7a 3b 0a  zRec = pReg->z;.
10f90 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
10fa0 74 75 73 20 3d 20 28 70 4f 70 2d 3e 70 35 26 4f  tus = (pOp->p5&O
10fb0 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
10fc0 29 20 3f 20 43 41 43 48 45 5f 53 54 41 4c 45 20  ) ? CACHE_STALE 
10fd0 3a 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20  : p->cacheCtr;. 
10fe0 20 20 20 61 73 73 65 72 74 28 20 70 61 79 6c 6f     assert( paylo
10ff0 61 64 53 69 7a 65 3d 3d 30 20 7c 7c 20 7a 52 65  adSize==0 || zRe
11000 63 21 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  c!=0 );.  }else{
11010 0a 20 20 20 20 2f 2a 20 43 6f 6e 73 69 64 65 72  .    /* Consider
11020 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 4e   the row to be N
11030 55 4c 4c 20 2a 2f 0a 20 20 20 20 70 61 79 6c 6f  ULL */.    paylo
11040 61 64 53 69 7a 65 20 3d 20 30 3b 0a 20 20 7d 0a  adSize = 0;.  }.
11050 0a 20 20 2f 2a 20 49 66 20 70 61 79 6c 6f 61 64  .  /* If payload
11060 53 69 7a 65 20 69 73 20 30 2c 20 74 68 65 6e 20  Size is 0, then 
11070 6a 75 73 74 20 73 74 6f 72 65 20 61 20 4e 55 4c  just store a NUL
11080 4c 20 2a 2f 0a 20 20 69 66 28 20 70 61 79 6c 6f  L */.  if( paylo
11090 61 64 53 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20  adSize==0 ){.   
110a0 20 61 73 73 65 72 74 28 20 70 44 65 73 74 2d 3e   assert( pDest->
110b0 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29  flags&MEM_Null )
110c0 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f  ;.    goto op_co
110d0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20  lumn_out;.  }.  
110e0 61 73 73 65 72 74 28 20 64 62 2d 3e 61 4c 69 6d  assert( db->aLim
110f0 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
11100 4c 45 4e 47 54 48 5d 3e 3d 30 20 29 3b 0a 20 20  LENGTH]>=0 );.  
11110 69 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20  if( payloadSize 
11120 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  > (u32)db->aLimi
11130 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
11140 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
11150 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
11160 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 43 2d 3e  .  nField = pC->
11170 6e 46 69 65 6c 64 3b 0a 20 20 61 73 73 65 72 74  nField;.  assert
11180 28 20 70 32 3c 6e 46 69 65 6c 64 20 29 3b 0a 0a  ( p2<nField );..
11190 20 20 2f 2a 20 52 65 61 64 20 61 6e 64 20 70 61    /* Read and pa
111a0 72 73 65 20 74 68 65 20 74 61 62 6c 65 20 68 65  rse the table he
111b0 61 64 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  ader.  Store the
111c0 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
111d0 70 61 72 73 65 0a 20 20 2a 2a 20 69 6e 74 6f 20  parse.  ** into 
111e0 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
111f0 72 20 63 61 63 68 65 20 66 69 65 6c 64 73 20 6f  r cache fields o
11200 66 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20  f the cursor..  
11210 2a 2f 0a 20 20 61 54 79 70 65 20 3d 20 70 43 2d  */.  aType = pC-
11220 3e 61 54 79 70 65 3b 0a 20 20 69 66 28 20 70 43  >aType;.  if( pC
11230 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70  ->cacheStatus==p
11240 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20  ->cacheCtr ){.  
11250 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e    aOffset = pC->
11260 61 4f 66 66 73 65 74 3b 0a 20 20 7d 65 6c 73 65  aOffset;.  }else
11270 7b 0a 20 20 20 20 61 73 73 65 72 74 28 61 54 79  {.    assert(aTy
11280 70 65 29 3b 0a 20 20 20 20 61 76 61 69 6c 20 3d  pe);.    avail =
11290 20 30 3b 0a 20 20 20 20 70 43 2d 3e 61 4f 66 66   0;.    pC->aOff
112a0 73 65 74 20 3d 20 61 4f 66 66 73 65 74 20 3d 20  set = aOffset = 
112b0 26 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a  &aType[nField];.
112c0 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53      pC->payloadS
112d0 69 7a 65 20 3d 20 70 61 79 6c 6f 61 64 53 69 7a  ize = payloadSiz
112e0 65 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  e;.    pC->cache
112f0 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68  Status = p->cach
11300 65 43 74 72 3b 0a 0a 20 20 20 20 2f 2a 20 46 69  eCtr;..    /* Fi
11310 67 75 72 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e  gure out how man
11320 79 20 62 79 74 65 73 20 61 72 65 20 69 6e 20 74  y bytes are in t
11330 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20  he header */.   
11340 20 69 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20   if( zRec ){.   
11350 20 20 20 7a 44 61 74 61 20 3d 20 7a 52 65 63 3b     zData = zRec;
11360 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
11370 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65    if( pC->isInde
11380 78 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 44 61  x ){.        zDa
11390 74 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69  ta = (char*)sqli
113a0 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68  te3BtreeKeyFetch
113b0 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
113c0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
113d0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 63        zData = (c
113e0 68 61 72 2a 29 73 71 6c 69 74 65 33 42 74 72 65  har*)sqlite3Btre
113f0 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73 72  eDataFetch(pCrsr
11400 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20  , &avail);.     
11410 20 7d 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 4b   }.      /* If K
11420 65 79 46 65 74 63 68 28 29 2f 44 61 74 61 46 65  eyFetch()/DataFe
11430 74 63 68 28 29 20 6d 61 6e 61 67 65 64 20 74 6f  tch() managed to
11440 20 67 65 74 20 74 68 65 20 65 6e 74 69 72 65 20   get the entire 
11450 70 61 79 6c 6f 61 64 2c 0a 20 20 20 20 20 20 2a  payload,.      *
11460 2a 20 73 61 76 65 20 74 68 65 20 70 61 79 6c 6f  * save the paylo
11470 61 64 20 69 6e 20 74 68 65 20 70 43 2d 3e 61 52  ad in the pC->aR
11480 6f 77 20 63 61 63 68 65 2e 20 20 54 68 61 74 20  ow cache.  That 
11490 77 69 6c 6c 20 73 61 76 65 20 75 73 20 66 72 6f  will save us fro
114a0 6d 0a 20 20 20 20 20 20 2a 2a 20 68 61 76 69 6e  m.      ** havin
114b0 67 20 74 6f 20 6d 61 6b 65 20 61 64 64 69 74 69  g to make additi
114c0 6f 6e 61 6c 20 63 61 6c 6c 73 20 74 6f 20 66 65  onal calls to fe
114d0 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  tch the content 
114e0 70 6f 72 74 69 6f 6e 20 6f 66 0a 20 20 20 20 20  portion of.     
114f0 20 2a 2a 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   ** the record..
11500 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
11510 73 73 65 72 74 28 20 61 76 61 69 6c 3e 3d 30 20  ssert( avail>=0 
11520 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 61 79  );.      if( pay
11530 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32  loadSize <= (u32
11540 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20  )avail ){.      
11550 20 20 7a 52 65 63 20 3d 20 7a 44 61 74 61 3b 0a    zRec = zData;.
11560 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
11570 20 3d 20 28 75 38 2a 29 7a 44 61 74 61 3b 0a 20   = (u8*)zData;. 
11580 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
11590 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30      pC->aRow = 0
115a0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
115b0 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
115c0 77 69 6e 67 20 61 73 73 65 72 74 20 69 73 20 74  wing assert is t
115d0 72 75 65 20 69 6e 20 61 6c 6c 20 63 61 73 65 73  rue in all cases
115e0 20 61 63 63 65 70 74 20 77 68 65 6e 0a 20 20 20   accept when.   
115f0 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
11600 20 66 69 6c 65 20 68 61 73 20 62 65 65 6e 20 63   file has been c
11610 6f 72 72 75 70 74 65 64 20 65 78 74 65 72 6e 61  orrupted externa
11620 6c 6c 79 2e 0a 20 20 20 20 2a 2a 20 20 20 20 61  lly..    **    a
11630 73 73 65 72 74 28 20 7a 52 65 63 21 3d 30 20 7c  ssert( zRec!=0 |
11640 7c 20 61 76 61 69 6c 3e 3d 70 61 79 6c 6f 61 64  | avail>=payload
11650 53 69 7a 65 20 7c 7c 20 61 76 61 69 6c 3e 3d 39  Size || avail>=9
11660 20 29 3b 20 2a 2f 0a 20 20 20 20 73 7a 48 64 72   ); */.    szHdr
11670 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 28   = getVarint32((
11680 75 38 2a 29 7a 44 61 74 61 2c 20 6f 66 66 73 65  u8*)zData, offse
11690 74 29 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65  t);..    /* Make
116a0 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74 20   sure a corrupt 
116b0 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
116c0 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65   given us an ove
116d0 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20  rsize header..  
116e0 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77    ** Do this now
116f0 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65   to avoid an ove
11700 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  rsize memory all
11710 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a  ocation..    **.
11720 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72      ** Type entr
11730 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65  ies can be betwe
11740 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73  en 1 and 5 bytes
11750 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e   each.  But 4 an
11760 64 20 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20  d 5 byte.    ** 
11770 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63  types use so muc
11780 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61  h data space tha
11790 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79  t there can only
117a0 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20   be 4096 and 32 
117b0 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20  of.    ** them, 
117c0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
117d0 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65  o the maximum he
117e0 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75  ader length resu
117f0 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a  lts from a.    *
11800 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f  * 3-byte type fo
11810 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61  r each of the ma
11820 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63  ximum of 32768 c
11830 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65  olumns plus thre
11840 65 0a 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62  e.    ** extra b
11850 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61  ytes for the hea
11860 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c  der length itsel
11870 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20  f.  32768*3 + 3 
11880 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a  = 98307..    */.
11890 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e      if( offset >
118a0 20 39 38 33 30 37 20 29 7b 0a 20 20 20 20 20 20   98307 ){.      
118b0 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
118c0 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20  UPT_BKPT;.      
118d0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
118e0 75 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ut;.    }..    /
118f0 2a 20 43 6f 6d 70 75 74 65 20 69 6e 20 6c 65 6e  * Compute in len
11900 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
11910 79 74 65 73 20 6f 66 20 64 61 74 61 20 77 65 20  ytes of data we 
11920 6e 65 65 64 20 74 6f 20 72 65 61 64 20 69 6e 20  need to read in 
11930 6f 72 64 65 72 0a 20 20 20 20 2a 2a 20 74 6f 20  order.    ** to 
11940 67 65 74 20 6e 46 69 65 6c 64 20 74 79 70 65 20  get nField type 
11950 76 61 6c 75 65 73 2e 20 20 6f 66 66 73 65 74 20  values.  offset 
11960 69 73 20 61 6e 20 75 70 70 65 72 20 62 6f 75 6e  is an upper boun
11970 64 20 6f 6e 20 74 68 69 73 2e 20 20 42 75 74 0a  d on this.  But.
11980 20 20 20 20 2a 2a 20 6e 46 69 65 6c 64 20 6d 69      ** nField mi
11990 67 68 74 20 62 65 20 73 69 67 6e 69 66 69 63 61  ght be significa
119a0 6e 74 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74  ntly less than t
119b0 68 65 20 74 72 75 65 20 6e 75 6d 62 65 72 20 6f  he true number o
119c0 66 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 2a 2a  f columns.    **
119d0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 61   in the table, a
119e0 6e 64 20 69 6e 20 74 68 61 74 20 63 61 73 65 2c  nd in that case,
119f0 20 35 2a 6e 46 69 65 6c 64 2b 33 20 6d 69 67 68   5*nField+3 migh
11a00 74 20 62 65 20 73 6d 61 6c 6c 65 72 20 74 68 61  t be smaller tha
11a10 6e 20 6f 66 66 73 65 74 2e 0a 20 20 20 20 2a 2a  n offset..    **
11a20 20 57 65 20 77 61 6e 74 20 74 6f 20 6d 69 6e 69   We want to mini
11a30 6d 69 7a 65 20 6c 65 6e 20 69 6e 20 6f 72 64 65  mize len in orde
11a40 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 73  r to limit the s
11a50 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ize of the memor
11a60 79 0a 20 20 20 20 2a 2a 20 61 6c 6c 6f 63 61 74  y.    ** allocat
11a70 69 6f 6e 2c 20 65 73 70 65 63 69 61 6c 6c 79 20  ion, especially 
11a80 69 66 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  if a corrupt dat
11a90 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20 63  abase file has c
11aa0 61 75 73 65 64 20 6f 66 66 73 65 74 0a 20 20 20  aused offset.   
11ab0 20 2a 2a 20 74 6f 20 62 65 20 6f 76 65 72 73 69   ** to be oversi
11ac0 7a 65 64 2e 20 4f 66 66 73 65 74 20 69 73 20 6c  zed. Offset is l
11ad0 69 6d 69 74 65 64 20 74 6f 20 39 38 33 30 37 20  imited to 98307 
11ae0 61 62 6f 76 65 2e 20 20 42 75 74 20 39 38 33 30  above.  But 9830
11af0 37 20 6d 69 67 68 74 0a 20 20 20 20 2a 2a 20 73  7 might.    ** s
11b00 74 69 6c 6c 20 65 78 63 65 65 64 20 52 6f 62 73  till exceed Robs
11b10 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  on memory alloca
11b20 74 69 6f 6e 20 6c 69 6d 69 74 73 20 6f 6e 20 73  tion limits on s
11b30 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ome configuratio
11b40 6e 73 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 73 79  ns..    ** On sy
11b50 73 74 65 6d 73 20 74 68 61 74 20 63 61 6e 6e 6f  stems that canno
11b60 74 20 74 6f 6c 65 72 61 74 65 20 6c 61 72 67 65  t tolerate large
11b70 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
11b80 6f 6e 73 2c 20 6e 46 69 65 6c 64 2a 35 2b 33 0a  ons, nField*5+3.
11b90 20 20 20 20 2a 2a 20 77 69 6c 6c 20 6c 69 6b 65      ** will like
11ba0 6c 79 20 62 65 20 6d 75 63 68 20 73 6d 61 6c 6c  ly be much small
11bb0 65 72 20 73 69 6e 63 65 20 6e 46 69 65 6c 64 20  er since nField 
11bc0 77 69 6c 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6c  will likely be l
11bd0 65 73 73 20 74 68 61 6e 0a 20 20 20 20 2a 2a 20  ess than.    ** 
11be0 32 30 20 6f 72 20 73 6f 2e 20 20 54 68 69 73 20  20 or so.  This 
11bf0 69 6e 73 75 72 65 73 20 74 68 61 74 20 52 6f 62  insures that Rob
11c00 73 6f 6e 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  son memory alloc
11c10 61 74 69 6f 6e 20 6c 69 6d 69 74 73 20 61 72 65  ation limits are
11c20 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 65 78 63 65  .    ** not exce
11c30 65 64 65 64 20 65 76 65 6e 20 66 6f 72 20 63 6f  eded even for co
11c40 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66  rrupt database f
11c50 69 6c 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  iles..    */.   
11c60 20 6c 65 6e 20 3d 20 6e 46 69 65 6c 64 2a 35 20   len = nField*5 
11c70 2b 20 33 3b 0a 20 20 20 20 69 66 28 20 6c 65 6e  + 3;.    if( len
11c80 20 3e 20 28 69 6e 74 29 6f 66 66 73 65 74 20 29   > (int)offset )
11c90 20 6c 65 6e 20 3d 20 28 69 6e 74 29 6f 66 66 73   len = (int)offs
11ca0 65 74 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  et;..    /* The 
11cb0 4b 65 79 46 65 74 63 68 28 29 20 6f 72 20 44 61  KeyFetch() or Da
11cc0 74 61 46 65 74 63 68 28 29 20 61 62 6f 76 65 20  taFetch() above 
11cd0 61 72 65 20 66 61 73 74 20 61 6e 64 20 77 69 6c  are fast and wil
11ce0 6c 20 67 65 74 20 74 68 65 20 65 6e 74 69 72 65  l get the entire
11cf0 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 20 68  .    ** record h
11d00 65 61 64 65 72 20 69 6e 20 6d 6f 73 74 20 63 61  eader in most ca
11d10 73 65 73 2e 20 20 42 75 74 20 74 68 65 79 20 77  ses.  But they w
11d20 69 6c 6c 20 66 61 69 6c 20 74 6f 20 67 65 74 20  ill fail to get 
11d30 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 20 20 20  the complete.   
11d40 20 2a 2a 20 72 65 63 6f 72 64 20 68 65 61 64 65   ** record heade
11d50 72 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20  r if the record 
11d60 68 65 61 64 65 72 20 64 6f 65 73 20 6e 6f 74 20  header does not 
11d70 66 69 74 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20  fit on a single 
11d80 70 61 67 65 0a 20 20 20 20 2a 2a 20 69 6e 20 74  page.    ** in t
11d90 68 65 20 42 2d 54 72 65 65 2e 20 20 57 68 65 6e  he B-Tree.  When
11da0 20 74 68 61 74 20 68 61 70 70 65 6e 73 2c 20 75   that happens, u
11db0 73 65 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  se sqlite3VdbeMe
11dc0 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 74 6f 0a  mFromBtree() to.
11dd0 20 20 20 20 2a 2a 20 61 63 71 75 69 72 65 20 74      ** acquire t
11de0 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64  he complete head
11df0 65 72 20 74 65 78 74 2e 0a 20 20 20 20 2a 2f 0a  er text..    */.
11e00 20 20 20 20 69 66 28 20 21 7a 52 65 63 20 26 26      if( !zRec &&
11e10 20 61 76 61 69 6c 3c 6c 65 6e 20 29 7b 0a 20 20   avail<len ){.  
11e20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d      sMem.flags =
11e30 20 30 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 64   0;.      sMem.d
11e40 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  b = 0;.      rc 
11e50 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
11e60 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
11e70 20 30 2c 20 6c 65 6e 2c 20 70 43 2d 3e 69 73 49   0, len, pC->isI
11e80 6e 64 65 78 2c 20 26 73 4d 65 6d 29 3b 0a 20 20  ndex, &sMem);.  
11e90 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
11ea0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
11eb0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
11ec0 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
11ed0 20 20 20 7a 44 61 74 61 20 3d 20 73 4d 65 6d 2e     zData = sMem.
11ee0 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 45 6e  z;.    }.    zEn
11ef0 64 48 64 72 20 3d 20 28 75 38 20 2a 29 26 7a 44  dHdr = (u8 *)&zD
11f00 61 74 61 5b 6c 65 6e 5d 3b 0a 20 20 20 20 7a 49  ata[len];.    zI
11f10 64 78 20 3d 20 28 75 38 20 2a 29 26 7a 44 61 74  dx = (u8 *)&zDat
11f20 61 5b 73 7a 48 64 72 5d 3b 0a 0a 20 20 20 20 2f  a[szHdr];..    /
11f30 2a 20 53 63 61 6e 20 74 68 65 20 68 65 61 64 65  * Scan the heade
11f40 72 20 61 6e 64 20 75 73 65 20 69 74 20 74 6f 20  r and use it to 
11f50 66 69 6c 6c 20 69 6e 20 74 68 65 20 61 54 79 70  fill in the aTyp
11f60 65 5b 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b  e[] and aOffset[
11f70 5d 0a 20 20 20 20 2a 2a 20 61 72 72 61 79 73 2e  ].    ** arrays.
11f80 20 20 61 54 79 70 65 5b 69 5d 20 77 69 6c 6c 20    aType[i] will 
11f90 63 6f 6e 74 61 69 6e 20 74 68 65 20 74 79 70 65  contain the type
11fa0 20 69 6e 74 65 67 65 72 20 66 6f 72 20 74 68 65   integer for the
11fb0 20 69 2d 74 68 0a 20 20 20 20 2a 2a 20 63 6f 6c   i-th.    ** col
11fc0 75 6d 6e 20 61 6e 64 20 61 4f 66 66 73 65 74 5b  umn and aOffset[
11fd0 69 5d 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20  i] will contain 
11fe0 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20  the offset from 
11ff0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20  the beginning.  
12000 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
12010 72 64 20 74 6f 20 74 68 65 20 73 74 61 72 74 20  rd to the start 
12020 6f 66 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  of the data for 
12030 74 68 65 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 0a  the i-th column.
12040 20 20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69      */.    for(i
12050 3d 30 3b 20 69 3c 6e 46 69 65 6c 64 3b 20 69 2b  =0; i<nField; i+
12060 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49  +){.      if( zI
12070 64 78 3c 7a 45 6e 64 48 64 72 20 29 7b 0a 20 20  dx<zEndHdr ){.  
12080 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
12090 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20   = offset;.     
120a0 20 20 20 7a 49 64 78 20 2b 3d 20 67 65 74 56 61     zIdx += getVa
120b0 72 69 6e 74 33 32 28 7a 49 64 78 2c 20 61 54 79  rint32(zIdx, aTy
120c0 70 65 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  pe[i]);.        
120d0 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65  szField = sqlite
120e0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
120f0 65 6e 28 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20  en(aType[i]);.  
12100 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20        offset += 
12110 73 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 20  szField;.       
12120 20 69 66 28 20 6f 66 66 73 65 74 3c 73 7a 46 69   if( offset<szFi
12130 65 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75 65 20  eld ){  /* True 
12140 69 66 20 6f 66 66 73 65 74 20 6f 76 65 72 66 6c  if offset overfl
12150 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  ows */.         
12160 20 7a 49 64 78 20 3d 20 26 7a 45 6e 64 48 64 72   zIdx = &zEndHdr
12170 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20  [1];  /* Forces 
12180 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 72  SQLITE_CORRUPT r
12190 65 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20  eturn below */. 
121a0 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
121b0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
121c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
121d0 2a 20 49 66 20 69 20 69 73 20 6c 65 73 73 20 74  * If i is less t
121e0 68 61 74 20 6e 46 69 65 6c 64 2c 20 74 68 65 6e  hat nField, then
121f0 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20   there are less 
12200 66 69 65 6c 64 73 20 69 6e 20 74 68 69 73 0a 20  fields in this. 
12210 20 20 20 20 20 20 20 2a 2a 20 72 65 63 6f 72 64         ** record
12220 20 74 68 61 6e 20 53 65 74 4e 75 6d 43 6f 6c 75   than SetNumColu
12230 6d 6e 73 20 69 6e 64 69 63 61 74 65 64 20 74 68  mns indicated th
12240 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20  ere are columns 
12250 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a  in the.        *
12260 2a 20 74 61 62 6c 65 2e 20 53 65 74 20 74 68 65  * table. Set the
12270 20 6f 66 66 73 65 74 20 66 6f 72 20 61 6e 79 20   offset for any 
12280 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20 6e 6f  extra columns no
12290 74 20 70 72 65 73 65 6e 74 20 69 6e 0a 20 20 20  t present in.   
122a0 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65 63 6f       ** the reco
122b0 72 64 20 74 6f 20 30 2e 20 54 68 69 73 20 74 65  rd to 0. This te
122c0 6c 6c 73 20 63 6f 64 65 20 62 65 6c 6f 77 20 74  lls code below t
122d0 6f 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 0a 20  o store a NULL. 
122e0 20 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 65 61         ** instea
122f0 64 20 6f 66 20 64 65 73 65 72 69 61 6c 69 7a 69  d of deserializi
12300 6e 67 20 61 20 76 61 6c 75 65 20 66 72 6f 6d 20  ng a value from 
12310 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
12320 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 61      */.        a
12330 4f 66 66 73 65 74 5b 69 5d 20 3d 20 30 3b 0a 20  Offset[i] = 0;. 
12340 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
12350 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
12360 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
12370 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20     sMem.flags = 
12380 4d 45 4d 5f 4e 75 6c 6c 3b 0a 0a 20 20 20 20 2f  MEM_Null;..    /
12390 2a 20 49 66 20 77 65 20 68 61 76 65 20 72 65 61  * If we have rea
123a0 64 20 6d 6f 72 65 20 68 65 61 64 65 72 20 64 61  d more header da
123b0 74 61 20 74 68 61 6e 20 77 61 73 20 63 6f 6e 74  ta than was cont
123c0 61 69 6e 65 64 20 69 6e 20 74 68 65 20 68 65 61  ained in the hea
123d0 64 65 72 2c 0a 20 20 20 20 2a 2a 20 6f 72 20 69  der,.    ** or i
123e0 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  f the end of the
123f0 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70 65   last field appe
12400 61 72 73 20 74 6f 20 62 65 20 70 61 73 74 20 74  ars to be past t
12410 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 20 20  he end of the.  
12420 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20    ** record, or 
12430 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  if the end of th
12440 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70  e last field app
12450 65 61 72 73 20 74 6f 20 62 65 20 62 65 66 6f 72  ears to be befor
12460 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20 2a 2a  e the end.    **
12470 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 28   of the record (
12480 77 68 65 6e 20 61 6c 6c 20 66 69 65 6c 64 73 20  when all fields 
12490 70 72 65 73 65 6e 74 29 2c 20 74 68 65 6e 20 77  present), then w
124a0 65 20 6d 75 73 74 20 62 65 20 64 65 61 6c 69 6e  e must be dealin
124b0 67 20 0a 20 20 20 20 2a 2a 20 77 69 74 68 20 61  g .    ** with a
124c0 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
124d0 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  e..    */.    if
124e0 28 20 28 7a 49 64 78 20 3e 20 7a 45 6e 64 48 64  ( (zIdx > zEndHd
124f0 72 29 20 7c 7c 20 28 6f 66 66 73 65 74 20 3e 20  r) || (offset > 
12500 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20  payloadSize).   
12510 20 20 20 20 20 20 7c 7c 20 28 7a 49 64 78 3d 3d        || (zIdx==
12520 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66 73 65  zEndHdr && offse
12530 74 21 3d 70 61 79 6c 6f 61 64 53 69 7a 65 29 20  t!=payloadSize) 
12540 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
12550 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
12560 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  T;.      goto op
12570 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
12580 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74   }.  }..  /* Get
12590 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 66 6f   the column info
125a0 72 6d 61 74 69 6f 6e 2e 20 49 66 20 61 4f 66 66  rmation. If aOff
125b0 73 65 74 5b 70 32 5d 20 69 73 20 6e 6f 6e 2d 7a  set[p2] is non-z
125c0 65 72 6f 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20  ero, then .  ** 
125d0 64 65 73 65 72 69 61 6c 69 7a 65 20 74 68 65 20  deserialize the 
125e0 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 72  value from the r
125f0 65 63 6f 72 64 2e 20 49 66 20 61 4f 66 66 73 65  ecord. If aOffse
12600 74 5b 70 32 5d 20 69 73 20 7a 65 72 6f 2c 0a 20  t[p2] is zero,. 
12610 20 2a 2a 20 74 68 65 6e 20 74 68 65 72 65 20 61   ** then there a
12620 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20 66 69  re not enough fi
12630 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
12640 72 64 20 74 6f 20 73 61 74 69 73 66 79 20 74 68  rd to satisfy th
12650 65 0a 20 20 2a 2a 20 72 65 71 75 65 73 74 2e 20  e.  ** request. 
12660 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73   In this case, s
12670 65 74 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c  et the value NUL
12680 4c 20 6f 72 20 74 6f 20 50 34 20 69 66 20 50 34  L or to P4 if P4
12690 20 69 73 0a 20 20 2a 2a 20 61 20 70 6f 69 6e 74   is.  ** a point
126a0 65 72 20 74 6f 20 61 20 4d 65 6d 20 6f 62 6a 65  er to a Mem obje
126b0 63 74 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 61  ct..  */.  if( a
126c0 4f 66 66 73 65 74 5b 70 32 5d 20 29 7b 0a 20 20  Offset[p2] ){.  
126d0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
126e0 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69  LITE_OK );.    i
126f0 66 28 20 7a 52 65 63 20 29 7b 0a 20 20 20 20 20  f( zRec ){.     
12700 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
12710 65 6c 65 61 73 65 45 78 74 65 72 6e 61 6c 28 70  eleaseExternal(p
12720 44 65 73 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  Dest);.      sql
12730 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
12740 74 28 28 75 38 20 2a 29 26 7a 52 65 63 5b 61 4f  t((u8 *)&zRec[aO
12750 66 66 73 65 74 5b 70 32 5d 5d 2c 20 61 54 79 70  ffset[p2]], aTyp
12760 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a 20  e[p2], pDest);. 
12770 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12780 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62  len = sqlite3Vdb
12790 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 61  eSerialTypeLen(a
127a0 54 79 70 65 5b 70 32 5d 29 3b 0a 20 20 20 20 20  Type[p2]);.     
127b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
127c0 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73 74  ove(&sMem, pDest
127d0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
127e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
127f0 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66  Btree(pCrsr, aOf
12800 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70  fset[p2], len, p
12810 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65  C->isIndex, &sMe
12820 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  m);.      if( rc
12830 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
12840 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
12850 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20  olumn_out;.     
12860 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d   }.      zData =
12870 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 73   sMem.z;.      s
12880 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
12890 47 65 74 28 28 75 38 2a 29 7a 44 61 74 61 2c 20  Get((u8*)zData, 
128a0 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65 73 74  aType[p2], pDest
128b0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 44 65  );.    }.    pDe
128c0 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  st->enc = encodi
128d0 6e 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ng;.  }else{.   
128e0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
128f0 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20  ==P4_MEM ){.    
12900 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
12910 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73  ShallowCopy(pDes
12920 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c  t, pOp->p4.pMem,
12930 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
12940 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
12950 73 73 65 72 74 28 20 70 44 65 73 74 2d 3e 66 6c  ssert( pDest->fl
12960 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a  ags&MEM_Null );.
12970 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20      }.  }..  /* 
12980 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61 6c 6c  If we dynamicall
12990 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  y allocated spac
129a0 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61  e to hold the da
129b0 74 61 20 28 69 6e 20 74 68 65 0a 20 20 2a 2a 20  ta (in the.  ** 
129c0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
129d0 6f 6d 42 74 72 65 65 28 29 20 63 61 6c 6c 20 61  omBtree() call a
129e0 62 6f 76 65 29 20 74 68 65 6e 20 74 72 61 6e 73  bove) then trans
129f0 66 65 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74  fer control of t
12a00 68 61 74 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63  hat.  ** dynamic
12a10 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
12a20 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68 65  pace over to the
12a30 20 70 44 65 73 74 20 73 74 72 75 63 74 75 72 65   pDest structure
12a40 2e 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 65 76  ..  ** This prev
12a50 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20 63 6f  ents a memory co
12a60 70 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  py..  */.  if( s
12a70 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20  Mem.zMalloc ){. 
12a80 20 20 20 61 73 73 65 72 74 28 20 73 4d 65 6d 2e     assert( sMem.
12a90 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20  z==sMem.zMalloc 
12aa0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  );.    assert( !
12ab0 28 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20  (pDest->flags & 
12ac0 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20  MEM_Dyn) );.    
12ad0 61 73 73 65 72 74 28 20 21 28 70 44 65 73 74 2d  assert( !(pDest-
12ae0 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
12af0 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 20 7c 7c 20  ob|MEM_Str)) || 
12b00 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a  pDest->z==sMem.z
12b10 20 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 66   );.    pDest->f
12b20 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45 70  lags &= ~(MEM_Ep
12b30 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29 3b  hem|MEM_Static);
12b40 0a 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67  .    pDest->flag
12b50 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20  s |= MEM_Term;. 
12b60 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d     pDest->z = sM
12b70 65 6d 2e 7a 3b 0a 20 20 20 20 70 44 65 73 74 2d  em.z;.    pDest-
12b80 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d 2e  >zMalloc = sMem.
12b90 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 7d 0a 0a 20 20  zMalloc;.  }..  
12ba0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
12bb0 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c 65  MemMakeWriteable
12bc0 28 70 44 65 73 74 29 3b 0a 0a 6f 70 5f 63 6f 6c  (pDest);..op_col
12bd0 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54  umn_out:.  UPDAT
12be0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
12bf0 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45  Dest);.  REGISTE
12c00 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
12c10 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b   pDest);.  break
12c20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
12c30 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a  Affinity P1 P2 *
12c40 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 41 70 70 6c   P4 *.**.** Appl
12c50 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20  y affinities to 
12c60 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65  a range of P2 re
12c70 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
12c80 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20   with P1..**.** 
12c90 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74  P4 is a string t
12ca0 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
12cb0 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e  ters long. The n
12cc0 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
12cd0 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
12ce0 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
12cf0 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
12d00 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
12d10 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d  for the nth.** m
12d20 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
12d30 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65  e range..*/.case
12d40 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a   OP_Affinity: {.
12d50 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
12d60 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68  ffinity;   /* Th
12d70 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
12d80 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68   applied */.  ch
12d90 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20  ar cAff;        
12da0 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67         /* A sing
12db0 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  le character of 
12dc0 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a  affinity */..  z
12dd0 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
12de0 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
12df0 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a  zAffinity!=0 );.
12e00 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
12e10 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20  ity[pOp->p2]==0 
12e20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
12e30 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68  m[pOp->p1];.  wh
12e40 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a  ile( (cAff = *(z
12e50 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20  Affinity++))!=0 
12e60 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
12e70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b  In1 <= &p->aMem[
12e80 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a 20 20 20 20  p->nMem] );.    
12e90 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
12ea0 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20  id(pIn1) );.    
12eb0 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
12ec0 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  ;.    applyAffin
12ed0 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20  ity(pIn1, cAff, 
12ee0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70  encoding);.    p
12ef0 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  In1++;.  }.  bre
12f00 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
12f10 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20  : MakeRecord P1 
12f20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
12f30 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
12f40 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
12f50 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65  with P1 into the
12f60 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d   [record format]
12f70 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74  .** use as a dat
12f80 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
12f90 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
12fa0 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
12fb0 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50  n index.  The OP
12fc0 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
12fd0 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
12fe0 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a  cord later..**.*
12ff0 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
13000 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
13010 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
13020 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63    The nth charac
13030 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
13040 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
13050 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
13060 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
13070 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
13080 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74  th.** field of t
13090 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a  he index key..**
130a0 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20  .** The mapping 
130b0 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74  from character t
130c0 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69  o affinity is gi
130d0 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54  ven by the SQLIT
130e0 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73  E_AFF_.** macros
130f0 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69   defined in sqli
13100 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49  teInt.h..**.** I
13110 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65  f P4 is NULL the
13120 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c  n all index fiel
13130 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69  ds have the affi
13140 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61  nity NONE..*/.ca
13150 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  se OP_MakeRecord
13160 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65  : {.  u8 *zNewRe
13170 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cord;        /* 
13180 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64  A buffer to hold
13190 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
131a0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
131b0 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20    Mem *pRec;    
131c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
131d0 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
131e0 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20  u64 nData;      
131f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13200 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
13210 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  a space */.  int
13220 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20 20   nHdr;          
13230 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13240 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
13250 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20   space */.  i64 
13260 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
13270 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65     /* Data space
13280 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
13290 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  is record */.  i
132a0 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20  nt nZero;       
132b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
132c0 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74  of zero bytes at
132d0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
132e0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
132f0 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20  nVarint;        
13300 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13310 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e  bytes in a varin
13320 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61  t */.  u32 seria
13330 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a  l_type;       /*
13340 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20   Type field */. 
13350 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20   Mem *pData0;   
13360 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
13370 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d   field to be com
13380 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72  bined into the r
13390 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
133a0 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20 20  pLast;          
133b0 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20    /* Last field 
133c0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
133d0 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20  .  int nField;  
133e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
133f0 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
13400 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
13410 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
13420 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61  ;       /* The a
13430 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66  ffinity string f
13440 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
13450 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d  .  int file_form
13460 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c  at;       /* Fil
13470 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20  e format to use 
13480 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  for encoding */.
13490 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
134a0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
134b0 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65  e used in zNewRe
134c0 63 6f 72 64 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  cord[] */.  int 
134d0 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
134e0 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
134f0 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a  a field */..  /*
13500 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65   Assuming the re
13510 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20  cord contains N 
13520 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f  fields, the reco
13530 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a  rd format looks.
13540 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a    ** like this:.
13550 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d    **.  ** ------
13560 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13570 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13580 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13590 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
135a0 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69  --.  ** | hdr-si
135b0 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79  ze | type 0 | ty
135c0 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70  pe 1 | ... | typ
135d0 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20  e N-1 | data0 | 
135e0 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c  ... | data N-1 |
135f0 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d   .  ** ---------
13600 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13610 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13620 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
13640 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30    **.  ** Data(0
13650 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ) is taken from 
13660 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61  register P1.  Da
13670 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d  ta(1) comes from
13680 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20   register P1+1. 
13690 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74 68   ** and so froth
136a0 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68  ..  **.  ** Each
136b0 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61   type field is a
136c0 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e   varint represen
136d0 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20  ting the serial 
136e0 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a  type of the .  *
136f0 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
13700 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65  data element (se
13710 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  e sqlite3VdbeSer
13720 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a  ialType()). The.
13730 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69    ** hdr-size fi
13740 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61  eld is also a va
13750 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
13760 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
13770 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a  e beginning.  **
13780 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
13790 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20  o data0..  */.  
137a0 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20  nData = 0;      
137b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
137c0 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
137d0 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20  ace */.  nHdr = 
137e0 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  0;          /* N
137f0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
13800 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
13810 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20  /.  nZero = 0;  
13820 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13830 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
13840 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
13850 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69   record */.  nFi
13860 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  eld = pOp->p1;. 
13870 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
13880 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
13890 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f  ( nField>0 && pO
138a0 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
138b0 70 32 2b 6e 46 69 65 6c 64 3c 3d 70 2d 3e 6e 4d  p2+nField<=p->nM
138c0 65 6d 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30  em+1 );.  pData0
138d0 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d   = &aMem[nField]
138e0 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  ;.  nField = pOp
138f0 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20  ->p2;.  pLast = 
13900 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31  &pData0[nField-1
13910 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74  ];.  file_format
13920 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   = p->minWriteFi
13930 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20  leFormat;..  /* 
13940 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74  Identify the out
13950 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a  put register */.
13960 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
13970 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70  3<pOp->p1 || pOp
13980 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f  ->p3>=pOp->p1+pO
13990 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20  p->p2 );.  pOut 
139a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
139b0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
139c0 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
139d0 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67    /* Loop throug
139e0 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74  h the elements t
139f0 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70  hat will make up
13a00 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66   the record to f
13a10 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68  igure.  ** out h
13a20 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73  ow much space is
13a30 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
13a40 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20  e new record..  
13a50 2a 2f 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44  */.  for(pRec=pD
13a60 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73  ata0; pRec<=pLas
13a70 74 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20  t; pRec++){.    
13a80 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
13a90 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20  id(pRec) );.    
13aa0 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b  if( zAffinity ){
13ab0 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
13ac0 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66 69  nity(pRec, zAffi
13ad0 6e 69 74 79 5b 70 52 65 63 2d 70 44 61 74 61 30  nity[pRec-pData0
13ae0 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ], encoding);.  
13af0 20 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65 63    }.    if( pRec
13b00 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 5a 65 72 6f  ->flags&MEM_Zero
13b10 20 26 26 20 70 52 65 63 2d 3e 6e 3e 30 20 29 7b   && pRec->n>0 ){
13b20 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
13b30 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
13b40 70 52 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20  pRec);.    }.   
13b50 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
13b60 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
13b70 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
13b80 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e  format);.    len
13b90 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
13ba0 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69  rialTypeLen(seri
13bb0 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 6e 44  al_type);.    nD
13bc0 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20  ata += len;.    
13bd0 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 56  nHdr += sqlite3V
13be0 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
13bf0 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70  type);.    if( p
13c00 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
13c10 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 2f  _Zero ){.      /
13c20 2a 20 4f 6e 6c 79 20 70 75 72 65 20 7a 65 72 6f  * Only pure zero
13c30 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 73 20 63 61  -filled BLOBs ca
13c40 6e 20 62 65 20 69 6e 70 75 74 20 74 6f 20 74 68  n be input to th
13c50 69 73 20 4f 70 63 6f 64 65 2e 0a 20 20 20 20 20  is Opcode..     
13c60 20 2a 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61 6c   ** We do not al
13c70 6c 6f 77 20 62 6c 6f 62 73 20 77 69 74 68 20 61  low blobs with a
13c80 20 70 72 65 66 69 78 20 61 6e 64 20 61 20 7a 65   prefix and a ze
13c90 72 6f 2d 66 69 6c 6c 65 64 20 74 61 69 6c 2e 20  ro-filled tail. 
13ca0 2a 2f 0a 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b  */.      nZero +
13cb0 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
13cc0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6c  .    }else if( l
13cd0 65 6e 20 29 7b 0a 20 20 20 20 20 20 6e 5a 65 72  en ){.      nZer
13ce0 6f 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  o = 0;.    }.  }
13cf0 0a 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69  ..  /* Add the i
13d00 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 76 61  nitial header va
13d10 72 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74  rint and total t
13d20 68 65 20 73 69 7a 65 20 2a 2f 0a 20 20 6e 48 64  he size */.  nHd
13d30 72 20 2b 3d 20 6e 56 61 72 69 6e 74 20 3d 20 73  r += nVarint = s
13d40 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
13d50 6e 48 64 72 29 3b 0a 20 20 69 66 28 20 6e 56 61  nHdr);.  if( nVa
13d60 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69  rint<sqlite3Vari
13d70 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 7b 0a 20  ntLen(nHdr) ){. 
13d80 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20     nHdr++;.  }. 
13d90 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44   nByte = nHdr+nD
13da0 61 74 61 2d 6e 5a 65 72 6f 3b 0a 20 20 69 66 28  ata-nZero;.  if(
13db0 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
13dc0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
13dd0 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
13de0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
13df0 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
13e00 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
13e10 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72  ter has a buffer
13e20 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f   large enough to
13e30 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65   store .  ** the
13e40 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65   new record. The
13e50 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
13e60 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f   (pOp->p3) is no
13e70 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a  t allowed to.  *
13e80 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  * be one of the 
13e90 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
13ea0 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c  (because the fol
13eb0 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20  lowing call to. 
13ec0 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
13ed0 65 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63  emGrow() could c
13ee0 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
13ef0 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
13f00 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ed)..  */.  if( 
13f10 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
13f20 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
13f30 79 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67  yte, 0) ){.    g
13f40 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
13f50 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
13f60 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
13f70 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
13f80 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
13f90 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
13fa0 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 66  cord, nHdr);.  f
13fb0 6f 72 28 70 52 65 63 3d 70 44 61 74 61 30 3b 20  or(pRec=pData0; 
13fc0 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20 70 52 65  pRec<=pLast; pRe
13fd0 63 2b 2b 29 7b 0a 20 20 20 20 73 65 72 69 61 6c  c++){.    serial
13fe0 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56  _type = sqlite3V
13ff0 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52  dbeSerialType(pR
14000 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29  ec, file_format)
14010 3b 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  ;.    i += putVa
14020 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
14030 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
14040 70 65 29 3b 20 20 20 20 20 20 2f 2a 20 73 65 72  pe);      /* ser
14050 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 7d 0a  ial type */.  }.
14060 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61 74 61    for(pRec=pData
14070 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74 3b 20  0; pRec<=pLast; 
14080 70 52 65 63 2b 2b 29 7b 20 20 2f 2a 20 73 65 72  pRec++){  /* ser
14090 69 61 6c 20 64 61 74 61 20 2a 2f 0a 20 20 20 20  ial data */.    
140a0 69 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  i += sqlite3Vdbe
140b0 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52  SerialPut(&zNewR
140c0 65 63 6f 72 64 5b 69 5d 2c 20 28 69 6e 74 29 28  ecord[i], (int)(
140d0 6e 42 79 74 65 2d 69 29 2c 20 70 52 65 63 2c 66  nByte-i), pRec,f
140e0 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 7d  ile_format);.  }
140f0 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 42  .  assert( i==nB
14100 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  yte );..  assert
14110 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
14120 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20  Op->p3<=p->nMem 
14130 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  );.  pOut->n = (
14140 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
14150 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  t->flags = MEM_B
14160 6c 6f 62 20 7c 20 4d 45 4d 5f 44 79 6e 3b 0a 20  lob | MEM_Dyn;. 
14170 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b   pOut->xDel = 0;
14180 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
14190 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
141a0 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
141b0 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
141c0 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
141d0 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
141e0 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
141f0 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
14200 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
14210 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
14220 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
14230 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
14240 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
14250 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
14260 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
14270 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
14280 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
14290 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
142a0 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61  s (an integer va
142b0 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c  lue) in the tabl
142c0 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f  e or index .** o
142d0 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
142e0 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  P1 in register P
142f0 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  2.*/.#ifndef SQL
14300 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
14310 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e  UNT.case OP_Coun
14320 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  t: {         /* 
14330 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
14340 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
14350 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
14360 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70  sr;..  pCrsr = p
14370 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
14380 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28  ->pCursor;.  if(
14390 20 70 43 72 73 72 20 29 7b 0a 20 20 20 20 72 63   pCrsr ){.    rc
143a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
143b0 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e  ount(pCrsr, &nEn
143c0 74 72 79 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  try);.  }else{. 
143d0 20 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 0a 20     nEntry = 0;. 
143e0 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
143f0 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b   nEntry;.  break
14400 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
14410 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74  pcode: Savepoint
14420 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
14430 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65  ** Open, release
14440 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65   or rollback the
14450 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64   savepoint named
14460 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 50 34   by parameter P4
14470 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f  , depending.** o
14480 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  n the value of P
14490 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77  1. To open a new
144a0 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
144b0 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63  0. To release (c
144c0 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69  ommit) an.** exi
144d0 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c  sting savepoint,
144e0 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f   P1==1, or to ro
144f0 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69  llback an existi
14500 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d  ng savepoint P1=
14510 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  =2..*/.case OP_S
14520 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  avepoint: {.  in
14530 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20  t p1;           
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14550 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65   Value of P1 ope
14560 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rand */.  char *
14570 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
14580 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
14590 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a  e of savepoint *
145a0 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20  /.  int nName;. 
145b0 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77   Savepoint *pNew
145c0 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
145d0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76  Savepoint;.  Sav
145e0 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20  epoint *pTmp;.  
145f0 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a  int iSavepoint;.
14600 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20    int ii;..  p1 
14610 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61  = pOp->p1;.  zNa
14620 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  me = pOp->p4.z;.
14630 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  .  /* Assert tha
14640 74 20 74 68 65 20 70 31 20 70 61 72 61 6d 65 74  t the p1 paramet
14650 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73  er is valid. Als
14660 6f 20 74 68 61 74 20 69 66 20 74 68 65 72 65 20  o that if there 
14670 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20  is no open.  ** 
14680 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
14690 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62  n there cannot b
146a0 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73  e any savepoints
146b0 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  . .  */.  assert
146c0 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
146d0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43  ==0 || db->autoC
146e0 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
146f0 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f  sert( p1==SAVEPO
14700 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53  INT_BEGIN||p1==S
14710 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
14720 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
14730 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73  ROLLBACK );.  as
14740 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
14750 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72  oint || db->isTr
14760 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
14770 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  nt==0 );.  asser
14780 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  t( checkSavepoin
14790 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 0a 20  tCount(db) );.. 
147a0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
147b0 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20  NT_BEGIN ){.    
147c0 69 66 28 20 64 62 2d 3e 77 72 69 74 65 56 64 62  if( db->writeVdb
147d0 65 43 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  eCnt>0 ){.      
147e0 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69  /* A new savepoi
147f0 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65  nt cannot be cre
14800 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72  ated if there ar
14810 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a  e active write .
14820 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65        ** stateme
14830 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72  nts (i.e. open r
14840 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d  ead/write increm
14850 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c  ental blob handl
14860 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  es)..      */.  
14870 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
14880 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
14890 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70  , db, "cannot op
148a0 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22  en savepoint - "
148b0 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74  .        "SQL st
148c0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
148d0 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
148e0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
148f0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14900 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33   nName = sqlite3
14910 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b  Strlen30(zName);
14920 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
14930 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
14940 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
14950 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
14960 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
14970 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
14980 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
14990 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
149a0 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
149b0 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
149c0 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
149d0 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
149e0 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
149f0 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
14a00 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
14a10 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
14a20 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
14a30 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
14a40 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
14a50 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
14a60 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
14a70 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
14a80 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
14a90 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
14aa0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
14ab0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
14ac0 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
14ad0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
14ae0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
14af0 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
14b00 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20      }.    .     
14b10 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
14b20 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
14b30 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
14b40 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
14b50 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
14b60 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
14b70 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
14b80 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
14b90 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
14ba0 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
14bb0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
14bc0 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20  dCons;.      }. 
14bd0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
14be0 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30    iSavepoint = 0
14bf0 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74  ;..    /* Find t
14c00 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69  he named savepoi
14c10 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20  nt. If there is 
14c20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
14c30 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a  t, then an.    *
14c40 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  * an error is re
14c50 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
14c60 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  er.  */.    for(
14c70 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
14c80 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
14c90 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65  nt; .      pSave
14ca0 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33  point && sqlite3
14cb0 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69  StrICmp(pSavepoi
14cc0 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  nt->zName, zName
14cd0 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  );.      pSavepo
14ce0 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
14cf0 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20  ->pNext.    ){. 
14d00 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b       iSavepoint+
14d10 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
14d20 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a   !pSavepoint ){.
14d30 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
14d40 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
14d50 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68  sg, db, "no such
14d60 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c   savepoint: %s",
14d70 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72   zName);.      r
14d80 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
14d90 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
14da0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 77 72 69  .        db->wri
14db0 74 65 56 64 62 65 43 6e 74 3e 30 20 7c 7c 20 28  teVdbeCnt>0 || (
14dc0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
14dd0 4c 4c 42 41 43 4b 20 26 26 20 64 62 2d 3e 61 63  LLBACK && db->ac
14de0 74 69 76 65 56 64 62 65 43 6e 74 3e 31 29 20 0a  tiveVdbeCnt>1) .
14df0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20      ){.      /* 
14e00 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
14e10 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63  le to release (c
14e20 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69  ommit) a savepoi
14e30 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20  nt if there are 
14e40 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65  .      ** active
14e50 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74   write statement
14e60 73 2e 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  s. It is not pos
14e70 73 69 62 6c 65 20 74 6f 20 72 6f 6c 6c 62 61 63  sible to rollbac
14e80 6b 20 61 20 73 61 76 65 70 6f 69 6e 74 0a 20 20  k a savepoint.  
14e90 20 20 20 20 2a 2a 20 69 66 20 74 68 65 72 65 20      ** if there 
14ea0 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 20 73  are any active s
14eb0 74 61 74 65 6d 65 6e 74 73 20 61 74 20 61 6c 6c  tatements at all
14ec0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
14ed0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
14ee0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
14ef0 62 2c 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e  b, .        "can
14f00 6e 6f 74 20 25 73 20 73 61 76 65 70 6f 69 6e 74  not %s savepoint
14f10 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74   - SQL statement
14f20 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 2c 0a  s in progress",.
14f30 20 20 20 20 20 20 20 20 28 70 31 3d 3d 53 41 56          (p1==SAV
14f40 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
14f50 3f 20 22 72 6f 6c 6c 62 61 63 6b 22 3a 20 22 72  ? "rollback": "r
14f60 65 6c 65 61 73 65 22 29 0a 20 20 20 20 20 20 29  elease").      )
14f70 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
14f80 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
14f90 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  lse{..      /* D
14fa0 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
14fb0 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20   or not this is 
14fc0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
14fd0 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a  vepoint. If so,.
14fe0 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69        ** and thi
14ff0 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63  s is a RELEASE c
15000 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65  ommand, then the
15010 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
15020 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69  tion .      ** i
15030 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20  s committed. .  
15040 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74      */.      int
15050 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d   isTransaction =
15060 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
15070 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54  xt==0 && db->isT
15080 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
15090 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69  int;.      if( i
150a0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20  sTransaction && 
150b0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
150c0 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
150d0 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
150e0 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
150f0 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
15100 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
15110 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
15120 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
15130 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
15140 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
15150 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
15160 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
15170 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   ){.          p-
15180 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
15190 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
151a0 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  it = 0;.        
151b0 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
151c0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
151d0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
151e0 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
151f0 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73  }.        db->is
15200 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
15210 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  oint = 0;.      
15220 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20    rc = p->rc;.  
15230 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15240 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
15250 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d  db->nSavepoint -
15260 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b   iSavepoint - 1;
15270 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
15280 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
15290 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
152a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
152b0 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61  eSavepoint(db->a
152c0 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20  Db[ii].pBt, p1, 
152d0 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
152e0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
152f0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
15300 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
15310 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
15320 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
15330 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
15340 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
15350 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64 62  _ROLLBACK && (db
15360 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 49  ->flags&SQLITE_I
15370 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30  nternChanges)!=0
15380 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
15390 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
153a0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
153b0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
153c0 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
153d0 6c 53 63 68 65 6d 61 28 64 62 2c 20 2d 31 29 3b  lSchema(db, -1);
153e0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66  .          db->f
153f0 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67  lags = (db->flag
15400 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  s | SQLITE_Inter
15410 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20  nChanges);.     
15420 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a     }.      }.  .
15430 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c        /* Regardl
15440 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74  ess of whether t
15450 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
15460 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65   or ROLLBACK, de
15470 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20  stroy all .     
15480 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e   ** savepoints n
15490 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20  ested inside of 
154a0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
154b0 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e  ing operated on.
154c0 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28   */.      while(
154d0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21   db->pSavepoint!
154e0 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  =pSavepoint ){. 
154f0 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62         pTmp = db
15500 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
15510 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
15520 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65  oint = pTmp->pNe
15530 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
15540 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54  te3DbFree(db, pT
15550 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  mp);.        db-
15560 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
15570 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
15580 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45   If it is a RELE
15590 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f  ASE, then destro
155a0 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  y the savepoint 
155b0 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
155c0 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e  n .      ** too.
155d0 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c   If it is a ROLL
155e0 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65  BACK TO, then se
155f0 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
15600 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20  deferred .      
15610 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ** constraint vi
15620 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74  olations present
15630 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
15640 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74   to the value st
15650 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68  ored.      ** wh
15660 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  en the savepoint
15670 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a   was created.  *
15680 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
15690 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
156a0 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
156b0 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
156c0 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
156d0 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
156e0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
156f0 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
15700 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
15710 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
15720 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
15730 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
15740 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
15750 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
15760 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
15770 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
15780 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
15790 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
157a0 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
157b0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
157c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
157d0 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d  Opcode: AutoComm
157e0 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  it P1 P2 * * *.*
157f0 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74  *.** Set the dat
15800 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  abase auto-commi
15810 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20  t flag to P1 (1 
15820 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20  or 0). If P2 is 
15830 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61  true, roll.** ba
15840 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79  ck any currently
15850 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72   active btree tr
15860 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74  ansactions. If t
15870 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
15880 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72  ive.** VMs (apar
15890 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29  t from this one)
158a0 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43  , then a ROLLBAC
158b0 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d  K fails.  A COMM
158c0 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74  IT fails if.** t
158d0 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
158e0 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61  writing VMs or a
158f0 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75  ctive VMs that u
15900 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e  se shared cache.
15910 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
15920 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74  ruction causes t
15930 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a  he VM to halt..*
15940 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f  /.case OP_AutoCo
15950 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65  mmit: {.  int de
15960 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
15970 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b  .  int iRollback
15980 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43  ;.  int turnOnAC
15990 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f  ;..  desiredAuto
159a0 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
159b0 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20  ;.  iRollback = 
159c0 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f  pOp->p2;.  turnO
159d0 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41 75 74  nAC = desiredAut
159e0 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e  oCommit && !db->
159f0 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73  autoCommit;.  as
15a00 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
15a10 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65  oCommit==1 || de
15a20 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
15a30 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
15a40 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
15a50 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63  t==1 || iRollbac
15a60 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  k==0 );.  assert
15a70 28 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62 65  ( db->activeVdbe
15a80 43 6e 74 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20  Cnt>0 );  /* At 
15a90 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56  least this one V
15aa0 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 0a  M is active */..
15ab0 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26    if( turnOnAC &
15ac0 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64  & iRollback && d
15ad0 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
15ae0 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  >1 ){.    /* If 
15af0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
15b00 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f   implements a RO
15b10 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72  LLBACK and other
15b20 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20   VMs are.    ** 
15b30 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61  still running, a
15b40 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  nd a transaction
15b50 20 69 73 20 61 63 74 69 76 65 2c 20 72 65 74 75   is active, retu
15b60 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
15b70 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68  cating.    ** th
15b80 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
15b90 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
15ba0 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  irst. .    */.  
15bb0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
15bc0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
15bd0 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  db, "cannot roll
15be0 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e  back transaction
15bf0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
15c00 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
15c10 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
15c20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
15c30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 74 75  ;.  }else if( tu
15c40 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c  rnOnAC && !iRoll
15c50 62 61 63 6b 20 26 26 20 64 62 2d 3e 77 72 69 74  back && db->writ
15c60 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20 20  eVdbeCnt>0 ){.  
15c70 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
15c80 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
15c90 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64  nts a COMMIT and
15ca0 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77   other VMs are w
15cb0 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  riting.    ** re
15cc0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e  turn an error in
15cd0 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68  dicating that th
15ce0 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74  e other VMs must
15cf0 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e   complete first.
15d00 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c   .    */.    sql
15d10 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
15d20 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
15d30 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72  cannot commit tr
15d40 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20  ansaction - ".  
15d50 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
15d60 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
15d70 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  s");.    rc = SQ
15d80 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
15d90 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75  se if( desiredAu
15da0 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75  toCommit!=db->au
15db0 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
15dc0 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b  if( iRollback ){
15dd0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
15de0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
15df0 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==1 );.      sql
15e00 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
15e10 64 62 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  db);.      db->a
15e20 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
15e30 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63     }else if( (rc
15e40 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
15e50 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
15e60 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
15e70 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
15e80 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  n;.    }else{.  
15e90 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
15ea0 69 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64  it = (u8)desired
15eb0 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20  AutoCommit;.    
15ec0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
15ed0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
15ee0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
15ef0 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20   p->pc = pc;.   
15f00 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
15f10 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73  mit = (u8)(1-des
15f20 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b  iredAutoCommit);
15f30 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  .        p->rc =
15f40 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
15f50 59 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  Y;.        goto 
15f60 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
15f70 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61     }.    }.    a
15f80 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
15f90 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20  ement==0 );.    
15fa0 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
15fb0 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  points(db);.    
15fc0 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  if( p->rc==SQLIT
15fd0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
15fe0 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   = SQLITE_DONE;.
15ff0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
16000 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
16010 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  OR;.    }.    go
16020 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
16030 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
16040 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
16050 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20  ->zErrMsg, db,. 
16060 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64         (!desired
16070 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e  AutoCommit)?"can
16080 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e  not start a tran
16090 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61  saction within a
160a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a   transaction":(.
160b0 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61          (iRollba
160c0 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
160d0 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
160e0 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
160f0 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
16100 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
16110 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
16120 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
16130 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
16140 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
16150 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  OR;.  }.  break;
16160 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
16170 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32  ransaction P1 P2
16180 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 42 65 67   * * *.**.** Beg
16190 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
161a0 2e 20 20 54 68 65 20 74 72 61 6e 73 61 63 74 69  .  The transacti
161b0 6f 6e 20 65 6e 64 73 20 77 68 65 6e 20 61 20 43  on ends when a C
161c0 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c 6c 62 61 63  ommit or Rollbac
161d0 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 65  k.** opcode is e
161e0 6e 63 6f 75 6e 74 65 72 65 64 2e 20 20 44 65 70  ncountered.  Dep
161f0 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 4f 4e  ending on the ON
16200 20 43 4f 4e 46 4c 49 43 54 20 73 65 74 74 69 6e   CONFLICT settin
16210 67 2c 20 74 68 65 0a 2a 2a 20 74 72 61 6e 73 61  g, the.** transa
16220 63 74 69 6f 6e 20 6d 69 67 68 74 20 61 6c 73 6f  ction might also
16230 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
16240 69 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65  if an error is e
16250 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 2a 2a 0a 2a  ncountered..**.*
16260 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
16270 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
16280 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20  e file on which 
16290 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
162a0 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20  is.** started.  
162b0 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d  Index 0 is the m
162c0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
162d0 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73  e and index 1 is
162e0 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65   the.** file use
162f0 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
16300 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73  tables.  Indices
16310 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72   of 2 or more ar
16320 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74  e used for.** at
16330 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
16340 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73  ..**.** If P2 is
16350 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
16360 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
16370 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20  ion is started. 
16380 20 41 20 52 45 53 45 52 56 45 44 20 6c 6f 63 6b   A RESERVED lock
16390 20 69 73 0a 2a 2a 20 6f 62 74 61 69 6e 65 64 20   is.** obtained 
163a0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
163b0 66 69 6c 65 20 77 68 65 6e 20 61 20 77 72 69 74  file when a writ
163c0 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
163d0 20 73 74 61 72 74 65 64 2e 20 20 4e 6f 0a 2a 2a   started.  No.**
163e0 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 63   other process c
163f0 61 6e 20 73 74 61 72 74 20 61 6e 6f 74 68 65 72  an start another
16400 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
16410 6f 6e 20 77 68 69 6c 65 20 74 68 69 73 20 74 72  on while this tr
16420 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20  ansaction is.** 
16430 75 6e 64 65 72 77 61 79 2e 20 20 53 74 61 72 74  underway.  Start
16440 69 6e 67 20 61 20 77 72 69 74 65 20 74 72 61 6e  ing a write tran
16450 73 61 63 74 69 6f 6e 20 61 6c 73 6f 20 63 72 65  saction also cre
16460 61 74 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  ates a rollback 
16470 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a 2a 20 77 72  journal. A.** wr
16480 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
16490 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20  must be started 
164a0 62 65 66 6f 72 65 20 61 6e 79 20 63 68 61 6e 67  before any chang
164b0 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  es can be made t
164c0 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
164d0 65 2e 20 20 49 66 20 50 32 20 69 73 20 32 20 6f  e.  If P2 is 2 o
164e0 72 20 67 72 65 61 74 65 72 20 74 68 65 6e 20 61  r greater then a
164f0 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
16500 20 69 73 20 61 6c 73 6f 20 6f 62 74 61 69 6e 65   is also obtaine
16510 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 66 69 6c 65  d.** on the file
16520 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69  ..**.** If a wri
16530 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
16540 73 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68  s started and th
16550 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a  e Vdbe.usesStmtJ
16560 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a  ournal flag is.*
16570 2a 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61  * true (this fla
16580 67 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  g is set if the 
16590 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20  Vdbe may modify 
165a0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f  more than one ro
165b0 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72  w and may.** thr
165c0 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
165d0 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d  ption), a statem
165e0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
165f0 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e  may also be open
16600 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63  ed..** More spec
16610 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74  ifically, a stat
16620 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
16630 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20  n is opened iff 
16640 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
16650 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75  connection is cu
16660 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61  rrently not in a
16670 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20  utocommit mode, 
16680 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20  or if there are 
16690 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20  other.** active 
166a0 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74  statements. A st
166b0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
166c0 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 61  ion allows the a
166d0 66 66 65 63 74 73 20 6f 66 20 74 68 69 73 0a 2a  ffects of this.*
166e0 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c  * VDBE to be rol
166f0 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61  led back after a
16700 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20  n error without 
16710 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62  having to roll b
16720 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  ack the.** entir
16730 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  e transaction. I
16740 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e  f no error is en
16750 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73  countered, the s
16760 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
16770 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74  tion.** will aut
16780 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69  omatically commi
16790 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  t when the VDBE 
167a0 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  halts..**.** If 
167b0 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P2 is zero, then
167c0 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 69 73 20   a read-lock is 
167d0 6f 62 74 61 69 6e 65 64 20 6f 6e 20 74 68 65 20  obtained on the 
167e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
167f0 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61  /.case OP_Transa
16800 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65  ction: {.  Btree
16810 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74   *pBt;..  assert
16820 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
16830 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
16840 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
16850 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
16860 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
16870 3e 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42  >p1))!=0 );.  pB
16880 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
16890 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
168a0 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
168b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
168c0 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
168d0 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72  ->p2);.    if( r
168e0 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
168f0 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
16900 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  pc;.      p->rc 
16910 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
16920 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  SY;.      goto v
16930 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
16940 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
16950 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
16960 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
16970 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
16980 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
16990 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
169a0 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
169b0 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
169c0 3d 30 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65  =0 || db->active
169d0 56 64 62 65 43 6e 74 3e 31 29 20 0a 20 20 20 20  VdbeCnt>1) .    
169e0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
169f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
16a00 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20  nTrans(pBt) );. 
16a10 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61       if( p->iSta
16a20 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  tement==0 ){.   
16a30 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
16a40 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26  >nStatement>=0 &
16a50 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  & db->nSavepoint
16a60 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64  >=0 );.        d
16a70 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b  b->nStatement++;
16a80 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74   .        p->iSt
16a90 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53  atement = db->nS
16aa0 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e  avepoint + db->n
16ab0 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20  Statement;.     
16ac0 20 7d 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71   }.      rc = sq
16ad0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53  lite3BtreeBeginS
16ae0 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61  tmt(pBt, p->iSta
16af0 74 65 6d 65 6e 74 29 3b 0a 0a 20 20 20 20 20 20  tement);..      
16b00 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72  /* Store the cur
16b10 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68  rent value of th
16b20 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
16b30 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  es deferred cons
16b40 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20  traint.      ** 
16b50 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20  counter. If the 
16b60 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
16b70 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ction needs to b
16b80 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20  e rolled back,. 
16b90 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75       ** the valu
16ba0 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65  e of this counte
16bb0 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  r needs to be re
16bc0 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a  stored too.  */.
16bd0 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
16be0 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  fCons = db->nDef
16bf0 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 7d  erredCons;.    }
16c00 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
16c10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64  ./* Opcode: Read
16c20 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
16c30 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63  * *.**.** Read c
16c40 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20  ookie number P3 
16c50 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31  from database P1
16c60 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e   and write it in
16c70 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
16c80 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20  ** P3==1 is the 
16c90 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
16ca0 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61   P3==2 is the da
16cb0 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a  tabase format..*
16cc0 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72  * P3==3 is the r
16cd0 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
16ce0 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64   cache size, and
16cf0 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
16d00 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e  0 is.** the main
16d10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
16d20 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
16d30 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
16d40 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  ed to store.** t
16d50 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
16d60 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73  .**.** There mus
16d70 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b  t be a read-lock
16d80 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
16d90 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73   (either a trans
16da0 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62  action.** must b
16db0 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65  e started or the
16dc0 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70  re must be an op
16dd0 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72  en cursor) befor
16de0 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74  e.** executing t
16df0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
16e00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64  .*/.case OP_Read
16e10 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20  Cookie: {       
16e20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
16e30 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
16e40 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
16e50 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f   iDb;.  int iCoo
16e60 6b 69 65 3b 0a 0a 20 20 69 44 62 20 3d 20 70 4f  kie;..  iDb = pO
16e70 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65  p->p1;.  iCookie
16e80 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
16e90 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
16ea0 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
16eb0 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  A );.  assert( i
16ec0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
16ed0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
16ee0 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
16ef0 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
16f00 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
16f10 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
16f20 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 0a 20  <<iDb))!=0 );.. 
16f30 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
16f40 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62  Meta(db->aDb[iDb
16f50 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20  ].pBt, iCookie, 
16f60 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
16f70 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d    pOut->u.i = iM
16f80 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eta;.  break;.}.
16f90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43  ./* Opcode: SetC
16fa0 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
16fb0 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
16fc0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
16fd0 67 69 73 74 65 72 20 50 33 20 28 69 6e 74 65 72  gister P3 (inter
16fe0 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74  preted as an int
16ff0 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f  eger).** into co
17000 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f  okie number P2 o
17010 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  f database P1.  
17020 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P2==1 is the sch
17030 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a  ema version.  .*
17040 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64  * P2==2 is the d
17050 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 20  atabase format. 
17060 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P2==3 is the rec
17070 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
17080 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61  ache .** size, a
17090 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
170a0 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  ==0 is the main 
170b0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
170c0 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a  d P1==1 is the .
170d0 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
170e0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
170f0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
17100 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63  .**.** A transac
17110 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
17120 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63  rted before exec
17130 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  uting this opcod
17140 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
17150 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  tCookie: {      
17160 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20   /* in3 */.  Db 
17170 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20  *pDb;.  assert( 
17180 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e  pOp->p2<SQLITE_N
17190 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
171a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
171b0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
171c0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
171d0 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
171e0 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
171f0 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  )<<pOp->p1))!=0 
17200 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
17210 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
17220 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
17230 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
17240 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
17250 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d  texHeld(db, pOp-
17260 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e  >p1, 0) );.  pIn
17270 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
17280 33 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  3];.  sqlite3Vdb
17290 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
172a0 49 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e  In3);.  /* See n
172b0 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20  ote about index 
172c0 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52  shifting on OP_R
172d0 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72  eadCookie */.  r
172e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
172f0 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e  UpdateMeta(pDb->
17300 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69  pBt, pOp->p2, (i
17310 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  nt)pIn3->u.i);. 
17320 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
17330 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
17340 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65  ON ){.    /* Whe
17350 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  n the schema coo
17360 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63  kie changes, rec
17370 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b  ord the new cook
17380 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f  ie internally */
17390 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
173a0 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
173b0 20 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e   = (int)pIn3->u.
173c0 69 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73  i;.    db->flags
173d0 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72   |= SQLITE_Inter
173e0 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73  nChanges;.  }els
173f0 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42  e if( pOp->p2==B
17400 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  TREE_FILE_FORMAT
17410 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72   ){.    /* Recor
17420 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  d changes in the
17430 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a   file format */.
17440 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
17450 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20  ->file_format = 
17460 28 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  (u8)pIn3->u.i;. 
17470 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31   }.  if( pOp->p1
17480 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e  ==1 ){.    /* In
17490 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65  validate all pre
174a0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
174b0 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45   whenever the TE
174c0 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  MP database.    
174d0 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61  ** schema is cha
174e0 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31  nged.  Ticket #1
174f0 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  644 */.    sqlit
17500 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
17510 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
17520 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
17530 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   0;.  }.  break;
17540 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
17550 65 72 69 66 79 43 6f 6f 6b 69 65 20 50 31 20 50  erifyCookie P1 P
17560 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
17570 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 6f  heck the value o
17580 66 20 67 6c 6f 62 61 6c 20 64 61 74 61 62 61 73  f global databas
17590 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62  e parameter numb
175a0 65 72 20 30 20 28 74 68 65 0a 2a 2a 20 73 63 68  er 0 (the.** sch
175b0 65 6d 61 20 76 65 72 73 69 6f 6e 29 20 61 6e 64  ema version) and
175c0 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69 73   make sure it is
175d0 20 65 71 75 61 6c 20 74 6f 20 50 32 20 61 6e 64   equal to P2 and
175e0 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 67 65 6e   that the.** gen
175f0 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
17600 6f 6e 20 74 68 65 20 6c 6f 63 61 6c 20 73 63 68  on the local sch
17610 65 6d 61 20 70 61 72 73 65 20 65 71 75 61 6c 73  ema parse equals
17620 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73   P3..**.** P1 is
17630 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 75   the database nu
17640 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 30 20  mber which is 0 
17650 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
17660 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 61 6e  abase file.** an
17670 64 20 31 20 66 6f 72 20 74 68 65 20 66 69 6c 65  d 1 for the file
17680 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f 72 61   holding tempora
17690 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 73 6f  ry tables and so
176a0 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62 65 72  me higher number
176b0 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69 61 72  .** for auxiliar
176c0 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  y databases..**.
176d0 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68  ** The cookie ch
176e0 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20  anges its value 
176f0 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
17700 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
17710 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  nges..** This op
17720 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20  eration is used 
17730 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74  to detect when t
17740 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68  hat the cookie h
17750 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e  as changed.** an
17760 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65  d that the curre
17770 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73  nt process needs
17780 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
17790 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45 69 74  chema..**.** Eit
177a0 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
177b0 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76 65 20  n needs to have 
177c0 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f 72 20  been started or 
177d0 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65 64 73  an OP_Open needs
177e0 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63 75 74  .** to be execut
177f0 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69 73 68  ed (to establish
17800 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20 62 65   a read lock) be
17810 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f 64 65  fore this opcode
17820 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 0a   is.** invoked..
17830 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72 69 66  */.case OP_Verif
17840 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69 6e 74  yCookie: {.  int
17850 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47   iMeta;.  int iG
17860 65 6e 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  en;.  Btree *pBt
17870 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
17880 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
17890 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
178a0 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
178b0 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
178c0 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29  sk)1)<<pOp->p1))
178d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
178e0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
178f0 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d  texHeld(db, pOp-
17900 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 42 74  >p1, 0) );.  pBt
17910 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
17920 70 31 5d 2e 70 42 74 3b 0a 20 20 69 66 28 20 70  p1].pBt;.  if( p
17930 42 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  Bt ){.    sqlite
17940 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42  3BtreeGetMeta(pB
17950 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  t, BTREE_SCHEMA_
17960 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29  VERSION, (u32 *)
17970 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65  &iMeta);.    iGe
17980 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  n = db->aDb[pOp-
17990 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47  >p1].pSchema->iG
179a0 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c  eneration;.  }el
179b0 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69  se{.    iGen = i
179c0 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Meta = 0;.  }.  
179d0 69 66 28 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e  if( iMeta!=pOp->
179e0 70 32 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d  p2 || iGen!=pOp-
179f0 3e 70 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p3 ){.    sqlit
17a00 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e  e3DbFree(db, p->
17a10 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d  zErrMsg);.    p-
17a20 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74  >zErrMsg = sqlit
17a30 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22  e3DbStrDup(db, "
17a40 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
17a50 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20  has changed");. 
17a60 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68     /* If the sch
17a70 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20  ema-cookie from 
17a80 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
17a90 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f  e matches the co
17aa0 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f  okie .    ** sto
17ab0 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d  red with the in-
17ac0 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74  memory represent
17ad0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68  ation of the sch
17ae0 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e  ema, do.    ** n
17af0 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63  ot reload the sc
17b00 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61  hema from the da
17b10 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20  tabase file..   
17b20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69   **.    ** If vi
17b30 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65  rtual-tables are
17b40 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73   in use, this is
17b50 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74   not just an opt
17b60 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a  imization..    *
17b70 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65  * Often, v-table
17b80 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61  s store their da
17b90 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69  ta in other SQLi
17ba0 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68  te tables, which
17bb0 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72  .    ** are quer
17bc0 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ied from within 
17bd0 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65  xNext() and othe
17be0 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64  r v-table method
17bf0 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70  s using.    ** p
17c00 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e  repared queries.
17c10 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79   If such a query
17c20 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c   is out-of-date,
17c30 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20   we do not want 
17c40 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72  to.    ** discar
17c50 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  d the database s
17c60 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73  chema, as the us
17c70 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e  er code implemen
17c80 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20  ting the.    ** 
17c90 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61  v-table would ha
17ca0 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66  ve to be ready f
17cb0 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  or the sqlite3_v
17cc0 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74  tab structure it
17cd0 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62  self.    ** to b
17ce0 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68  e invalidated wh
17cf0 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73  enever sqlite3_s
17d00 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20  tep() is called 
17d10 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20  from within .   
17d20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65   ** a v-table me
17d30 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  thod..    */.   
17d40 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70   if( db->aDb[pOp
17d50 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  ->p1].pSchema->s
17d60 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d  chema_cookie!=iM
17d70 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  eta ){.      sql
17d80 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
17d90 6c 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d  lSchema(db, pOp-
17da0 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  >p1);.    }..   
17db0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
17dc0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
17dd0 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62  _SCHEMA;.  }.  b
17de0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
17df0 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20  de: OpenRead P1 
17e00 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
17e10 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
17e20 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
17e30 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
17e40 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
17e50 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
17e60 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
17e70 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
17e80 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
17e90 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
17ea0 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
17eb0 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
17ec0 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
17ed0 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
17ee0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
17ef0 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
17f00 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
17f10 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
17f20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
17f30 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
17f40 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
17f50 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
17f60 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
17f70 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
17f80 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
17f90 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
17fa0 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
17fb0 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
17fc0 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
17fd0 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
17fe0 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
17ff0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
18000 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
18010 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
18020 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
18030 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
18040 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
18050 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
18060 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
18070 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
18080 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
18090 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
180a0 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
180b0 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
180c0 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
180d0 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
180e0 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
180f0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
18100 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
18110 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
18120 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
18130 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
18140 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
18150 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
18160 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
18170 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
18180 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
18190 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
181a0 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
181b0 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
181c0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
181d0 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
181e0 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
181f0 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
18200 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
18210 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
18220 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
18230 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
18240 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
18250 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
18260 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
18270 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
18280 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
18290 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
182a0 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
182b0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
182c0 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
182d0 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
182e0 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
182f0 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
18300 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
18310 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
18320 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
18330 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
18340 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
18350 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
18360 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
18370 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
18380 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
18390 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e 0a  also OpenWrite..
183a0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  */./* Opcode: Op
183b0 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33  enWrite P1 P2 P3
183c0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70 65   P4 P5.**.** Ope
183d0 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63  n a read/write c
183e0 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f  ursor named P1 o
183f0 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
18400 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a  ndex whose root.
18410 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20  ** page is P2.  
18420 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20  Or if P5!=0 use 
18430 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
18440 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69  egister P2 to fi
18450 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70  nd the.** root p
18460 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  age..**.** The P
18470 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
18480 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
18490 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
184a0 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
184b0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
184c0 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
184d0 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
184e0 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
184f0 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
18500 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
18510 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
18520 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
18530 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
18540 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
18550 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
18560 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
18570 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
18580 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
18590 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
185a0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
185b0 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74  e table, or to t
185c0 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e  he.** largest in
185d0 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d  dex of any colum
185e0 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  n of the table t
185f0 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  hat is actually 
18600 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  used..**.** This
18610 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72   instruction wor
18620 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65  ks just like Ope
18630 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61  nRead except tha
18640 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63  t it opens the c
18650 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64  ursor.** in read
18660 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f  /write mode.  Fo
18670 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c  r a given table,
18680 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e   there can be on
18690 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f  e or more read-o
186a0 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f  nly.** cursors o
186b0 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f  r a single read/
186c0 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74  write cursor but
186d0 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a   not both..**.**
186e0 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65   See also OpenRe
186f0 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ad..*/.case OP_O
18700 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50  penRead:.case OP
18710 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20  _OpenWrite: {.  
18720 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65  int nField;.  Ke
18730 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
18740 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74  .  int p2;.  int
18750 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c   iDb;.  int wrFl
18760 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b  ag;.  Btree *pX;
18770 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
18780 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  Cur;.  Db *pDb;.
18790 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65  .  if( p->expire
187a0 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  d ){.    rc = SQ
187b0 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20 20  LITE_ABORT;.    
187c0 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46  break;.  }..  nF
187d0 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79  ield = 0;.  pKey
187e0 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d  Info = 0;.  p2 =
187f0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20   pOp->p2;.  iDb 
18800 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
18810 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
18820 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
18830 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65  assert( (p->btre
18840 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61  eMask & (((yDbMa
18850 73 6b 29 31 29 3c 3c 69 44 62 29 29 21 3d 30 20  sk)1)<<iDb))!=0 
18860 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
18870 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d  aDb[iDb];.  pX =
18880 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73   pDb->pBt;.  ass
18890 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20  ert( pX!=0 );.  
188a0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
188b0 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b  =OP_OpenWrite ){
188c0 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b  .    wrFlag = 1;
188d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
188e0 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
188f0 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
18900 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e  );.    if( pDb->
18910 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
18920 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69  rmat < p->minWri
18930 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a  teFileFormat ){.
18940 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74        p->minWrit
18950 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44  eFileFormat = pD
18960 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
18970 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20  _format;.    }. 
18980 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c   }else{.    wrFl
18990 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  ag = 0;.  }.  if
189a0 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
189b0 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b   assert( p2>0 );
189c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c  .    assert( p2<
189d0 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20  =p->nMem );.    
189e0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pIn2 = &aMem[p2]
189f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
18a00 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29  mIsValid(pIn2) )
18a10 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
18a20 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
18a30 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20  _Int)!=0 );.    
18a40 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
18a50 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
18a60 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49      p2 = (int)pI
18a70 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20  n2->u.i;.    /* 
18a80 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77  The p2 value alw
18a90 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61  ays comes from a
18aa0 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65   prior OP_Create
18ab0 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64  Table opcode and
18ac0 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63  .    ** that opc
18ad0 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
18ae0 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65  set the p2 value
18af0 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72   to 2 or more or
18b00 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20   else fail..    
18b10 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65  ** If there were
18b20 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20   a failure, the 
18b30 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
18b40 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61  nt would have ha
18b50 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f  lted.    ** befo
18b60 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73  re reaching this
18b70 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f   instruction. */
18b80 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 70  .    if( NEVER(p
18b90 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72  2<2) ) {.      r
18ba0 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
18bb0 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67  PT_BKPT;.      g
18bc0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
18bd0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
18be0 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  }.  if( pOp->p4t
18bf0 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
18c00 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20  ){.    pKeyInfo 
18c10 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
18c20 66 6f 3b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f  fo;.    pKeyInfo
18c30 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e 64  ->enc = ENC(p->d
18c40 62 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d  b);.    nField =
18c50 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
18c60 64 2b 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  d+1;.  }else if(
18c70 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
18c80 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46  _INT32 ){.    nF
18c90 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
18ca0 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
18cb0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
18cc0 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
18cd0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
18ce0 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31  , nField, iDb, 1
18cf0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30  );.  if( pCur==0
18d00 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
18d10 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20    pCur->nullRow 
18d20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f  = 1;.  pCur->isO
18d30 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 72 63  rdered = 1;.  rc
18d40 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
18d50 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72  ursor(pX, p2, wr
18d60 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20  Flag, pKeyInfo, 
18d70 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  pCur->pCursor);.
18d80 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
18d90 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20   = pKeyInfo;..  
18da0 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65 72 66  /* Since it perf
18db0 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20 61  orms no memory a
18dc0 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f 2c  llocation or IO,
18dd0 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65 73   the only values
18de0 20 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74   that.  ** sqlit
18df0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20  e3BtreeCursor() 
18e00 6d 61 79 20 72 65 74 75 72 6e 20 61 72 65 20 53  may return are S
18e10 51 4c 49 54 45 5f 45 4d 50 54 59 20 61 6e 64 20  QLITE_EMPTY and 
18e20 53 51 4c 49 54 45 5f 4f 4b 2e 20 0a 20 20 2a 2a  SQLITE_OK. .  **
18e30 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 69 73   SQLITE_EMPTY is
18e40 20 6f 6e 6c 79 20 72 65 74 75 72 6e 65 64 20 77   only returned w
18e50 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74  hen attempting t
18e60 6f 20 6f 70 65 6e 20 74 68 65 20 74 61 62 6c 65  o open the table
18e70 0a 20 20 2a 2a 20 72 6f 6f 74 65 64 20 61 74 20  .  ** rooted at 
18e80 70 61 67 65 20 31 20 6f 66 20 61 20 7a 65 72 6f  page 1 of a zero
18e90 2d 62 79 74 65 20 64 61 74 61 62 61 73 65 2e 20  -byte database. 
18ea0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72 63   */.  assert( rc
18eb0 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 7c  ==SQLITE_EMPTY |
18ec0 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc==SQLITE_OK 
18ed0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
18ee0 49 54 45 5f 45 4d 50 54 59 20 29 7b 0a 20 20 20  ITE_EMPTY ){.   
18ef0 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 20 3d   pCur->pCursor =
18f00 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   0;.    rc = SQL
18f10 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20 20 2f  ITE_OK;.  }..  /
18f20 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75  * Set the VdbeCu
18f30 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 61 6e 64  rsor.isTable and
18f40 20 69 73 49 6e 64 65 78 20 76 61 72 69 61 62 6c   isIndex variabl
18f50 65 73 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72  es. Previous ver
18f60 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51  sions of.  ** SQ
18f70 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65  Lite used to che
18f80 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70  ck if the root-p
18f90 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73  age flags were s
18fa0 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e  ane at this poin
18fb0 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72  t.  ** and repor
18fc0 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  t database corru
18fd0 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65  ption if they we
18fe0 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73  re not, but this
18ff0 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20   check has.  ** 
19000 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f  since moved into
19010 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72   the btree layer
19020 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e  .  */  .  pCur->
19030 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70  isTable = pOp->p
19040 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46  4type!=P4_KEYINF
19050 4f 3b 0a 20 20 70 43 75 72 2d 3e 69 73 49 6e 64  O;.  pCur->isInd
19060 65 78 20 3d 20 21 70 43 75 72 2d 3e 69 73 54 61  ex = !pCur->isTa
19070 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ble;.  break;.}.
19080 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
19090 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20  Ephemeral P1 P2 
190a0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65  * P4 *.**.** Ope
190b0 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
190c0 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74  1 to a transient
190d0 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
190e0 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20  ursor is always 
190f0 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74  opened read/writ
19100 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68  e even if .** th
19110 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
19120 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54  is read-only.  T
19130 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20  he ephemeral.** 
19140 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64  table is deleted
19150 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77   automatically w
19160 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
19170 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
19180 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
19190 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
191a0 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
191b0 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
191c0 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54  r points to a BT
191d0 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d  ree table if P4=
191e0 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65  =0 and to a BTre
191f0 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34  e index.** if P4
19200 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50   is not 0.  If P
19210 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69  4 is not NULL, i
19220 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65  t points to a Ke
19230 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a  yInfo structure.
19240 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ** that defines 
19250 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65  the format of ke
19260 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ys in the index.
19270 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
19280 64 65 20 77 61 73 20 6f 6e 63 65 20 63 61 6c 6c  de was once call
19290 65 64 20 4f 70 65 6e 54 65 6d 70 2e 20 20 42 75  ed OpenTemp.  Bu
192a0 74 20 74 68 61 74 20 63 72 65 61 74 65 64 0a 2a  t that created.*
192b0 2a 20 63 6f 6e 66 75 73 69 6f 6e 20 62 65 63 61  * confusion beca
192c0 75 73 65 20 74 68 65 20 74 65 72 6d 20 22 74 65  use the term "te
192d0 6d 70 20 74 61 62 6c 65 22 2c 20 6d 69 67 68 74  mp table", might
192e0 20 72 65 66 65 72 20 65 69 74 68 65 72 0a 2a 2a   refer either.**
192f0 20 74 6f 20 61 20 54 45 4d 50 20 74 61 62 6c 65   to a TEMP table
19300 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
19310 6c 2c 20 6f 72 20 74 6f 20 61 20 74 61 62 6c 65  l, or to a table
19320 20 6f 70 65 6e 65 64 20 62 79 0a 2a 2a 20 74 68   opened by.** th
19330 69 73 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 6e  is opcode.  Then
19340 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 61 73   this opcode was
19350 20 63 61 6c 6c 20 4f 70 65 6e 56 69 72 74 75 61   call OpenVirtua
19360 6c 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20  l.  But.** that 
19370 63 72 65 61 74 65 64 20 63 6f 6e 66 75 73 69 6f  created confusio
19380 6e 20 77 69 74 68 20 74 68 65 20 77 68 6f 6c 65  n with the whole
19390 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 69   virtual-table i
193a0 64 65 61 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  dea..*/./* Opcod
193b0 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  e: OpenAutoindex
193c0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
193d0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
193e0 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61  works the same a
193f0 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
19400 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a  al.  It has a.**
19410 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
19420 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69  to distinguish i
19430 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20  ts use.  Tables 
19440 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a  created using.**
19450 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
19460 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72  will be used for
19470 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
19480 72 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74  reated transient
19490 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a  .** indices in j
194a0 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  oins..*/.case OP
194b0 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20  _OpenAutoindex: 
194c0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68  .case OP_OpenEph
194d0 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65  emeral: {.  Vdbe
194e0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 73  Cursor *pCx;.  s
194f0 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
19500 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20  vfsFlags = .    
19510 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45    SQLITE_OPEN_RE
19520 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20  ADWRITE |.      
19530 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41  SQLITE_OPEN_CREA
19540 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
19550 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45  E_OPEN_EXCLUSIVE
19560 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
19570 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f  OPEN_DELETEONCLO
19580 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  SE |.      SQLIT
19590 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54  E_OPEN_TRANSIENT
195a0 5f 44 42 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  _DB;..  assert( 
195b0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
195c0 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
195d0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
195e0 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29   pOp->p2, -1, 1)
195f0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
19600 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
19610 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
19620 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
19630 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
19640 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
19650 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20  >pBt, .         
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
19670 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
19680 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
19690 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
196a0 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
196b0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
196c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
196d0 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
196e0 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a  x->pBt, 1);.  }.
196f0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
19700 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  _OK ){.    /* If
19710 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
19720 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
19730 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
19740 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ling.    ** sqli
19750 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
19760 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
19770 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61  TREE_BLOBKEY fla
19780 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
19790 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
197a0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
197b0 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
197c0 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
197d0 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
197e0 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
197f0 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
19800 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74  an BLOB_INTKEY t
19810 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
19820 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 70 4b    if( pOp->p4.pK
19830 65 79 49 6e 66 6f 20 29 7b 0a 20 20 20 20 20 20  eyInfo ){.      
19840 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20  int pgno;.      
19850 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
19860 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
19870 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
19880 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
19890 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20  Table(pCx->pBt, 
198a0 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f  &pgno, BTREE_BLO
198b0 42 4b 45 59 29 3b 20 0a 20 20 20 20 20 20 69 66  BKEY); .      if
198c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
198d0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
198e0 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f  t( pgno==MASTER_
198f0 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20  ROOT+1 );.      
19900 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
19910 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
19920 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 0a 20 20  Bt, pgno, 1, .  
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 4b                (K
19950 65 79 49 6e 66 6f 2a 29 70 4f 70 2d 3e 70 34 2e  eyInfo*)pOp->p4.
19960 7a 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  z, pCx->pCursor)
19970 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  ;.        pCx->p
19980 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
19990 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  4.pKeyInfo;.    
199a0 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
199b0 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 70 2d 3e  o->enc = ENC(p->
199c0 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
199d0 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
199e0 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
199f0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19a00 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
19a10 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52  x->pBt, MASTER_R
19a20 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e  OOT, 1, 0, pCx->
19a30 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
19a40 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
19a50 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
19a60 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28  x->isOrdered = (
19a70 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55  pOp->p5!=BTREE_U
19a80 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 70 43 78  NORDERED);.  pCx
19a90 2d 3e 69 73 49 6e 64 65 78 20 3d 20 21 70 43 78  ->isIndex = !pCx
19aa0 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65  ->isTable;.  bre
19ab0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
19ac0 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20  : OpenPseudo P1 
19ad0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
19ae0 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
19af0 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f  r that points to
19b00 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68   a fake table th
19b10 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69  at contains a si
19b20 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64  ngle.** row of d
19b30 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  ata.  The conten
19b40 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f  t of that one ro
19b50 77 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  w in the content
19b60 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65   of memory.** re
19b70 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f  gister P2.  In o
19b80 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73  ther words, curs
19b90 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e  or P1 becomes an
19ba0 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a   alias for the .
19bb0 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74  ** MEM_Blob cont
19bc0 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ent contained in
19bd0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
19be0 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62  .** A pseudo-tab
19bf0 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68  le created by th
19c00 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
19c10 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67  d to hold a sing
19c20 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74  le.** row output
19c30 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72   from the sorter
19c40 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77   so that the row
19c50 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73   can be decompos
19c60 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76  ed into.** indiv
19c70 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73  idual columns us
19c80 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d  ing the OP_Colum
19c90 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f  n opcode.  The O
19ca0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a  P_Column opcode.
19cb0 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63  ** is the only c
19cc0 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61  ursor opcode tha
19cd0 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70  t works with a p
19ce0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
19cf0 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d  ** P3 is the num
19d00 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
19d10 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61   the records tha
19d20 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  t will be stored
19d30 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64   by.** the pseud
19d40 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
19d50 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20   OP_OpenPseudo: 
19d60 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
19d70 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pCx;..  assert( 
19d80 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
19d90 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
19da0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
19db0 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29   pOp->p3, -1, 0)
19dc0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
19dd0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
19de0 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
19df0 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54  ;.  pCx->pseudoT
19e00 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70  ableReg = pOp->p
19e10 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c  2;.  pCx->isTabl
19e20 65 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73  e = 1;.  pCx->is
19e30 49 6e 64 65 78 20 3d 20 30 3b 0a 20 20 62 72 65  Index = 0;.  bre
19e40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
19e50 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a  : Close P1 * * *
19e60 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61   *.**.** Close a
19e70 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73   cursor previous
19e80 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e  ly opened as P1.
19e90 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a    If P1 is not.*
19ea0 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  * currently open
19eb0 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  , this instructi
19ec0 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  on is a no-op..*
19ed0 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a  /.case OP_Close:
19ee0 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
19ef0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
19f00 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
19f10 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  .  sqlite3VdbeFr
19f20 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
19f30 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  pCsr[pOp->p1]);.
19f40 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
19f50 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  p1] = 0;.  break
19f60 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
19f70 53 65 65 6b 47 65 20 50 31 20 50 32 20 50 33 20  SeekGe P1 P2 P3 
19f80 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  P4 *.**.** If cu
19f90 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
19fa0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
19fb0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
19fc0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
19fd0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
19fe0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
19ff0 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66   as the key.  If
1a000 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1a010 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1a020 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1a030 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1a040 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1a050 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1a060 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1a070 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1a080 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1a090 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1a0a0 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1a0b0 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1a0c0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1a0d0 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1a0e0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1a0f0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1a100 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1a110 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72  ords .** greater
1a120 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1a130 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1a140 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1a150 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1a160 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1a170 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1a180 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74  Distinct, SeekLt
1a190 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65  , SeekGt, SeekLe
1a1a0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1a1b0 65 65 6b 47 74 20 50 31 20 50 32 20 50 33 20 50  eekGt P1 P2 P3 P
1a1c0 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  4 *.**.** If cur
1a1d0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1a1e0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1a1f0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1a200 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1a210 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1a220 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1a230 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1a240 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1a250 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1a260 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1a270 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1a280 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1a290 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1a2a0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1a2b0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1a2c0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1a2d0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1a2e0 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1a2f0 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
1a300 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1a310 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
1a320 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1a330 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1a340 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61  ords greater tha
1a350 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
1a360 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1a370 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1a380 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1a390 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1a3a0 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1a3b0 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekLt, SeekGe, Se
1a3c0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1a3d0 65 3a 20 53 65 65 6b 4c 74 20 50 31 20 50 32 20  e: SeekLt P1 P2 
1a3e0 50 33 20 50 34 20 2a 20 0a 2a 2a 0a 2a 2a 20 49  P3 P4 * .**.** I
1a3f0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1a400 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1a410 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1a420 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1a430 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1a440 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1a450 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1a460 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1a470 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1a480 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1a490 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1a4a0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1a4b0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1a4c0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1a4d0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1a4e0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1a4f0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1a500 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1a510 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1a520 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1a530 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  * is less than t
1a540 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1a550 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1a560 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20  cords less than 
1a570 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1a580 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1a590 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1a5a0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1a5b0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1a5c0 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b  , Distinct, Seek
1a5d0 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1a5e0 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1a5f0 20 53 65 65 6b 4c 65 20 50 31 20 50 32 20 50 33   SeekLe P1 P2 P3
1a600 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 63   P4 *.**.** If c
1a610 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1a620 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1a630 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1a640 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1a650 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1a660 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1a670 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1a680 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1a690 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1a6a0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1a6b0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1a6c0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1a6d0 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1a6e0 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1a6f0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1a700 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1a710 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1a720 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1a730 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
1a740 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1a750 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1a760 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1a770 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1a780 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1a790 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  * less than or e
1a7a0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1a7b0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1a7c0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1a7d0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
1a7e0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1a7f0 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
1a800 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1a810 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f  SeekLt.*/.case O
1a820 50 5f 53 65 65 6b 4c 74 3a 20 20 20 20 20 20 20  P_SeekLt:       
1a830 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1a840 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 65  /.case OP_SeekLe
1a850 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1a860 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1a870 50 5f 53 65 65 6b 47 65 3a 20 20 20 20 20 20 20  P_SeekGe:       
1a880 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1a890 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 74  /.case OP_SeekGt
1a8a0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
1a8b0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
1a8c0 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20  res;.  int oc;. 
1a8d0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1a8e0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1a8f0 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c  d r;.  int nFiel
1a900 64 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20  d;.  i64 iKey;  
1a910 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64      /* The rowid
1a920 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20   we are to seek 
1a930 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  to */..  assert(
1a940 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1a950 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1a960 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1a970 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70  Op->p2!=0 );.  p
1a980 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1a990 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1a9a0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1a9b0 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61  rt( pC->pseudoTa
1a9c0 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61  bleReg==0 );.  a
1a9d0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 65  ssert( OP_SeekLe
1a9e0 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 31 20   == OP_SeekLt+1 
1a9f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1aa00 53 65 65 6b 47 65 20 3d 3d 20 4f 50 5f 53 65 65  SeekGe == OP_See
1aa10 6b 4c 74 2b 32 20 29 3b 0a 20 20 61 73 73 65 72  kLt+2 );.  asser
1aa20 74 28 20 4f 50 5f 53 65 65 6b 47 74 20 3d 3d 20  t( OP_SeekGt == 
1aa30 4f 50 5f 53 65 65 6b 4c 74 2b 33 20 29 3b 0a 20  OP_SeekLt+3 );. 
1aa40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f   assert( pC->isO
1aa50 72 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28 20  rdered );.  if( 
1aa60 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1aa70 7b 0a 20 20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e  {.    oc = pOp->
1aa80 6f 70 63 6f 64 65 3b 0a 20 20 20 20 70 43 2d 3e  opcode;.    pC->
1aa90 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
1aaa0 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
1aab0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65   ){.      /* The
1aac0 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
1aad0 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
1aae0 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
1aaf0 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
1ab00 20 20 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f        ** blob, o
1ab10 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20  r NULL.  But it 
1ab20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69  needs to be an i
1ab30 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65  nteger before we
1ab40 20 63 61 6e 20 64 6f 0a 20 20 20 20 20 20 2a 2a   can do.      **
1ab50 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1ab60 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
1ab70 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1ab80 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61  Op->p3];.      a
1ab90 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
1aba0 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 20  ity(pIn3);.     
1abb0 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
1abc0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
1abd0 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  );.      pC->row
1abe0 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a  idIsValid = 0;..
1abf0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1ac00 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
1ac10 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1ac20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
1ac30 77 69 74 68 6f 75 74 0a 20 20 20 20 20 20 2a 2a  without.      **
1ac40 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
1ac50 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69  tion, then speci
1ac60 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  al processing is
1ac70 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a   required... */.
1ac80 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1ac90 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1aca0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
1acb0 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1acc0 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
1acd0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ){.          /* 
1ace0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1acf0 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
1ad00 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e  ted into any kin
1ad10 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20  d of a number,. 
1ad20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e           ** then
1ad30 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
1ad40 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
1ad50 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
1ad60 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1ad70 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
1ad80 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
1ad90 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66   }.        /* If
1ada0 20 77 65 20 72 65 61 63 68 20 74 68 69 73 20 70   we reach this p
1adb0 6f 69 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 50  oint, then the P
1adc0 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20  3 value must be 
1add0 61 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20  a floating.     
1ade0 20 20 20 2a 2a 20 70 6f 69 6e 74 20 6e 75 6d 62     ** point numb
1adf0 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  er. */.        a
1ae00 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
1ae10 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 21  ags & MEM_Real)!
1ae20 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20 20 20 69  =0 );..        i
1ae30 66 28 20 69 4b 65 79 3d 3d 53 4d 41 4c 4c 45 53  f( iKey==SMALLES
1ae40 54 5f 49 4e 54 36 34 20 26 26 20 28 70 49 6e 33  T_INT64 && (pIn3
1ae50 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79  ->r<(double)iKey
1ae60 20 7c 7c 20 70 49 6e 33 2d 3e 72 3e 30 29 20 29   || pIn3->r>0) )
1ae70 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  {.          /* T
1ae80 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 74  he P3 value is t
1ae90 6f 6f 20 6c 61 72 67 65 20 69 6e 20 6d 61 67 6e  oo large in magn
1aea0 69 74 75 64 65 20 74 6f 20 62 65 20 65 78 70 72  itude to be expr
1aeb0 65 73 73 65 64 20 61 73 20 61 6e 0a 20 20 20 20  essed as an.    
1aec0 20 20 20 20 20 20 2a 2a 20 69 6e 74 65 67 65 72        ** integer
1aed0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 72  . */.          r
1aee0 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  es = 1;.        
1aef0 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 3c 30 20    if( pIn3->r<0 
1af00 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
1af10 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65  f( oc>=OP_SeekGe
1af20 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1af30 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63  =OP_SeekGe || oc
1af40 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1af50 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
1af60 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
1af70 72 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  rst(pC->pCursor,
1af80 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1af90 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1afa0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1afb0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1afc0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  r;.            }
1afd0 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
1afe0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  {.            if
1aff0 28 20 6f 63 3c 3d 4f 50 5f 53 65 65 6b 4c 65 20  ( oc<=OP_SeekLe 
1b000 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1b010 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d  OP_SeekLt || oc=
1b020 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 3b 0a 20 20  =OP_SeekLe );.  
1b030 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
1b040 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
1b050 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1b060 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20  res);.          
1b070 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1b080 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1b090 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1b0a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
1b0b0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1b0c0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
1b0d0 20 20 20 20 20 20 20 20 20 20 20 20 70 63 20 3d              pc =
1b0e0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1b0f0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1b100 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1b110 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 63 3d     }else if( oc=
1b120 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c 20 6f 63  =OP_SeekLt || oc
1b130 3d 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 0a 20  ==OP_SeekGe ){. 
1b140 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1b150 74 68 65 20 63 65 69 6c 69 6e 67 28 29 20 66 75  the ceiling() fu
1b160 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72  nction to conver
1b170 74 20 72 65 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20  t real->int */. 
1b180 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1b190 33 2d 3e 72 20 3e 20 28 64 6f 75 62 6c 65 29 69  3->r > (double)i
1b1a0 4b 65 79 20 29 20 69 4b 65 79 2b 2b 3b 0a 20 20  Key ) iKey++;.  
1b1b0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1b1c0 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
1b1d0 65 20 66 6c 6f 6f 72 28 29 20 66 75 6e 63 74 69  e floor() functi
1b1e0 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65  on to convert re
1b1f0 61 6c 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20  al->int */.     
1b200 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d       assert( oc=
1b210 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c 7c 20 6f 63  =OP_SeekLe || oc
1b220 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20  ==OP_SeekGt );. 
1b230 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e           if( pIn
1b240 33 2d 3e 72 20 3c 20 28 64 6f 75 62 6c 65 29 69  3->r < (double)i
1b250 4b 65 79 20 29 20 69 4b 65 79 2d 2d 3b 0a 20 20  Key ) iKey--;.  
1b260 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20        }.      } 
1b270 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1b280 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1b290 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1b2a0 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79  or, 0, (u64)iKey
1b2b0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1b2c0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1b2d0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
1b2e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1b2f0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1b300 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30        if( res==0
1b310 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   ){.        pC->
1b320 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31  rowidIsValid = 1
1b330 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 6c 61  ;.        pC->la
1b340 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a  stRowid = iKey;.
1b350 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
1b360 65 7b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64 20  e{.      nField 
1b370 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
1b380 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1b390 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1b3a0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1b3b0 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20  ( nField>0 );.  
1b3c0 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1b3d0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1b3e0 20 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20       r.nField = 
1b3f0 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20  (u16)nField;..  
1b400 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
1b410 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d  line of code com
1b420 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73  putes as follows
1b430 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20  , only faster:. 
1b440 20 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63       **   if( oc
1b450 3d 3d 4f 50 5f 53 65 65 6b 47 74 20 7c 7c 20 6f  ==OP_SeekGt || o
1b460 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 0a  c==OP_SeekLe ){.
1b470 20 20 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 66        **     r.f
1b480 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f  lags = UNPACKED_
1b490 49 4e 43 52 4b 45 59 3b 0a 20 20 20 20 20 20 2a  INCRKEY;.      *
1b4a0 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20  *   }else{.     
1b4b0 20 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20   **     r.flags 
1b4c0 3d 20 30 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20  = 0;.      **   
1b4d0 7d 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  }.      */.     
1b4e0 20 72 2e 66 6c 61 67 73 20 3d 20 28 75 31 36 29   r.flags = (u16)
1b4f0 28 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45  (UNPACKED_INCRKE
1b500 59 20 2a 20 28 31 20 26 20 28 6f 63 20 2d 20 4f  Y * (1 & (oc - O
1b510 50 5f 53 65 65 6b 4c 74 29 29 29 3b 0a 20 20 20  P_SeekLt)));.   
1b520 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1b530 50 5f 53 65 65 6b 47 74 20 7c 7c 20 72 2e 66 6c  P_SeekGt || r.fl
1b540 61 67 73 3d 3d 55 4e 50 41 43 4b 45 44 5f 49 4e  ags==UNPACKED_IN
1b550 43 52 4b 45 59 20 29 3b 0a 20 20 20 20 20 20 61  CRKEY );.      a
1b560 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1b570 65 6b 4c 65 20 7c 7c 20 72 2e 66 6c 61 67 73 3d  ekLe || r.flags=
1b580 3d 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45  =UNPACKED_INCRKE
1b590 59 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  Y );.      asser
1b5a0 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 65  t( oc!=OP_SeekGe
1b5b0 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29   || r.flags==0 )
1b5c0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1b5d0 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 74 20 7c 7c  oc!=OP_SeekLt ||
1b5e0 20 72 2e 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 0a   r.flags==0 );..
1b5f0 20 20 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26        r.aMem = &
1b600 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
1b610 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1b620 55 47 0a 20 20 20 20 20 20 7b 20 69 6e 74 20 69  UG.      { int i
1b630 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
1b640 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
1b650 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
1b660 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
1b670 23 65 6e 64 69 66 0a 20 20 20 20 20 20 45 78 70  #endif.      Exp
1b680 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b  andBlob(r.aMem);
1b690 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1b6a0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1b6b0 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1b6c0 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  or, &r, 0, 0, &r
1b6d0 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1b6e0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1b6f0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
1b700 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1b710 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
1b720 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1b730 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  = 0;.    }.    p
1b740 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1b750 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
1b760 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1b770 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66  HE_STALE;.#ifdef
1b780 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
1b790 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
1b7a0 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
1b7b0 20 20 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53      if( oc>=OP_S
1b7c0 65 65 6b 47 65 20 29 7b 20 20 61 73 73 65 72 74  eekGe ){  assert
1b7d0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc==OP_SeekGe 
1b7e0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74  || oc==OP_SeekGt
1b7f0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65   );.      if( re
1b800 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s<0 || (res==0 &
1b810 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 74 29  & oc==OP_SeekGt)
1b820 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1b830 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78   sqlite3BtreeNex
1b840 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
1b850 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
1b860 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1b870 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1b880 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1b890 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1b8a0 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  lid = 0;.      }
1b8b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65  else{.        re
1b8c0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  s = 0;.      }. 
1b8d0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1b8e0 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1b8f0 65 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLt || oc==OP_
1b900 53 65 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20  SeekLe );.      
1b910 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65  if( res>0 || (re
1b920 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
1b930 65 65 6b 4c 74 29 20 29 7b 0a 20 20 20 20 20 20  eekLt) ){.      
1b940 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1b950 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e  reePrevious(pC->
1b960 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1b970 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1b980 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1b990 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b9a0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
1b9b0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1b9c0 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
1b9d0 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d          /* res m
1b9e0 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65  ight be negative
1b9f0 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62   because the tab
1ba00 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68  le is empty.  Ch
1ba10 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 20 20 2a  eck to.        *
1ba20 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73  * see if this is
1ba30 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20   the case..     
1ba40 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65     */.        re
1ba50 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  s = sqlite3Btree
1ba60 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  Eof(pC->pCursor)
1ba70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1ba80 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1ba90 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 69 66 28  >p2>0 );.    if(
1baa0 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70 63   res ){.      pc
1bab0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1bac0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1bad0 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
1bae0 6e 73 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69  ns when attempti
1baf0 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73  ng to open the s
1bb00 71 6c 69 74 65 33 5f 6d 61 73 74 65 72 20 74 61  qlite3_master ta
1bb10 62 6c 65 0a 20 20 20 20 2a 2a 20 66 6f 72 20 72  ble.    ** for r
1bb20 65 61 64 20 61 63 63 65 73 73 20 72 65 74 75 72  ead access retur
1bb30 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e  ns SQLITE_EMPTY.
1bb40 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c   In this case al
1bb50 77 61 79 73 0a 20 20 20 20 2a 2a 20 74 61 6b 65  ways.    ** take
1bb60 20 74 68 65 20 6a 75 6d 70 20 28 73 69 6e 63 65   the jump (since
1bb70 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1bb80 63 6f 72 64 73 20 69 6e 20 74 68 65 20 74 61 62  cords in the tab
1bb90 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  le)..    */.    
1bba0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1bbb0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1bbc0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
1bbd0 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  k P1 P2 * * *.**
1bbe0 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65  .** P1 is an ope
1bbf0 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61  n table cursor a
1bc00 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64  nd P2 is a rowid
1bc10 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e   integer.  Arran
1bc20 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20  ge.** for P1 to 
1bc30 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20  move so that it 
1bc40 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f  points to the ro
1bc50 77 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e  wid given by P2.
1bc60 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
1bc70 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72  ctually a deferr
1bc80 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e  ed seek.  Nothin
1bc90 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65  g actually happe
1bca0 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20  ns until.** the 
1bcb0 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74  cursor is used t
1bcc0 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e  o read a record.
1bcd0 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e    That way, if n
1bce0 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72  o reads.** occur
1bcf0 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79  , no unnecessary
1bd00 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f   I/O happens..*/
1bd10 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b  .case OP_Seek: {
1bd20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
1bd30 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1bd40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1bd50 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1bd60 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1bd70 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1bd80 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1bd90 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
1bda0 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75  ( ALWAYS(pC->pCu
1bdb0 72 73 6f 72 21 3d 30 29 20 29 7b 0a 20 20 20 20  rsor!=0) ){.    
1bdc0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1bdd0 62 6c 65 20 29 3b 0a 20 20 20 20 70 43 2d 3e 6e  ble );.    pC->n
1bde0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
1bdf0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
1be00 2d 3e 70 32 5d 3b 0a 20 20 20 20 70 43 2d 3e 6d  ->p2];.    pC->m
1be10 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71  ovetoTarget = sq
1be20 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
1be30 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 43 2d  e(pIn2);.    pC-
1be40 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1be50 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  0;.    pC->defer
1be60 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
1be70 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20   }.  break;.}.  
1be80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75  ../* Opcode: Fou
1be90 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
1bea0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1beb0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1bec0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1bed0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1bee0 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1bef0 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1bf00 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1bf10 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1bf20 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1bf30 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1bf40 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
1bf50 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
1bf60 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
1bf70 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
1bf80 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
1bf90 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20  .** is a prefix 
1bfa0 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1bfb0 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1bfc0 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64  s made to P2 and
1bfd0 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70  .** P1 is left p
1bfe0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
1bff0 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
1c000 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  /./* Opcode: Not
1c010 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
1c020 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  4 *.**.** If P4=
1c030 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1c040 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1c050 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1c060 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1c070 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1c080 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1c090 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1c0a0 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1c0b0 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1c0c0 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
1c0d0 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1c0e0 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1c0f0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1c100 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1c110 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74  d P4.** is not t
1c120 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79  he prefix of any
1c130 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1c140 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1c150 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a   to P2.  If P1 .
1c160 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  ** does contain 
1c170 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70  an entry whose p
1c180 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68  refix matches th
1c190 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74  e P3/P4 record t
1c1a0 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  hen control.** f
1c1b0 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
1c1c0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1c1d0 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c  tion and P1 is l
1c1e0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1c1f0 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20  the.** matching 
1c200 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  entry..**.** See
1c210 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1c220 74 45 78 69 73 74 73 2c 20 49 73 55 6e 69 71 75  tExists, IsUniqu
1c230 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  e.*/.case OP_Not
1c240 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20  Found:       /* 
1c250 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1c260 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20  e OP_Found: {   
1c270 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1c280 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61  3 */.  int alrea
1c290 64 79 45 78 69 73 74 73 3b 0a 20 20 56 64 62 65  dyExists;.  Vdbe
1c2a0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
1c2b0 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
1c2c0 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79  dRecord *pIdxKey
1c2d0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
1c2e0 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65  rd r;.  char aTe
1c2f0 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a  mpRec[ROUND8(siz
1c300 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  eof(UnpackedReco
1c310 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65  rd)) + sizeof(Me
1c320 6d 29 2a 33 20 2b 20 37 5d 3b 0a 0a 23 69 66 64  m)*3 + 7];..#ifd
1c330 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
1c340 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
1c350 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  ount++;.#endif..
1c360 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
1c370 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
1c380 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1c390 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1c3a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c3b0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1c3c0 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  32 );.  pC = p->
1c3d0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1c3e0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1c3f0 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
1c400 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
1c410 28 20 41 4c 57 41 59 53 28 70 43 2d 3e 70 43 75  ( ALWAYS(pC->pCu
1c420 72 73 6f 72 21 3d 30 29 20 29 7b 0a 0a 20 20 20  rsor!=0) ){..   
1c430 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1c440 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 69  able==0 );.    i
1c450 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29  f( pOp->p4.i>0 )
1c460 7b 0a 20 20 20 20 20 20 72 2e 70 4b 65 79 49 6e  {.      r.pKeyIn
1c470 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
1c480 6f 3b 0a 20 20 20 20 20 20 72 2e 6e 46 69 65 6c  o;.      r.nFiel
1c490 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34  d = (u16)pOp->p4
1c4a0 2e 69 3b 0a 20 20 20 20 20 20 72 2e 61 4d 65 6d  .i;.      r.aMem
1c4b0 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20   = pIn3;.#ifdef 
1c4c0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
1c4d0 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
1c4e0 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1c4f0 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
1c500 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1c510 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
1c520 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  .      r.flags =
1c530 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
1c540 5f 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 70 49  _MATCH;.      pI
1c550 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20  dxKey = &r;.    
1c560 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
1c570 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
1c580 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
1c590 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49       assert( (pI
1c5a0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1c5b0 5a 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20  Zero)==0 );  /* 
1c5c0 7a 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64  zeroblobs alread
1c5d0 79 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20  y expanded */.  
1c5e0 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71      pIdxKey = sq
1c5f0 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55  lite3VdbeRecordU
1c600 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e  npack(pC->pKeyIn
1c610 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e  fo, pIn3->n, pIn
1c620 33 2d 3e 7a 2c 0a 20 20 20 20 20 20 20 20 20 20  3->z,.          
1c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 54                aT
1c650 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61  empRec, sizeof(a
1c660 54 65 6d 70 52 65 63 29 29 3b 0a 20 20 20 20 20  TempRec));.     
1c670 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20   if( pIdxKey==0 
1c680 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
1c690 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 0a  no_mem;.      }.
1c6a0 20 20 20 20 20 20 70 49 64 78 4b 65 79 2d 3e 66        pIdxKey->f
1c6b0 6c 61 67 73 20 7c 3d 20 55 4e 50 41 43 4b 45 44  lags |= UNPACKED
1c6c0 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 3b 0a 20  _PREFIX_MATCH;. 
1c6d0 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71     }.    rc = sq
1c6e0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1c6f0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1c700 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30  rsor, pIdxKey, 0
1c710 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1c720 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30  if( pOp->p4.i==0
1c730 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1c740 33 56 64 62 65 44 65 6c 65 74 65 55 6e 70 61 63  3VdbeDeleteUnpac
1c750 6b 65 64 52 65 63 6f 72 64 28 70 49 64 78 4b 65  kedRecord(pIdxKe
1c760 79 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  y);.    }.    if
1c770 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1c780 29 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ){.      break;.
1c790 20 20 20 20 7d 0a 20 20 20 20 61 6c 72 65 61 64      }.    alread
1c7a0 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d  yExists = (res==
1c7b0 30 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65  0);.    pC->defe
1c7c0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1c7d0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
1c7e0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1c7f0 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  E;.  }.  if( pOp
1c800 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75  ->opcode==OP_Fou
1c810 6e 64 20 29 7b 0a 20 20 20 20 69 66 28 20 61 6c  nd ){.    if( al
1c820 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63  readyExists ) pc
1c830 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1c840 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 66 28    }else{.    if(
1c850 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20   !alreadyExists 
1c860 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d  ) pc = pOp->p2 -
1c870 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
1c880 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
1c890 73 55 6e 69 71 75 65 20 50 31 20 50 32 20 50 33  sUnique P1 P2 P3
1c8a0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 43 75 72 73   P4 *.**.** Curs
1c8b0 6f 72 20 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e  or P1 is open on
1c8c0 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65   an index b-tree
1c8d0 20 2d 20 74 68 61 74 20 69 73 20 74 6f 20 73 61   - that is to sa
1c8e0 79 2c 20 61 20 62 74 72 65 65 20 77 68 69 63 68  y, a btree which
1c8f0 0a 2a 2a 20 6e 6f 20 64 61 74 61 20 61 6e 64 20  .** no data and 
1c900 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 61 72  where the key ar
1c910 65 20 72 65 63 6f 72 64 73 20 67 65 6e 65 72 61  e records genera
1c920 74 65 64 20 62 79 20 4f 50 5f 4d 61 6b 65 52 65  ted by OP_MakeRe
1c930 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 74 68 65  cord with.** the
1c940 20 6c 69 73 74 20 66 69 65 6c 64 20 62 65 69 6e   list field bein
1c950 67 20 74 68 65 20 69 6e 74 65 67 65 72 20 52 4f  g the integer RO
1c960 57 49 44 20 6f 66 20 74 68 65 20 65 6e 74 72 79  WID of the entry
1c970 20 74 68 61 74 20 74 68 65 20 69 6e 64 65 78 0a   that the index.
1c980 2a 2a 20 65 6e 74 72 79 20 72 65 66 65 72 73 20  ** entry refers 
1c990 74 6f 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  to..**.** The P3
1c9a0 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 61 69   register contai
1c9b0 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ns an integer re
1c9c0 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 43 61 6c  cord number. Cal
1c9d0 6c 20 74 68 69 73 20 72 65 63 6f 72 64 20 0a 2a  l this record .*
1c9e0 2a 20 6e 75 6d 62 65 72 20 52 2e 20 52 65 67 69  * number R. Regi
1c9f0 73 74 65 72 20 50 34 20 69 73 20 74 68 65 20 66  ster P4 is the f
1ca00 69 72 73 74 20 69 6e 20 61 20 73 65 74 20 6f 66  irst in a set of
1ca10 20 4e 20 63 6f 6e 74 69 67 75 6f 75 73 20 72 65   N contiguous re
1ca20 67 69 73 74 65 72 73 0a 2a 2a 20 74 68 61 74 20  gisters.** that 
1ca30 6d 61 6b 65 20 75 70 20 61 6e 20 75 6e 70 61 63  make up an unpac
1ca40 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 20 74 68  ked index key th
1ca50 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 77  at can be used w
1ca60 69 74 68 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  ith cursor P1..*
1ca70 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 4e  * The value of N
1ca80 20 63 61 6e 20 62 65 20 69 6e 66 65 72 72 65 64   can be inferred
1ca90 20 66 72 6f 6d 20 74 68 65 20 63 75 72 73 6f 72   from the cursor
1caa0 2e 20 4e 20 69 6e 63 6c 75 64 65 73 20 74 68 65  . N includes the
1cab0 20 72 6f 77 69 64 0a 2a 2a 20 76 61 6c 75 65 20   rowid.** value 
1cac0 61 70 70 65 6e 64 65 64 20 74 6f 20 74 68 65 20  appended to the 
1cad0 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  end of the index
1cae0 20 72 65 63 6f 72 64 2e 20 54 68 69 73 20 72 6f   record. This ro
1caf0 77 69 64 20 76 61 6c 75 65 20 6d 61 79 0a 2a 2a  wid value may.**
1cb00 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 74   or may not be t
1cb10 68 65 20 73 61 6d 65 20 61 73 20 52 2e 0a 2a 2a  he same as R..**
1cb20 0a 2a 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68  .** If any of th
1cb30 65 20 4e 20 72 65 67 69 73 74 65 72 73 20 62 65  e N registers be
1cb40 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 72 65 67  ginning with reg
1cb50 69 73 74 65 72 20 50 34 20 63 6f 6e 74 61 69 6e  ister P4 contain
1cb60 73 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75  s a NULL.** valu
1cb70 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  e, jump immediat
1cb80 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
1cb90 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 69 73   Otherwise, this
1cba0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 68 65   instruction che
1cbb0 63 6b 73 20 69 66 20 63 75 72 73 6f 72 20 50 31  cks if cursor P1
1cbc0 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6e 74   contains an ent
1cbd0 72 79 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20  ry.** where the 
1cbe0 66 69 72 73 74 20 28 4e 2d 31 29 20 66 69 65 6c  first (N-1) fiel
1cbf0 64 73 20 6d 61 74 63 68 20 62 75 74 20 74 68 65  ds match but the
1cc00 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61 74 20   rowid value at 
1cc10 74 68 65 20 65 6e 64 0a 2a 2a 20 6f 66 20 74 68  the end.** of th
1cc20 65 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  e index entry is
1cc30 20 6e 6f 74 20 52 2e 20 49 66 20 74 68 65 72 65   not R. If there
1cc40 20 69 73 20 6e 6f 20 73 75 63 68 20 65 6e 74 72   is no such entr
1cc50 79 2c 20 63 6f 6e 74 72 6f 6c 20 6a 75 6d 70 73  y, control jumps
1cc60 0a 2a 2a 20 74 6f 20 69 6e 73 74 72 75 63 74 69  .** to instructi
1cc70 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  on P2. Otherwise
1cc80 2c 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  , the rowid of t
1cc90 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 69  he conflicting i
1cca0 6e 64 65 78 0a 2a 2a 20 65 6e 74 72 79 20 69 73  ndex.** entry is
1ccb0 20 63 6f 70 69 65 64 20 74 6f 20 72 65 67 69 73   copied to regis
1ccc0 74 65 72 20 50 33 20 61 6e 64 20 63 6f 6e 74 72  ter P3 and contr
1ccd0 6f 6c 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68  ol falls through
1cce0 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20   to the next.** 
1ccf0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
1cd00 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
1cd10 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
1cd20 2c 20 46 6f 75 6e 64 0a 2a 2f 0a 63 61 73 65 20  , Found.*/.case 
1cd30 4f 50 5f 49 73 55 6e 69 71 75 65 3a 20 7b 20 20  OP_IsUnique: {  
1cd40 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1cd50 6e 33 20 2a 2f 0a 20 20 75 31 36 20 69 69 3b 0a  n3 */.  u16 ii;.
1cd60 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1cd70 78 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  x;.  BtCursor *p
1cd80 43 72 73 72 3b 0a 20 20 75 31 36 20 6e 46 69 65  Crsr;.  u16 nFie
1cd90 6c 64 3b 0a 20 20 4d 65 6d 20 2a 61 4d 78 3b 0a  ld;.  Mem *aMx;.
1cda0 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1cdb0 20 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   r;             
1cdc0 20 20 20 20 20 2f 2a 20 42 2d 54 72 65 65 20 69       /* B-Tree i
1cdd0 6e 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 20  ndex search key 
1cde0 2a 2f 0a 20 20 69 36 34 20 52 3b 20 20 20 20 20  */.  i64 R;     
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce00 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69 64          /* Rowid
1ce10 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1ce20 74 65 72 20 50 33 20 2a 2f 0a 0a 20 20 70 49 6e  ter P3 */..  pIn
1ce30 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1ce40 33 5d 3b 0a 20 20 61 4d 78 20 3d 20 26 61 4d 65  3];.  aMx = &aMe
1ce50 6d 5b 70 4f 70 2d 3e 70 34 2e 69 5d 3b 0a 20 20  m[pOp->p4.i];.  
1ce60 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  /* Assert that t
1ce70 68 65 20 76 61 6c 75 65 73 20 6f 66 20 70 61 72  he values of par
1ce80 61 6d 65 74 65 72 73 20 50 31 20 61 6e 64 20 50  ameters P1 and P
1ce90 34 20 61 72 65 20 69 6e 20 72 61 6e 67 65 2e 20  4 are in range. 
1cea0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
1ceb0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1cec0 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
1ced0 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 26 26 20 70  pOp->p4.i>0 && p
1cee0 4f 70 2d 3e 70 34 2e 69 3c 3d 70 2d 3e 6e 4d 65  Op->p4.i<=p->nMe
1cef0 6d 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  m );.  assert( p
1cf00 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1cf10 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1cf20 29 3b 0a 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  );..  /* Find th
1cf30 65 20 69 6e 64 65 78 20 63 75 72 73 6f 72 2e 20  e index cursor. 
1cf40 2a 2f 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70  */.  pCx = p->ap
1cf50 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1cf60 61 73 73 65 72 74 28 20 70 43 78 2d 3e 64 65 66  assert( pCx->def
1cf70 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
1cf80 3b 0a 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73  ;.  pCx->seekRes
1cf90 75 6c 74 20 3d 20 30 3b 0a 20 20 70 43 78 2d 3e  ult = 0;.  pCx->
1cfa0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1cfb0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 72  CHE_STALE;.  pCr
1cfc0 73 72 20 3d 20 70 43 78 2d 3e 70 43 75 72 73 6f  sr = pCx->pCurso
1cfd0 72 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 79 20  r;..  /* If any 
1cfe0 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  of the values ar
1cff0 65 20 4e 55 4c 4c 2c 20 74 61 6b 65 20 74 68 65  e NULL, take the
1d000 20 6a 75 6d 70 2e 20 2a 2f 0a 20 20 6e 46 69 65   jump. */.  nFie
1d010 6c 64 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ld = pCx->pKeyIn
1d020 66 6f 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20 66 6f  fo->nField;.  fo
1d030 72 28 69 69 3d 30 3b 20 69 69 3c 6e 46 69 65 6c  r(ii=0; ii<nFiel
1d040 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 69 66  d; ii++){.    if
1d050 28 20 61 4d 78 5b 69 69 5d 2e 66 6c 61 67 73 20  ( aMx[ii].flags 
1d060 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
1d070 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1d080 20 2d 20 31 3b 0a 20 20 20 20 20 20 70 43 72 73   - 1;.      pCrs
1d090 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 62 72 65  r = 0;.      bre
1d0a0 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
1d0b0 61 73 73 65 72 74 28 20 28 61 4d 78 5b 6e 46 69  assert( (aMx[nFi
1d0c0 65 6c 64 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  eld].flags & MEM
1d0d0 5f 4e 75 6c 6c 29 3d 3d 30 20 29 3b 0a 0a 20 20  _Null)==0 );..  
1d0e0 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b 0a  if( pCrsr!=0 ){.
1d0f0 20 20 20 20 2f 2a 20 50 6f 70 75 6c 61 74 65 20      /* Populate 
1d100 74 68 65 20 69 6e 64 65 78 20 73 65 61 72 63 68  the index search
1d110 20 6b 65 79 2e 20 2a 2f 0a 20 20 20 20 72 2e 70   key. */.    r.p
1d120 4b 65 79 49 6e 66 6f 20 3d 20 70 43 78 2d 3e 70  KeyInfo = pCx->p
1d130 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
1d140 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 20 2b  Field = nField +
1d150 20 31 3b 0a 20 20 20 20 72 2e 66 6c 61 67 73 20   1;.    r.flags 
1d160 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
1d170 58 5f 53 45 41 52 43 48 3b 0a 20 20 20 20 72 2e  X_SEARCH;.    r.
1d180 61 4d 65 6d 20 3d 20 61 4d 78 3b 0a 23 69 66 64  aMem = aMx;.#ifd
1d190 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1d1a0 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72      { int i; for
1d1b0 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
1d1c0 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
1d1d0 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
1d1e0 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
1d1f0 66 0a 0a 20 20 20 20 2f 2a 20 45 78 74 72 61 63  f..    /* Extrac
1d200 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 52  t the value of R
1d210 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
1d220 33 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  3. */.    sqlite
1d230 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
1d240 66 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 52 20  fy(pIn3);.    R 
1d250 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 0a 20 20  = pIn3->u.i;..  
1d260 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
1d270 42 2d 54 72 65 65 20 69 6e 64 65 78 2e 20 49 66  B-Tree index. If
1d280 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20   no conflicting 
1d290 72 65 63 6f 72 64 20 69 73 20 66 6f 75 6e 64 2c  record is found,
1d2a0 20 6a 75 6d 70 0a 20 20 20 20 2a 2a 20 74 6f 20   jump.    ** to 
1d2b0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 63  P2. Otherwise, c
1d2c0 6f 70 79 20 74 68 65 20 72 6f 77 69 64 20 6f 66  opy the rowid of
1d2d0 20 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67   the conflicting
1d2e0 20 72 65 63 6f 72 64 20 74 6f 0a 20 20 20 20 2a   record to.    *
1d2f0 2a 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e  * register P3 an
1d300 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  d fall through t
1d310 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
1d320 75 63 74 69 6f 6e 2e 20 20 2a 2f 0a 20 20 20 20  uction.  */.    
1d330 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d340 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1d350 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
1d360 20 26 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c   &pCx->seekResul
1d370 74 29 3b 0a 20 20 20 20 69 66 28 20 28 72 2e 66  t);.    if( (r.f
1d380 6c 61 67 73 20 26 20 55 4e 50 41 43 4b 45 44 5f  lags & UNPACKED_
1d390 50 52 45 46 49 58 5f 53 45 41 52 43 48 29 20 7c  PREFIX_SEARCH) |
1d3a0 7c 20 72 2e 72 6f 77 69 64 3d 3d 52 20 29 7b 0a  | r.rowid==R ){.
1d3b0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1d3c0 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  p2 - 1;.    }els
1d3d0 65 7b 0a 20 20 20 20 20 20 70 49 6e 33 2d 3e 75  e{.      pIn3->u
1d3e0 2e 69 20 3d 20 72 2e 72 6f 77 69 64 3b 0a 20 20  .i = r.rowid;.  
1d3f0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
1d400 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
1d410 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50  otExists P1 P2 P
1d420 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 55 73 65 20  3 * *.**.** Use 
1d430 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1d440 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1d450 69 6e 74 65 67 65 72 20 6b 65 79 2e 20 20 49 66  integer key.  If
1d460 20 61 20 72 65 63 6f 72 64 20 0a 2a 2a 20 77 69   a record .** wi
1d470 74 68 20 74 68 61 74 20 6b 65 79 20 64 6f 65 73  th that key does
1d480 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 61   not exist in ta
1d490 62 6c 65 20 6f 66 20 50 31 2c 20 74 68 65 6e 20  ble of P1, then 
1d4a0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20  jump to P2. .** 
1d4b0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 64 6f  If the record do
1d4c0 65 73 20 65 78 69 73 74 2c 20 74 68 65 6e 20 66  es exist, then f
1d4d0 61 6c 6c 20 74 68 72 6f 75 67 68 2e 20 20 54 68  all through.  Th
1d4e0 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74  e cursor is left
1d4f0 20 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f   .** pointing to
1d500 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 69   the record if i
1d510 74 20 65 78 69 73 74 73 2e 0a 2a 2a 0a 2a 2a 20  t exists..**.** 
1d520 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  The difference b
1d530 65 74 77 65 65 6e 20 74 68 69 73 20 6f 70 65 72  etween this oper
1d540 61 74 69 6f 6e 20 61 6e 64 20 4e 6f 74 46 6f 75  ation and NotFou
1d550 6e 64 20 69 73 20 74 68 61 74 20 74 68 69 73 0a  nd is that this.
1d560 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 61 73 73  ** operation ass
1d570 75 6d 65 73 20 74 68 65 20 6b 65 79 20 69 73 20  umes the key is 
1d580 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74  an integer and t
1d590 68 61 74 20 50 31 20 69 73 20 61 20 74 61 62 6c  hat P1 is a tabl
1d5a0 65 20 77 68 65 72 65 61 73 0a 2a 2a 20 4e 6f 74  e whereas.** Not
1d5b0 46 6f 75 6e 64 20 61 73 73 75 6d 65 73 20 6b 65  Found assumes ke
1d5c0 79 20 69 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  y is a blob cons
1d5d0 74 72 75 63 74 65 64 20 66 72 6f 6d 20 4d 61 6b  tructed from Mak
1d5e0 65 52 65 63 6f 72 64 20 61 6e 64 0a 2a 2a 20 50  eRecord and.** P
1d5f0 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2e 0a 2a  1 is an index..*
1d600 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1d610 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1d620 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63 61 73 65  IsUnique.*/.case
1d630 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b   OP_NotExists: {
1d640 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1d650 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75   in3 */.  VdbeCu
1d660 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
1d670 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
1d680 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b  nt res;.  u64 iK
1d690 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61  ey;..  pIn3 = &a
1d6a0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1d6b0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
1d6c0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
1d6d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d6e0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1d6f0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1d700 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1d710 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1d720 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
1d730 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1d740 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
1d750 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
1d760 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  g==0 );.  pCrsr 
1d770 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
1d780 20 69 66 28 20 70 43 72 73 72 21 3d 30 20 29 7b   if( pCrsr!=0 ){
1d790 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  .    res = 0;.  
1d7a0 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75    iKey = pIn3->u
1d7b0 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  .i;.    rc = sql
1d7c0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1d7d0 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30  npacked(pCrsr, 0
1d7e0 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  , iKey, 0, &res)
1d7f0 3b 0a 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f  ;.    pC->lastRo
1d800 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  wid = pIn3->u.i;
1d810 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
1d820 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f  Valid = res==0 ?
1d830 31 3a 30 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  1:0;.    pC->nul
1d840 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 43  lRow = 0;.    pC
1d850 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1d860 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
1d870 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1d880 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  eto = 0;.    if(
1d890 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 20   res!=0 ){.     
1d8a0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
1d8b0 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  1;.      assert(
1d8c0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1d8d0 64 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20  d==0 );.    }.  
1d8e0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1d8f0 20 3d 20 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b   = res;.  }else{
1d900 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
1d910 70 65 6e 73 20 77 68 65 6e 20 61 6e 20 61 74 74  pens when an att
1d920 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 72  empt to open a r
1d930 65 61 64 20 63 75 72 73 6f 72 20 6f 6e 20 74 68  ead cursor on th
1d940 65 20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  e .    ** sqlite
1d950 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 72 65  _master table re
1d960 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 45 4d 50  turns SQLITE_EMP
1d970 54 59 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 70  TY..    */.    p
1d980 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1d990 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
1d9a0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30  >rowidIsValid==0
1d9b0 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b   );.    pC->seek
1d9c0 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 7d 0a  Result = 0;.  }.
1d9d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1d9e0 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20  pcode: Sequence 
1d9f0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1da00 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
1da10 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
1da20 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
1da30 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
1da40 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
1da50 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
1da60 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
1da70 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
1da80 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1da90 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
1daa0 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
1dab0 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
1dac0 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
1dad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
1dae0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
1daf0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1db00 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1db10 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1db20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1db30 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
1db40 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d    pOut->u.i = p-
1db50 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
1db60 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62  >seqCount++;.  b
1db70 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
1db80 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31  ode: NewRowid P1
1db90 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1dba0 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67   Get a new integ
1dbb0 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
1dbc0 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29   (a.k.a "rowid")
1dbd0 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79   used as the key
1dbe0 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   to a table..** 
1dbf0 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  The record numbe
1dc00 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  r is not previou
1dc10 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65  sly used as a ke
1dc20 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
1dc30 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20  e.** table that 
1dc40 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
1dc50 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65   to.  The new re
1dc60 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77  cord number is w
1dc70 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65  ritten.** writte
1dc80 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  n to register P2
1dc90 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20  ..**.** If P3>0 
1dca0 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67  then P3 is a reg
1dcb0 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
1dcc0 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
1dcd0 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20  VDBE that holds 
1dce0 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20  .** the largest 
1dcf0 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72  previously gener
1dd00 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
1dd10 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72  er. No new recor
1dd20 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a  d numbers are.**
1dd30 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c   allowed to be l
1dd40 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61  ess than this va
1dd50 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76  lue. When this v
1dd60 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73  alue reaches its
1dd70 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 20   maximum, .** a 
1dd80 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f  SQLITE_FULL erro
1dd90 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20  r is generated. 
1dda0 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  The P3 register 
1ddb0 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
1ddc0 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74  the '.** generat
1ddd0 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
1dde0 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e  . This P3 mechan
1ddf0 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68  ism is used to h
1de00 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68  elp implement th
1de10 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45  e.** AUTOINCREME
1de20 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63  NT feature..*/.c
1de30 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a  ase OP_NewRowid:
1de40 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
1de50 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
1de60 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20  */.  i64 v;     
1de70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1de80 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
1de90 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1dea0 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73  ;        /* Curs
1deb0 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67  or of table to g
1dec0 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64  et the new rowid
1ded0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1def0 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c  Result of an sql
1df00 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29 20  ite3BtreeLast() 
1df10 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20  */.  int cnt;   
1df20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1df30 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20  ounter to limit 
1df40 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  the number of se
1df50 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20  arches */.  Mem 
1df60 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
1df70 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1df80 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72  olding largest r
1df90 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43  owid for AUTOINC
1dfa0 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65  REMENT */.  Vdbe
1dfb0 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
1dfc0 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65     /* Root frame
1dfd0 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76   of VDBE */..  v
1dfe0 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b   = 0;.  res = 0;
1dff0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e000 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1e010 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1e020 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1e030 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1e040 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
1e050 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75 72  ( NEVER(pC->pCur
1e060 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f  sor==0) ){.    /
1e070 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69  * The zero initi
1e080 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20  alization above 
1e090 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e  is all that is n
1e0a0 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65  eeded */.  }else
1e0b0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  {.    /* The nex
1e0c0 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72  t rowid or recor
1e0d0 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72  d number (differ
1e0e0 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68  ent terms for th
1e0f0 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68  e same.    ** th
1e100 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64  ing) is obtained
1e110 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61   in a two-step a
1e120 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a  lgorithm..    **
1e130 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65  .    ** First we
1e140 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
1e150 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
1e160 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20  sting rowid and 
1e170 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74  add one.    ** t
1e180 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20  o that.  But if 
1e190 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
1e1a0 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c  ting rowid is al
1e1b0 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75  ready the maximu
1e1c0 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76  m.    ** positiv
1e1d0 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61  e integer, we ha
1e1e0 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75  ve to fall throu
1e1f0 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64  gh to the second
1e200 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c  .    ** probabil
1e210 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a  istic algorithm.
1e220 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68      **.    ** Th
1e230 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74  e second algorit
1e240 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20  hm is to select 
1e250 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f  a rowid at rando
1e260 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20  m and see if.   
1e270 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65   ** it already e
1e280 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62  xists in the tab
1e290 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  le.  If it does 
1e2a0 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61  not exist, we ha
1e2b0 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65  ve.    ** succee
1e2c0 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e  ded.  If the ran
1e2d0 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65  dom rowid does e
1e2e0 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20  xist, we select 
1e2f0 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a  a new one.    **
1e300 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20   and try again, 
1e310 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e  up to 100 times.
1e320 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
1e330 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1e340 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
1e350 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20  E_32BIT_ROWID.# 
1e360 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
1e370 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65  ID 0x7fffffff.#e
1e380 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20  lse.    /* Some 
1e390 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61  compilers compla
1e3a0 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e  in about constan
1e3b0 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30  ts of the form 0
1e3c0 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
1e3d0 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73  f..    ** Others
1e3e0 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
1e3f0 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
1e400 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c  fffLL.  The foll
1e410 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d  owing macro seem
1e420 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76  s.    ** to prov
1e430 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  ide the constant
1e440 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c   while making al
1e450 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70  l compilers happ
1e460 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65  y..    */.#   de
1e470 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20  fine MAX_ROWID  
1e480 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78  (i64)( (((u64)0x
1e490 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c  7fffffff)<<32) |
1e4a0 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66   (u64)0xffffffff
1e4b0 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69   ).#endif..    i
1e4c0 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f  f( !pC->useRando
1e4d0 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
1e4e0 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  v = sqlite3Btree
1e4f0 47 65 74 43 61 63 68 65 64 52 6f 77 69 64 28 70  GetCachedRowid(p
1e500 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  C->pCursor);.   
1e510 20 20 20 69 66 28 20 76 3d 3d 30 20 29 7b 0a 20     if( v==0 ){. 
1e520 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1e530 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d  te3BtreeLast(pC-
1e540 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1e550 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
1e560 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1e570 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
1e580 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1e590 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1e5a0 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
1e5b0 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20          v = 1;  
1e5c0 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34   /* IMP: R-61914
1e5d0 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20  -48074 */.      
1e5e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1e5f0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
1e600 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
1e610 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  alid(pC->pCursor
1e620 29 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  ) );.          r
1e630 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1e640 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72  KeySize(pC->pCur
1e650 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20  sor, &v);.      
1e660 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
1e670 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f  SQLITE_OK );   /
1e680 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f  * Cannot fail fo
1e690 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73  llowing BtreeLas
1e6a0 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  t() */.         
1e6b0 20 69 66 28 20 76 3d 3d 4d 41 58 5f 52 4f 57 49   if( v==MAX_ROWI
1e6c0 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  D ){.           
1e6d0 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
1e6e0 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  wid = 1;.       
1e6f0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1e700 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20        v++;   /* 
1e710 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39  IMP: R-29538-349
1e720 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  87 */.          
1e730 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
1e740 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c    }..#ifndef SQL
1e750 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
1e760 52 45 4d 45 4e 54 0a 20 20 20 20 20 20 69 66 28  REMENT.      if(
1e770 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
1e780 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
1e790 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
1e7a0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
1e7b0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1e7c0 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
1e7d0 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72        if( p->pFr
1e7e0 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ame ){.         
1e7f0 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
1e800 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
1e810 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
1e820 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
1e830 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 73  .          /* As
1e840 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
1e850 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
1e860 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
1e870 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e880 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20  3<=pFrame->nMem 
1e890 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 4d 65  );.          pMe
1e8a0 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  m = &pFrame->aMe
1e8b0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
1e8c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1e8d0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
1e8e0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
1e8f0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
1e900 2f 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  /.          asse
1e910 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e  rt( pOp->p3<=p->
1e920 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
1e930 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
1e940 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20  Op->p3];.       
1e950 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
1e960 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20  nge(p, pMem);.  
1e970 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1e980 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
1e990 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20  id(pMem) );..   
1e9a0 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
1e9b0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65  ACE(pOp->p3, pMe
1e9c0 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  m);.        sqli
1e9d0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
1e9e0 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20  rify(pMem);.    
1e9f0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
1ea00 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  m->flags & MEM_I
1ea10 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65  nt)!=0 );  /* me
1ea20 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69  m(P3) holds an i
1ea30 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20  nteger */.      
1ea40 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d    if( pMem->u.i=
1ea50 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43  =MAX_ROWID || pC
1ea60 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1ea70 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63   ){.          rc
1ea80 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
1ea90 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37    /* IMP: R-1227
1eaa0 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20  5-61338 */.     
1eab0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1eac0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1ead0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1eae0 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b  if( v<pMem->u.i+
1eaf0 31 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76  1 ){.          v
1eb00 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31   = pMem->u.i + 1
1eb10 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1eb20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20      pMem->u.i = 
1eb30 76 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  v;.      }.#endi
1eb40 66 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  f..      sqlite3
1eb50 42 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f  BtreeSetCachedRo
1eb60 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  wid(pC->pCursor,
1eb70 20 76 3c 4d 41 58 5f 52 4f 57 49 44 20 3f 20 76   v<MAX_ROWID ? v
1eb80 2b 31 20 3a 20 30 29 3b 0a 20 20 20 20 7d 0a 20  +1 : 0);.    }. 
1eb90 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61     if( pC->useRa
1eba0 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
1ebb0 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41     /* IMPLEMENTA
1ebc0 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37  TION-OF: R-07677
1ebd0 2d 34 31 38 38 31 20 49 66 20 74 68 65 20 6c 61  -41881 If the la
1ebe0 72 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65  rgest ROWID is e
1ebf0 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20  qual to the.    
1ec00 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73    ** largest pos
1ec10 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39  sible integer (9
1ec20 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
1ec30 30 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74  07) then the dat
1ec40 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65  abase.      ** e
1ec50 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63  ngine starts pic
1ec60 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61  king positive ca
1ec70 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61  ndidate ROWIDs a
1ec80 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20  t random until. 
1ec90 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73       ** it finds
1eca0 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74   one that is not
1ecb0 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
1ecc0 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  . */.      asser
1ecd0 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b  t( pOp->p3==0 );
1ece0 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62    /* We cannot b
1ecf0 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69  e in random rowi
1ed00 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69  d mode if this i
1ed10 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s.              
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
1ed30 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  * an AUTOINCREME
1ed40 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20  NT table. */.   
1ed50 20 20 20 2f 2a 20 6f 6e 20 74 68 65 20 66 69 72     /* on the fir
1ed60 73 74 20 61 74 74 65 6d 70 74 2c 20 73 69 6d 70  st attempt, simp
1ed70 6c 79 20 64 6f 20 6f 6e 65 20 6d 6f 72 65 20 74  ly do one more t
1ed80 68 61 6e 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a  han previous */.
1ed90 20 20 20 20 20 20 76 20 3d 20 64 62 2d 3e 6c 61        v = db->la
1eda0 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 76  stRowid;.      v
1edb0 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e   &= (MAX_ROWID>>
1edc0 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f  1); /* ensure do
1edd0 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76  esn't go negativ
1ede0 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b 2b 3b 20  e */.      v++; 
1edf0 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65  /* ensure non-ze
1ee00 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20  ro */.      cnt 
1ee10 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  = 0;.      while
1ee20 28 20 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74  (   ((rc = sqlit
1ee30 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1ee40 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1ee50 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20  r, 0, (u64)v,.  
1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
1ee90 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45  , &res))==SQLITE
1eea0 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20  _OK).           
1eeb0 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20   && (res==0).   
1eec0 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63           && (++c
1eed0 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20 20 20 20  nt<100)){.      
1eee0 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e 20 2d    /* collision -
1eef0 20 74 72 79 20 61 6e 6f 74 68 65 72 20 72 61 6e   try another ran
1ef00 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a 20 20 20  dom rowid */.   
1ef10 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e       sqlite3_ran
1ef20 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76  domness(sizeof(v
1ef30 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  ), &v);.        
1ef40 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a 20 20 20  if( cnt<5 ){.   
1ef50 20 20 20 20 20 20 20 2f 2a 20 74 72 79 20 22 73         /* try "s
1ef60 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20 72 6f 77  mall" random row
1ef70 69 64 73 20 66 6f 72 20 74 68 65 20 69 6e 69 74  ids for the init
1ef80 69 61 6c 20 61 74 74 65 6d 70 74 73 20 2a 2f 0a  ial attempts */.
1ef90 20 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 30            v &= 0
1efa0 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20  xffffff;.       
1efb0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1efc0 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
1efd0 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65  D>>1); /* ensure
1efe0 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61   doesn't go nega
1eff0 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  tive */.        
1f000 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 2f  }.        v++; /
1f010 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72  * ensure non-zer
1f020 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20  o */.      }.   
1f030 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1f040 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
1f050 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
1f060 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
1f070 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33   IMP: R-38219-53
1f080 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  002 */.        g
1f090 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1f0a0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1f0b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e        assert( v>
1f0c0 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34  0 );  /* EV: R-4
1f0d0 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20  0812-03570 */.  
1f0e0 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69    }.    pC->rowi
1f0f0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1f100 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1f110 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1f120 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1f130 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1f140 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
1f150 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1f160 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
1f170 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1f180 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e  *.** Write an en
1f190 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62  try into the tab
1f1a0 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e  le of cursor P1.
1f1b0 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73    A new entry is
1f1c0 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69  .** created if i
1f1d0 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64  t doesn't alread
1f1e0 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64  y exist or the d
1f1f0 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74  ata for an exist
1f200 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  ing.** entry is 
1f210 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68  overwritten.  Th
1f220 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61  e data is the va
1f230 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f  lue MEM_Blob sto
1f240 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
1f250 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68  ** number P2. Th
1f260 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20  e key is stored 
1f270 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
1f280 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20  The key must.** 
1f290 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a  be a MEM_Int..**
1f2a0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
1f2b0 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
1f2c0 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
1f2d0 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
1f2e0 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
1f2f0 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
1f300 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68  ise not).  If th
1f310 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
1f320 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  ID flag of P5 is
1f330 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f   set,.** then ro
1f340 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f  wid is stored fo
1f350 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74  r subsequent ret
1f360 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  urn by the.** sq
1f370 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
1f380 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69  t_rowid() functi
1f390 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74  on (otherwise it
1f3a0 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e   is unmodified).
1f3b0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
1f3c0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
1f3d0 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  LT flag of P5 is
1f3e0 20 73 65 74 20 61 6e 64 20 69 66 20 74 68 65 20   set and if the 
1f3f0 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65  result of.** the
1f400 20 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61   last seek opera
1f410 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73  tion (OP_NotExis
1f420 74 73 29 20 77 61 73 20 61 20 73 75 63 63 65 73  ts) was a succes
1f430 73 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20  s, then this.** 
1f440 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e  operation will n
1f450 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  ot attempt to fi
1f460 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  nd the appropria
1f470 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f  te row before do
1f480 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72  ing.** the inser
1f490 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65  t but will inste
1f4a0 61 64 20 6f 76 65 72 77 72 69 74 65 20 74 68 65  ad overwrite the
1f4b0 20 72 6f 77 20 74 68 61 74 20 74 68 65 20 63 75   row that the cu
1f4c0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65  rsor is.** curre
1f4d0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
1f4e0 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74  .  Presumably, t
1f4f0 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45  he prior OP_NotE
1f500 78 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20  xists opcode.** 
1f510 68 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69  has already posi
1f520 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f  tioned the curso
1f530 72 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68  r correctly.  Th
1f540 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a  is is an optimiz
1f550 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f  ation.** that bo
1f560 6f 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65  osts performance
1f570 20 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64   by avoiding red
1f580 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a  undant seeks..**
1f590 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
1f5a0 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20  G_ISUPDATE flag 
1f5b0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69  is set, then thi
1f5c0 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74  s opcode is part
1f5d0 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45   of an.** UPDATE
1f5e0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68   operation.  Oth
1f5f0 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66  erwise (if the f
1f600 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68  lag is clear) th
1f610 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a  en this opcode.*
1f620 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20  * is part of an 
1f630 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e  INSERT operation
1f640 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  .  The differenc
1f650 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74  e is only import
1f660 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70  ant to.** the up
1f670 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a  date hook..**.**
1f680 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61   Parameter P4 ma
1f690 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72  y point to a str
1f6a0 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
1f6b0 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f  he table-name, o
1f6c0 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c  r.** may be NULL
1f6d0 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e  . If it is not N
1f6e0 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70  ULL, then the up
1f6f0 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73  date-hook .** (s
1f700 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61  qlite3.xUpdateCa
1f710 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b  llback) is invok
1f720 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73  ed following a s
1f730 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74  uccessful insert
1f740 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47  ..**.** (WARNING
1f750 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20  /TODO: If P1 is 
1f760 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  a pseudo-cursor 
1f770 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69  and P2 is dynami
1f780 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  cally.** allocat
1f790 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68  ed, then ownersh
1f7a0 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e  ip of P2 is tran
1f7b0 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70  sferred to the p
1f7c0 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20  seudo-cursor.** 
1f7d0 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20  and register P2 
1f7e0 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61  becomes ephemera
1f7f0 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f  l.  If the curso
1f800 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  r is changed, th
1f810 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65  e.** value of re
1f820 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74  gister P2 will t
1f830 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b  hen change.  Mak
1f840 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73  e sure this does
1f850 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e   not.** cause an
1f860 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a  y problems.).**.
1f870 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1f880 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  ion only works o
1f890 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65  n tables.  The e
1f8a0 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
1f8b0 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64  ction.** for ind
1f8c0 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e  ices is OP_IdxIn
1f8d0 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  sert..*/./* Opco
1f8e0 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31  de: InsertInt P1
1f8f0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
1f900 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78  ** This works ex
1f910 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e  actly like OP_In
1f920 73 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74  sert except that
1f930 20 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a   the key is the.
1f940 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ** integer value
1f950 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c   P3, not the val
1f960 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ue of the intege
1f970 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  r stored in regi
1f980 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
1f990 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73   OP_Insert: .cas
1f9a0 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20  e OP_InsertInt: 
1f9b0 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20  {.  Mem *pData; 
1f9c0 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
1f9d0 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66  l holding data f
1f9e0 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
1f9f0 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
1fa00 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20    Mem *pKey;    
1fa10 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
1fa20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72  holding key  for
1fa30 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
1fa40 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
1fa50 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65     /* The intege
1fa60 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66  r ROWID or key f
1fa70 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
1fa80 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
1fa90 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1faa0 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f  ;   /* Cursor to
1fab0 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63   table into whic
1fac0 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74  h insert is writ
1fad0 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ten */.  int nZe
1fae0 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ro;        /* Nu
1faf0 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74  mber of zero-byt
1fb00 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a  es to append */.
1fb10 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
1fb20 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66  ;   /* Result of
1fb30 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30   prior seek or 0
1fb40 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45   if no USESEEKRE
1fb50 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63  SULT flag */.  c
1fb60 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
1fb70 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d   /* database nam
1fb80 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20  e - used by the 
1fb90 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20  update hook */. 
1fba0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
1fbb0 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65  l; /* Table name
1fbc0 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 6f   - used by the o
1fbd0 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
1fbe0 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20  int op;         
1fbf0 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20    /* Opcode for 
1fc00 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c  update hook: SQL
1fc10 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51  ITE_UPDATE or SQ
1fc20 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a  LITE_INSERT */..
1fc30 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b    pData = &aMem[
1fc40 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
1fc50 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1fc60 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1fc70 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1fc80 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61  ( memIsValid(pDa
1fc90 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  ta) );.  pC = p-
1fca0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1fcb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1fcc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1fcd0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
1fce0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73    assert( pC->ps
1fcf0 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20  eudoTableReg==0 
1fd00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1fd10 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45  >isTable );.  RE
1fd20 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
1fd30 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20  ->p2, pData);.. 
1fd40 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1fd50 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20  ==OP_Insert ){. 
1fd60 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b     pKey = &aMem[
1fd70 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73  pOp->p3];.    as
1fd80 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67  sert( pKey->flag
1fd90 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
1fda0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
1fdb0 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20  Valid(pKey) );. 
1fdc0 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
1fdd0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29  E(pOp->p3, pKey)
1fde0 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65  ;.    iKey = pKe
1fdf0 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b  y->u.i;.  }else{
1fe00 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1fe10 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
1fe20 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b  ertInt );.    iK
1fe30 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ey = pOp->p3;.  
1fe40 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  }..  if( pOp->p5
1fe50 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
1fe60 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
1fe70 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
1fe80 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  & OPFLAG_LASTROW
1fe90 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77  ID ) db->lastRow
1fea0 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28  id = iKey;.  if(
1feb0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
1fec0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
1fed0 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20  pData->z = 0;.  
1fee0 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a    pData->n = 0;.
1fef0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
1ff00 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67  ert( pData->flag
1ff10 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
1ff20 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20  M_Str) );.  }.  
1ff30 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70  seekResult = ((p
1ff40 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1ff50 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
1ff60 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
1ff70 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74  : 0);.  if( pDat
1ff80 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  a->flags & MEM_Z
1ff90 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f  ero ){.    nZero
1ffa0 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72   = pData->u.nZer
1ffb0 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  o;.  }else{.    
1ffc0 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20  nZero = 0;.  }. 
1ffd0 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
1ffe0 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e  CachedRowid(pC->
1fff0 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 72  pCursor, 0);.  r
20000 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
20010 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73  Insert(pC->pCurs
20020 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20  or, 0, iKey,.   
20030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20040 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c         pData->z,
20050 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f   pData->n, nZero
20060 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
20070 20 20 20 20 20 20 20 20 20 20 20 20 70 4f 70 2d              pOp-
20080 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50  >p5 & OPFLAG_APP
20090 45 4e 44 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a  END, seekResult.
200a0 20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64    );.  pC->rowid
200b0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
200c0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
200d0 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
200e0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
200f0 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
20100 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
20110 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
20120 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
20130 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
20140 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
20150 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
20160 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
20170 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
20180 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70  ;.    zTbl = pOp
20190 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d  ->p4.z;.    op =
201a0 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
201b0 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20  LAG_ISUPDATE) ? 
201c0 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20  SQLITE_UPDATE : 
201d0 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a  SQLITE_INSERT);.
201e0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
201f0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64  isTable );.    d
20200 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
20210 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
20220 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c  g, op, zDb, zTbl
20230 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73  , iKey);.    ass
20240 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
20250 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
20260 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
20270 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20  lete P1 P2 * P4 
20280 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74  *.**.** Delete t
20290 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69  he record at whi
202a0 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  ch the P1 cursor
202b0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
202c0 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  inting..**.** Th
202d0 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
202e0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
202f0 74 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78  t either the nex
20300 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
20310 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
20320 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
20330 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
20340 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
20350 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
20360 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
20370 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
20380 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69   no-op.  Hence i
20390 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74  t is OK to delet
203a0 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72  e.** a record fr
203b0 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e 65 78  om within an Nex
203c0 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66  t loop..**.** If
203d0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
203e0 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69  NGE flag of P2 i
203f0 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
20400 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
20410 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
20420 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
20430 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73  t)..**.** P1 mus
20440 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d  t not be pseudo-
20450 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74  table.  It has t
20460 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c  o be a real tabl
20470 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70  e with.** multip
20480 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49  le rows..**.** I
20490 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
204a0 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65  , then it is the
204b0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
204c0 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a  le that P1 is.**
204d0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54   pointing to.  T
204e0 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77  he update hook w
204f0 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20  ill be invoked, 
20500 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a  if it exists..**
20510 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
20520 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63  LL then the P1 c
20530 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20  ursor must have 
20540 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a  been positioned.
20550 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46  ** using OP_NotF
20560 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e  ound prior to in
20570 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  voking this opco
20580 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  de..*/.case OP_D
20590 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69  elete: {.  i64 i
205a0 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  Key;.  VdbeCurso
205b0 72 20 2a 70 43 3b 0a 0a 20 20 69 4b 65 79 20 3d  r *pC;..  iKey =
205c0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
205d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
205e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
205f0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
20600 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
20610 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
20620 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
20630 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f  rsor!=0 );  /* O
20640 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65  nly valid for re
20650 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73  al tables, no ps
20660 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 0a 20  eudotables */.. 
20670 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74   /* If the updat
20680 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69  e-hook will be i
20690 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69 4b 65 79  nvoked, set iKey
206a0 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66   to the rowid of
206b0 20 74 68 65 0a 20 20 2a 2a 20 72 6f 77 20 62 65   the.  ** row be
206c0 69 6e 67 20 64 65 6c 65 74 65 64 2e 0a 20 20 2a  ing deleted..  *
206d0 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64  /.  if( db->xUpd
206e0 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
206f0 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
20700 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
20710 62 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ble );.    asser
20720 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  t( pC->rowidIsVa
20730 6c 69 64 20 29 3b 20 20 2f 2a 20 6c 61 73 74 52  lid );  /* lastR
20740 6f 77 69 64 20 73 65 74 20 62 79 20 70 72 65 76  owid set by prev
20750 69 6f 75 73 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  ious OP_NotFound
20760 20 2a 2f 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   */.    iKey = p
20770 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  C->lastRowid;.  
20780 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44  }..  /* The OP_D
20790 65 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77  elete opcode alw
207a0 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f  ays follows an O
207b0 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f  P_NotExists or O
207c0 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f  P_Last or.  ** O
207d0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20  P_Column on the 
207e0 73 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f  same table witho
207f0 75 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69  ut any interveni
20800 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68  ng operations th
20810 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f  at.  ** might mo
20820 76 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65  ve or invalidate
20830 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
20840 6e 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73  nce cursor pC is
20850 20 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67   always pointing
20860 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77  .  ** to the row
20870 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61   to be deleted a
20880 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64  nd the sqlite3Vd
20890 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
208a0 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20   operation.  ** 
208b0 62 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20  below is always 
208c0 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e  a no-op and cann
208d0 6f 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c  ot fail.  We wil
208e0 6c 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c  l run it anyhow,
208f0 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f   though,.  ** to
20900 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66   guard against f
20910 75 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f  uture changes to
20920 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
20930 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73  tor..  **/.  ass
20940 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
20950 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
20960 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
20970 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
20980 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
20990 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
209a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
209b0 5f 65 72 72 6f 72 3b 0a 0a 20 20 73 71 6c 69 74  _error;..  sqlit
209c0 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 64  e3BtreeSetCached
209d0 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
209e0 72 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71  r, 0);.  rc = sq
209f0 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
20a00 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
20a10 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
20a20 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
20a30 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
20a40 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
20a50 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
20a60 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
20a70 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43   && db->xUpdateC
20a80 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
20a90 70 34 2e 7a 20 29 7b 0a 20 20 20 20 63 6f 6e 73  p4.z ){.    cons
20aa0 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62  t char *zDb = db
20ab0 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
20ac0 4e 61 6d 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20  Name;.    const 
20ad0 63 68 61 72 20 2a 7a 54 62 6c 20 3d 20 70 4f 70  char *zTbl = pOp
20ae0 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 64 62 2d 3e  ->p4.z;.    db->
20af0 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
20b00 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
20b10 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a  SQLITE_DELETE, z
20b20 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b  Db, zTbl, iKey);
20b30 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
20b40 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20  >iDb>=0 );.  }. 
20b50 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f   if( pOp->p2 & O
20b60 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
20b70 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
20b80 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f  break;.}./* Opco
20b90 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a  de: ResetCount *
20ba0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
20bb0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
20bc0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
20bd0 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20  s copied to the 
20be0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
20bf0 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  ** change counte
20c00 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73  r (returned by s
20c10 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
20c20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  to sqlite3_chang
20c30 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74  es())..** Then t
20c40 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20  he VMs internal 
20c50 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72  change counter r
20c60 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54  esets to 0..** T
20c70 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
20c80 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
20c90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
20ca0 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69  tCount: {.  sqli
20cb0 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
20cc0 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
20cd0 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  );.  p->nChange 
20ce0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
20cf0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44  ./* Opcode: RowD
20d00 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ata P1 P2 * * *.
20d10 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
20d20 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
20d30 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61   complete row da
20d40 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  ta for cursor P1
20d50 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f  ..** There is no
20d60 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
20d70 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a  of the data.  .*
20d80 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70  * It is just cop
20d90 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20  ied onto the P2 
20da0 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79  register exactly
20db0 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f   as .** it is fo
20dc0 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  und in the datab
20dd0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
20de0 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
20df0 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
20e00 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
20e10 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
20e20 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
20e30 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
20e40 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20  do-table..*/./* 
20e50 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50  Opcode: RowKey P
20e60 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
20e70 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
20e80 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
20e90 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72  lete row key for
20ea0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
20eb0 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
20ec0 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
20ed0 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20   data.  .** The 
20ee0 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e  key is copied on
20ef0 74 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74  to the P3 regist
20f00 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
20f10 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
20f20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
20f30 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
20f40 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
20f50 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
20f60 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
20f70 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
20f80 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
20f90 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
20fa0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  le..*/.case OP_R
20fb0 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52  owKey:.case OP_R
20fc0 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  owData: {.  Vdbe
20fd0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
20fe0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
20ff0 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36   u32 n;.  i64 n6
21000 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  4;..  pOut = &aM
21010 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d  em[pOp->p2];.  m
21020 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
21030 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
21040 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79  Note that RowKey
21050 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65   and RowData are
21060 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20   really exactly 
21070 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63  the same instruc
21080 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  tion */.  assert
21090 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
210a0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
210b0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
210c0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
210d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
210e0 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70  Table || pOp->op
210f0 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 4b 65 79 20  code==OP_RowKey 
21100 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21110 3e 69 73 49 6e 64 65 78 20 7c 7c 20 70 4f 70 2d  >isIndex || pOp-
21120 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44  >opcode==OP_RowD
21130 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ata );.  assert(
21140 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
21150 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d  rt( pC->nullRow=
21160 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
21170 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
21180 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  eg==0 );.  asser
21190 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
211a0 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
211b0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
211c0 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
211d0 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
211e0 70 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f 2a 20  pCrsr) );..  /* 
211f0 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e  The OP_RowKey an
21200 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63  d OP_RowData opc
21210 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c  odes always foll
21220 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  ow OP_NotExists 
21230 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e  or.  ** OP_Rewin
21240 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e  d/Op_Next with n
21250 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e  o intervening in
21260 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20  structions that 
21270 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65  might invalidate
21280 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  .  ** the cursor
21290 2e 20 20 48 65 6e 63 65 20 74 68 65 20 66 6f 6c  .  Hence the fol
212a0 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56 64  lowing sqlite3Vd
212b0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
212c0 20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79 73 0a   call is always.
212d0 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61 6e 64    ** a no-op and
212e0 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
212f0 20 20 42 75 74 20 77 65 20 6c 65 61 76 65 20 69    But we leave i
21300 74 20 69 6e 20 70 6c 61 63 65 20 61 73 20 61 20  t in place as a 
21310 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20 20 61  safety..  */.  a
21320 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
21330 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
21340 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
21350 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
21360 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28  C);.  if( NEVER(
21370 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29  rc!=SQLITE_OK) )
21380 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
21390 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28  to_error;..  if(
213a0 20 70 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a   pC->isIndex ){.
213b0 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d      assert( !pC-
213c0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
213d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
213e0 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20  eKeySize(pCrsr, 
213f0 26 6e 36 34 29 3b 0a 20 20 20 20 61 73 73 65 72  &n64);.    asser
21400 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
21410 20 29 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 62   );    /* True b
21420 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
21430 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62  Moveto() call ab
21440 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ove */.    if( n
21450 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  64>db->aLimit[SQ
21460 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
21470 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
21480 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
21490 20 20 20 20 6e 20 3d 20 28 75 33 32 29 6e 36 34      n = (u32)n64
214a0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
214b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
214c0 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
214d0 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  &n);.    assert(
214e0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
214f0 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65  ;    /* DataSize
21500 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a  () cannot fail *
21510 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32  /.    if( n>(u32
21520 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
21530 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
21540 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
21550 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
21560 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  }.  if( sqlite3V
21570 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
21580 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f   n, 0) ){.    go
21590 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
215a0 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20   pOut->n = n;.  
215b0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
215c0 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a  Out, MEM_Blob);.
215d0 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e 64 65    if( pC->isInde
215e0 78 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  x ){.    rc = sq
215f0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 70 43  lite3BtreeKey(pC
21600 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
21610 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >z);.  }else{.  
21620 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
21630 72 65 65 44 61 74 61 28 70 43 72 73 72 2c 20 30  reeData(pCrsr, 0
21640 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20  , n, pOut->z);. 
21650 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d   }.  pOut->enc =
21660 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f   SQLITE_UTF8;  /
21670 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c  * In case the bl
21680 6f 62 20 69 73 20 65 76 65 72 20 63 61 73 74 20  ob is ever cast 
21690 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44  to text */.  UPD
216a0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
216b0 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
216c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
216d0 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
216e0 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20  .**.** Store in 
216f0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
21700 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
21710 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74  the key of the t
21720 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a  able entry that.
21730 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  ** P1 is current
21740 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a  ly point to..**.
21750 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74  ** P1 can be eit
21760 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  her an ordinary 
21770 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75  table or a virtu
21780 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65  al table.  There
21790 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61   used to.** be a
217a0 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f   separate OP_VRo
217b0 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75  wid opcode for u
217c0 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20  se with virtual 
217d0 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73  tables, but this
217e0 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e  .** one opcode n
217f0 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  ow works for bot
21800 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a  h table types..*
21810 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
21820 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
21830 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
21840 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43  lease */.  VdbeC
21850 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34  ursor *pC;.  i64
21860 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   v;.  sqlite3_vt
21870 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
21880 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
21890 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
218a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
218b0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
218c0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
218d0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
218e0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
218f0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
21900 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
21910 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28  eReg==0 );.  if(
21920 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
21930 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
21940 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
21950 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69  break;.  }else i
21960 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  f( pC->deferredM
21970 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d  oveto ){.    v =
21980 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
21990 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
219a0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
219b0 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  BLE.  }else if( 
219c0 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  pC->pVtabCursor 
219d0 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70  ){.    pVtab = p
219e0 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  C->pVtabCursor->
219f0 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
21a00 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
21a10 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
21a20 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
21a30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   );.    rc = pMo
21a40 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
21a50 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76  >pVtabCursor, &v
21a60 29 3b 0a 20 20 20 20 69 6d 70 6f 72 74 56 74 61  );.    importVta
21a70 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62  bErrMsg(p, pVtab
21a80 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  );.#endif /* SQL
21a90 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
21aa0 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65  TABLE */.  }else
21ab0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
21ac0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
21ad0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21ae0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
21af0 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
21b00 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
21b10 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
21b20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  if( pC->rowidIsV
21b30 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20  alid ){.      v 
21b40 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = pC->lastRowid;
21b50 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
21b60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
21b70 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
21b80 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20  Cursor, &v);.   
21b90 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
21ba0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20  QLITE_OK );  /* 
21bb0 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75 73  Always so becaus
21bc0 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
21bd0 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  o() above */.   
21be0 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75   }.  }.  pOut->u
21bf0 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
21c00 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
21c10 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20  ullRow P1 * * * 
21c20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65  *.**.** Move the
21c30 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
21c40 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f  null row.  Any O
21c50 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69  P_Column operati
21c60 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75  ons.** that occu
21c70 72 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73  r while the curs
21c80 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c  or is on the nul
21c90 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79  l row will alway
21ca0 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c  s.** write a NUL
21cb0 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  L..*/.case OP_Nu
21cc0 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43  llRow: {.  VdbeC
21cd0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
21ce0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
21cf0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
21d00 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
21d10 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21d20 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
21d30 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  !=0 );.  pC->nul
21d40 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e  lRow = 1;.  pC->
21d50 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
21d60 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72  ;.  if( pC->pCur
21d70 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  sor ){.    sqlit
21d80 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73  e3BtreeClearCurs
21d90 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  or(pC->pCursor);
21da0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
21db0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74  ./* Opcode: Last
21dc0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
21dd0 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
21de0 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
21df0 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
21e00 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
21e10 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
21e20 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74   to the last ent
21e30 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
21e40 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
21e50 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
21e60 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
21e70 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
21e80 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
21e90 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
21ea0 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
21eb0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
21ec0 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
21ed0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
21ee0 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
21ef0 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
21f00 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  /.case OP_Last: 
21f10 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
21f20 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
21f30 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
21f40 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
21f50 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
21f60 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21f70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21f80 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
21f90 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
21fa0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21fb0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
21fc0 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70 43 72  ursor;.  if( pCr
21fd0 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 73  sr==0 ){.    res
21fe0 20 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 1;.  }else{. 
21ff0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
22000 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20  treeLast(pCrsr, 
22010 26 72 65 73 29 3b 0a 20 20 7d 0a 20 20 70 43 2d  &res);.  }.  pC-
22020 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
22030 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  es;.  pC->deferr
22040 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
22050 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
22060 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
22070 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
22080 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70  STALE;.  if( pOp
22090 2d 3e 70 32 3e 30 20 26 26 20 72 65 73 20 29 7b  ->p2>0 && res ){
220a0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
220b0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
220c0 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
220d0 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
220e0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
220f0 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
22100 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
22110 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
22120 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
22130 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
22140 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
22150 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
22160 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
22170 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
22180 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
22190 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
221a0 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
221b0 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
221c0 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
221d0 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
221e0 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
221f0 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
22200 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
22210 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
22220 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
22230 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
22240 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
22250 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
22260 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
22270 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
22280 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
22290 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
222a0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
222b0 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
222c0 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
222d0 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
222e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a  */.case OP_Sort:
222f0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
22300 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  p */.#ifdef SQLI
22310 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65  TE_TEST.  sqlite
22320 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a  3_sort_count++;.
22330 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
22340 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66  _count--;.#endif
22350 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
22360 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
22370 5f 53 4f 52 54 2d 31 5d 2b 2b 3b 0a 20 20 2f 2a  _SORT-1]++;.  /*
22380 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
22390 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
223a0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
223b0 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ind P1 P2 * * *.
223c0 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
223d0 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
223e0 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
223f0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
22400 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
22410 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
22420 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
22430 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
22440 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
22450 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
22460 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
22470 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
22480 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
22490 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
224a0 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
224b0 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
224c0 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
224d0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
224e0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
224f0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
22500 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  wind: {        /
22510 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
22520 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
22530 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
22540 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73   int res;..  ass
22550 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
22560 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
22570 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
22580 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
22590 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
225a0 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  =0 );.  res = 1;
225b0 0a 20 20 69 66 28 20 28 70 43 72 73 72 20 3d 20  .  if( (pCrsr = 
225c0 70 43 2d 3e 70 43 75 72 73 6f 72 29 21 3d 30 20  pC->pCursor)!=0 
225d0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
225e0 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
225f0 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
22600 70 43 2d 3e 61 74 46 69 72 73 74 20 3d 20 72 65  pC->atFirst = re
22610 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 20 20 70  s==0 ?1:0;.    p
22620 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
22630 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
22640 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
22650 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43  HE_STALE;.    pC
22660 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
22670 20 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75   0;.  }.  pC->nu
22680 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
22690 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
226a0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  p2>0 && pOp->p2<
226b0 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 69 66 28 20  p->nOp );.  if( 
226c0 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
226d0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
226e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
226f0 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
22700 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  P2 * * P5.**.** 
22710 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50  Advance cursor P
22720 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
22730 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20  nts to the next 
22740 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
22750 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
22760 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
22770 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65  e are no more ke
22780 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
22790 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
227a0 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
227b0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
227c0 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
227d0 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20  sor advance was 
227e0 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a  successful,.** j
227f0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
22800 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  to P2..**.** The
22810 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
22820 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
22830 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
22840 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  o-table..**.** I
22850 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
22860 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
22870 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
22880 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
22890 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
228a0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
228b0 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
228c0 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
228d0 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f  so: Prev.*/./* O
228e0 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50  pcode: Prev P1 P
228f0 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 42  2 * * P5.**.** B
22900 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
22910 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
22920 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
22930 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
22940 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
22950 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
22960 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
22970 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
22980 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
22990 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
229a0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
229b0 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
229c0 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
229d0 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
229e0 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
229f0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
22a00 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
22a10 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
22a20 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
22a30 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
22a40 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
22a50 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
22a60 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
22a70 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
22a80 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
22a90 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
22aa0 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
22ab0 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 63 61 73 65  emented..*/.case
22ac0 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20   OP_Prev:       
22ad0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
22ae0 73 65 20 4f 50 5f 4e 65 78 74 3a 20 7b 20 20 20  se OP_Next: {   
22af0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
22b00 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
22b10 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
22b20 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
22b30 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49 4e 54  .  CHECK_FOR_INT
22b40 45 52 52 55 50 54 3b 0a 20 20 61 73 73 65 72 74  ERRUPT;.  assert
22b50 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
22b60 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
22b70 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
22b80 70 4f 70 2d 3e 70 35 3c 3d 41 72 72 61 79 53 69  pOp->p5<=ArraySi
22b90 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20  ze(p->aCounter) 
22ba0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
22bb0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  sr[pOp->p1];.  i
22bc0 66 28 20 70 43 3d 3d 30 20 29 7b 0a 20 20 20 20  f( pC==0 ){.    
22bd0 62 72 65 61 6b 3b 20 20 2f 2a 20 53 65 65 20 74  break;  /* See t
22be0 69 63 6b 65 74 20 23 32 32 37 33 20 2a 2f 0a 20  icket #2273 */. 
22bf0 20 7d 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d   }.  pCrsr = pC-
22c00 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
22c10 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20  pCrsr==0 ){.    
22c20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
22c30 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
22c40 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 61 73 73    res = 1;.  ass
22c50 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
22c60 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
22c70 72 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  rc = pOp->opcode
22c80 3d 3d 4f 50 5f 4e 65 78 74 20 3f 20 73 71 6c 69  ==OP_Next ? sqli
22c90 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 72  te3BtreeNext(pCr
22ca0 73 72 2c 20 26 72 65 73 29 20 3a 0a 20 20 20 20  sr, &res) :.    
22cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cc0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
22cd0 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
22ce0 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70  Crsr, &res);.  p
22cf0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
22d00 29 72 65 73 3b 0a 20 20 70 43 2d 3e 63 61 63 68  )res;.  pC->cach
22d10 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
22d20 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 72 65 73  STALE;.  if( res
22d30 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ==0 ){.    pc = 
22d40 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
22d50 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 20 70   if( pOp->p5 ) p
22d60 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e  ->aCounter[pOp->
22d70 70 35 2d 31 5d 2b 2b 3b 0a 23 69 66 64 65 66 20  p5-1]++;.#ifdef 
22d80 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
22d90 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
22da0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
22db0 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73   }.  pC->rowidIs
22dc0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 62 72 65  Valid = 0;.  bre
22dd0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
22de0 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
22df0 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
22e00 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64  Register P2 hold
22e10 73 20 61 20 53 51 4c 20 69 6e 64 65 78 20 6b 65  s a SQL index ke
22e20 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  y made using the
22e30 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  .** MakeRecord i
22e40 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68  nstructions.  Th
22e50 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73  is opcode writes
22e60 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74   that key.** int
22e70 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20  o the index P1. 
22e80 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
22e90 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a  try is nil..**.*
22ea0 2a 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74  * P3 is a flag t
22eb0 68 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68  hat provides a h
22ec0 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65  int to the b-tre
22ed0 65 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69  e layer that thi
22ee0 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c  s.** insert is l
22ef0 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
22f00 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ppend..**.** Thi
22f10 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
22f20 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64  ly works for ind
22f30 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  ices.  The equiv
22f40 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
22f50 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20  n.** for tables 
22f60 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f  is OP_Insert..*/
22f70 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65  .case OP_IdxInse
22f80 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  rt: {        /* 
22f90 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
22fa0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
22fb0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
22fc0 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20  t nKey;.  const 
22fd0 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61  char *zKey;..  a
22fe0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
22ff0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23000 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
23010 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23020 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
23030 43 21 3d 30 20 29 3b 0a 20 20 70 49 6e 32 20 3d  C!=0 );.  pIn2 =
23040 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
23050 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d  .  assert( pIn2-
23060 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
23070 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  b );.  pCrsr = p
23080 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
23090 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d  ( ALWAYS(pCrsr!=
230a0 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  0) ){.    assert
230b0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
230c0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70   );.    rc = Exp
230d0 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20  andBlob(pIn2);. 
230e0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
230f0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 6e 4b  E_OK ){.      nK
23100 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  ey = pIn2->n;.  
23110 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d      zKey = pIn2-
23120 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  >z;.      rc = s
23130 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
23140 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e  t(pCrsr, zKey, n
23150 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70  Key, "", 0, 0, p
23160 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20  Op->p3, .       
23170 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f     ((pOp->p5 & O
23180 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
23190 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
231a0 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20  esult : 0).     
231b0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
231c0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
231d0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20  veto==0 );.     
231e0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
231f0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
23200 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
23210 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
23220 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32   IdxDelete P1 P2
23230 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   P3 * *.**.** Th
23240 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
23250 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
23260 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
23270 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
23280 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
23290 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
232a0 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
232b0 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
232c0 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
232d0 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
232e0 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
232f0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
23300 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
23310 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
23320 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
23330 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
23340 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
23350 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
23360 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
23370 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b  p3<=p->nMem+1 );
23380 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
23390 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
233a0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
233b0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
233c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
233d0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
233e0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
233f0 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  r;.  if( ALWAYS(
23400 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
23410 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
23420 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
23430 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
23440 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 72 2e 66  pOp->p3;.    r.f
23450 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 72 2e  lags = 0;.    r.
23460 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
23470 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p2];.#ifdef SQ
23480 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
23490 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
234a0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
234b0 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
234c0 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
234d0 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
234e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
234f0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
23500 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
23510 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
23520 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
23530 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
23540 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
23550 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 29  reeDelete(pCrsr)
23560 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  ;.    }.    asse
23570 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
23580 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
23590 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
235a0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
235b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
235c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f  /* Opcode: IdxRo
235d0 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
235e0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
235f0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
23600 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
23610 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
23620 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  in the record at
23630 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74  .** the end of t
23640 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69  he index key poi
23650 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f  nted to by curso
23660 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65  r P1.  This inte
23670 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  ger should be.**
23680 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
23690 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f  e table entry to
236a0 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65   which this inde
236b0 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a  x entry points..
236c0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
236d0 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72  Rowid, MakeRecor
236e0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  d..*/.case OP_Id
236f0 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  xRowid: {       
23700 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
23710 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42  rerelease */.  B
23720 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
23730 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
23740 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a  ;.  i64 rowid;..
23750 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23760 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23770 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23780 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23790 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
237a0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
237b0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
237c0 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
237d0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66  = MEM_Null;.  if
237e0 28 20 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d  ( ALWAYS(pCrsr!=
237f0 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  0) ){.    rc = s
23800 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
23810 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20  Moveto(pC);.    
23820 69 66 28 20 4e 45 56 45 52 28 72 63 29 20 29 20  if( NEVER(rc) ) 
23830 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23840 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 61 73 73  o_error;.    ass
23850 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
23860 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
23870 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
23880 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20  Table==0 );.    
23890 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77  if( !pC->nullRow
238a0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
238b0 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
238c0 69 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72  id(db, pCrsr, &r
238d0 6f 77 69 64 29 3b 0a 20 20 20 20 20 20 69 66 28  owid);.      if(
238e0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
238f0 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  {.        goto a
23900 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23910 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
23920 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77   pOut->u.i = row
23930 69 64 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  id;.      pOut->
23940 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
23950 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
23960 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
23970 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33  : IdxGE P1 P2 P3
23980 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65   P4 P5.**.** The
23990 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
239a0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
239b0 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
239c0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
239d0 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
239e0 74 68 65 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70  the ROWID.  Comp
239f0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
23a00 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
23a10 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
23a20 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
23a30 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
23a40 69 6e 67 20 74 68 65 20 52 4f 57 49 44 20 6f 6e  ing the ROWID on
23a50 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
23a60 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
23a70 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
23a80 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
23a90 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
23aa0 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
23ab0 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
23ac0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
23ad0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
23ae0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
23af0 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
23b00 6f 20 74 68 65 6e 20 74 68 65 20 6b 65 79 20 76  o then the key v
23b10 61 6c 75 65 20 69 73 20 69 6e 63 72 65 61 73 65  alue is increase
23b20 64 20 62 79 20 61 6e 20 65 70 73 69 6c 6f 6e 20  d by an epsilon 
23b30 0a 2a 2a 20 70 72 69 6f 72 20 74 6f 20 74 68 65  .** prior to the
23b40 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68   comparison.  Th
23b50 69 73 20 6d 61 6b 65 20 74 68 65 20 6f 70 63 6f  is make the opco
23b60 64 65 20 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78  de work like Idx
23b70 47 54 20 65 78 63 65 70 74 0a 2a 2a 20 74 68 61  GT except.** tha
23b80 74 20 69 66 20 74 68 65 20 6b 65 79 20 66 72 6f  t if the key fro
23b90 6d 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  m register P3 is
23ba0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
23bb0 20 6b 65 79 20 69 6e 20 74 68 65 20 63 75 72 73   key in the curs
23bc0 6f 72 2c 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  or,.** the resul
23bd0 74 20 69 73 20 66 61 6c 73 65 20 77 68 65 72 65  t is false where
23be0 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 74  as it would be t
23bf0 72 75 65 20 77 69 74 68 20 49 64 78 47 54 2e 0a  rue with IdxGT..
23c00 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
23c10 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xLT P1 P2 P3 P4 
23c20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  P5.**.** The P4 
23c30 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
23c40 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
23c50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
23c60 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
23c70 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
23c80 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
23c90 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
23ca0 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
23cb0 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
23cc0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
23cd0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
23ce0 74 68 65 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  the ROWID on the
23cf0 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
23d00 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
23d10 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
23d20 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
23d30 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
23d40 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
23d50 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
23d60 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
23d70 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
23d80 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 74 68  5 is non-zero th
23d90 65 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  en the key value
23da0 20 69 73 20 69 6e 63 72 65 61 73 65 64 20 62 79   is increased by
23db0 20 61 6e 20 65 70 73 69 6c 6f 6e 20 70 72 69 6f   an epsilon prio
23dc0 72 20 0a 2a 2a 20 74 6f 20 74 68 65 20 63 6f 6d  r .** to the com
23dd0 70 61 72 69 73 6f 6e 2e 20 20 54 68 69 73 20 6d  parison.  This m
23de0 61 6b 65 73 20 74 68 65 20 6f 70 63 6f 64 65 20  akes the opcode 
23df0 77 6f 72 6b 20 6c 69 6b 65 20 49 64 78 4c 45 2e  work like IdxLE.
23e00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c  .*/.case OP_IdxL
23e10 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
23e20 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
23e30 64 78 47 45 3a 20 7b 20 20 20 20 20 20 20 20 2f  dxGE: {        /
23e40 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
23e50 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
23e60 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
23e70 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
23e80 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
23e90 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
23ea0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
23eb0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
23ec0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
23ed0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
23ee0 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
23ef0 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
23f00 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 20 29  C->pCursor!=0) )
23f10 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
23f20 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
23f30 3d 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ==0 );.    asser
23f40 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
23f50 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
23f60 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
23f70 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
23f80 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   );.    r.pKeyIn
23f90 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
23fa0 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
23fb0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
23fc0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
23fd0 35 20 29 7b 0a 20 20 20 20 20 20 72 2e 66 6c 61  5 ){.      r.fla
23fe0 67 73 20 3d 20 55 4e 50 41 43 4b 45 44 5f 49 4e  gs = UNPACKED_IN
23ff0 43 52 4b 45 59 20 7c 20 55 4e 50 41 43 4b 45 44  CRKEY | UNPACKED
24000 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b 0a 20  _IGNORE_ROWID;. 
24010 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
24020 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43 4b  r.flags = UNPACK
24030 45 44 5f 49 47 4e 4f 52 45 5f 52 4f 57 49 44 3b  ED_IGNORE_ROWID;
24040 0a 20 20 20 20 7d 0a 20 20 20 20 72 2e 61 4d 65  .    }.    r.aMe
24050 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
24060 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
24070 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e  E_DEBUG.    { in
24080 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
24090 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
240a0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
240b0 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
240c0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 63   }.#endif.    rc
240d0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
240e0 78 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c 20  xKeyCompare(pC, 
240f0 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69  &r, &res);.    i
24100 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
24110 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20  OP_IdxLT ){.    
24120 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20    res = -res;.  
24130 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
24140 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
24150 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 29 3b 0a  de==OP_IdxGE );.
24160 20 20 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 20        res++;.   
24170 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30   }.    if( res>0
24180 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
24190 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20 20  Op->p2 - 1 ;.   
241a0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
241b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
241c0 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a  stroy P1 P2 P3 *
241d0 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
241e0 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  an entire databa
241f0 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
24200 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
24210 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
24220 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76  e.** file is giv
24230 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  en by P1..**.** 
24240 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
24250 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20  destroyed is in 
24260 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
24270 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e  e file if P3==0.
24280 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68    If.** P3==1 th
24290 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  en the table to 
242a0 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  be clear is in t
242b0 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
242c0 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68  abase file.** th
242d0 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  at is used to st
242e0 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  ore tables creat
242f0 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
24300 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a  EMPORARY TABLE..
24310 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  **.** If AUTOVAC
24320 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74  UUM is enabled t
24330 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62  hen it is possib
24340 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20  le that another 
24350 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67  root page.** mig
24360 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f  ht be moved into
24370 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74   the newly delet
24380 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  ed root page in 
24390 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c  order to keep al
243a0 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20  l.** root pages 
243b0 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68  contiguous at th
243c0 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
243d0 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
243e0 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75  e former.** valu
243f0 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61  e of the root pa
24400 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20  ge that moved - 
24410 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65  its value before
24420 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72   the move occurr
24430 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65  ed -.** is store
24440 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
24450 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a  .  If no page .*
24460 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72  * movement was r
24470 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65  equired (because
24480 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
24490 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72   dropped was alr
244a0 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73  eady .** the las
244b0 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74  t one in the dat
244c0 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65  abase) then a ze
244d0 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
244e0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
244f0 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
24500 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61   disabled then a
24510 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20   zero is stored 
24520 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
24530 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
24540 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50  Clear.*/.case OP
24550 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20  _Destroy: {     
24560 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
24570 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76  se */.  int iMov
24580 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a  ed;.  int iCnt;.
24590 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20    Vdbe *pVdbe;. 
245a0 20 69 6e 74 20 69 44 62 3b 0a 23 69 66 6e 64 65   int iDb;.#ifnde
245b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
245c0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e  RTUALTABLE.  iCn
245d0 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64  t = 0;.  for(pVd
245e0 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56  be=db->pVdbe; pV
245f0 64 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64  dbe; pVdbe = pVd
24600 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20  be->pNext){.    
24610 69 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63  if( pVdbe->magic
24620 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e  ==VDBE_MAGIC_RUN
24630 20 26 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61   && pVdbe->inVta
24640 62 4d 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64  bMethod<2 && pVd
24650 62 65 2d 3e 70 63 3e 3d 30 20 29 7b 0a 20 20 20  be->pc>=0 ){.   
24660 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d     iCnt++;.    }
24670 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e  .  }.#else.  iCn
24680 74 20 3d 20 64 62 2d 3e 61 63 74 69 76 65 56 64  t = db->activeVd
24690 62 65 43 6e 74 3b 0a 23 65 6e 64 69 66 0a 20 20  beCnt;.#endif.  
246a0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
246b0 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43  M_Null;.  if( iC
246c0 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d  nt>1 ){.    rc =
246d0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
246e0 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
246f0 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20  on = OE_Abort;. 
24700 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20   }else{.    iDb 
24710 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61  = pOp->p3;.    a
24720 73 73 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29  ssert( iCnt==1 )
24730 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
24740 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
24750 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69 44 62  (yDbMask)1)<<iDb
24760 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  ))!=0 );.    rc 
24770 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72  = sqlite3BtreeDr
24780 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  opTable(db->aDb[
24790 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  iDb].pBt, pOp->p
247a0 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20  1, &iMoved);.   
247b0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
247c0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
247d0 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a  ->u.i = iMoved;.
247e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
247f0 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20  MIT_AUTOVACUUM. 
24800 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
24810 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d  E_OK && iMoved!=
24820 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
24830 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
24840 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c  db, iDb, iMoved,
24850 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20   pOp->p1);.     
24860 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72   /* All OP_Destr
24870 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63  oy operations oc
24880 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  cur on the same 
24890 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61  btree */.      a
248a0 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65  ssert( resetSche
248b0 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20  maOnFault==0 || 
248c0 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
248d0 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20  lt==iDb+1 );.   
248e0 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e     resetSchemaOn
248f0 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20  Fault = iDb+1;. 
24900 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
24910 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
24920 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20  pcode: Clear P1 
24930 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
24940 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
24950 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
24960 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
24970 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a  hose root page.*
24980 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  * in the databas
24990 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  e file is given 
249a0 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c  by P1.  But, unl
249b0 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20  ike Destroy, do 
249c0 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68  not.** remove th
249d0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
249e0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
249f0 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
24a00 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
24a10 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d  lear is in the m
24a20 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
24a30 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a  e if P2==0.  If.
24a40 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68  ** P2==1 then th
24a50 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
24a60 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
24a70 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
24a80 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
24a90 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
24aa0 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
24ab0 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
24ac0 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
24ad0 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
24ae0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
24af0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66  en the table ref
24b00 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65  erred to must be
24b10 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61   an.** intkey ta
24b20 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c  ble (an SQL tabl
24b30 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29  e, not an index)
24b40 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
24b50 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a  he row change .*
24b60 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  * count is incre
24b70 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
24b80 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
24b90 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
24ba0 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20  cleared. .** If 
24bb0 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
24bc0 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  an zero, then th
24bd0 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
24be0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
24bf0 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65  .** also increme
24c00 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
24c10 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
24c20 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
24c30 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  eared..**.** See
24c40 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
24c50 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
24c60 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65   {.  int nChange
24c70 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20  ;. .  nChange = 
24c80 30 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  0;.  assert( (p-
24c90 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28  >btreeMask & (((
24ca0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d  yDbMask)1)<<pOp-
24cb0 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72 63  >p2))!=0 );.  rc
24cc0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
24cd0 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20  learTable(.     
24ce0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32   db->aDb[pOp->p2
24cf0 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
24d00 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61  (pOp->p3 ? &nCha
24d10 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20  nge : 0).  );.  
24d20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
24d30 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d     p->nChange +=
24d40 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66   nChange;.    if
24d50 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20  ( pOp->p3>0 ){. 
24d60 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
24d70 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
24d80 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
24d90 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
24da0 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
24db0 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d  p3]);.      aMem
24dc0 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d  [pOp->p3].u.i +=
24dd0 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a   nChange;.    }.
24de0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
24df0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
24e00 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a  eTable P1 P2 * *
24e10 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74   *.**.** Allocat
24e20 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  e a new table in
24e30 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
24e40 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
24e50 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
24e60 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
24e70 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
24e80 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
24e90 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
24ea0 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
24eb0 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
24ec0 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
24ed0 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
24ee0 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65  ter P2.**.** The
24ef0 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
24f00 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20  een a table and 
24f10 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73  an index is this
24f20 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a  :  A table must.
24f30 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65  ** have a 4-byte
24f40 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64   integer key and
24f50 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72   can have arbitr
24f60 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e  ary data.  An in
24f70 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72  dex.** has an ar
24f80 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20  bitrary key but 
24f90 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53  no data..**.** S
24fa0 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49  ee also: CreateI
24fb0 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ndex.*/./* Opcod
24fc0 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50  e: CreateIndex P
24fd0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
24fe0 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
24ff0 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69  index in the mai
25000 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
25010 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
25020 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
25030 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
25040 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
25050 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
25060 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
25070 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
25080 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
25090 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
250a0 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  ** register P2..
250b0 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65  **.** See docume
250c0 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72  ntation on OP_Cr
250d0 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64  eateTable for ad
250e0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
250f0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
25100 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20  _CreateIndex:   
25110 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
25120 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63  -prerelease */.c
25130 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62  ase OP_CreateTab
25140 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  le: {          /
25150 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
25160 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b  e */.  int pgno;
25170 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20  .  int flags;.  
25180 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f  Db *pDb;..  pgno
25190 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
251a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
251b0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
251c0 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62  .  assert( (p->b
251d0 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44  treeMask & (((yD
251e0 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70  bMask)1)<<pOp->p
251f0 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20  1))!=0 );.  pDb 
25200 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
25210 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
25220 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
25230 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
25240 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20  =OP_CreateTable 
25250 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20  ){.    /* flags 
25260 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20  = BTREE_INTKEY; 
25270 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  */.    flags = B
25280 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d  TREE_INTKEY;.  }
25290 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20  else{.    flags 
252a0 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b  = BTREE_BLOBKEY;
252b0 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
252c0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
252d0 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70  ble(pDb->pBt, &p
252e0 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70  gno, flags);.  p
252f0 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b  Out->u.i = pgno;
25300 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
25310 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68  Opcode: ParseSch
25320 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ema P1 * * P4 *.
25330 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70  **.** Read and p
25340 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73  arse all entries
25350 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
25360 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66  _MASTER table of
25370 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20   database P1.** 
25380 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57  that match the W
25390 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20  HERE clause P4. 
253a0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
253b0 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70  de invokes the p
253c0 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20  arser to create 
253d0 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  a new virtual ma
253e0 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72  chine,.** then r
253f0 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74  uns the new virt
25400 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74  ual machine.  It
25410 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e   is thus a re-en
25420 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f  trant opcode..*/
25430 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63  .case OP_ParseSc
25440 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44  hema: {.  int iD
25450 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b;.  const char 
25460 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72  *zMaster;.  char
25470 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61   *zSql;.  InitDa
25480 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20  ta initData;..  
25490 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20  /* Any prepared 
254a0 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
254b0 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f  nvokes this opco
254c0 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74  de will hold mut
254d0 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65  exes.  ** on eve
254e0 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20  ry btree.  This 
254f0 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74  is a prerequisit
25500 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a  e for invoking .
25510 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74    ** sqlite3Init
25520 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f  Callback()..  */
25530 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25540 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30  EBUG.  for(iDb=0
25550 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69  ; iDb<db->nDb; i
25560 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  Db++){.    asser
25570 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c  t( iDb==1 || sql
25580 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75  ite3BtreeHoldsMu
25590 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  tex(db->aDb[iDb]
255a0 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e  .pBt) );.  }.#en
255b0 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70  dif..  iDb = pOp
255c0 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
255d0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
255e0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
255f0 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  t( DbHasProperty
25600 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68  (db, iDb, DB_Sch
25610 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20  emaLoaded) );.  
25620 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20  /* Used to be a 
25630 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b  conditional */ {
25640 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53  .    zMaster = S
25650 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29  CHEMA_TABLE(iDb)
25660 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64  ;.    initData.d
25670 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74  b = db;.    init
25680 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e  Data.iDb = pOp->
25690 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  p1;.    initData
256a0 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e  .pzErrMsg = &p->
256b0 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71  zErrMsg;.    zSq
256c0 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  l = sqlite3MPrin
256d0 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53  tf(db,.       "S
256e0 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74  ELECT name, root
256f0 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27  page, sql FROM '
25700 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20  %q'.%s WHERE %s 
25710 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c  ORDER BY rowid",
25720 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  .       db->aDb[
25730 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73  iDb].zName, zMas
25740 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ter, pOp->p4.z);
25750 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30  .    if( zSql==0
25760 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
25770 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
25780 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
25790 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
257a0 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  usy==0 );.      
257b0 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
257c0 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74  1;.      initDat
257d0 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
257e0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
257f0 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
25800 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  d );.      rc = 
25810 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
25820 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e   zSql, sqlite3In
25830 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69  itCallback, &ini
25840 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  tData, 0);.     
25850 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
25860 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61  OK ) rc = initDa
25870 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c  ta.rc;.      sql
25880 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
25890 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Sql);.      db->
258a0 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20  init.busy = 0;. 
258b0 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
258c0 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
258d0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
258e0 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  em;.  }.  break;
258f0 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e    .}..#if !defin
25900 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
25910 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64  NALYZE)./* Opcod
25920 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20  e: LoadAnalysis 
25930 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
25940 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65   Read the sqlite
25950 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72  _stat1 table for
25960 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
25970 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   load the conten
25980 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  t.** of that tab
25990 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65  le into the inte
259a0 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20  rnal index hash 
259b0 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c  table.  This wil
259c0 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61  l cause.** the a
259d0 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73  nalysis to be us
259e0 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  ed when preparin
259f0 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  g all subsequent
25a00 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73   queries..*/.cas
25a10 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69  e OP_LoadAnalysi
25a20 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  s: {.  assert( p
25a30 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
25a40 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
25a50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e    rc = sqlite3An
25a60 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70  alysisLoad(db, p
25a70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b  Op->p1);.  break
25a80 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;  .}.#endif /* 
25a90 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
25aa0 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f  OMIT_ANALYZE) */
25ab0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
25ac0 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34  pTable P1 * * P4
25ad0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
25ae0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
25af0 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
25b00 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
25b10 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61  scribe.** the ta
25b20 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ble named P4 in 
25b30 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
25b40 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
25b50 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73  er a table.** is
25b60 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64 65   dropped in orde
25b70 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
25b80 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
25b90 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
25ba0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
25bb0 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
25bc0 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
25bd0 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a  OP_DropTable: {.
25be0 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
25bf0 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62  ndDeleteTable(db
25c00 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
25c10 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
25c20 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
25c30 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50  opIndex P1 * * P
25c40 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
25c50 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
25c60 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
25c70 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
25c80 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69  escribe.** the i
25c90 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e  ndex named P4 in
25ca0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
25cb0 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
25cc0 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  ter an index.** 
25cd0 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72  is dropped in or
25ce0 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
25cf0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
25d00 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
25d10 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
25d20 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
25d30 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
25d40 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20  e OP_DropIndex: 
25d50 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
25d60 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
25d70 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
25d80 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
25d90 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
25da0 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a  DropTrigger P1 *
25db0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
25dc0 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
25dd0 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
25de0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
25df0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
25e00 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64  he trigger named
25e10 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
25e20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
25e30 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67  led after a trig
25e40 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ger.** is droppe
25e50 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  d in order to ke
25e60 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
25e70 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
25e80 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
25e90 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
25ea0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
25eb0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
25ec0 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c  Trigger: {.  sql
25ed0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
25ee0 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70  eteTrigger(db, p
25ef0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
25f00 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
25f10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25f20 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
25f30 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  HECK./* Opcode: 
25f40 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50  IntegrityCk P1 P
25f50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
25f60 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f  Do an analysis o
25f70 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  f the currently 
25f80 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20  open database.  
25f90 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69  Store in.** regi
25fa0 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74  ster P1 the text
25fb0 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   of an error mes
25fc0 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20  sage describing 
25fd0 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a  any problems..**
25fe0 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20   If no problems 
25ff0 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65  are found, store
26000 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73   a NULL in regis
26010 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P1..**.** Th
26020 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f  e register P3 co
26030 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d  ntains the maxim
26040 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c  um number of all
26050 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20  owed errors..** 
26060 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20  At most reg(P3) 
26070 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72  errors will be r
26080 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f  eported..** In o
26090 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
260a0 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61  analysis stops a
260b0 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31  s soon as reg(P1
260c0 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a  ) errors are .**
260d0 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20   seen.  Reg(P1) 
260e0 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
260f0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72  the number of er
26100 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a  rors remaining..
26110 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70  **.** The root p
26120 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  age numbers of a
26130 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  ll tables in the
26140 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e   database are in
26150 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20  teger.** stored 
26160 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28  in reg(P1), reg(
26170 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29  P1+1), reg(P1+2)
26180 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72  , ....  There ar
26190 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74  e P2 tables.** t
261a0 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  otal..**.** If P
261b0 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  5 is not zero, t
261c0 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65  he check is done
261d0 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   on the auxiliar
261e0 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  y database.** fi
261f0 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e  le, not the main
26200 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
26210 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
26220 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  e is used to imp
26230 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67  lement the integ
26240 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d  rity_check pragm
26250 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  a..*/.case OP_In
26260 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69  tegrityCk: {.  i
26270 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f  nt nRoot;      /
26280 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
26290 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e  es to check.  (N
262a0 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61  umber of root pa
262b0 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a  ges.) */.  int *
262c0 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72  aRoot;     /* Ar
262d0 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20  ray of rootpage 
262e0 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c  numbers for tabl
262f0 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64  es to be checked
26300 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
26310 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
26320 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  unter */.  int n
26330 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Err;       /* Nu
26340 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
26350 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61  eported */.  cha
26360 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20  r *z;        /* 
26370 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f  Text of the erro
26380 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65  r report */.  Me
26390 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a  m *pnErr;     /*
263a0 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e   Register keepin
263b0 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72  g track of error
263c0 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 20  s remaining */. 
263d0 20 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d   .  nRoot = pOp-
263e0 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
263f0 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f  Root>0 );.  aRoo
26400 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  t = sqlite3DbMal
26410 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
26420 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29  f(int)*(nRoot+1)
26430 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d   );.  if( aRoot=
26440 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
26450 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
26460 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
26470 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70  <=p->nMem );.  p
26480 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  nErr = &aMem[pOp
26490 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
264a0 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
264b0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
264c0 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
264d0 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
264e0 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
264f0 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
26500 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
26510 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b  or(j=0; j<nRoot;
26520 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74   j++){.    aRoot
26530 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74  [j] = (int)sqlit
26540 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26  e3VdbeIntValue(&
26550 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20  pIn1[j]);.  }.  
26560 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20  aRoot[j] = 0;.  
26570 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
26580 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
26590 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
265a0 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
265b0 31 29 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30  1)<<pOp->p5))!=0
265c0 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65   );.  z = sqlite
265d0 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43  3BtreeIntegrityC
265e0 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70  heck(db->aDb[pOp
265f0 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74  ->p5].pBt, aRoot
26600 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20  , nRoot,.       
26610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26620 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70            (int)p
26630 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72  nErr->u.i, &nErr
26640 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
26650 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20  ee(db, aRoot);. 
26660 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e   pnErr->u.i -= n
26670 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Err;.  sqlite3Vd
26680 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
26690 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d  1);.  if( nErr==
266a0 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
266b0 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65   z==0 );.  }else
266c0 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20   if( z==0 ){.   
266d0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
266e0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
266f0 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
26700 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c  pIn1, z, -1, SQL
26710 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65  ITE_UTF8, sqlite
26720 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55  3_free);.  }.  U
26730 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
26740 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ZE(pIn1);.  sqli
26750 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
26760 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f  oding(pIn1, enco
26770 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
26780 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
26790 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
267a0 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f  Y_CHECK */../* O
267b0 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64  pcode: RowSetAdd
267c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
267d0 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
267e0 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
267f0 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
26800 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
26810 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
26820 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
26830 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
26840 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
26850 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
26860 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
26870 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
26880 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49  in1, in2 */.  pI
26890 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
268a0 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
268b0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
268c0 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
268d0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
268e0 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  =0 );.  if( (pIn
268f0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
26900 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
26910 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
26920 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
26930 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
26940 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
26950 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
26960 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  mem;.  }.  sqlit
26970 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
26980 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
26990 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
269a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
269b0 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
269c0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
269d0 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61   Extract the sma
269e0 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d  llest value from
269f0 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
26a00 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76  1 and put that v
26a10 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  alue into.** reg
26a20 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69  ister P3.  Or, i
26a30 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  f boolean index 
26a40 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
26a50 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a  empty, leave P3.
26a60 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  ** unchanged and
26a70 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
26a80 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
26a90 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20   OP_RowSetRead: 
26aa0 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
26ab0 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in1, out3 */.  
26ac0 69 36 34 20 76 61 6c 3b 0a 20 20 43 48 45 43 4b  i64 val;.  CHECK
26ad0 5f 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a  _FOR_INTERRUPT;.
26ae0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
26af0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
26b00 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
26b10 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20  M_RowSet)==0 .  
26b20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65   || sqlite3RowSe
26b30 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tNext(pIn1->u.pR
26b40 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a  owSet, &val)==0.
26b50 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20    ){.    /* The 
26b60 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73  boolean index is
26b70 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71   empty */.    sq
26b80 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
26b90 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 70  ull(pIn1);.    p
26ba0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
26bb0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
26bc0 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c   A value was pul
26bd0 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64  led from the ind
26be0 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ex */.    sqlite
26bf0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
26c00 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c  (&aMem[pOp->p3],
26c10 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65   val);.  }.  bre
26c20 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
26c30 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20  : RowSetTest P1 
26c40 50 32 20 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52  P2 P3 P4.**.** R
26c50 65 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73  egister P3 is as
26c60 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20  sumed to hold a 
26c70 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
26c80 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65  alue. If registe
26c90 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  r P1.** contains
26ca0 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74   a RowSet object
26cb0 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74   and that RowSet
26cc0 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73   object contains
26cd0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65  .** the value he
26ce0 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74  ld in P3, jump t
26cf0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f  o register P2. O
26d00 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74  therwise, insert
26d10 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
26d20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52  in P3 into the R
26d30 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e  owSet and contin
26d40 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20  ue on to the.** 
26d50 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  next opcode..**.
26d60 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62  ** The RowSet ob
26d70 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65  ject is optimize
26d80 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77  d for the case w
26d90 68 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20  here successive 
26da0 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  sets.** of integ
26db0 65 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20  ers, where each 
26dc0 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  set contains no 
26dd0 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68  duplicates. Each
26de0 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65   set.** of value
26df0 73 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  s is identified 
26e00 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76  by a unique P4 v
26e10 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20  alue. The first 
26e20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65  set.** must have
26e30 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61   P4==0, the fina
26e40 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34  l set P4=-1.  P4
26e50 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20   must be either 
26e60 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67  -1 or.** non-neg
26e70 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d  ative.  For non-
26e80 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
26e90 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c  of P4 only the l
26ea0 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61  ower 4.** bits a
26eb0 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a  re significant..
26ec0 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77  **.** This allow
26ed0 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a  s optimizations:
26ee0 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20   (a) when P4==0 
26ef0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
26f00 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20   to test.** the 
26f10 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f  rowset object fo
26f20 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67  r P3, as it is g
26f30 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f  uaranteed not to
26f40 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20   contain it,.** 
26f50 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20  (b) when P4==-1 
26f60 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
26f70 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76   to insert the v
26f80 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c  alue, as it will
26f90 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73  .** never be tes
26fa0 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29  ted for, and (c)
26fb0 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68   when a value th
26fc0 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65  at is part of se
26fd0 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74  t X is.** insert
26fe0 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ed, there is no 
26ff0 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74  need to search t
27000 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d  o see if the sam
27010 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70  e value was.** p
27020 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74  reviously insert
27030 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65  ed as part of se
27040 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20  t X (only if it 
27050 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a  was previously.*
27060 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  * inserted as pa
27070 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72  rt of some other
27080 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f   set)..*/.case O
27090 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20  P_RowSetTest: { 
270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270b0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
270c0 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69  , in3 */.  int i
270d0 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74  Set;.  int exist
270e0 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  s;..  pIn1 = &aM
270f0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
27100 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
27110 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70  >p3];.  iSet = p
27120 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65  Op->p4.i;.  asse
27130 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26  rt( pIn3->flags&
27140 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a  MEM_Int );..  /*
27150 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79   If there is any
27160 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e  thing other than
27170 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74   a rowset object
27180 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
27190 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20  P1,.  ** delete 
271a0 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69  it now and initi
271b0 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e  alize P1 with an
271c0 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20   empty rowset.  
271d0 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
271e0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
271f0 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
27200 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
27210 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
27220 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
27230 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
27240 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
27250 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
27260 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
27270 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65  _INT32 );.  asse
27280 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20  rt( iSet==-1 || 
27290 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28  iSet>=0 );.  if(
272a0 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69   iSet ){.    exi
272b0 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77  sts = sqlite3Row
272c0 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e  SetTest(pIn1->u.
272d0 70 52 6f 77 53 65 74 2c 20 0a 20 20 20 20 20 20  pRowSet, .      
272e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272f0 20 20 20 20 20 20 20 20 20 28 75 38 29 28 69 53           (u8)(iS
27300 65 74 3e 3d 30 20 3f 20 69 53 65 74 20 26 20 30  et>=0 ? iSet & 0
27310 78 66 20 3a 20 30 78 66 66 29 2c 0a 20 20 20 20  xf : 0xff),.    
27320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27330 20 20 20 20 20 20 20 20 20 20 20 70 49 6e 33 2d             pIn3-
27340 3e 75 2e 69 29 3b 0a 20 20 20 20 69 66 28 20 65  >u.i);.    if( e
27350 78 69 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70  xists ){.      p
27360 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
27370 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
27380 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53    }.  }.  if( iS
27390 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  et>=0 ){.    sql
273a0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
273b0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
273c0 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
273d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  }.  break;.}...#
273e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
273f0 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f  IT_TRIGGER../* O
27400 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50  pcode: Program P
27410 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
27420 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74  ** Execute the t
27430 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70  rigger program p
27440 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70  assed as P4 (typ
27450 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29  e P4_SUBPROGRAM)
27460 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74  . .**.** P1 cont
27470 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
27480 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   of the memory c
27490 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ell that contain
274a0 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f  s the first memo
274b0 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61  ry .** cell in a
274c0 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65  n array of value
274d0 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65  s used as argume
274e0 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70  nts to the sub-p
274f0 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63  rogram. P2 .** c
27500 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
27510 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
27520 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  f the sub-progra
27530 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f  m throws an IGNO
27540 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e  RE .** exception
27550 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45   using the RAISE
27560 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67  () function. Reg
27570 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
27580 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a  s the address .*
27590 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65  * of a memory ce
275a0 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20  ll in this (the 
275b0 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20  parent) VM that 
275c0 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63  is used to alloc
275d0 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f  ate the .** memo
275e0 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ry required by t
275f0 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72  he sub-vdbe at r
27600 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34  untime..**.** P4
27610 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
27620 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69   the VM containi
27630 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ng the trigger p
27640 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20  rogram..*/.case 
27650 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20  OP_Program: {   
27660 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
27670 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
27680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
27690 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65  ber of memory re
276a0 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d  gisters for sub-
276b0 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74  program */.  int
276c0 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
276d0 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
276e0 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72   runtime space r
276f0 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d  equired for sub-
27700 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d  program */.  Mem
27710 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20   *pRt;          
27720 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
27730 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e   to allocate run
27740 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  time space */.  
27750 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
27760 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
27770 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75  to iterate throu
27780 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  gh memory cells 
27790 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20  */.  Mem *pEnd; 
277a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
277b0 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  Last memory cell
277c0 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f   in new array */
277d0 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
277e0 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65  rame;      /* Ne
277f0 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20  w vdbe frame to 
27800 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20  execute in */.  
27810 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
27820 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70  gram;   /* Sub-p
27830 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
27840 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20  e */.  void *t; 
27850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
27860 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79  * Token identify
27870 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a  ing trigger */..
27880 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70    pProgram = pOp
27890 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20  ->p4.pProgram;. 
278a0 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70   pRt = &aMem[pOp
278b0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
278c0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 74 29   memIsValid(pRt)
278d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50   );.  assert( pP
278e0 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b  rogram->nOp>0 );
278f0 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  .  .  /* If the 
27900 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  p5 flag is clear
27910 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
27920 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
27930 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a  riggers is .  **
27940 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61   disabled for ba
27950 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
27960 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74  ility (p5 is set
27970 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f   if this sub-pro
27980 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61  gram.  ** is rea
27990 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e  lly a trigger, n
279a0 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  ot a foreign key
279b0 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65   action, and the
279c0 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61   flag set.  ** a
279d0 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68  nd cleared by th
279e0 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73  e "PRAGMA recurs
279f0 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f  ive_triggers" co
27a00 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e  mmand is clear).
27a10 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69  .  ** .  ** It i
27a20 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  s recursive invo
27a30 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
27a40 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c  rs, at the SQL l
27a50 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20  evel, that is . 
27a60 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e   ** disabled. In
27a70 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69   some cases a si
27a80 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79  ngle trigger may
27a90 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74   generate more t
27aa0 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75  han one .  ** Su
27ab0 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65  bProgram (if the
27ac0 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20   trigger may be 
27ad0 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f  executed with mo
27ae0 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66  re than one diff
27af0 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43  erent .  ** ON C
27b00 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
27b10 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73  m). SubProgram s
27b20 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69  tructures associ
27b30 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a  ated with a.  **
27b40 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
27b50 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d  all have the sam
27b60 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
27b70 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e  SubProgram.token
27b80 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e   .  ** variable.
27b90 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
27ba0 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50  p5 ){.    t = pP
27bb0 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20  rogram->token;. 
27bc0 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
27bd0 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20  >pFrame; pFrame 
27be0 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e  && pFrame->token
27bf0 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  !=t; pFrame=pFra
27c00 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
27c10 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62    if( pFrame ) b
27c20 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
27c30 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e   p->nFrame>=db->
27c40 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
27c50 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54  MIT_TRIGGER_DEPT
27c60 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  H] ){.    rc = S
27c70 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
27c80 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
27c90 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
27ca0 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76  b, "too many lev
27cb0 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72  els of trigger r
27cc0 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20  ecursion");.    
27cd0 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
27ce0 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73   Register pRt is
27cf0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
27d00 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
27d10 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73  ed to save the s
27d20 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65  tate.  ** of the
27d30 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d   current program
27d40 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79  , and the memory
27d50 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e   required at run
27d60 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a  time to execute.
27d70 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72    ** the trigger
27d80 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69   program. If thi
27d90 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65  s trigger has be
27da0 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c  en fired before,
27db0 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20   then pRt .  ** 
27dc0 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  is already alloc
27dd0 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ated. Otherwise,
27de0 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74   it must be init
27df0 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69  ialized.  */.  i
27e00 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d  f( (pRt->flags&M
27e10 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a  EM_Frame)==0 ){.
27e20 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61      /* SubProgra
27e30 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f  m.nMem is set to
27e40 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
27e50 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
27e60 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   by the .    ** 
27e70 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69  program stored i
27e80 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70  n SubProgram.aOp
27e90 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65  . As well as the
27ea0 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20  se, one memory. 
27eb0 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65     ** cell is re
27ec0 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20  quired for each 
27ed0 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
27ee0 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20  he program. Set 
27ef0 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72  local.    ** var
27f00 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20  iable nMem (and 
27f10 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65  later, VdbeFrame
27f20 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74  .nChildMem) to t
27f30 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  his value..    *
27f40 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72  /.    nMem = pPr
27f50 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50  ogram->nMem + pP
27f60 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
27f70 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38    nByte = ROUND8
27f80 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d  (sizeof(VdbeFram
27f90 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
27fa0 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f    + nMem * sizeo
27fb0 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20  f(Mem).         
27fc0 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
27fd0 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56  >nCsr * sizeof(V
27fe0 64 62 65 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20  dbeCursor *);.  
27ff0 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74    pFrame = sqlit
28000 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64  e3DbMallocZero(d
28010 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69  b, nByte);.    i
28020 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20  f( !pFrame ){.  
28030 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
28040 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
28050 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
28060 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e  (pRt);.    pRt->
28070 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d  flags = MEM_Fram
28080 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46  e;.    pRt->u.pF
28090 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a  rame = pFrame;..
280a0 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20      pFrame->v = 
280b0 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
280c0 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b  ChildMem = nMem;
280d0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
280e0 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61  ildCsr = pProgra
280f0 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72  m->nCsr;.    pFr
28100 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20  ame->pc = pc;.  
28110 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d    pFrame->aMem =
28120 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46   p->aMem;.    pF
28130 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e  rame->nMem = p->
28140 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
28150 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43  ->apCsr = p->apC
28160 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  sr;.    pFrame->
28170 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75  nCursor = p->nCu
28180 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  rsor;.    pFrame
28190 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a  ->aOp = p->aOp;.
281a0 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20      pFrame->nOp 
281b0 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46  = p->nOp;.    pF
281c0 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50  rame->token = pP
281d0 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a  rogram->token;..
281e0 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65      pEnd = &Vdbe
281f0 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
28200 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  [pFrame->nChildM
28210 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65  em];.    for(pMe
28220 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  m=VdbeFrameMem(p
28230 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45  Frame); pMem!=pE
28240 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  nd; pMem++){.   
28250 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d     pMem->flags =
28260 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20   MEM_Null;.     
28270 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a   pMem->db = db;.
28280 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
28290 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d     pFrame = pRt-
282a0 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61  >u.pFrame;.    a
282b0 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
282c0 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e  >nMem+pProgram->
282d0 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
282e0 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61  hildMem );.    a
282f0 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
28300 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
28310 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20  ChildCsr );.    
28320 61 73 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61  assert( pc==pFra
28330 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20  me->pc );.  }.. 
28340 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20   p->nFrame++;.  
28350 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20  pFrame->pParent 
28360 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70  = p->pFrame;.  p
28370 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64  Frame->lastRowid
28380 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
28390 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61  ;.  pFrame->nCha
283a0 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65  nge = p->nChange
283b0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
283c0 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20   0;.  p->pFrame 
283d0 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61  = pFrame;.  p->a
283e0 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64  Mem = aMem = &Vd
283f0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
28400 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65  e)[-1];.  p->nMe
28410 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69  m = pFrame->nChi
28420 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72  ldMem;.  p->nCur
28430 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d  sor = (u16)pFram
28440 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20  e->nChildCsr;.  
28450 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65  p->apCsr = (Vdbe
28460 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b  Cursor **)&aMem[
28470 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d  p->nMem+1];.  p-
28480 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72  >aOp = aOp = pPr
28490 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d  ogram->aOp;.  p-
284a0 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d  >nOp = pProgram-
284b0 3e 6e 4f 70 3b 0a 20 20 70 63 20 3d 20 2d 31 3b  >nOp;.  pc = -1;
284c0 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
284d0 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50   Opcode: Param P
284e0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
284f0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
28500 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e  only ever presen
28510 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d  t in sub-program
28520 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65  s called via the
28530 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20   .** OP_Program 
28540 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70  instruction. Cop
28550 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e  y a value curren
28560 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  tly stored in a 
28570 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20  memory .** cell 
28580 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28  of the calling (
28590 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f  parent) frame to
285a0 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20   cell P2 in the 
285b0 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a  current frames .
285c0 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65  ** address space
285d0 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
285e0 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  y trigger progra
285f0 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ms to access the
28600 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f   new.* .** and o
28610 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a  ld.* values..**.
28620 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f  ** The address o
28630 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68  f the cell in th
28640 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69  e parent frame i
28650 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
28660 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61  adding.** the va
28670 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72  lue of the P1 ar
28680 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61  gument to the va
28690 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72  lue of the P1 ar
286a0 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a  gument to the.**
286b0 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67   calling OP_Prog
286c0 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
286d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61  .*/.case OP_Para
286e0 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  m: {           /
286f0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
28700 65 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  e */.  VdbeFrame
28710 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20   *pFrame;.  Mem 
28720 2a 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d  *pIn;.  pFrame =
28730 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49   p->pFrame;.  pI
28740 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  n = &pFrame->aMe
28750 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61  m[pOp->p1 + pFra
28760 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e  me->aOp[pFrame->
28770 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71  pc].p1];   .  sq
28780 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
28790 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
287a0 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  n, MEM_Ephem);. 
287b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69   break;.}..#endi
287c0 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
287d0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
287e0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
287f0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
28800 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  _KEY./* Opcode: 
28810 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20  FkCounter P1 P2 
28820 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72  * * *.**.** Incr
28830 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61  ement a "constra
28840 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20  int counter" by 
28850 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65  P2 (P2 may be ne
28860 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69  gative or positi
28870 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73  ve)..** If P1 is
28880 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64   non-zero, the d
28890 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69  atabase constrai
288a0 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
288b0 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64  cremented .** (d
288c0 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20  eferred foreign 
288d0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
288e0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
288f0 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  P1 is zero, the 
28900 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  .** statement co
28910 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65  unter is increme
28920 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20  nted (immediate 
28930 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
28940 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73  traints)..*/.cas
28950 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20  e OP_FkCounter: 
28960 7b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  {.  if( pOp->p1 
28970 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65  ){.    db->nDefe
28980 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  rredCons += pOp-
28990 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >p2;.  }else{.  
289a0 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69    p->nFkConstrai
289b0 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  nt += pOp->p2;. 
289c0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
289d0 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65  * Opcode: FkIfZe
289e0 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ro P1 P2 * * *.*
289f0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
28a00 20 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65   tests if a fore
28a10 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
28a20 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75  nt-counter is cu
28a30 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a  rrently zero..**
28a40 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20   If so, jump to 
28a50 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
28a60 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
28a70 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
28a80 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74  ext .** instruct
28a90 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ion..**.** If P1
28aa0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
28ab0 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  en the jump is t
28ac0 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61  aken if the data
28ad0 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d  base constraint-
28ae0 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65  counter.** is ze
28af0 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74  ro (the one that
28b00 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64   counts deferred
28b10 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
28b20 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69  ations). If P1 i
28b30 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a  s.** zero, the j
28b40 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
28b50 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  the statement co
28b60 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
28b70 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d   is zero.** (imm
28b80 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
28b90 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ey constraint vi
28ba0 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61  olations)..*/.ca
28bb0 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20  se OP_FkIfZero: 
28bc0 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  {         /* jum
28bd0 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e  p */.  if( pOp->
28be0 70 31 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  p1 ){.    if( db
28bf0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
28c00 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  =0 ) pc = pOp->p
28c10 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  2-1;.  }else{.  
28c20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73    if( p->nFkCons
28c30 74 72 61 69 6e 74 3d 3d 30 20 29 20 70 63 20 3d  traint==0 ) pc =
28c40 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a   pOp->p2-1;.  }.
28c50 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
28c60 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
28c70 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
28c80 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  _KEY */..#ifndef
28c90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
28ca0 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70  OINCREMENT./* Op
28cb0 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20  code: MemMax P1 
28cc0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
28cd0 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  1 is a register 
28ce0 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
28cf0 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68  e of this VM (th
28d00 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a  e root frame is.
28d10 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  ** different fro
28d20 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  m the current fr
28d30 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74  ame if this inst
28d40 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67  ruction is being
28d50 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74   executed.** wit
28d60 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61  hin a sub-progra
28d70 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75  m). Set the valu
28d80 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
28d90 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   to the maximum 
28da0 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65  of .** its curre
28db0 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  nt value and the
28dc0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
28dd0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
28de0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  s instruction th
28df0 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
28e00 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
28e10 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c   is not initiall
28e20 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e  y.** an integer.
28e30 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d  .*/.case OP_MemM
28e40 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ax: {        /* 
28e50 69 6e 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  in2 */.  Mem *pI
28e60 6e 31 3b 0a 20 20 56 64 62 65 46 72 61 6d 65 20  n1;.  VdbeFrame 
28e70 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70  *pFrame;.  if( p
28e80 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
28e90 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
28ea0 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
28eb0 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
28ec0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
28ed0 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61      pIn1 = &pFra
28ee0 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
28ef0 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
28f00 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
28f10 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73  ->p1];.  }.  ass
28f20 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
28f30 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74  pIn1) );.  sqlit
28f40 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
28f50 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
28f60 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
28f70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
28f80 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
28f90 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In2);.  if( pIn1
28fa0 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29  ->u.i<pIn2->u.i)
28fb0 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
28fc0 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d  = pIn2->u.i;.  }
28fd0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
28fe0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
28ff0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  T_AUTOINCREMENT 
29000 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  */../* Opcode: I
29010 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a  fPos P1 P2 * * *
29020 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  .**.** If the va
29030 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
29040 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
29050 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  er, jump to P2..
29060 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
29070 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
29080 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
29090 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
290a0 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
290b0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
290c0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
290d0 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
290e0 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
290f0 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20  se OP_IfPos: {  
29100 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
29110 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
29120 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
29130 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
29140 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
29150 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
29160 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
29170 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
29180 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
29190 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20  pcode: IfNeg P1 
291a0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
291b0 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
291c0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65  egister P1 is le
291d0 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75  ss than zero, ju
291e0 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a  mp to P2. .**.**
291f0 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74   It is illegal t
29200 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72  o use this instr
29210 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69  uction on a regi
29220 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a  ster that does.*
29230 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  * not contain an
29240 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73   integer.  An as
29250 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69  sertion fault wi
29260 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75  ll result if you
29270 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   try..*/.case OP
29280 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20  _IfNeg: {       
29290 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
292a0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
292b0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
292c0 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
292d0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28  MEM_Int );.  if(
292e0 20 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a   pIn1->u.i<0 ){.
292f0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
29300 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
29310 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
29320 3a 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50  : IfZero P1 P2 P
29330 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3 * *.**.** The 
29340 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  register P1 must
29350 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
29360 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61  ger.  Add litera
29370 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76  l P3 to the.** v
29380 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
29390 20 50 31 2e 20 20 49 66 20 74 68 65 20 72 65 73   P1.  If the res
293a0 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20 30  ult is exactly 0
293b0 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  , jump to P2. .*
293c0 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
293d0 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69  al to use this i
293e0 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20  nstruction on a 
293f0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f  register that do
29400 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69  es.** not contai
29410 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41  n an integer.  A
29420 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c  n assertion faul
29430 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66  t will result if
29440 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73   you try..*/.cas
29450 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20  e OP_IfZero: {  
29460 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
29470 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
29480 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
29490 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
294a0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
294b0 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
294c0 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 70 49  Op->p3;.  if( pI
294d0 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20  n1->u.i==0 ){.  
294e0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
294f0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
29500 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29510 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
29520 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
29530 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
29540 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
29550 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
29560 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
29570 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
29580 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
29590 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
295a0 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
295b0 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
295c0 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67 69 73  tion.  Use regis
295d0 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74 68 65  ter.** P3 as the
295e0 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
295f0 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
29600 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
29610 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
29620 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
29630 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ssors..*/.case O
29640 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69  P_AggStep: {.  i
29650 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
29660 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65   Mem *pMem;.  Me
29670 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c 69 74  m *pRec;.  sqlit
29680 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a  e3_context ctx;.
29690 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
296a0 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20  **apVal;..  n = 
296b0 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72  pOp->p5;.  asser
296c0 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65  t( n>=0 );.  pRe
296d0 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  c = &aMem[pOp->p
296e0 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d  2];.  apVal = p-
296f0 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74  >apArg;.  assert
29700 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20  ( apVal || n==0 
29710 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
29720 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b  n; i++, pRec++){
29730 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
29740 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b  IsValid(pRec) );
29750 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
29760 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  pRec;.    memAbo
29770 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 52  utToChange(p, pR
29780 65 63 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ec);.    sqlite3
29790 56 64 62 65 4d 65 6d 53 74 6f 72 65 54 79 70 65  VdbeMemStoreType
297a0 28 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74  (pRec);.  }.  ct
297b0 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  x.pFunc = pOp->p
297c0 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72  4.pFunc;.  asser
297d0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
297e0 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d  pOp->p3<=p->nMem
297f0 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d   );.  ctx.pMem =
29800 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
29810 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e  p->p3];.  pMem->
29820 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61  n++;.  ctx.s.fla
29830 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
29840 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20   ctx.s.z = 0;.  
29850 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20  ctx.s.zMalloc = 
29860 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c 20  0;.  ctx.s.xDel 
29870 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20  = 0;.  ctx.s.db 
29880 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45 72  = db;.  ctx.isEr
29890 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70  ror = 0;.  ctx.p
298a0 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20  Coll = 0;.  if( 
298b0 63 74 78 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73  ctx.pFunc->flags
298c0 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e   & SQLITE_FUNC_N
298d0 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61  EEDCOLL ){.    a
298e0 73 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f  ssert( pOp>p->aO
298f0 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p );.    assert(
29900 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d   pOp[-1].p4type=
29910 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
29920 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
29930 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
29940 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78  llSeq );.    ctx
29950 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d  .pColl = pOp[-1]
29960 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20  .p4.pColl;.  }. 
29970 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74   (ctx.pFunc->xSt
29980 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56  ep)(&ctx, n, apV
29990 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  al); /* IMP: R-2
299a0 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20  4505-23230 */.  
299b0 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
299c0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
299d0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
299e0 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
299f0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
29a00 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20  t(&ctx.s));.    
29a10 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
29a20 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33  ;.  }..  sqlite3
29a30 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
29a40 63 74 78 2e 73 29 3b 0a 0a 20 20 62 72 65 61 6b  ctx.s);..  break
29a50 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29a60 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a  AggFinal P1 P2 *
29a70 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 45 78 65 63   P4 *.**.** Exec
29a80 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65  ute the finalize
29a90 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  r function for a
29aa0 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31  n aggregate.  P1
29ab0 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72   is.** the memor
29ac0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
29ad0 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  is the accumulat
29ae0 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65  or for the aggre
29af0 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  gate..**.** P2 i
29b00 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
29b10 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74  arguments that t
29b20 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
29b30 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34   takes and.** P4
29b40 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
29b50 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72   the FuncDef for
29b60 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20   this function. 
29b70 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d   The P2.** argum
29b80 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ent is not used 
29b90 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
29ba0 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72   It is only ther
29bb0 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74  e to disambiguat
29bc0 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74  e.** functions t
29bd0 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72  hat can take var
29be0 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20  ying numbers of 
29bf0 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a  arguments.  The.
29c00 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  ** P4 argument i
29c10 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f  s only needed fo
29c20 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65  r the degenerate
29c30 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74   case where.** t
29c40 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
29c50 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75   was not previou
29c60 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63  sly called..*/.c
29c70 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a  ase OP_AggFinal:
29c80 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
29c90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
29ca0 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
29cb0 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 4d 65  p->nMem );.  pMe
29cc0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
29cd0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
29ce0 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d  Mem->flags & ~(M
29cf0 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29  EM_Null|MEM_Agg)
29d00 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )==0 );.  rc = s
29d10 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e  qlite3VdbeMemFin
29d20 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d  alize(pMem, pOp-
29d30 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66  >p4.pFunc);.  if
29d40 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
29d50 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
29d60 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
29d70 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
29d80 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20  e_text(pMem));. 
29d90 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
29da0 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
29db0 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Mem, encoding);.
29dc0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
29dd0 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69  BSIZE(pMem);.  i
29de0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
29df0 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b  mTooBig(pMem) ){
29e00 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
29e10 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
29e20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
29e30 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70  E_OMIT_WAL./* Op
29e40 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74  code: Checkpoint
29e50 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
29e60 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64  .** Checkpoint d
29e70 61 74 61 62 61 73 65 20 50 31 2e 20 54 68 69 73  atabase P1. This
29e80 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50   is a no-op if P
29e90 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  1 is not current
29ea0 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64  ly in.** WAL mod
29eb0 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32 20  e. Parameter P2 
29ec0 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45  is one of SQLITE
29ed0 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53  _CHECKPOINT_PASS
29ee0 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20  IVE, FULL.** or 
29ef0 52 45 53 54 41 52 54 2e 20 20 57 72 69 74 65 20  RESTART.  Write 
29f00 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b  1 or 0 into mem[
29f10 50 33 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b  P3] if the check
29f20 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a  point returns.**
29f30 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20   SQLITE_BUSY or 
29f40 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c  not, respectivel
29f50 79 2e 20 20 57 72 69 74 65 20 74 68 65 20 6e 75  y.  Write the nu
29f60 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
29f70 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65   the.** WAL afte
29f80 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74  r the checkpoint
29f90 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20   into mem[P3+1] 
29fa0 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  and the number o
29fb0 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68  f pages.** in th
29fc0 65 20 57 41 4c 20 74 68 61 74 20 68 61 76 65 20  e WAL that have 
29fd0 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65  been checkpointe
29fe0 64 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  d after the chec
29ff0 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65  kpoint.** comple
2a000 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b  tes into mem[P3+
2a010 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20  2].  However on 
2a020 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33  an error, mem[P3
2a030 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50  +1] and.** mem[P
2a040 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c  3+2] are initial
2a050 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63  ized to -1..*/.c
2a060 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e  ase OP_Checkpoin
2a070 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20  t: {.  int i;   
2a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a090 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
2a0a0 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20  ounter */.  int 
2a0b0 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20  aRes[3];        
2a0c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
2a0d0 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20  esults */.  Mem 
2a0e0 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
2a0f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
2a100 72 69 74 65 20 72 65 73 75 6c 74 73 20 68 65 72  rite results her
2a110 65 20 2a 2f 0a 0a 20 20 61 52 65 73 5b 30 5d 20  e */..  aRes[0] 
2a120 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d  = 0;.  aRes[1] =
2a130 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20   aRes[2] = -1;. 
2a140 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
2a150 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2a160 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20  INT_PASSIVE.    
2a170 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
2a180 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2a190 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20  _FULL.       || 
2a1a0 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
2a1b0 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41  CHECKPOINT_RESTA
2a1c0 52 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73  RT.  );.  rc = s
2a1d0 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
2a1e0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2a1f0 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c  p->p2, &aRes[1],
2a200 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66   &aRes[2]);.  if
2a210 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
2a220 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  Y ){.    rc = SQ
2a230 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65  LITE_OK;.    aRe
2a240 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  s[0] = 1;.  }.  
2a250 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20  for(i=0, pMem = 
2a260 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20  &aMem[pOp->p3]; 
2a270 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b  i<3; i++, pMem++
2a280 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2a290 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d  beMemSetInt64(pM
2a2a0 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d  em, (i64)aRes[i]
2a2b0 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65  );.  }    .  bre
2a2c0 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a  ak;.};  .#endif.
2a2d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a2e0 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f  OMIT_PRAGMA./* O
2a2f0 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f  pcode: JournalMo
2a300 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  de P1 P2 P3 * P5
2a310 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  .**.** Change th
2a320 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
2a330 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  f database P1 to
2a340 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20   P3. P3 must be 
2a350 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41  one of the.** PA
2a360 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2a370 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63  XXX values. If c
2a380 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20  hanging between 
2a390 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c  the various roll
2a3a0 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64  back.** modes (d
2a3b0 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c  elete, truncate,
2a3c0 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e   persist, off an
2a3d0 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20  d memory), this 
2a3e0 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f  is a simple.** o
2a3f0 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20  peration. No IO 
2a400 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a  is required..**.
2a410 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69  ** If changing i
2a420 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41  nto or out of WA
2a430 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65  L mode the proce
2a440 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d  dure is more com
2a450 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  plicated..**.** 
2a460 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63  Write a string c
2a470 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69  ontaining the fi
2a480 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  nal journal-mode
2a490 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
2a4a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72  .*/.case OP_Jour
2a4b0 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a  nalMode: {    /*
2a4c0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2a4d0 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
2a4e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2a4f0 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74        /* Btree t
2a500 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c  o change journal
2a510 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61   mode of */.  Pa
2a520 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20  ger *pPager;    
2a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2a540 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74 65   Pager associate
2a550 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20  d with pBt */.  
2a560 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20  int eNew;       
2a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a580 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d  /* New journal m
2a590 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c  ode */.  int eOl
2a5a0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
2a5b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2a5c0 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  old journal mode
2a5d0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
2a5e0 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20   *zFilename;    
2a5f0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
2a600 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
2a610 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 0a 20 20  or pPager */..  
2a620 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  eNew = pOp->p3;.
2a630 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d    assert( eNew==
2a640 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2a650 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20  E_DELETE .      
2a660 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2a670 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e  JOURNALMODE_TRUN
2a680 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  CATE .       || 
2a690 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2a6a0 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20  NALMODE_PERSIST 
2a6b0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2a6c0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2a6d0 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c  DE_OFF.       ||
2a6e0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2a6f0 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a  RNALMODE_MEMORY.
2a700 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
2a710 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2a720 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20  E_WAL.       || 
2a730 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2a740 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20  NALMODE_QUERY.  
2a750 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2a760 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2a770 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a 20  p1<db->nDb );.. 
2a780 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
2a790 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70  Op->p1].pBt;.  p
2a7a0 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
2a7b0 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a  treePager(pBt);.
2a7c0 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33    eOld = sqlite3
2a7d0 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d  PagerGetJournalM
2a7e0 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69  ode(pPager);.  i
2a7f0 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  f( eNew==PAGER_J
2a800 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
2a810 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
2a820 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50 61    if( !sqlite3Pa
2a830 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75  gerOkToChangeJou
2a840 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
2a850 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
2a860 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a870 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65  OMIT_WAL.  zFile
2a880 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61  name = sqlite3Pa
2a890 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67  gerFilename(pPag
2a8a0 65 72 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f  er);..  /* Do no
2a8b0 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69  t allow a transi
2a8c0 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f  tion to journal_
2a8d0 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64  mode=WAL for a d
2a8e0 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20  atabase.  ** in 
2a8f0 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
2a900 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20  e or if the VFS 
2a910 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
2a920 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a   shared memory .
2a930 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d    */.  if( eNew=
2a940 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2a950 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 7a 46  DE_WAL.   && (zF
2a960 69 6c 65 6e 61 6d 65 5b 30 5d 3d 3d 30 20 20 20  ilename[0]==0   
2a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a980 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69        /* Temp fi
2a990 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20  le */.       || 
2a9a0 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c  !sqlite3PagerWal
2a9b0 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72  Supported(pPager
2a9c0 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65  ))   /* No share
2a9d0 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74  d-memory support
2a9e0 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65   */.  ){.    eNe
2a9f0 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20  w = eOld;.  }.. 
2aa00 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64   if( (eNew!=eOld
2aa10 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50  ).   && (eOld==P
2aa20 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2aa30 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41  _WAL || eNew==PA
2aa40 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2aa50 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66  WAL).  ){.    if
2aa60 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
2aa70 74 20 7c 7c 20 64 62 2d 3e 61 63 74 69 76 65 56  t || db->activeV
2aa80 64 62 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20  dbeCnt>1 ){.    
2aa90 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
2aaa0 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ROR;.      sqlit
2aab0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2aac0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20  zErrMsg, db, .  
2aad0 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
2aae0 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f  change %s wal mo
2aaf0 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  de from within a
2ab00 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20   transaction",. 
2ab10 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d           (eNew==
2ab20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2ab30 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a  E_WAL ? "into" :
2ab40 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20   "out of").     
2ab50 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   );.      break;
2ab60 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20  .    }else{. .  
2ab70 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41      if( eOld==PA
2ab80 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2ab90 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
2aba0 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c  * If leaving WAL
2abb0 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65   mode, close the
2abc0 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75   log file. If su
2abd0 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61  ccessful, the ca
2abe0 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f  ll.        ** to
2abf0 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29   PagerCloseWal()
2ac00 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64   checkpoints and
2ac10 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69   deletes the wri
2ac20 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20  te-ahead-log .  
2ac30 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41        ** file. A
2ac40 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
2ac50 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65   may still be he
2ac60 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ld on the databa
2ac70 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20  se file .       
2ac80 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63   ** after a succ
2ac90 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a  essful return. .
2aca0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
2acb0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
2acc0 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61  agerCloseWal(pPa
2acd0 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ger);.        if
2ace0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2acf0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
2ad00 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2ad10 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2ad20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d  eNew);.        }
2ad30 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
2ad40 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
2ad50 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20  RNALMODE_MEMORY 
2ad60 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61  ){.        /* Ca
2ad70 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20  nnot transition 
2ad80 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45  directly from ME
2ad90 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73  MORY to WAL.  Us
2ada0 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20  e mode OFF.     
2adb0 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65     ** as an inte
2adc0 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20  rmediate */.    
2add0 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
2ade0 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
2adf0 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55  Pager, PAGER_JOU
2ae00 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20  RNALMODE_OFF);. 
2ae10 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
2ae20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61  /* Open a transa
2ae30 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74  ction on the dat
2ae40 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61  abase file. Rega
2ae50 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f  rdless of the jo
2ae60 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d  urnal.      ** m
2ae70 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61  ode, this transa
2ae80 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65  ction always use
2ae90 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
2aea0 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  rnal..      */. 
2aeb0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
2aec0 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
2aed0 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20  ns(pBt)==0 );.  
2aee0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2aef0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
2af00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2af10 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74  eeSetVersion(pBt
2af20 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  , (eNew==PAGER_J
2af30 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
2af40 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20   2 : 1));.      
2af50 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  }.    }.  }.#end
2af60 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c  if /* ifndef SQL
2af70 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a  ITE_OMIT_WAL */.
2af80 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
2af90 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2afa0 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74  }.  eNew = sqlit
2afb0 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
2afc0 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
2afd0 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  ew);..  pOut = &
2afe0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2aff0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2b000 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
2b010 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
2b020 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29  ut->z = (char *)
2b030 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
2b040 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20  dename(eNew);.  
2b050 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65  pOut->n = sqlite
2b060 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e  3Strlen30(pOut->
2b070 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  z);.  pOut->enc 
2b080 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20  = SQLITE_UTF8;. 
2b090 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2b0a0 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
2b0b0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72   encoding);.  br
2b0c0 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  eak;.};.#endif /
2b0d0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  * SQLITE_OMIT_PR
2b0e0 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65  AGMA */..#if !de
2b0f0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2b100 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65  T_VACUUM) && !de
2b110 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2b120 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63  T_ATTACH)./* Opc
2b130 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20  ode: Vacuum * * 
2b140 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75  * * *.**.** Vacu
2b150 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  um the entire da
2b160 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70  tabase.  This op
2b170 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20  code will cause 
2b180 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a  other virtual.**
2b190 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20   machines to be 
2b1a0 63 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e  created and run.
2b1b0 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20    It may not be 
2b1c0 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
2b1d0 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74  in.** a transact
2b1e0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
2b1f0 56 61 63 75 75 6d 3a 20 7b 0a 20 20 72 63 20 3d  Vacuum: {.  rc =
2b200 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
2b210 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  m(&p->zErrMsg, d
2b220 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  b);.  break;.}.#
2b230 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69  endif..#if !defi
2b240 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2b250 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f  AUTOVACUUM)./* O
2b260 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75  pcode: IncrVacuu
2b270 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
2b280 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69  .** Perform a si
2b290 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65  ngle step of the
2b2a0 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   incremental vac
2b2b0 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e  uum procedure on
2b2c0 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62  .** the P1 datab
2b2d0 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75  ase. If the vacu
2b2e0 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  um has finished,
2b2f0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2b300 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65  tion.** P2. Othe
2b310 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
2b320 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2b330 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2b340 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75  case OP_IncrVacu
2b350 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  um: {        /* 
2b360 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20  jump */.  Btree 
2b370 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
2b380 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2b390 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
2b3a0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
2b3b0 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79  btreeMask & (((y
2b3c0 44 62 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e  DbMask)1)<<pOp->
2b3d0 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 70 42 74  p1))!=0 );.  pBt
2b3e0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
2b3f0 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
2b400 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
2b410 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 69  Vacuum(pBt);.  i
2b420 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
2b430 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  NE ){.    pc = p
2b440 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2b450 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2b460 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2b470 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
2b480 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
2b490 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
2b4a0 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
2b4b0 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65  ements to become
2b4c0 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70   expired. An exp
2b4d0 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
2b4e0 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  * fails with an 
2b4f0 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51  error code of SQ
2b500 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69  LITE_SCHEMA if i
2b510 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75 74  t is ever execut
2b520 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69  ed .** (via sqli
2b530 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20  te3_step())..** 
2b540 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
2b550 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
2b560 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
2b570 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
2b580 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
2b590 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
2b5a0 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
2b5b0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66  statement is aff
2b5c0 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20  ected. .*/.case 
2b5d0 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
2b5e0 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
2b5f0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
2b600 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
2b610 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
2b620 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
2b630 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
2b640 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
2b650 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2b660 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
2b670 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
2b680 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f   P3 P4 *.**.** O
2b690 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
2b6a0 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
2b6b0 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
2b6c0 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
2b6d0 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
2b6e0 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
2b6f0 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
2b700 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
2b710 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
2b720 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
2b730 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
2b740 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
2b750 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
2b760 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
2b770 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
2b780 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
2b790 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
2b7a0 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
2b7b0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
2b7c0 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
2b7d0 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
2b7e0 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
2b7f0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2b800 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
2b810 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
2b820 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
2b830 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
2b840 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
2b850 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
2b860 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
2b870 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
2b880 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69  leLock: {.  u8 i
2b890 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
2b8a0 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20  )pOp->p3;.  if( 
2b8b0 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30  isWriteLock || 0
2b8c0 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ==(db->flags&SQL
2b8d0 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
2b8e0 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  ted) ){.    int 
2b8f0 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20  p1 = pOp->p1; . 
2b900 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30     assert( p1>=0
2b910 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29   && p1<db->nDb )
2b920 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
2b930 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 28  ->btreeMask & ((
2b940 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 70 31 29  (yDbMask)1)<<p1)
2b950 29 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  )!=0 );.    asse
2b960 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d  rt( isWriteLock=
2b970 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63  =0 || isWriteLoc
2b980 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d  k==1 );.    rc =
2b990 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63   sqlite3BtreeLoc
2b9a0 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70  kTable(db->aDb[p
2b9b0 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  1].pBt, pOp->p2,
2b9c0 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20   isWriteLock);. 
2b9d0 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29     if( (rc&0xFF)
2b9e0 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  ==SQLITE_LOCKED 
2b9f0 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
2ba00 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34  har *z = pOp->p4
2ba10 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  .z;.      sqlite
2ba20 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2ba30 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74  ErrMsg, db, "dat
2ba40 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
2ba50 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a  ocked: %s", z);.
2ba60 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
2ba70 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2ba80 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
2ba90 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e  D_CACHE */..#ifn
2baa0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2bab0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2bac0 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a  Opcode: VBegin *
2bad0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2bae0 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e  P4 may be a poin
2baf0 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
2bb00 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2bb10 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68  . If so, call th
2bb20 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74  e .** xBegin met
2bb30 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
2bb40 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20  le..**.** Also, 
2bb50 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50  whether or not P
2bb60 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20  4 is set, check 
2bb70 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74  that this is not
2bb80 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
2bb90 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63  om.** within a c
2bba0 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72  allback to a vir
2bbb0 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63  tual table xSync
2bbc0 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74  () method. If it
2bbd0 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a   is, the error.*
2bbe0 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  * code will be s
2bbf0 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43  et to SQLITE_LOC
2bc00 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  KED..*/.case OP_
2bc10 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62  VBegin: {.  VTab
2bc20 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54  le *pVTab;.  pVT
2bc30 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
2bc40 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ab;.  rc = sqlit
2bc50 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20  e3VtabBegin(db, 
2bc60 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56  pVTab);.  if( pV
2bc70 54 61 62 20 29 20 69 6d 70 6f 72 74 56 74 61 62  Tab ) importVtab
2bc80 45 72 72 4d 73 67 28 70 2c 20 70 56 54 61 62 2d  ErrMsg(p, pVTab-
2bc90 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65 61 6b  >pVtab);.  break
2bca0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2bcb0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2bcc0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2bcd0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2bce0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
2bcf0 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50  pcode: VCreate P
2bd00 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2bd10 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
2bd20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
2bd30 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
2bd40 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65  1. Call the xCre
2bd50 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f  ate method.** fo
2bd60 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  r that table..*/
2bd70 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65  .case OP_VCreate
2bd80 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  : {.  rc = sqlit
2bd90 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
2bda0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2bdb0 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72  p->p4.z, &p->zEr
2bdc0 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  rMsg);.  break;.
2bdd0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2bde0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2bdf0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2be00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2be10 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2be20 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31  ode: VDestroy P1
2be30 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2be40 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  P4 is the name o
2be50 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
2be60 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  e in database P1
2be70 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73  .  Call the xDes
2be80 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f  troy method.** o
2be90 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  f that table..*/
2bea0 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f  .case OP_VDestro
2beb0 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  y: {.  p->inVtab
2bec0 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63  Method = 2;.  rc
2bed0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
2bee0 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f  llDestroy(db, pO
2bef0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2bf00 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  );.  p->inVtabMe
2bf10 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61  thod = 0;.  brea
2bf20 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2bf30 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2bf40 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
2bf50 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2bf60 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2bf70 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31  Opcode: VOpen P1
2bf80 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2bf90 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
2bfa0 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
2bfb0 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
2bfc0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
2bfd0 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61  ture..** P1 is a
2bfe0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20   cursor number. 
2bff0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65   This opcode ope
2c000 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74  ns a cursor to t
2c010 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
2c020 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74  ble and stores t
2c030 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31  hat cursor in P1
2c040 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70  ..*/.case OP_VOp
2c050 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
2c060 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69  or *pCur;.  sqli
2c070 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
2c080 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  *pVtabCursor;.  
2c090 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2c0a0 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  tab;.  sqlite3_m
2c0b0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2c0c0 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70  .  pCur = 0;.  p
2c0d0 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a  VtabCursor = 0;.
2c0e0 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
2c0f0 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
2c100 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c    pModule = (sql
2c110 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56  ite3_module *)pV
2c120 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2c130 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26 20  assert(pVtab && 
2c140 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d  pModule);.  rc =
2c150 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28   pModule->xOpen(
2c160 70 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72  pVtab, &pVtabCur
2c170 73 6f 72 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74  sor);.  importVt
2c180 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
2c190 62 29 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45  b);.  if( SQLITE
2c1a0 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f  _OK==rc ){.    /
2c1b0 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c  * Initialize sql
2c1c0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
2c1d0 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20   base class */. 
2c1e0 20 20 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e     pVtabCursor->
2c1f0 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a  pVtab = pVtab;..
2c200 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73      /* Initialis
2c210 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62  e vdbe cursor ob
2c220 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72  ject */.    pCur
2c230 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
2c240 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  r(p, pOp->p1, 0,
2c250 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28   -1, 0);.    if(
2c260 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70   pCur ){.      p
2c270 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2c280 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a   = pVtabCursor;.
2c290 20 20 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64        pCur->pMod
2c2a0 75 6c 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f  ule = pVtabCurso
2c2b0 72 2d 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  r->pVtab->pModul
2c2c0 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  e;.    }else{.  
2c2d0 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61      db->mallocFa
2c2e0 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  iled = 1;.      
2c2f0 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28  pModule->xClose(
2c300 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
2c310 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
2c320 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2c330 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2c340 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2c350 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2c360 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2c370 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31  code: VFilter P1
2c380 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
2c390 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
2c3a0 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f   opened using VO
2c3b0 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61  pen.  P2 is an a
2c3c0 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
2c3d0 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74  o if.** the filt
2c3e0 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20  ered result set 
2c3f0 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20  is empty..**.** 
2c400 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c  P4 is either NUL
2c410 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68  L or a string th
2c420 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64  at was generated
2c430 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64   by the xBestInd
2c440 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20  ex.** method of 
2c450 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65  the module.  The
2c460 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
2c470 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  of the P4 string
2c480 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74   is left.** to t
2c490 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  he module implem
2c4a0 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
2c4b0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
2c4c0 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20  kes the xFilter 
2c4d0 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69  method on the vi
2c4e0 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63  rtual table spec
2c4f0 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20  ified.** by P1. 
2c500 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65   The integer que
2c510 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65  ry plan paramete
2c520 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20  r to xFilter is 
2c530 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2c540 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74  er.** P3. Regist
2c550 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74  er P3+1 stores t
2c560 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65  he argc paramete
2c570 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74  r to be passed t
2c580 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72  o the.** xFilter
2c590 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65   method. Registe
2c5a0 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72  rs P3+2..P3+1+ar
2c5b0 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a  gc are the argc.
2c5c0 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61  ** additional pa
2c5d0 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61  rameters which a
2c5e0 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20  re passed to.** 
2c5f0 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e  xFilter as argv.
2c600 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62   Register P3+2 b
2c610 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77  ecomes argv[0] w
2c620 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46  hen passed to xF
2c630 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a  ilter..**.** A j
2c640 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
2c650 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  2 if the result 
2c660 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72  set after filter
2c670 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70  ing would be emp
2c680 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ty..*/.case OP_V
2c690 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a  Filter: {   /* j
2c6a0 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72  ump */.  int nAr
2c6b0 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b  g;.  int iQuery;
2c6c0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
2c6d0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
2c6e0 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b  ;.  Mem *pQuery;
2c6f0 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20  .  Mem *pArgc;. 
2c700 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
2c710 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f  rsor *pVtabCurso
2c720 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
2c730 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65  b *pVtab;.  Vdbe
2c740 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
2c750 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69  int res;.  int i
2c760 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b  ;.  Mem **apArg;
2c770 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d  ..  pQuery = &aM
2c780 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
2c790 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31  Argc = &pQuery[1
2c7a0 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  ];.  pCur = p->a
2c7b0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2c7c0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2c7d0 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20  lid(pQuery) );. 
2c7e0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
2c7f0 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29  pOp->p3, pQuery)
2c800 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
2c810 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
2c820 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d  .  pVtabCursor =
2c830 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
2c840 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56  or;.  pVtab = pV
2c850 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
2c860 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
2c870 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20  tab->pModule;.. 
2c880 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64   /* Grab the ind
2c890 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72  ex number and ar
2c8a0 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  gc parameters */
2c8b0 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65  .  assert( (pQue
2c8c0 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  ry->flags&MEM_In
2c8d0 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e  t)!=0 && pArgc->
2c8e0 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
2c8f0 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29  ;.  nArg = (int)
2c900 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51  pArgc->u.i;.  iQ
2c910 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65  uery = (int)pQue
2c920 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49  ry->u.i;..  /* I
2c930 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65  nvoke the xFilte
2c940 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a  r method */.  {.
2c950 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
2c960 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
2c970 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30  g;.    for(i = 0
2c980 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
2c990 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d        apArg[i] =
2c9a0 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20   &pArgc[i+1];.  
2c9b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2c9c0 65 6d 53 74 6f 72 65 54 79 70 65 28 61 70 41 72  emStoreType(apAr
2c9d0 67 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  g[i]);.    }..  
2c9e0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2c9f0 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  d = 1;.    rc = 
2ca00 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72  pModule->xFilter
2ca10 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51  (pVtabCursor, iQ
2ca20 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  uery, pOp->p4.z,
2ca30 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20   nArg, apArg);. 
2ca40 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68     p->inVtabMeth
2ca50 6f 64 20 3d 20 30 3b 0a 20 20 20 20 69 6d 70 6f  od = 0;.    impo
2ca60 72 74 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20  rtVtabErrMsg(p, 
2ca70 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
2ca80 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2ca90 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  .      res = pMo
2caa0 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62  dule->xEof(pVtab
2cab0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 0a  Cursor);.    }..
2cac0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
2cad0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2cae0 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
2caf0 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
2cb00 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a   = 0;..  break;.
2cb10 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2cb20 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2cb30 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2cb40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2cb50 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2cb60 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20  ode: VColumn P1 
2cb70 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
2cb80 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20  Store the value 
2cb90 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  of the P2-th col
2cba0 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f  umn of.** the ro
2cbb0 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  w of the virtual
2cbc0 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20  -table that the 
2cbd0 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73  .** P1 cursor is
2cbe0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74   pointing to int
2cbf0 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
2cc00 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d  /.case OP_VColum
2cc10 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  n: {.  sqlite3_v
2cc20 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
2cc30 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2cc40 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
2cc50 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c  em *pDest;.  sql
2cc60 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f  ite3_context sCo
2cc70 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75  ntext;..  VdbeCu
2cc80 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
2cc90 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2cca0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
2ccb0 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
2ccc0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2ccd0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70  >0 && pOp->p3<=p
2cce0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73  ->nMem );.  pDes
2ccf0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
2cd00 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
2cd10 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
2cd20 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
2cd30 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c  llRow ){.    sql
2cd40 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2cd50 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62  ll(pDest);.    b
2cd60 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
2cd70 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
2cd80 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
2cd90 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
2cda0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
2cdb0 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  rt( pModule->xCo
2cdc0 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74  lumn );.  memset
2cdd0 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73  (&sContext, 0, s
2cde0 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29  izeof(sContext))
2cdf0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  ;..  /* The outp
2ce00 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65  ut cell may alre
2ce10 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65  ady have a buffe
2ce20 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76  r allocated. Mov
2ce30 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65  e.  ** the curre
2ce40 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73  nt contents to s
2ce50 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20  Context.s so in 
2ce60 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66 75  case the user-fu
2ce70 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e  nction .  ** can
2ce80 20 75 73 65 20 74 68 65 20 61 6c 72 65 61 64 79   use the already
2ce90 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
2cea0 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
2ceb0 6f 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20  ocating a .  ** 
2cec0 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20  new one..  */.  
2ced0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
2cee0 76 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ve(&sContext.s, 
2cef0 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74  pDest);.  MemSet
2cf00 54 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65  TypeFlag(&sConte
2cf10 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  xt.s, MEM_Null);
2cf20 0a 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ..  rc = pModule
2cf30 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e  ->xColumn(pCur->
2cf40 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43  pVtabCursor, &sC
2cf50 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29  ontext, pOp->p2)
2cf60 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72  ;.  importVtabEr
2cf70 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rMsg(p, pVtab);.
2cf80 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69    if( sContext.i
2cf90 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63  sError ){.    rc
2cfa0 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72   = sContext.isEr
2cfb0 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43  ror;.  }..  /* C
2cfc0 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f  opy the result o
2cfd0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  f the function t
2cfe0 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65  o the P3 registe
2cff0 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68  r. We.  ** do th
2d000 69 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  is regardless of
2d010 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
2d020 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  an error occurre
2d030 64 20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a  d to ensure any.
2d040 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c    ** dynamic all
2d050 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74  ocation in sCont
2d060 65 78 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72  ext.s (a Mem str
2d070 75 63 74 29 20 69 73 20 20 72 65 6c 65 61 73 65  uct) is  release
2d080 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  d..  */.  sqlite
2d090 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2d0a0 69 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c  ing(&sContext.s,
2d0b0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71   encoding);.  sq
2d0c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
2d0d0 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78  (pDest, &sContex
2d0e0 74 2e 73 29 3b 0a 20 20 52 45 47 49 53 54 45 52  t.s);.  REGISTER
2d0f0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
2d100 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45  pDest);.  UPDATE
2d110 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
2d120 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  est);..  if( sql
2d130 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
2d140 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20  g(pDest) ){.    
2d150 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
2d160 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2d170 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2d180 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2d190 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2d1a0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2d1b0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2d1c0 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20  VNext P1 P2 * * 
2d1d0 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  *.**.** Advance 
2d1e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31  virtual table P1
2d1f0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77   to the next row
2d200 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73   in its result s
2d210 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74  et and.** jump t
2d220 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
2d230 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69  .  Or, if the vi
2d240 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20  rtual table has 
2d250 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65  reached.** the e
2d260 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74  nd of its result
2d270 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20   set, then fall 
2d280 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2d290 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2d2a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78  .*/.case OP_VNex
2d2b0 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  t: {   /* jump *
2d2c0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
2d2d0 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
2d2e0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
2d2f0 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
2d300 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  res;.  VdbeCurso
2d310 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20  r *pCur;..  res 
2d320 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  = 0;.  pCur = p-
2d330 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2d340 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
2d350 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
2d360 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
2d370 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  Row ){.    break
2d380 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
2d390 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2d3a0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
2d3b0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
2d3c0 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
2d3d0 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29  pModule->xNext )
2d3e0 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
2d3f0 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f  he xNext() metho
2d400 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
2d410 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79   There is no way
2d420 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e   for the.  ** un
2d430 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65  derlying impleme
2d440 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72  ntation to retur
2d450 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e  n an error if on
2d460 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a  e occurs during.
2d470 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e    ** xNext(). In
2d480 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72  stead, if an err
2d490 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20  or occurs, true 
2d4a0 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64  is returned (ind
2d4b0 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20  icating that .  
2d4c0 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69 6c  ** data is avail
2d4d0 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72  able) and the er
2d4e0 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ror code returne
2d4f0 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f  d when xColumn o
2d500 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65  r.  ** some othe
2d510 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74  r method is next
2d520 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20   invoked on the 
2d530 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61 62  save virtual tab
2d540 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a  le cursor..  */.
2d550 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
2d560 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d  d = 1;.  rc = pM
2d570 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75  odule->xNext(pCu
2d580 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
2d590 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2d5a0 6f 64 20 3d 20 30 3b 0a 20 20 69 6d 70 6f 72 74  od = 0;.  import
2d5b0 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56  VtabErrMsg(p, pV
2d5c0 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  tab);.  if( rc==
2d5d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2d5e0 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e   res = pModule->
2d5f0 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62  xEof(pCur->pVtab
2d600 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20  Cursor);.  }..  
2d610 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20  if( !res ){.    
2d620 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64  /* If there is d
2d630 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20  ata, jump to P2 
2d640 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  */.    pc = pOp-
2d650 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
2d660 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2d670 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
2d680 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
2d690 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d6a0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2d6b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61  /* Opcode: VRena
2d6c0 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  me P1 * * P4 *.*
2d6d0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2d6e0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
2d6f0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
2d700 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
2d710 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
2d720 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2d730 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
2d740 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  ing xRename meth
2d750 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  od. The value.**
2d760 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
2d770 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
2d780 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20   zName argument 
2d790 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d  to the xRename m
2d7a0 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ethod..*/.case O
2d7b0 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73  P_VRename: {.  s
2d7c0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2d7d0 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65  ab;.  Mem *pName
2d7e0 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
2d7f0 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
2d800 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d  b;.  pName = &aM
2d810 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2d820 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d  ssert( pVtab->pM
2d830 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29  odule->xRename )
2d840 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
2d850 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b  sValid(pName) );
2d860 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
2d870 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65  E(pOp->p1, pName
2d880 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61  );.  assert( pNa
2d890 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  me->flags & MEM_
2d8a0 53 74 72 20 29 3b 0a 20 20 72 63 20 3d 20 70 56  Str );.  rc = pV
2d8b0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
2d8c0 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61  ename(pVtab, pNa
2d8d0 6d 65 2d 3e 7a 29 3b 0a 20 20 69 6d 70 6f 72 74  me->z);.  import
2d8e0 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56  VtabErrMsg(p, pV
2d8f0 74 61 62 29 3b 0a 20 20 70 2d 3e 65 78 70 69 72  tab);.  p->expir
2d900 65 64 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b  ed = 0;..  break
2d910 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
2d920 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d930 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
2d940 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20  Opcode: VUpdate 
2d950 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
2d960 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2d970 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
2d980 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
2d990 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
2d9a0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
2d9b0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2d9c0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
2d9d0 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  ng xUpdate metho
2d9e0 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20  d. P2 values.** 
2d9f0 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d  are contiguous m
2da00 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72  emory cells star
2da10 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61  ting at P3 to pa
2da20 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74  ss to the xUpdat
2da30 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  e .** invocation
2da40 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72  . The value in r
2da50 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31  egister (P3+P2-1
2da60 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
2da70 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c   the .** p2th el
2da80 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67  ement of the arg
2da90 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74  v array passed t
2daa0 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a  o xUpdate..**.**
2dab0 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74   The xUpdate met
2dac0 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45  hod will do a DE
2dad0 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52  LETE or an INSER
2dae0 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68  T or both..** Th
2daf0 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e  e argv[0] elemen
2db00 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70  t (which corresp
2db10 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63  onds to memory c
2db20 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68  ell P3).** is th
2db30 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77  e rowid of a row
2db40 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20   to delete.  If 
2db50 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20  argv[0] is NULL 
2db60 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65  then no .** dele
2db70 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68  tion occurs.  Th
2db80 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e  e argv[1] elemen
2db90 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  t is the rowid o
2dba0 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  f the new .** ro
2dbb0 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20  w.  This can be 
2dbc0 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65  NULL to have the
2dbd0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
2dbe0 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a  elect the new .*
2dbf0 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65  * rowid for itse
2dc00 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75  lf.  The subsequ
2dc10 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20  ent elements in 
2dc20 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a  the array are .*
2dc30 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  * the values of 
2dc40 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e  columns in the n
2dc50 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66  ew row..**.** If
2dc60 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69   P2==1 then no i
2dc70 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d  nsert is perform
2dc80 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20  ed.  argv[0] is 
2dc90 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20  the rowid of.** 
2dca0 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
2dcb0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62  .**.** P1 is a b
2dcc0 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20  oolean flag. If 
2dcd0 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75  it is set to tru
2dce0 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74  e and the xUpdat
2dcf0 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63  e call.** is suc
2dd00 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68  cessful, then th
2dd10 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
2dd20 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74   by sqlite3_last
2dd30 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
2dd40 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68  .** is set to th
2dd50 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  e value of the r
2dd60 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77  owid for the row
2dd70 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a   just inserted..
2dd80 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61  */.case OP_VUpda
2dd90 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te: {.  sqlite3_
2dda0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73  vtab *pVtab;.  s
2ddb0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2ddc0 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41  Module;.  int nA
2ddd0 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  rg;.  int i;.  s
2dde0 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69  qlite_int64 rowi
2ddf0 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  d;.  Mem **apArg
2de00 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20  ;.  Mem *pX;..  
2de10 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
2de20 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
2de30 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
2de40 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
2de50 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41  b->pModule;.  nA
2de60 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  rg = pOp->p2;.  
2de70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
2de80 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a  ype==P4_VTAB );.
2de90 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f    if( ALWAYS(pMo
2dea0 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29  dule->xUpdate) )
2deb0 7b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d  {.    apArg = p-
2dec0 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d  >apArg;.    pX =
2ded0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2dee0 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
2def0 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
2df00 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2df10 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20  alid(pX) );.    
2df20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
2df30 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20  ge(p, pX);.     
2df40 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2df50 74 6f 72 65 54 79 70 65 28 70 58 29 3b 0a 20 20  toreType(pX);.  
2df60 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70      apArg[i] = p
2df70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20  X;.      pX++;. 
2df80 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 70 4d     }.    rc = pM
2df90 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70  odule->xUpdate(p
2dfa0 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72  Vtab, nArg, apAr
2dfb0 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  g, &rowid);.    
2dfc0 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67  importVtabErrMsg
2dfd0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
2dfe0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2dff0 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a  K && pOp->p1 ){.
2e000 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41        assert( nA
2e010 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d  rg>1 && apArg[0]
2e020 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66   && (apArg[0]->f
2e030 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29  lags&MEM_Null) )
2e040 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74  ;.      db->last
2e050 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20  Rowid = rowid;. 
2e060 20 20 20 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61     }.    p->nCha
2e070 6e 67 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  nge++;.  }.  bre
2e080 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2e090 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2e0a0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2e0b0 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
2e0c0 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
2e0d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63  /* Opcode: Pagec
2e0e0 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
2e0f0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
2e100 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20   current number 
2e110 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61  of pages in data
2e120 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72  base P1 to memor
2e130 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61  y cell P2..*/.ca
2e140 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a  se OP_Pagecount:
2e150 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
2e160 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
2e170 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   */.  pOut->u.i 
2e180 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
2e190 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70  stPage(db->aDb[p
2e1a0 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20  Op->p1].pBt);.  
2e1b0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2e1c0 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54  ..#ifndef  SQLIT
2e1d0 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
2e1e0 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GMAS./* Opcode: 
2e1f0 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32 20 50  MaxPgcnt P1 P2 P
2e200 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20  3 * *.**.** Try 
2e210 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d  to set the maxim
2e220 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f  um page count fo
2e230 72 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  r database P1 to
2e240 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33   the value in P3
2e250 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20  ..** Do not let 
2e260 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
2e270 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f   count fall belo
2e280 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 61  w the current pa
2e290 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20  ge count and.** 
2e2a0 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68  do not change th
2e2b0 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
2e2c0 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33  ount value if P3
2e2d0 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  ==0..**.** Store
2e2e0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
2e2f0 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68  e count after th
2e300 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69  e change in regi
2e310 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
2e320 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20   OP_MaxPgcnt: { 
2e330 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2e340 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
2e350 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
2e360 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20  newMax;.  Btree 
2e370 2a 70 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64  *pBt;..  pBt = d
2e380 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
2e390 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20  pBt;.  newMax = 
2e3a0 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  0;.  if( pOp->p3
2e3b0 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d   ){.    newMax =
2e3c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
2e3d0 74 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20  tPage(pBt);.    
2e3e0 69 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e  if( newMax < (un
2e3f0 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29  signed)pOp->p3 )
2e400 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67   newMax = (unsig
2e410 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  ned)pOp->p3;.  }
2e420 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
2e430 71 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50 61  qlite3BtreeMaxPa
2e440 67 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77  geCount(pBt, new
2e450 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Max);.  break;.}
2e460 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
2e470 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2e480 41 43 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  ACE./* Opcode: T
2e490 72 61 63 65 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  race * * * P4 *.
2e4a0 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67  **.** If tracing
2e4b0 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20   is enabled (by 
2e4c0 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63  the sqlite3_trac
2e4d0 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20  e()) interface, 
2e4e0 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d  then.** the UTF-
2e4f0 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  8 string contain
2e500 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74  ed in P4 is emit
2e510 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65  ted on the trace
2e520 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 63 61   callback..*/.ca
2e530 73 65 20 4f 50 5f 54 72 61 63 65 3a 20 7b 0a 20  se OP_Trace: {. 
2e540 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 0a   char *zTrace;..
2e550 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d    zTrace = (pOp-
2e560 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
2e570 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20  z : p->zSql);.  
2e580 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20  if( zTrace ){.  
2e590 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65    if( db->xTrace
2e5a0 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a   ){.      char *
2e5b0 7a 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45  z = sqlite3VdbeE
2e5c0 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61  xpandSql(p, zTra
2e5d0 63 65 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 78  ce);.      db->x
2e5e0 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65  Trace(db->pTrace
2e5f0 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 20 20 73  Arg, z);.      s
2e600 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2e610 20 7a 29 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65   z);.    }.#ifde
2e620 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2e630 20 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61 67     if( (db->flag
2e640 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  s & SQLITE_SqlTr
2e650 61 63 65 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ace)!=0 ){.     
2e660 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
2e670 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20  ntf("SQL-trace: 
2e680 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a  %s\n", zTrace);.
2e690 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
2e6a0 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
2e6b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2e6c0 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  endif.../* Opcod
2e6d0 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20  e: Noop * * * * 
2e6e0 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69  *.**.** Do nothi
2e6f0 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  ng.  This instru
2e700 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75  ction is often u
2e710 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a  seful as a jump.
2e720 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a  ** destination..
2e730 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67  */./*.** The mag
2e740 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64  ic Explain opcod
2e750 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72  e are only inser
2e760 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e  ted when explain
2e770 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73  ==2 (which.** is
2e780 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65   to say when the
2e790 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
2e7a0 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73  LAN syntax is us
2e7b0 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ed.).** This opc
2e7c0 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f  ode records info
2e7d0 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  rmation from the
2e7e0 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20   optimizer.  It 
2e7f0 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61  is the.** the sa
2e800 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  me as a no-op.  
2e810 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65  This opcodesneve
2e820 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72  r appears in a r
2e830 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a  eal VM program..
2e840 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20  */.default: {   
2e850 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69         /* This i
2e860 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70  s really OP_Noop
2e870 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20   and OP_Explain 
2e880 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
2e890 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f  ->opcode==OP_Noo
2e8a0 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  p || pOp->opcode
2e8b0 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a  ==OP_Explain );.
2e8c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a    break;.}../***
2e8d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2e8e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2e8f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2e900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2e910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
2e920 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73  e cases of the s
2e930 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
2e940 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20  above this line 
2e950 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e  should all be in
2e960 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73  dented.** by 6 s
2e970 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20  paces.  But the 
2e980 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63  left-most 6 spac
2e990 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d  es have been rem
2e9a0 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20  oved to improve 
2e9b0 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69  the.** readabili
2e9c0 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70  ty.  From this p
2e9d0 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68  oint on down, th
2e9e0 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  e normal indenta
2e9f0 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a  tion rules are.*
2ea00 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a  * restored..****
2ea10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d  *********/.    }
2ea60 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
2ea70 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20  OFILE.    {.    
2ea80 20 20 75 36 34 20 65 6c 61 70 73 65 64 20 3d 20    u64 elapsed = 
2ea90 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 20  sqlite3Hwtime() 
2eaa0 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70  - start;.      p
2eab0 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6c  Op->cycles += el
2eac0 61 70 73 65 64 3b 0a 20 20 20 20 20 20 70 4f 70  apsed;.      pOp
2ead0 2d 3e 63 6e 74 2b 2b 3b 0a 23 69 66 20 30 0a 20  ->cnt++;.#if 0. 
2eae0 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73         fprintf(s
2eaf0 74 64 6f 75 74 2c 20 22 25 31 30 6c 6c 75 20 22  tdout, "%10llu "
2eb00 2c 20 65 6c 61 70 73 65 64 29 3b 0a 20 20 20 20  , elapsed);.    
2eb10 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
2eb20 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 6f  rintOp(stdout, o
2eb30 72 69 67 50 63 2c 20 26 61 4f 70 5b 6f 72 69 67  rigPc, &aOp[orig
2eb40 50 63 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  Pc]);.#endif.   
2eb50 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
2eb60 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
2eb70 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e  code adds nothin
2eb80 67 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20  g to the actual 
2eb90 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20  functionality.  
2eba0 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67    ** of the prog
2ebb0 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ram.  It is only
2ebc0 20 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e   here for testin
2ebd0 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e  g and debugging.
2ebe0 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f  .    ** On the o
2ebf0 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f  ther hand, it do
2ec00 65 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c  es burn CPU cycl
2ec10 65 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68  es every time th
2ec20 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65  rough.    ** the
2ec30 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e   evaluator loop.
2ec40 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76    So we can leav
2ec50 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44  e it out when ND
2ec60 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
2ec70 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20  .    */.#ifndef 
2ec80 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72  NDEBUG.    asser
2ec90 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c  t( pc>=-1 && pc<
2eca0 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65  p->nOp );..#ifde
2ecb0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2ecc0 20 20 20 69 66 28 20 70 2d 3e 74 72 61 63 65 20     if( p->trace 
2ecd0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  ){.      if( rc!
2ece0 3d 30 20 29 20 66 70 72 69 6e 74 66 28 70 2d 3e  =0 ) fprintf(p->
2ecf0 74 72 61 63 65 2c 22 72 63 3d 25 64 5c 6e 22 2c  trace,"rc=%d\n",
2ed00 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  rc);.      if( p
2ed10 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f  Op->opflags & (O
2ed20 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
2ed30 45 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29  EASE|OPFLG_OUT2)
2ed40 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69   ){.        regi
2ed50 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72 61  sterTrace(p->tra
2ed60 63 65 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 4d  ce, pOp->p2, &aM
2ed70 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
2ed80 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
2ed90 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
2eda0 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20  PFLG_OUT3 ){.   
2edb0 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
2edc0 63 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70  ce(p->trace, pOp
2edd0 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p3, &aMem[pOp-
2ede0 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p3]);.      }. 
2edf0 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20     }.#endif  /* 
2ee00 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
2ee10 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55  #endif  /* NDEBU
2ee20 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65  G */.  }  /* The
2ee30 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28   end of the for(
2ee40 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f  ;;) loop the loo
2ee50 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64  ps through opcod
2ee60 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77  es */..  /* If w
2ee70 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  e reach this poi
2ee80 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  nt, it means tha
2ee90 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66  t execution is f
2eea0 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a  inished with.  *
2eeb0 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f  * an error of so
2eec0 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64  me kind..  */.vd
2eed0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20  be_error_halt:. 
2eee0 20 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20   assert( rc );. 
2eef0 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74   p->rc = rc;.  t
2ef00 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33  estcase( sqlite3
2ef10 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f  GlobalConfig.xLo
2ef20 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65  g!=0 );.  sqlite
2ef30 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65  3_log(rc, "state
2ef40 6d 65 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25  ment aborts at %
2ef50 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20  d: [%s] %s", .  
2ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef70 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d   pc, p->zSql, p-
2ef80 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c  >zErrMsg);.  sql
2ef90 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
2efa0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2efb0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20  E_IOERR_NOMEM ) 
2efc0 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
2efd0 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   = 1;.  rc = SQL
2efe0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  ITE_ERROR;.  if(
2eff0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2f000 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c  ult>0 ){.    sql
2f010 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
2f020 6c 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65  lSchema(db, rese
2f030 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31  tSchemaOnFault-1
2f040 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69  );.  }..  /* Thi
2f050 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
2f060 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72  y out of this pr
2f070 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76  ocedure.  We hav
2f080 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73  e to.  ** releas
2f090 65 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e  e the mutexes on
2f0a0 20 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72   btrees that wer
2f0b0 65 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68  e acquired at th
2f0c0 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76  e.  ** top. */.v
2f0d0 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 73 71  dbe_return:.  sq
2f0e0 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65 28 70  lite3VdbeLeave(p
2f0f0 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
2f100 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
2f110 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f  re if a string o
2f120 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68  r blob larger th
2f130 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  an SQLITE_MAX_LE
2f140 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63  NGTH.  ** is enc
2f150 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74  ountered..  */.t
2f160 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65  oo_big:.  sqlite
2f170 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2f180 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72  ErrMsg, db, "str
2f190 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20  ing or blob too 
2f1a0 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  big");.  rc = SQ
2f1b0 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67  LITE_TOOBIG;.  g
2f1c0 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
2f1d0 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
2f1e0 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c  to here if a mal
2f1f0 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a  loc() fails..  *
2f200 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e  /.no_mem:.  db->
2f210 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
2f220 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  ;.  sqlite3SetSt
2f230 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2f240 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65  , db, "out of me
2f250 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53  mory");.  rc = S
2f260 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67  QLITE_NOMEM;.  g
2f270 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
2f280 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20  alt;..  /* Jump 
2f290 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20  to here for any 
2f2a0 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61  other kind of fa
2f2b0 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20  tal error.  The 
2f2c0 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20  "rc" variable.  
2f2d0 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74  ** should hold t
2f2e0 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e  he error number.
2f2f0 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f  .  */.abort_due_
2f300 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65  to_error:.  asse
2f310 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d  rt( p->zErrMsg==
2f320 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d  0 );.  if( db->m
2f330 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63  allocFailed ) rc
2f340 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
2f350 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
2f360 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b  E_IOERR_NOMEM ){
2f370 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
2f380 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2f390 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
2f3a0 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
2f3b0 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65  .  }.  goto vdbe
2f3c0 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
2f3d0 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
2f3e0 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69  if the sqlite3_i
2f3f0 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73  nterrupt() API s
2f400 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70  ets the interrup
2f410 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a  t.  ** flag..  *
2f420 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  /.abort_due_to_i
2f430 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65  nterrupt:.  asse
2f440 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  rt( db->u1.isInt
2f450 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63  errupted );.  rc
2f460 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
2f470 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  UPT;.  p->rc = r
2f480 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  c;.  sqlite3SetS
2f490 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2f4a0 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c  g, db, "%s", sql
2f4b0 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
2f4c0 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72  .  goto vdbe_err
2f4d0 6f 72 5f 68 61 6c 74 3b 0a 7d 0a                 or_halt;.}.