/ Hex Artifact Content
Login

Artifact 7aef0a9e174099a0b2d6b940ca9d3ae9833fd014:


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 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
4610: 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28   encoding = ENC(
4620: 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  db);     /* The 
4630: 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e  database encodin
4640: 67 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  g */.#ifndef SQL
4650: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
4660: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
4670: 20 63 68 65 63 6b 50 72 6f 67 72 65 73 73 3b 20   checkProgress; 
4680: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
4690: 69 66 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  if progress call
46a0: 62 61 63 6b 73 20 61 72 65 20 65 6e 61 62 6c 65  backs are enable
46b0: 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 72 6f 67  d */.  int nProg
46c0: 72 65 73 73 4f 70 73 20 3d 20 30 3b 20 20 20 20  ressOps = 0;    
46d0: 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 65 78 65    /* Opcodes exe
46e0: 63 75 74 65 64 20 73 69 6e 63 65 20 70 72 6f 67  cuted since prog
46f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ress callback. *
4700: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4710: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4720: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4730: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4740: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4750: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
4760: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4770: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4780: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4790: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
47a0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
47b0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
47c0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
47d0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
47e0: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
47f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4800: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4810: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
4820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4830: 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43  ult of last OP_C
4840: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e  ompare operation
4850: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d   */.  int *aPerm
4860: 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ute = 0;        
4870: 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20   /* Permutation 
4880: 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f  of columns for O
4890: 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 23 69 66  P_Compare */.#if
48a0: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
48b0: 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20  .  u64 start;   
48c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
48d0: 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74   CPU clock count
48e0: 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63   at start of opc
48f0: 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 69  ode */.  int ori
4900: 67 50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gPc;            
4910: 20 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 63      /* Program c
4920: 6f 75 6e 74 65 72 20 61 74 20 73 74 61 72 74 20  ounter at start 
4930: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4940: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4950: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4960: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4970: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4980: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4990: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
49a0: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
49b0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
49c0: 4d 75 74 65 78 41 72 72 61 79 45 6e 74 65 72 28  MutexArrayEnter(
49d0: 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d  p);.  if( p->rc=
49e0: 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
49f0: 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
4a00: 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63  pens if a malloc
4a10: 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c  () inside a call
4a20: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   to sqlite3_colu
4a30: 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20  mn_text() or.   
4a40: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   ** sqlite3_colu
4a50: 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c  mn_text16() fail
4a60: 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ed.  */.    goto
4a70: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61   no_mem;.  }.  a
4a80: 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51  ssert( p->rc==SQ
4a90: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63  LITE_OK || p->rc
4aa0: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b  ==SQLITE_BUSY );
4ab0: 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54  .  p->rc = SQLIT
4ac0: 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20  E_OK;.  assert( 
4ad0: 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b  p->explain==0 );
4ae0: 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74  .  p->pResultSet
4af0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
4b00: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
4b10: 30 3b 0a 20 20 43 48 45 43 4b 5f 46 4f 52 5f 49  0;.  CHECK_FOR_I
4b20: 4e 54 45 52 52 55 50 54 3b 0a 20 20 73 71 6c 69  NTERRUPT;.  sqli
4b30: 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
4b40: 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  l(p);.#ifndef SQ
4b50: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
4b60: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 63 68  SS_CALLBACK.  ch
4b70: 65 63 6b 50 72 6f 67 72 65 73 73 20 3d 20 64 62  eckProgress = db
4b80: 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 3b 0a  ->xProgress!=0;.
4b90: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
4ba0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c  LITE_DEBUG.  sql
4bb0: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4bc0: 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70  alloc();.  if( p
4bd0: 2d 3e 70 63 3d 3d 30 20 20 26 26 20 28 70 2d 3e  ->pc==0  && (p->
4be0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4bf0: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 29 21  TE_VdbeListing)!
4c00: 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  =0 ){.    int i;
4c10: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42  .    printf("VDB
4c20: 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e  E Program Listin
4c30: 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 73 71 6c 69  g:\n");.    sqli
4c40: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4c50: 70 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  p);.    for(i=0;
4c60: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
4c70: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4c80: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
4c90: 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20  , i, &aOp[i]);. 
4ca0: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
4cb0: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
4cc0: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
4cd0: 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d  r(pc=p->pc; rc==
4ce0: 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29  SQLITE_OK; pc++)
4cf0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  {.    assert( pc
4d00: 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70  >=0 && pc<p->nOp
4d10: 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   );.    if( db->
4d20: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
4d30: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64  oto no_mem;.#ifd
4d40: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
4d50: 20 20 20 20 6f 72 69 67 50 63 20 3d 20 70 63 3b      origPc = pc;
4d60: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
4d70: 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65  ite3Hwtime();.#e
4d80: 6e 64 69 66 0a 20 20 20 20 70 4f 70 20 3d 20 26  ndif.    pOp = &
4d90: 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a  aOp[pc];..    /*
4da0: 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63   Only allow trac
4db0: 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45  ing if SQLITE_DE
4dc0: 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
4dd0: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
4de0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
4df0: 66 28 20 70 2d 3e 74 72 61 63 65 20 29 7b 0a 20  f( p->trace ){. 
4e00: 20 20 20 20 20 69 66 28 20 70 63 3d 3d 30 20 29       if( pc==0 )
4e10: 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74 66  {.        printf
4e20: 28 22 56 44 42 45 20 45 78 65 63 75 74 69 6f 6e  ("VDBE Execution
4e30: 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 20   Trace:\n");.   
4e40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4e50: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4e60: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
4e70: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 70 2d  e3VdbePrintOp(p-
4e80: 3e 74 72 61 63 65 2c 20 70 63 2c 20 70 4f 70 29  >trace, pc, pOp)
4e90: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
4ea0: 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68       ..    /* Ch
4eb0: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65  eck to see if we
4ec0: 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74   need to simulat
4ed0: 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20  e an interrupt. 
4ee0: 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65   This only happe
4ef0: 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20  ns.    ** if we 
4f00: 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74  have a special t
4f10: 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a  est build..    *
4f20: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
4f30: 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c  TEST.    if( sql
4f40: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
4f50: 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  ount>0 ){.      
4f60: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
4f70: 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20  t_count--;.     
4f80: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
4f90: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20  errupt_count==0 
4fa0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4fb0: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29  e3_interrupt(db)
4fc0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
4fd0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
4fe0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
4ff0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
5000: 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72    /* Call the pr
5010: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
5020: 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75  if it is configu
5030: 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75  red and the requ
5040: 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 20 20  ired number.    
5050: 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68  ** of VDBE ops h
5060: 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65  ave been execute
5070: 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20  d (either since 
5080: 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20  this invocation 
5090: 6f 66 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  of.    ** sqlite
50a0: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
50b0: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
50c0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
50d0: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
50e0: 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 20  ..    ** If the 
50f0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
5100: 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  k returns non-ze
5110: 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72  ro, exit the vir
5120: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74  tual machine wit
5130: 68 0a 20 20 20 20 2a 2a 20 61 20 72 65 74 75 72  h.    ** a retur
5140: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
5150: 4f 52 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ORT..    */.    
5160: 69 66 28 20 63 68 65 63 6b 50 72 6f 67 72 65 73  if( checkProgres
5170: 73 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64  s ){.      if( d
5180: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3d  b->nProgressOps=
5190: 3d 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 7b  =nProgressOps ){
51a0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 70 72 63  .        int prc
51b0: 3b 0a 20 20 20 20 20 20 20 20 70 72 63 20 3d 20  ;.        prc = 
51c0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
51d0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 3b  ->pProgressArg);
51e0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 72 63  .        if( prc
51f0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
5200: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
5210: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 20 20  ERRUPT;.        
5220: 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
5230: 72 5f 68 61 6c 74 3b 0a 20 20 20 20 20 20 20 20  r_halt;.        
5240: 7d 0a 20 20 20 20 20 20 20 20 6e 50 72 6f 67 72  }.        nProgr
5250: 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20  essOps = 0;.    
5260: 20 20 7d 0a 20 20 20 20 20 20 6e 50 72 6f 67 72    }.      nProgr
5270: 65 73 73 4f 70 73 2b 2b 3b 0a 20 20 20 20 7d 0a  essOps++;.    }.
5280: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f  #endif..    /* O
5290: 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69 74  n any opcode wit
52a0: 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65 72  h the "out2-prer
52b0: 65 6c 61 73 65 22 20 74 61 67 2c 20 66 72 65 65  elase" tag, free
52c0: 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78 74 65   any.    ** exte
52d0: 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  rnal allocations
52e0: 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20   out of mem[p2] 
52f0: 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20  and set mem[p2] 
5300: 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20  to be.    ** an 
5310: 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65 67 65  undefined intege
5320: 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c  r.  Opcodes will
5330: 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69 6e 20   either fill in 
5340: 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
5350: 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76  ** value or conv
5360: 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61  ert mem[p2] to a
5370: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 2e   different type.
5380: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
5390: 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  rt( pOp->opflags
53a0: 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  ==sqlite3OpcodeP
53b0: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
53c0: 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20  ode] );.    if( 
53d0: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
53e0: 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c  PFLG_OUT2_PREREL
53f0: 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 61 73  EASE ){.      as
5400: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5410: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5420: 20 70 4f 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65   pOp->p2<=p->nMe
5430: 6d 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  m );.      pOut 
5440: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
5450: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5460: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5470: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
5480: 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78  VdbeMemReleaseEx
5490: 74 65 72 6e 61 6c 28 70 4f 75 74 29 3b 0a 20 20  ternal(pOut);.  
54a0: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
54b0: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d  = MEM_Int;.    }
54c0: 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20  ..    /* Sanity 
54d0: 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65  checking on othe
54e0: 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69  r operands */.#i
54f0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
5500: 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  G.    if( (pOp->
5510: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
5520: 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN1)!=0 ){.     
5530: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
5540: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5550: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e  rt( pOp->p1<=p->
5560: 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73  nMem );.      as
5570: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5580: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
5590: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
55a0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
55b0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  , &aMem[pOp->p1]
55c0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
55d0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
55e0: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
55f0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5600: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5610: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5620: 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p2<=p->nMem );. 
5630: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
5640: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
5650: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
5660: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5670: 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70  pOp->p2, &aMem[p
5680: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
5690: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
56a0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
56b0: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
56c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
56d0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
56e0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  ( pOp->p3<=p->nM
56f0: 65 6d 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  em );.      asse
5700: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
5710: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
5720: 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
5730: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
5740: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
5750: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28  .    }.    if( (
5760: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
5770: 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b  PFLG_OUT2)!=0 ){
5780: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5790: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
57a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
57b0: 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  2<=p->nMem );.  
57c0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
57d0: 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
57e0: 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p2]);.    }. 
57f0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
5800: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
5810: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  3)!=0 ){.      a
5820: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5830: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5840: 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  ( pOp->p3<=p->nM
5850: 65 6d 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41  em );.      memA
5860: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
5870: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
5880: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
5890: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
58a0: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a  ->opcode ){../**
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 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57  ***********.** W
5900: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61  hat follows is a
5910: 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20   massive switch 
5920: 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20  statement where 
5930: 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d  each case implem
5940: 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61  ents a.** separa
5950: 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  te instruction i
5960: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  n the virtual ma
5970: 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f  chine.  If we fo
5980: 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a  llow the usual.*
5990: 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f  * indentation co
59a0: 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20  nventions, each 
59b0: 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69  case should be i
59c0: 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61  ndented by 6 spa
59d0: 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ces.  But.** tha
59e0: 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61  t is a lot of wa
59f0: 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68  sted space on th
5a00: 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20  e left margin.  
5a10: 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68  So the code with
5a20: 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68  in.** the switch
5a30: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20   statement will 
5a40: 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65  break with conve
5a50: 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75  ntion and be flu
5a60: 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72  sh-left. Another
5a70: 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20  .** big comment 
5a80: 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73  (similar to this
5a90: 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20   one) will mark 
5aa0: 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65  the point in the
5ab0: 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77   code where.** w
5ac0: 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63  e transition bac
5ad0: 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  k to normal inde
5ae0: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
5af0: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66  he formatting of
5b00: 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d   each case is im
5b10: 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61  portant.  The ma
5b20: 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74  kefile for SQLit
5b30: 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74  e.** generates t
5b40: 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f  wo C files "opco
5b50: 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f  des.h" and "opco
5b60: 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69  des.c" by scanni
5b70: 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20  ng this.** file 
5b80: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65  looking for line
5b90: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
5ba0: 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54  h "case OP_".  T
5bb0: 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c  he opcodes.h fil
5bc0: 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69  es.** will be fi
5bd0: 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e  lled with #defin
5be0: 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69  es that give uni
5bf0: 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  que integer valu
5c00: 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70  es to each.** op
5c10: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63  code and the opc
5c20: 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66  odes.c file is f
5c30: 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72  illed with an ar
5c40: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77  ray of strings w
5c50: 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72  here.** each str
5c60: 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f  ing is the symbo
5c70: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  lic name for the
5c80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f   corresponding o
5c90: 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a  pcode.  If the.*
5ca0: 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74  * case statement
5cb0: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
5cc0: 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65  a comment of the
5cd0: 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61   form "/# same a
5ce0: 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61  s ... #/".** tha
5cf0: 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65  t comment is use
5d00: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
5d10: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61  he particular va
5d20: 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
5d30: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b  e..**.** Other k
5d40: 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63  eywords in the c
5d50: 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c  omment that foll
5d60: 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72  ows each case ar
5d70: 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e  e used to.** con
5d80: 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47  struct the OPFLG
5d90: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c  _INITIALIZER val
5da0: 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  ue that initiali
5db0: 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72  zes opcodeProper
5dc0: 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64  ty[]..** Keyword
5dd0: 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20  s include: in1, 
5de0: 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70  in2, in3, out2_p
5df0: 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c  rerelease, out2,
5e00: 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74   out3.  See.** t
5e10: 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b  he mkopcodeh.awk
5e20: 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69   script for addi
5e30: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
5e40: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65  on..**.** Docume
5e50: 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44  ntation about VD
5e60: 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65  BE opcodes is ge
5e70: 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e  nerated by scann
5e80: 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a  ing this file.**
5e90: 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68   for lines of th
5ea0: 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f  at contain "Opco
5eb0: 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65  de:".  That line
5ec0: 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75   and all subsequ
5ed0: 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c  ent.** comment l
5ee0: 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  ines are used in
5ef0: 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
5f00: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74  of the opcode.ht
5f10: 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ml documentation
5f20: 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  .** file..**.** 
5f30: 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20  SUMMARY:.**.**  
5f40: 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73     Formatting is
5f50: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63   important to sc
5f60: 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20  ripts that scan 
5f70: 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20  this file..**   
5f80: 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65    Do not deviate
5f90: 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74   from the format
5fa0: 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65  ting style curre
5fb0: 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a  ntly in 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 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
6010: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f  /* Opcode:  Goto
6020: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
6030: 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  * An uncondition
6040: 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  al jump to addre
6050: 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65  ss P2..** The ne
6060: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  xt instruction e
6070: 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20  xecuted will be 
6080: 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69  .** the one at i
6090: 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65  ndex P2 from the
60a0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a   beginning of.**
60b0: 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
60c0: 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b  .case OP_Goto: {
60d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
60e0: 6a 75 6d 70 20 2a 2f 0a 20 20 43 48 45 43 4b 5f  jump */.  CHECK_
60f0: 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
6100: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
6110: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
6120: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62  * Opcode:  Gosub
6130: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
6140: 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
6150: 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74  rent address ont
6160: 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  o register P1.**
6170: 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74   and then jump t
6180: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f  o address P2..*/
6190: 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20  .case OP_Gosub: 
61a0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
61b0: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
61c0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
61d0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
61e0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
61f0: 45 4d 5f 44 79 6e 29 3d 3d 30 20 29 3b 0a 20 20  EM_Dyn)==0 );.  
6200: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
6210: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e  (p, pIn1);.  pIn
6220: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
6230: 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  nt;.  pIn1->u.i 
6240: 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52  = pc;.  REGISTER
6250: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
6260: 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 4f  pIn1);.  pc = pO
6270: 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65  p->p2 - 1;.  bre
6280: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6290: 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a  :  Return P1 * *
62a0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
62b0: 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
62c0: 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68  ruction after th
62d0: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
62e0: 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ister P1..*/.cas
62f0: 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20  e OP_Return: {  
6300: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
6310: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
6320: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
6330: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
6340: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
6350: 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d   pc = (int)pIn1-
6360: 3e 75 2e 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  >u.i;.  break;.}
6370: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69  ../* Opcode:  Yi
6380: 65 6c 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  eld P1 * * * *.*
6390: 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72  *.** Swap the pr
63a0: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69  ogram counter wi
63b0: 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  th the value in 
63c0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2f 0a  register P1..*/.
63d0: 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b  case OP_Yield: {
63e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
63f0: 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65  n1 */.  int pcDe
6400: 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  st;.  pIn1 = &aM
6410: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6420: 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
6430: 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 3d 3d  ags & MEM_Dyn)==
6440: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
6450: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6460: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
6470: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
6480: 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47  >u.i = pc;.  REG
6490: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
64a0: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63  >p1, pIn1);.  pc
64b0: 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72 65   = pcDest;.  bre
64c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
64d0: 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50  :  HaltIfNull  P
64e0: 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a  1 P2 P3 P4 *.**.
64f0: 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
6500: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6510: 33 2e 20 20 49 66 20 69 73 20 69 73 20 4e 55 4c  3.  If is is NUL
6520: 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e  L then Halt usin
6530: 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  g.** parameter P
6540: 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73  1, P2, and P4 as
6550: 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61 20   if this were a 
6560: 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Halt instruction
6570: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c  .  If the.** val
6580: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6590: 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  3 is not NULL, t
65a0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
65b0: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a   is a no-op..*/.
65c0: 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75  case OP_HaltIfNu
65d0: 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e  ll: {      /* in
65e0: 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61  3 */.  pIn3 = &a
65f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
6600: 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
6610: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
6620: 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61  ) break;.  /* Fa
6630: 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
6640: 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a  OP_Halt */.}../*
6650: 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50   Opcode:  Halt P
6660: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
6670: 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65  * Exit immediate
6680: 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75  ly.  All open cu
6690: 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63  rsors, etc are c
66a0: 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74  losed.** automat
66b0: 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31  ically..**.** P1
66c0: 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63   is the result c
66d0: 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  ode returned by 
66e0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20  sqlite3_exec(), 
66f0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c  sqlite3_reset(),
6700: 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66  .** or sqlite3_f
6710: 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20  inalize().  For 
6720: 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74  a normal halt, t
6730: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51  his should be SQ
6740: 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20  LITE_OK (0)..** 
6750: 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63  For errors, it c
6760: 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  an be some other
6770: 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d   value.  If P1!=
6780: 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64  0 then P2 will d
6790: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
67a0: 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f  her or not to ro
67b0: 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65  llback the curre
67c0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
67d0: 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   Do not rollback
67e0: 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61  .** if P2==OE_Fa
67f0: 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62  il. Do the rollb
6800: 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f  ack if P2==OE_Ro
6810: 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d  llback.  If P2==
6820: 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65  OE_Abort,.** the
6830: 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63  n back out all c
6840: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
6850: 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67   occurred during
6860: 20 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20   this execution 
6870: 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20  of the.** VDBE, 
6880: 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62  but do not rollb
6890: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
68a0: 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ion. .**.** If P
68b0: 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68  4 is not null th
68c0: 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  en it is an erro
68d0: 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
68e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73  ..**.** There is
68f0: 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c   an implied "Hal
6900: 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63  t 0 0 0" instruc
6910: 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74  tion inserted at
6920: 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66   the very end of
6930: 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61  .** every progra
6940: 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61  m.  So a jump pa
6950: 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74  st the last inst
6960: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  ruction of the p
6970: 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65  rogram.** is the
6980: 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69   same as executi
6990: 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  ng Halt..*/.case
69a0: 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 69 66   OP_Halt: {.  if
69b0: 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54  ( pOp->p1==SQLIT
69c0: 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d  E_OK && p->pFram
69d0: 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74  e ){.    /* Halt
69e0: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
69f0: 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c  . Return control
6a00: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66   to the parent f
6a10: 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62  rame. */.    Vdb
6a20: 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d  eFrame *pFrame =
6a30: 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20   p->pFrame;.    
6a40: 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
6a50: 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20  me->pParent;.   
6a60: 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20   p->nFrame--;.  
6a70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
6a80: 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
6a90: 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20  Change);.    pc 
6aa0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61  = sqlite3VdbeFra
6ab0: 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65  meRestore(pFrame
6ac0: 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
6ad0: 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p2==OE_Ignore ){
6ae0: 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75  .      /* Instru
6af0: 63 74 69 6f 6e 20 70 63 20 69 73 20 74 68 65 20  ction pc is the 
6b00: 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20  OP_Program that 
6b10: 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d  invoked the sub-
6b20: 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a  program .      *
6b30: 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  * currently bein
6b40: 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65  g halted. If the
6b50: 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   p2 instruction 
6b60: 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a  of this OP_Halt.
6b70: 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63        ** instruc
6b80: 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f  tion is set to O
6b90: 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74  E_Ignore, then t
6ba0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69  he sub-program i
6bb0: 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20  s throwing.     
6bc0: 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78   ** an IGNORE ex
6bd0: 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73  ception. In this
6be0: 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68   case jump to th
6bf0: 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66  e address specif
6c00: 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20  ied.      ** as 
6c10: 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61  the p2 of the ca
6c20: 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
6c30: 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d  .  */.      pc =
6c40: 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31   p->aOp[pc].p2-1
6c50: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20  ;.    }.    aOp 
6c60: 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d  = p->aOp;.    aM
6c70: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
6c80: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
6c90: 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b  p->rc = pOp->p1;
6ca0: 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f  .  p->errorActio
6cb0: 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b  n = (u8)pOp->p2;
6cc0: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20  .  p->pc = pc;. 
6cd0: 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29   if( pOp->p4.z )
6ce0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d  {.    assert( p-
6cf0: 3e 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc!=SQLITE_OK )
6d00: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  ;.    sqlite3Set
6d10: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
6d20: 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 70 4f  sg, db, "%s", pO
6d30: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 74 65  p->p4.z);.    te
6d40: 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47  stcase( sqlite3G
6d50: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67  lobalConfig.xLog
6d60: 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
6d70: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
6d80: 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20  "abort at %d in 
6d90: 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 2c 20 70  [%s]: %s", pc, p
6da0: 2d 3e 7a 53 71 6c 2c 20 70 4f 70 2d 3e 70 34 2e  ->zSql, pOp->p4.
6db0: 7a 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  z);.  }else if( 
6dc0: 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 74 65 73  p->rc ){.    tes
6dd0: 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c  tcase( sqlite3Gl
6de0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21  obalConfig.xLog!
6df0: 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
6e00: 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22  3_log(pOp->p1, "
6e10: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
6e20: 64 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 22  d at %d in [%s]"
6e30: 2c 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 29 3b 0a  , pc, p->zSql);.
6e40: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
6e50: 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
6e60: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
6e70: 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d  ITE_BUSY || rc==
6e80: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d  SQLITE_OK || rc=
6e90: 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b  =SQLITE_ERROR );
6ea0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
6eb0: 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d  E_BUSY ){.    p-
6ec0: 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
6ed0: 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b  E_BUSY;.  }else{
6ee0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
6ef0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d  =SQLITE_OK || p-
6f00: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  >rc==SQLITE_CONS
6f10: 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73  TRAINT );.    as
6f20: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
6f30: 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  _OK || db->nDefe
6f40: 72 72 65 64 43 6f 6e 73 3e 30 20 29 3b 0a 20 20  rredCons>0 );.  
6f50: 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53    rc = p->rc ? S
6f60: 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51  QLITE_ERROR : SQ
6f70: 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20  LITE_DONE;.  }. 
6f80: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
6f90: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
6fa0: 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a   Integer P1 P2 *
6fb0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33   * *.**.** The 3
6fc0: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  2-bit integer va
6fd0: 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65  lue P1 is writte
6fe0: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
6ff0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
7000: 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20  nteger: {       
7010: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
7020: 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e  ease */.  pOut->
7030: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
7040: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7050: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
7060: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
7070: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
7080: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
7090: 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  r value..** Writ
70a0: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
70b0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
70c0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a  /.case OP_Int64:
70d0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
70e0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
70f0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7100: 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a  ->p4.pI64!=0 );.
7110: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70    pOut->u.i = *p
7120: 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62  Op->p4.pI64;.  b
7130: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
7140: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
7150: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f  ATING_POINT./* O
7160: 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32  pcode: Real * P2
7170: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
7180: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
7190: 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69   a 64-bit floati
71a0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
71b0: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
71c0: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
71d0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
71e0: 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Real: {        
71f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
7200: 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72  K_FLOAT, out2-pr
7210: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f  erelease */.  pO
7220: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
7230: 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20  Real;.  assert( 
7240: 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70  !sqlite3IsNaN(*p
7250: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b  Op->p4.pReal) );
7260: 0a 20 20 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f  .  pOut->r = *pO
7270: 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62  p->p4.pReal;.  b
7280: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
7290: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
72a0: 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g8 * P2 * P4 *.*
72b0: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
72c0: 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74  o a nul terminat
72d0: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e  ed UTF-8 string.
72e0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
72f0: 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20  transformed .** 
7300: 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e  into an OP_Strin
7310: 67 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  g before it is e
7320: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
7330: 66 69 72 73 74 20 74 69 6d 65 2e 0a 2a 2f 0a 63  first time..*/.c
7340: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20  ase OP_String8: 
7350: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  {         /* sam
7360: 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20  e as TK_STRING, 
7370: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7380: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7390: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
73a0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
73b0: 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70  String;.  pOp->p
73c0: 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  1 = sqlite3Strle
73d0: 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  n30(pOp->p4.z);.
73e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
73f0: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28  OMIT_UTF16.  if(
7400: 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54   encoding!=SQLIT
7410: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63  E_UTF8 ){.    rc
7420: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
7430: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
7440: 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c  p->p4.z, -1, SQL
7450: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
7460: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66  _STATIC);.    if
7470: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  ( rc==SQLITE_TOO
7480: 42 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62  BIG ) goto too_b
7490: 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49  ig;.    if( SQLI
74a0: 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64  TE_OK!=sqlite3Vd
74b0: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
74c0: 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
74d0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
74e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
74f0: 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d  ->zMalloc==pOut-
7500: 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >z );.    assert
7510: 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20  ( pOut->flags & 
7520: 4d 45 4d 5f 44 79 6e 20 29 3b 0a 20 20 20 20 70  MEM_Dyn );.    p
7530: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30  Out->zMalloc = 0
7540: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
7550: 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b  s |= MEM_Static;
7560: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
7570: 20 26 3d 20 7e 4d 45 4d 5f 44 79 6e 3b 0a 20 20   &= ~MEM_Dyn;.  
7580: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
7590: 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b  e==P4_DYNAMIC ){
75a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
75b0: 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34  Free(db, pOp->p4
75c0: 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  .z);.    }.    p
75d0: 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
75e0: 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70  DYNAMIC;.    pOp
75f0: 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a  ->p4.z = pOut->z
7600: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ;.    pOp->p1 = 
7610: 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e  pOut->n;.  }.#en
7620: 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  dif.  if( pOp->p
7630: 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  1>db->aLimit[SQL
7640: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
7650: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
7660: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20  o_big;.  }.  /* 
7670: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
7680: 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f  the next case, O
7690: 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20  P_String */.}.  
76a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
76b0: 6e 67 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ng P1 P2 * P4 *.
76c0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  **.** The string
76d0: 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e   value P4 of len
76e0: 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69  gth P1 (bytes) i
76f0: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
7700: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
7710: 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20   OP_String: {   
7720: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
7730: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61  rerelease */.  a
7740: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
7750: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  !=0 );.  pOut->f
7760: 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
7770: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
7780: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
7790: 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75  pOp->p4.z;.  pOu
77a0: 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  t->n = pOp->p1;.
77b0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
77c0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
77d0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
77e0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
77f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
7800: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
7810: 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69  * Write a NULL i
7820: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7830: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
7840: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
7850: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7860: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   */.  pOut->flag
7870: 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
7880: 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
7890: 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32  code: Blob P1 P2
78a0: 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 70   * P4.**.** P4 p
78b0: 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20  oints to a blob 
78c0: 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73  of data P1 bytes
78d0: 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68   long.  Store th
78e0: 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65  is.** blob in re
78f0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
7900: 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20  se OP_Blob: {   
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7920: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7930: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7940: 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d  ->p1 <= SQLITE_M
7950: 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73  AX_LENGTH );.  s
7960: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
7970: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
7980: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
7990: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
79a0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
79b0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
79c0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
79d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
79e0: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
79f0: 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 61  * P4 *.**.** Tra
7a00: 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73  nsfer the values
7a10: 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65   of bound parame
7a20: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
7a30: 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66  ster P2.**.** If
7a40: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69   the parameter i
7a50: 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74  s named, then it
7a60: 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69  s name appears i
7a70: 6e 20 50 34 20 61 6e 64 20 50 33 3d 3d 31 2e 0a  n P4 and P3==1..
7a80: 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
7a90: 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  is used by sqlit
7aa0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
7ab0: 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73  r_name()..*/.cas
7ac0: 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b  e OP_Variable: {
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
7ae0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7af0: 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20  /.  Mem *pVar;  
7b00: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65       /* Value be
7b10: 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20  ing transferred 
7b20: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
7b30: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
7b40: 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20  p1<=p->nVar );. 
7b50: 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61 72   pVar = &p->aVar
7b60: 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
7b70: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
7b80: 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29 20  MemTooBig(pVar) 
7b90: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
7ba0: 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  big;.  }.  sqlit
7bb0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
7bc0: 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c  Copy(pOut, pVar,
7bd0: 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
7be0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
7bf0: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
7c00: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7c10: 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20  : Move P1 P2 P3 
7c20: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
7c30: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
7c40: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d  ister P1..P1+P3-
7c50: 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72  1 over into.** r
7c60: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
7c70: 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73  P3-1.  Registers
7c80: 20 50 31 2e 2e 50 31 2b 50 31 2d 31 20 61 72 65   P1..P1+P1-1 are
7c90: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
7ca0: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
7cb0: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
7cc0: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
7cd0: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20  P1..P1+P3-1 and 
7ce0: 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f  P2..P2+P3-1 to o
7cf0: 76 65 72 6c 61 70 2e 0a 2a 2f 0a 63 61 73 65 20  verlap..*/.case 
7d00: 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68 61  OP_Move: {.  cha
7d10: 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f 2a  r *zMalloc;   /*
7d20: 20 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62 6c   Holding variabl
7d30: 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64 20  e for allocated 
7d40: 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
7d50: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
7d60: 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
7d70: 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79  ers left to copy
7d80: 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20   */.  int p1;   
7d90: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
7da0: 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20  er to copy from 
7db0: 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
7dc0: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
7dd0: 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a  r to copy to */.
7de0: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
7df0: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
7e00: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
7e10: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26    assert( n>0 &&
7e20: 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b   p1>0 && p2>0 );
7e30: 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c  .  assert( p1+n<
7e40: 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20  =p2 || p2+n<=p1 
7e50: 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  );..  pIn1 = &aM
7e60: 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  em[p1];.  pOut =
7e70: 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 77 68   &aMem[p2];.  wh
7e80: 69 6c 65 28 20 6e 2d 2d 20 29 7b 0a 20 20 20 20  ile( n-- ){.    
7e90: 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61  assert( pOut<=&a
7ea0: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29 3b 0a  Mem[p->nMem] );.
7eb0: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
7ec0: 3c 3d 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d  <=&aMem[p->nMem]
7ed0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
7ee0: 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
7ef0: 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74   );.    memAbout
7f00: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
7f10: 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c 6f 63 20 3d  );.    zMalloc =
7f20: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a   pOut->zMalloc;.
7f30: 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f      pOut->zMallo
7f40: 63 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  c = 0;.    sqlit
7f50: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
7f60: 75 74 2c 20 70 49 6e 31 29 3b 0a 20 20 20 20 70  ut, pIn1);.    p
7f70: 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a  In1->zMalloc = z
7f80: 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49  Malloc;.    REGI
7f90: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
7fa0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
7fb0: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
7fc0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
7fd0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20  /* Opcode: Copy 
7fe0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
7ff0: 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  * Make a copy of
8000: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74   register P1 int
8010: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
8020: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
8030: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65  ction makes a de
8040: 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ep copy of the v
8050: 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61  alue.  A duplica
8060: 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66  te.** is made of
8070: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
8080: 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53  lob constant.  S
8090: 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79  ee also OP_SCopy
80a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70  ..*/.case OP_Cop
80b0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
80c0: 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f   /* in1, out2 */
80d0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
80e0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
80f0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
8100: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
8110: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
8120: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
8130: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
8140: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
8150: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
8160: 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45  pOut);.  REGISTE
8170: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
8180: 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b   pOut);.  break;
8190: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
81a0: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
81b0: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
81c0: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
81d0: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
81e0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
81f0: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
8200: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
8210: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
8220: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
8230: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
8240: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
8250: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
8260: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
8270: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
8280: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
8290: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
82a0: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
82b0: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
82c0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
82d0: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
82e0: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
82f0: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
8300: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
8310: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
8320: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
8330: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
8340: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
8350: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
8360: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
8370: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
8380: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
8390: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
83a0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
83b0: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
83c0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
83d0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
83e0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
83f0: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
8400: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
8410: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
8420: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
8430: 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  hem);.#ifdef SQL
8440: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
8450: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
8460: 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f  ==0 ) pOut->pSco
8470: 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23  pyFrom = pIn1;.#
8480: 65 6e 64 69 66 0a 20 20 52 45 47 49 53 54 45 52  endif.  REGISTER
8490: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
84a0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
84b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
84c0: 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20  sultRow P1 P2 * 
84d0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  * *.**.** The re
84e0: 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75  gisters P1 throu
84f0: 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61  gh P1+P2-1 conta
8500: 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  in a single row 
8510: 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54  of.** results. T
8520: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65  his opcode cause
8530: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  s the sqlite3_st
8540: 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72  ep() call to ter
8550: 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61  minate.** with a
8560: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74  n SQLITE_ROW ret
8570: 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20  urn code and it 
8580: 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69  sets up the sqli
8590: 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75  te3_stmt.** stru
85a0: 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65  cture to provide
85b0: 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 74   access to the t
85c0: 6f 70 20 50 31 20 76 61 6c 75 65 73 20 61 73 20  op P1 values as 
85d0: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 72 6f  the result.** ro
85e0: 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  w..*/.case OP_Re
85f0: 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d  sultRow: {.  Mem
8600: 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b   *pMem;.  int i;
8610: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52  .  assert( p->nR
8620: 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70  esColumn==pOp->p
8630: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
8640: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
8650: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f  sert( pOp->p1+pO
8660: 70 2d 3e 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31  p->p2<=p->nMem+1
8670: 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69   );..  /* If thi
8680: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
8690: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
86a0: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
86b0: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
86c0: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
86d0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
86e0: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
86f0: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
8700: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
8710: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
8720: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
8730: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
8740: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
8750: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
8760: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
8770: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
8780: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
8790: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
87a0: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
87b0: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
87c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
87d0: 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54   /* If the SQLIT
87e0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67  E_CountRows flag
87f0: 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74   is set in sqlit
8800: 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  e3.flags mask, t
8810: 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74  hen .  ** DML st
8820: 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20  atements invoke 
8830: 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72  this opcode to r
8840: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
8850: 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d   of rows .  ** m
8860: 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75  odified to the u
8870: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65  ser. This is the
8880: 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61   only way that a
8890: 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70   VM that.  ** op
88a0: 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ens a statement 
88b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
88c0: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
88d0: 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  de..  **.  ** In
88e0: 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75   case this is su
88f0: 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20  ch a statement, 
8900: 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d  close any statem
8910: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
8920: 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74    ** opened by t
8930: 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65  his VM before re
8940: 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20  turning control 
8950: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
8960: 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73  s is to.  ** ens
8970: 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65  ure that stateme
8980: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
8990: 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65  are always neste
89a0: 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69  d, not overlappi
89b0: 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  ng..  ** If the 
89c0: 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74  open statement-t
89d0: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
89e0: 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74  t closed here, t
89f0: 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a  hen the user.  *
8a00: 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68  * may step anoth
8a10: 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73  er VM that opens
8a20: 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65   its own stateme
8a30: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
8a40: 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65  This.  ** may le
8a50: 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e  ad to overlappin
8a60: 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  g statement tran
8a70: 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  sactions..  **. 
8a80: 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e   ** The statemen
8a90: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
8aa0: 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76   never a top-lev
8ab0: 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  el transaction. 
8ac0: 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20   Hence.  ** the 
8ad0: 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c  RELEASE call bel
8ae0: 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  ow can never fai
8af0: 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  l..  */.  assert
8b00: 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
8b10: 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26  =0 || db->flags&
8b20: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
8b30: 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
8b40: 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65  e3VdbeCloseState
8b50: 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e  ment(p, SAVEPOIN
8b60: 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66  T_RELEASE);.  if
8b70: 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
8b80: 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72  TE_OK) ){.    br
8b90: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
8ba0: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
8bb0: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
8bc0: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
8bd0: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
8be0: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
8bf0: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
8c00: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
8c10: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
8c20: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
8c30: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
8c40: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
8c50: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
8c60: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
8c70: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
8c80: 73 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20  s side effect.. 
8c90: 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e   */.  pMem = p->
8ca0: 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d  pResultSet = &aM
8cb0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66  em[pOp->p1];.  f
8cc0: 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70  or(i=0; i<pOp->p
8cd0: 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73  2; i++){.    ass
8ce0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
8cf0: 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20  &pMem[i]) );.   
8d00: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
8d10: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61  &pMem[i]);.    a
8d20: 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e  ssert( (pMem[i].
8d30: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65  flags & MEM_Ephe
8d40: 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20  m)==0.          
8d50: 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c    || (pMem[i].fl
8d60: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
8d70: 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
8d80: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8d90: 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26  emNulTerminate(&
8da0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 73 71  pMem[i]);.    sq
8db0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f 72  lite3VdbeMemStor
8dc0: 65 54 79 70 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  eType(&pMem[i]);
8dd0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
8de0: 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26  ACE(pOp->p1+i, &
8df0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pMem[i]);.  }.  
8e00: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
8e10: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
8e20: 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e  em;..  /* Return
8e30: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
8e40: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 20 2b 20  .  p->pc = pc + 
8e50: 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
8e60: 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62  _ROW;.  goto vdb
8e70: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
8e80: 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50  Opcode: Concat P
8e90: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
8ea0: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
8eb0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
8ec0: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
8ed0: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
8ee0: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
8ef0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
8f00: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
8f10: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
8f20: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
8f30: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
8f40: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
8f50: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
8f60: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
8f70: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
8f80: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
8f90: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
8fa0: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
8fb0: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
8fc0: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
8fd0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
8fe0: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
8ff0: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
9000: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
9010: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
9020: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
9030: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
9040: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
9050: 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  yte;..  pIn1 = &
9060: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
9070: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
9080: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
9090: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
90a0: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21  .  assert( pIn1!
90b0: 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28  =pOut );.  if( (
90c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
90d0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
90e0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
90f0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
9100: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
9110: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45  eak;.  }.  if( E
9120: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20  xpandBlob(pIn1) 
9130: 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  || ExpandBlob(pI
9140: 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  n2) ) goto no_me
9150: 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  m;.  Stringify(p
9160: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
9170: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
9180: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
9190: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
91a0: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
91b0: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
91c0: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
91d0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
91e0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
91f0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
9200: 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a  pOut, MEM_Str);.
9210: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
9220: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
9230: 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75  int)nByte+2, pOu
9240: 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20  t==pIn2) ){.    
9250: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
9260: 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e  .  if( pOut!=pIn
9270: 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  2 ){.    memcpy(
9280: 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a  pOut->z, pIn2->z
9290: 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a  , pIn2->n);.  }.
92a0: 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e    memcpy(&pOut->
92b0: 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31  z[pIn2->n], pIn1
92c0: 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20  ->z, pIn1->n);. 
92d0: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 20   pOut->z[nByte] 
92e0: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  = 0;.  pOut->z[n
92f0: 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70  Byte+1] = 0;.  p
9300: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
9310: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
9320: 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
9330: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
9340: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
9350: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
9360: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
9370: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20  ./* Opcode: Add 
9380: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
9390: 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65  ** Add the value
93a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
93b0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
93c0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
93d0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
93e0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
93f0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
9400: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
9410: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
9420: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
9430: 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32  : Multiply P1 P2
9440: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 0a 2a 2a   P3 * *.**.**.**
9450: 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61   Multiply the va
9460: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9470: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
9480: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
9490: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
94a0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
94b0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
94c0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
94d0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
94e0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
94f0: 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31  ode: Subtract P1
9500: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
9510: 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61   Subtract the va
9520: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
9530: 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75  P1 from the valu
9540: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
9550: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
9560: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
9570: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
9580: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
9590: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
95a0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
95b0: 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31  pcode: Divide P1
95c0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
95d0: 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75   Divide the valu
95e0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
95f0: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
9600: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
9610: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
9620: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
9630: 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20   P3 (P3=P2/P1). 
9640: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
9650: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
9660: 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  is zero, then th
9670: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
9680: 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  . If either inpu
9690: 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  t is .** NULL, t
96a0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
96b0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
96c0: 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32   Remainder P1 P2
96d0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6f   P3 * *.**.** Co
96e0: 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e  mpute the remain
96f0: 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65  der after intege
9700: 72 20 64 69 76 69 73 69 6f 6e 20 6f 66 20 74 68  r division of th
9710: 65 20 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65  e value in.** re
9720: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
9730: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
9740: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
9750: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50 33  the result in P3
9760: 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  . .** If the val
9770: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
9780: 32 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65  2 is zero the re
9790: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  sult is NULL..**
97a0: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
97b0: 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  nd is NULL, the 
97c0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
97d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20  */.case OP_Add: 
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97f0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
9800: 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  PLUS, in1, in2, 
9810: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
9820: 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20  Subtract:       
9830: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
9840: 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c  s TK_MINUS, in1,
9850: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
9860: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9880: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c  same as TK_STAR,
9890: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
98a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64  */.case OP_Divid
98b0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
98c0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
98d0: 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c  SLASH, in1, in2,
98e0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
98f0: 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20  _Remainder: {   
9900: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
9910: 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20  as TK_REM, in1, 
9920: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
9930: 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f  nt flags;      /
9940: 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a  * Combined MEM_*
9950: 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68   flags from both
9960: 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 69 36 34   inputs */.  i64
9970: 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iA;         /* 
9980: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
9990: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
99a0: 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20  .  i64 iB;      
99b0: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
99c0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
99d0: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
99e0: 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rA;      /* Rea
99f0: 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  l value of left 
9a00: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
9a10: 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20  ble rB;      /* 
9a20: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69  Real value of ri
9a30: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a  ght operand */..
9a40: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9a50: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79  Op->p1];.  apply
9a60: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
9a70: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
9a80: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
9a90: 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
9aa0: 66 69 6e 69 74 79 28 70 49 6e 32 29 3b 0a 20 20  finity(pIn2);.  
9ab0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
9ac0: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d  ->p3];.  flags =
9ad0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
9ae0: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
9af0: 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  ( (flags & MEM_N
9b00: 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61  ull)!=0 ) goto a
9b10: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
9b20: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20  _is_null;.  if( 
9b30: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
9b40: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
9b50: 5f 49 6e 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29  _Int)==MEM_Int )
9b60: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
9b70: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
9b80: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77  In2->u.i;.    sw
9b90: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
9ba0: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
9bb0: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
9bc0: 69 42 20 2b 3d 20 69 41 3b 20 20 20 20 20 20 20  iB += iA;       
9bd0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
9be0: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
9bf0: 20 20 69 42 20 2d 3d 20 69 41 3b 20 20 20 20 20    iB -= iA;     
9c00: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
9c10: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
9c20: 20 20 20 20 69 42 20 2a 3d 20 69 41 3b 20 20 20      iB *= iA;   
9c30: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
9c40: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
9c50: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
9c60: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
9c70: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
9c80: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 2f  _null;.        /
9c90: 2a 20 44 69 76 69 64 69 6e 67 20 74 68 65 20 6c  * Dividing the l
9ca0: 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  argest possible 
9cb0: 6e 65 67 61 74 69 76 65 20 36 34 2d 62 69 74 20  negative 64-bit 
9cc0: 69 6e 74 65 67 65 72 20 28 31 3c 3c 36 33 29 20  integer (1<<63) 
9cd0: 62 79 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 2d  by .        ** -
9ce0: 31 20 72 65 74 75 72 6e 73 20 61 6e 20 69 6e 74  1 returns an int
9cf0: 65 67 65 72 20 74 6f 6f 20 6c 61 72 67 65 20 74  eger too large t
9d00: 6f 20 73 74 6f 72 65 20 69 6e 20 61 20 36 34 2d  o store in a 64-
9d10: 62 69 74 20 64 61 74 61 2d 74 79 70 65 2e 20 4f  bit data-type. O
9d20: 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 6d  n.        ** som
9d30: 65 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2c  e architectures,
9d40: 20 74 68 65 20 76 61 6c 75 65 20 6f 76 65 72 66   the value overf
9d50: 6c 6f 77 73 20 74 6f 20 28 31 3c 3c 36 33 29 2e  lows to (1<<63).
9d60: 20 4f 6e 20 6f 74 68 65 72 73 2c 0a 20 20 20 20   On others,.    
9d70: 20 20 20 20 2a 2a 20 61 20 53 49 47 46 50 45 20      ** a SIGFPE 
9d80: 69 73 20 69 73 73 75 65 64 2e 20 54 68 65 20 66  is issued. The f
9d90: 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
9da0: 6e 74 20 6e 6f 72 6d 61 6c 69 7a 65 73 20 74 68  nt normalizes th
9db0: 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 62 65  is.        ** be
9dc0: 68 61 76 69 6f 72 20 73 6f 20 74 68 61 74 20 61  havior so that a
9dd0: 6c 6c 20 61 72 63 68 69 74 65 63 74 75 72 65 73  ll architectures
9de0: 20 62 65 68 61 76 65 20 61 73 20 69 66 20 69 6e   behave as if in
9df0: 74 65 67 65 72 20 0a 20 20 20 20 20 20 20 20 2a  teger .        *
9e00: 2a 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72  * overflow occur
9e10: 72 65 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  red..        */.
9e20: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
9e30: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
9e40: 53 54 5f 49 4e 54 36 34 20 29 20 69 41 20 3d 20  ST_INT64 ) iA = 
9e50: 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d  1;.        iB /=
9e60: 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   iA;.        bre
9e70: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
9e80: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
9e90: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
9ea0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
9eb0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
9ec0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
9ed0: 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20  =-1 ) iA = 1;.  
9ee0: 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a        iB %= iA;.
9ef0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
9f00: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
9f10: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b   pOut->u.i = iB;
9f20: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
9f30: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
9f40: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
9f50: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
9f60: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
9f70: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
9f80: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
9f90: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
9fa0: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
9fb0: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
9fc0: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
9fd0: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
9fe0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
9ff0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
a000: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
a010: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
a020: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
a030: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
a040: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
a050: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
a060: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
a070: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
a080: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
a090: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
a0a0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
a0b0: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
a0c0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
a0d0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
a0e0: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
a0f0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a100: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
a110: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
a120: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
a130: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
a140: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
a150: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
a160: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
a170: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
a180: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
a190: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
a1a0: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
a1b0: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
a1c0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
a1d0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
a1e0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
a1f0: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
a200: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
a210: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
a220: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
a230: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
a240: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
a250: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
a260: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
a270: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
a280: 2d 3e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  ->r = rB;.    Me
a290: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
a2a0: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
a2b0: 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d    if( (flags & M
a2c0: 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Real)==0 ){. 
a2d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a2e0: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
a2f0: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  pOut);.    }.#en
a300: 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
a310: 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  ..arithmetic_res
a320: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73  ult_is_null:.  s
a330: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
a340: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72  Null(pOut);.  br
a350: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a360: 65 3a 20 43 6f 6c 6c 53 65 71 20 2a 20 2a 20 50  e: CollSeq * * P
a370: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
a380: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
a390: 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20  lSeq struct. If 
a3a0: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
a3b0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
a3c0: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
a3d0: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
a3e0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
a3f0: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
a400: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
a410: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
a420: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
a430: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
a440: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
a450: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
a460: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ..**.** The inte
a470: 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68  rface used by th
a480: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
a490: 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e   of the aforemen
a4a0: 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  tioned functions
a4b0: 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20  .** to retrieve 
a4c0: 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
a4d0: 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68  quence set by th
a4e0: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74  is opcode is not
a4f0: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75   available.** pu
a500: 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20  blicly, only to 
a510: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64  user functions d
a520: 65 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63  efined in func.c
a530: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
a540: 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74  lSeq: {.  assert
a550: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
a560: 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 62  4_COLLSEQ );.  b
a570: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a580: 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20  de: Function P1 
a590: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
a5a0: 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20  * Invoke a user 
a5b0: 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20  function (P4 is 
a5c0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46  a pointer to a F
a5d0: 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72  unction structur
a5e0: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
a5f0: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20  s the function) 
a600: 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74  with P5 argument
a610: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
a620: 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20  ister P2 and.** 
a630: 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65  successors.  The
a640: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
a650: 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  unction is store
a660: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
a670: 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  ..** Register P3
a680: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65   must not be one
a690: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
a6a0: 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50   inputs..**.** P
a6b0: 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69  1 is a 32-bit bi
a6c0: 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67  tmask indicating
a6d0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
a6e0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f  each argument to
a6f0: 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f   the .** functio
a700: 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64  n was determined
a710: 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20   to be constant 
a720: 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e  at compile time.
a730: 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   If the first.**
a740: 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f   argument was co
a750: 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20  nstant then bit 
a760: 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20  0 of P1 is set. 
a770: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
a780: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
a790: 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61  ther meta data a
a7a0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a7b0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61   user function a
a7c0: 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  rgument using th
a7d0: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74  e.** sqlite3_set
a7e0: 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d  _auxdata() API m
a7f0: 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74  ay be safely ret
a800: 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20  ained until the 
a810: 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  next.** invocati
a820: 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  on of this opcod
a830: 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
a840: 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20 41  o: AggStep and A
a850: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20  ggFinal.*/.case 
a860: 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20  OP_Function: {. 
a870: 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70   int i;.  Mem *p
a880: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  Arg;.  sqlite3_c
a890: 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71  ontext ctx;.  sq
a8a0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
a8b0: 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  Val;.  int n;.. 
a8c0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
a8d0: 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67  apVal = p->apArg
a8e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61  ;.  assert( apVa
a8f0: 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61  l || n==0 );.  a
a900: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
a910: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
a920: 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 20 3d  nMem );.  pOut =
a930: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
a940: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
a950: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
a960: 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
a970: 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
a980: 4f 70 2d 3e 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65  Op->p2+n<=p->nMe
a990: 6d 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  m+1) );.  assert
a9a0: 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
a9b0: 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  2 || pOp->p3>=pO
a9c0: 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72  p->p2+n );.  pAr
a9d0: 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  g = &aMem[pOp->p
a9e0: 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  2];.  for(i=0; i
a9f0: 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29  <n; i++, pArg++)
aa00: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
aa10: 6d 49 73 56 61 6c 69 64 28 70 41 72 67 29 20 29  mIsValid(pArg) )
aa20: 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d  ;.    apVal[i] =
aa30: 20 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70 68   pArg;.    Deeph
aa40: 65 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29 3b  emeralize(pArg);
aa50: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
aa60: 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 41 72  MemStoreType(pAr
aa70: 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  g);.    REGISTER
aa80: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
aa90: 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20  , pArg);.  }..  
aaa0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
aab0: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
aac0: 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  || pOp->p4type==
aad0: 50 34 5f 56 44 42 45 46 55 4e 43 20 29 3b 0a 20  P4_VDBEFUNC );. 
aae0: 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
aaf0: 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 7b 0a  ==P4_FUNCDEF ){.
ab00: 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20      ctx.pFunc = 
ab10: 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
ab20: 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63     ctx.pVdbeFunc
ab30: 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
ab40: 20 20 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63     ctx.pVdbeFunc
ab50: 20 3d 20 28 56 64 62 65 46 75 6e 63 2a 29 70 4f   = (VdbeFunc*)pO
ab60: 70 2d 3e 70 34 2e 70 56 64 62 65 46 75 6e 63 3b  p->p4.pVdbeFunc;
ab70: 0a 20 20 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  .    ctx.pFunc =
ab80: 20 63 74 78 2e 70 56 64 62 65 46 75 6e 63 2d 3e   ctx.pVdbeFunc->
ab90: 70 46 75 6e 63 3b 0a 20 20 7d 0a 0a 20 20 63 74  pFunc;.  }..  ct
aba0: 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  x.s.flags = MEM_
abb0: 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 64 62  Null;.  ctx.s.db
abc0: 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 73 2e 78   = db;.  ctx.s.x
abd0: 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73  Del = 0;.  ctx.s
abe0: 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 0a 20  .zMalloc = 0;.. 
abf0: 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63   /* The output c
ac00: 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20  ell may already 
ac10: 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61 6c  have a buffer al
ac20: 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20  located. Move.  
ac30: 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74  ** the pointer t
ac40: 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e 20 63 61  o ctx.s so in ca
ac50: 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  se the user-func
ac60: 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a  tion can use.  *
ac70: 2a 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c  * the already al
ac80: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69  located buffer i
ac90: 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61  nstead of alloca
aca0: 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a  ting a new one..
acb0: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64    */.  sqlite3Vd
acc0: 62 65 4d 65 6d 4d 6f 76 65 28 26 63 74 78 2e 73  beMemMove(&ctx.s
acd0: 2c 20 70 4f 75 74 29 3b 0a 20 20 4d 65 6d 53 65  , pOut);.  MemSe
ace0: 74 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73  tTypeFlag(&ctx.s
acf0: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20  , MEM_Null);..  
ad00: 63 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b  ctx.isError = 0;
ad10: 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63  .  if( ctx.pFunc
ad20: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
ad30: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29  _FUNC_NEEDCOLL )
ad40: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
ad50: 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73  p>aOp );.    ass
ad60: 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74  ert( pOp[-1].p4t
ad70: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
ad80: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
ad90: 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
ada0: 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
adb0: 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70   ctx.pColl = pOp
adc0: 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20  [-1].p4.pColl;. 
add0: 20 7d 0a 20 20 28 2a 63 74 78 2e 70 46 75 6e 63   }.  (*ctx.pFunc
ade0: 2d 3e 78 46 75 6e 63 29 28 26 63 74 78 2c 20 6e  ->xFunc)(&ctx, n
adf0: 2c 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50  , apVal); /* IMP
ae00: 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
ae10: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  */.  if( db->mal
ae20: 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20  locFailed ){.   
ae30: 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67 68 20   /* Even though 
ae40: 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73 20 66  a malloc() has f
ae50: 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70 6c 65  ailed, the imple
ae60: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
ae70: 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66 75 6e  .    ** user fun
ae80: 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65 20 63  ction may have c
ae90: 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74 65 33  alled an sqlite3
aea0: 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20 66 75  _result_XXX() fu
aeb0: 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 74 6f  nction.    ** to
aec0: 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65 2e   return a value.
aed0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
aee0: 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61 6e 79  all releases any
aef0: 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20 20 2a   resources.    *
af00: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
af10: 68 20 73 75 63 68 20 61 20 76 61 6c 75 65 2e 0a  h such a value..
af20: 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
af30: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
af40: 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20 67 6f  (&ctx.s);.    go
af50: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
af60: 20 20 2f 2a 20 49 66 20 61 6e 79 20 61 75 78 69    /* If any auxi
af70: 6c 69 61 72 79 20 64 61 74 61 20 66 75 6e 63 74  liary data funct
af80: 69 6f 6e 73 20 68 61 76 65 20 62 65 65 6e 20 63  ions have been c
af90: 61 6c 6c 65 64 20 62 79 20 74 68 69 73 20 75 73  alled by this us
afa0: 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 2a  er function,.  *
afb0: 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 63 61  * immediately ca
afc0: 6c 6c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  ll the destructo
afd0: 72 20 66 6f 72 20 61 6e 79 20 6e 6f 6e 2d 73 74  r for any non-st
afe0: 61 74 69 63 20 76 61 6c 75 65 73 2e 0a 20 20 2a  atic values..  *
aff0: 2f 0a 20 20 69 66 28 20 63 74 78 2e 70 56 64 62  /.  if( ctx.pVdb
b000: 65 46 75 6e 63 20 29 7b 0a 20 20 20 20 73 71 6c  eFunc ){.    sql
b010: 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75  ite3VdbeDeleteAu
b020: 78 44 61 74 61 28 63 74 78 2e 70 56 64 62 65 46  xData(ctx.pVdbeF
b030: 75 6e 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  unc, pOp->p1);. 
b040: 20 20 20 70 4f 70 2d 3e 70 34 2e 70 56 64 62 65     pOp->p4.pVdbe
b050: 46 75 6e 63 20 3d 20 63 74 78 2e 70 56 64 62 65  Func = ctx.pVdbe
b060: 46 75 6e 63 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  Func;.    pOp->p
b070: 34 74 79 70 65 20 3d 20 50 34 5f 56 44 42 45 46  4type = P4_VDBEF
b080: 55 4e 43 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  UNC;.  }..  /* I
b090: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72  f the function r
b0a0: 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72  eturned an error
b0b0: 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  , throw an excep
b0c0: 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74  tion */.  if( ct
b0d0: 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  x.isError ){.   
b0e0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
b0f0: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
b100: 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
b110: 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78  _value_text(&ctx
b120: 2e 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63  .s));.    rc = c
b130: 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  tx.isError;.  }.
b140: 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
b150: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
b160: 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73  ction into regis
b170: 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69  ter P3 */.  sqli
b180: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
b190: 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e  oding(&ctx.s, en
b1a0: 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74  coding);.  sqlit
b1b0: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
b1c0: 75 74 2c 20 26 63 74 78 2e 73 29 3b 0a 20 20 69  ut, &ctx.s);.  i
b1d0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
b1e0: 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b  mTooBig(pOut) ){
b1f0: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
b200: 67 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54 45  g;.  }.  REGISTE
b210: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
b220: 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45   pOut);.  UPDATE
b230: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
b240: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
b250: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41  ./* Opcode: BitA
b260: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
b270: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
b280: 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74  it-wise AND of t
b290: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
b2a0: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
b2b0: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
b2c0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b2d0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b2e0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b2f0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b300: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b310: 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50  code: BitOr P1 P
b320: 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  2 P3 * *.**.** T
b330: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
b340: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
b350: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
b360: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
b370: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b380: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b390: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b3a0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b3b0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b3c0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
b3d0: 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33  iftLeft P1 P2 P3
b3e0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74   * *.**.** Shift
b3f0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
b400: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b410: 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79  2 to the left by
b420: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
b430: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
b440: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
b450: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
b460: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
b470: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b480: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b490: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b4a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b4b0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b4c0: 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20  : ShiftRight P1 
b4d0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
b4e0: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
b4f0: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
b500: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69  ter P2 to the ri
b510: 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75  ght by the.** nu
b520: 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65  mber of bits spe
b530: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e  cified by the in
b540: 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65  teger in registe
b550: 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74  r P1..** Store t
b560: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b570: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b580: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b590: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b5a0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
b5b0: 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20  e OP_BitAnd:    
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b5d0: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e  same as TK_BITAN
b5e0: 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
b5f0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  3 */.case OP_Bit
b600: 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Or:             
b610: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b620: 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69  TK_BITOR, in1, i
b630: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b640: 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20   OP_ShiftLeft:  
b650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b660: 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54  ame as TK_LSHIFT
b670: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b680: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
b690: 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20  tRight: {       
b6a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b6b0: 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_RSHIFT, in1, i
b6c0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
b6d0: 34 20 61 3b 0a 20 20 69 36 34 20 62 3b 0a 0a 20  4 a;.  i64 b;.. 
b6e0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
b6f0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
b700: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
b710: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
b720: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
b730: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
b740: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
b750: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
b760: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
b770: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
b780: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 61 20 3d 20  reak;.  }.  a = 
b790: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
b7a0: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 62 20 3d  lue(pIn2);.  b =
b7b0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
b7c0: 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 73 77  alue(pIn1);.  sw
b7d0: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
b7e0: 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50  e ){.    case OP
b7f0: 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 61 20  _BitAnd:      a 
b800: 26 3d 20 62 3b 20 20 20 20 20 62 72 65 61 6b 3b  &= b;     break;
b810: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 42 69 74  .    case OP_Bit
b820: 4f 72 3a 20 20 20 20 20 20 20 61 20 7c 3d 20 62  Or:       a |= b
b830: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
b840: 20 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65   case OP_ShiftLe
b850: 66 74 3a 20 20 20 61 20 3c 3c 3d 20 62 3b 20 20  ft:   a <<= b;  
b860: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
b870: 61 75 6c 74 3a 20 20 61 73 73 65 72 74 28 20 70  ault:  assert( p
b880: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
b890: 68 69 66 74 52 69 67 68 74 20 29 3b 0a 20 20 20  hiftRight );.   
b8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8b0: 20 20 20 20 20 20 61 20 3e 3e 3d 20 62 3b 20 20        a >>= b;  
b8c0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
b8d0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 61 3b 0a 20 20  Out->u.i = a;.  
b8e0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
b8f0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
b900: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
b910: 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31  code: AddImm  P1
b920: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a   P2 * * *.** .**
b930: 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e   Add the constan
b940: 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75  t P2 to the valu
b950: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b960: 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20  ..** The result 
b970: 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74  is always an int
b980: 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66  eger..**.** To f
b990: 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65  orce any registe
b9a0: 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  r to be an integ
b9b0: 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a  er, just add 0..
b9c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d  */.case OP_AddIm
b9d0: 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  m: {            
b9e0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
b9f0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
ba00: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
ba10: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
ba20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ba30: 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
ba40: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
ba50: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61   pOp->p2;.  brea
ba60: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
ba70: 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32   MustBeInt P1 P2
ba80: 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f   * * *.** .** Fo
ba90: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
baa0: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
bab0: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  be an integer.  
bac0: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
bad0: 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20  in P1 is not an 
bae0: 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e  integer and cann
baf0: 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
bb00: 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a  into an integer.
bb10: 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20  ** without data 
bb20: 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20  loss, then jump 
bb30: 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
bb40: 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a  2, or if P2==0.*
bb50: 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54  * raise an SQLIT
bb60: 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70  E_MISMATCH excep
bb70: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
bb80: 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20  _MustBeInt: {   
bb90: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
bba0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
bbb0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
bbc0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
bbd0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
bbe0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
bbf0: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
bc00: 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
bc10: 67 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  g);.  if( (pIn1-
bc20: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
bc30: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
bc40: 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
bc50: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
bc60: 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  MISMATCH;.      
bc70: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
bc80: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
bc90: 73 65 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70  se{.      pc = p
bca0: 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
bcb0: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4d  }.  }else{.    M
bcc0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
bcd0: 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  n1, MEM_Int);.  
bce0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
bcf0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
bd00: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
bd10: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
bd20: 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20  Affinity P1 * * 
bd30: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67  * *.**.** If reg
bd40: 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61  ister P1 holds a
bd50: 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72  n integer conver
bd60: 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76  t it to a real v
bd70: 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  alue..**.** This
bd80: 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
bd90: 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20  when extracting 
bda0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
bdb0: 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a   a column that.*
bdc0: 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e  * has REAL affin
bdd0: 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d  ity.  Such colum
bde0: 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69  n values may sti
bdf0: 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a  ll be stored as.
be00: 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72  ** integers, for
be10: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63   space efficienc
be20: 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74  y, but after ext
be30: 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20  raction we want 
be40: 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20  them.** to have 
be50: 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75  only a real valu
be60: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  e..*/.case OP_Re
be70: 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20  alAffinity: {   
be80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
be90: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
bea0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
beb0: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
bec0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
bed0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
bee0: 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29  MemRealify(pIn1)
bef0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
bf00: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
bf10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53   SQLITE_OMIT_CAS
bf20: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54  T./* Opcode: ToT
bf30: 65 78 74 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ext P1 * * * *.*
bf40: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
bf50: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
bf60: 20 50 31 20 74 6f 20 62 65 20 74 65 78 74 2e 0a   P1 to be text..
bf70: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
bf80: 69 73 20 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76  is numeric, conv
bf90: 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72 69  ert it to a stri
bfa0: 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ng using the.** 
bfb0: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 70 72  equivalent of pr
bfc0: 69 6e 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61  intf().  Blob va
bfd0: 6c 75 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67  lues are unchang
bfe0: 65 64 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66  ed and.** are af
bff0: 74 65 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20  terwards simply 
c000: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 74  interpreted as t
c010: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  ext..**.** A NUL
c020: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
c030: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
c040: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
c050: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
c060: 65 20 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20  e OP_ToText: {  
c070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c080: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
c090: 5f 54 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20  _TEXT, in1 */.  
c0a0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
c0b0: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
c0c0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
c0d0: 31 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1);.  if( pIn1->
c0e0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
c0f0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65   ) break;.  asse
c100: 72 74 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45  rt( MEM_Str==(ME
c110: 4d 5f 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20  M_Blob>>3) );.  
c120: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28  pIn1->flags |= (
c130: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
c140: 42 6c 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c  Blob)>>3;.  appl
c150: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
c160: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
c170: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63   encoding);.  rc
c180: 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
c190: 6e 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  n1);.  assert( p
c1a0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c1b0: 5f 53 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  _Str || db->mall
c1c0: 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49  ocFailed );.  pI
c1d0: 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  n1->flags &= ~(M
c1e0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
c1f0: 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72  MEM_Blob|MEM_Zer
c200: 6f 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  o);.  UPDATE_MAX
c210: 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
c220: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
c230: 4f 70 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50  Opcode: ToBlob P
c240: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
c250: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
c260: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
c270: 6f 20 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20  o be a BLOB..** 
c280: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
c290: 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74  numeric, convert
c2a0: 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20   it to a string 
c2b0: 66 69 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67  first..** String
c2c0: 73 20 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69  s are simply rei
c2d0: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 62 6c  nterpreted as bl
c2e0: 6f 62 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e  obs with no chan
c2f0: 67 65 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64  ge.** to the und
c300: 65 72 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a  erlying data..**
c310: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
c320: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
c330: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
c340: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
c350: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
c360: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
c370: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c380: 20 61 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20   as TK_TO_BLOB, 
c390: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
c3a0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
c3b0: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
c3c0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62  s & MEM_Null ) b
c3d0: 72 65 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e  reak;.  if( (pIn
c3e0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  1->flags & MEM_B
c3f0: 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  lob)==0 ){.    a
c400: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
c410: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  1, SQLITE_AFF_TE
c420: 58 54 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  XT, encoding);. 
c430: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d     assert( pIn1-
c440: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
c450: 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   || db->mallocFa
c460: 69 6c 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53  iled );.    MemS
c470: 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c  etTypeFlag(pIn1,
c480: 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65   MEM_Blob);.  }e
c490: 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66  lse{.    pIn1->f
c4a0: 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79  lags &= ~(MEM_Ty
c4b0: 70 65 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62  peMask&~MEM_Blob
c4c0: 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
c4d0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
c4e0: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1);.  break;.}..
c4f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d  /* Opcode: ToNum
c500: 65 72 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  eric P1 * * * *.
c510: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
c520: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
c530: 72 20 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72  r P1 to be numer
c540: 69 63 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a  ic (either an.**
c550: 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c   integer or a fl
c560: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d  oating-point num
c570: 62 65 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20  ber.).** If the 
c580: 76 61 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72  value is text or
c590: 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f   blob, try to co
c5a0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75  nvert it to an u
c5b0: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69  sing the.** equi
c5c0: 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29  valent of atoi()
c5d0: 20 6f 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73   or atof() and s
c5e0: 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63  tore 0 if no suc
c5f0: 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a  h conversion .**
c600: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
c610: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
c620: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
c630: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
c640: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
c650: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
c660: 4e 75 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20  Numeric: {      
c670: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
c680: 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d  ame as TK_TO_NUM
c690: 45 52 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  ERIC, in1 */.  p
c6a0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
c6b0: 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p1];.  sqlite3V
c6c0: 64 62 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70  dbeMemNumerify(p
c6d0: 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  In1);.  break;.}
c6e0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
c6f0: 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a  E_OMIT_CAST */..
c700: 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74  /* Opcode: ToInt
c710: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
c720: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
c730: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c740: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
c750: 72 2e 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61  r.  If.** The va
c760: 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79  lue is currently
c770: 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20   a real number, 
c780: 64 72 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f  drop its fractio
c790: 6e 61 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20  nal part..** If 
c7a0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
c7b0: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
c7c0: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
c7d0: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
c7e0: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
c7f0: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
c800: 20 73 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73   store 0 if no s
c810: 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  uch conversion i
c820: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
c830: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
c840: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
c850: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
c860: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
c870: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e  .*/.case OP_ToIn
c880: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
c890: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
c8a0: 20 54 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20   TK_TO_INT, in1 
c8b0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
c8c0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
c8d0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
c8e0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
c8f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c900: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
c910: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
c920: 3b 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  ;.}..#if !define
c930: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  d(SQLITE_OMIT_CA
c940: 53 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ST) && !defined(
c950: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
c960: 54 49 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f  TING_POINT)./* O
c970: 70 63 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31  pcode: ToReal P1
c980: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46   * * * *.**.** F
c990: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
c9a0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
c9b0: 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   be a floating p
c9c0: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20  oint number..** 
c9d0: 49 66 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  If The value is 
c9e0: 63 75 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74  currently an int
c9f0: 65 67 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74  eger, convert it
ca00: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
ca10: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
ca20: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
ca30: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
ca40: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
ca50: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
ca60: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
ca70: 2e 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f  .0 if no such co
ca80: 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73  nversion is poss
ca90: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
caa0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
cab0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
cac0: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
cad0: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
cae0: 73 65 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20  se OP_ToReal: { 
caf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb00: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
cb10: 4f 5f 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20  O_REAL, in1 */. 
cb20: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
cb30: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
cb40: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
cb50: 6e 31 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  n1);.  if( (pIn1
cb60: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
cb70: 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  ll)==0 ){.    sq
cb80: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
cb90: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
cba0: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
cbb0: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
cbc0: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26  ITE_OMIT_CAST) &
cbd0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
cbe0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
cbf0: 50 4f 49 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  POINT) */../* Op
cc00: 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50  code: Lt P1 P2 P
cc10: 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 43 6f  3 P4 P5.**.** Co
cc20: 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  mpare the values
cc30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
cc40: 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28  and P3.  If reg(
cc50: 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e  P3)<reg(P1) then
cc60: 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  .** jump to addr
cc70: 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20  ess P2.  .**.** 
cc80: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
cc90: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20  MPIFNULL bit of 
cca0: 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69  P5 is set and ei
ccb0: 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a  ther reg(P1) or.
ccc0: 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55  ** reg(P3) is NU
ccd0: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
cce0: 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53   jump.  If the S
ccf0: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
cd00: 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61   .** bit is clea
cd10: 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  r then fall thro
cd20: 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70  ugh if either op
cd30: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a  erand is NULL..*
cd40: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
cd50: 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e  AFF_MASK portion
cd60: 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61   of P5 must be a
cd70: 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61  n affinity chara
cd80: 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45  cter -.** SQLITE
cd90: 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54  _AFF_TEXT, SQLIT
cda0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61  E_AFF_INTEGER, a
cdb0: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20  nd so forth. An 
cdc0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
cdd0: 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f  .** to coerce bo
cde0: 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64  th inputs accord
cdf0: 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69  ing to this affi
ce00: 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a  nity before the.
ce10: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ** comparison is
ce20: 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51   made. If the SQ
ce30: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73  LITE_AFF_MASK is
ce40: 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65   0x00, then nume
ce50: 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20  ric.** affinity 
ce60: 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68  is used. Note th
ce70: 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  at the affinity 
ce80: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20  conversions are 
ce90: 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69  stored.** back i
cea0: 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65  nto the input re
ceb0: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
cec0: 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f  3.  So this opco
ced0: 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20  de can cause.** 
cee0: 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67  persistent chang
cef0: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20  es to registers 
cf00: 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a  P1 and P3..**.**
cf10: 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72   Once any conver
cf20: 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e  sions have taken
cf30: 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74   place, and neit
cf40: 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  her value is NUL
cf50: 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  L, .** the value
cf60: 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20  s are compared. 
cf70: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
cf80: 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65  re blobs then me
cf90: 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65  mcmp() is.** use
cfa0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
cfb0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
cfc0: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
cfd0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a  f both values.**
cfe0: 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20   are text, then 
cff0: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
d000: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
d010: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a  on specified in.
d020: 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74  ** P4 is  used t
d030: 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  o do the compari
d040: 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e  son.  If P4 is n
d050: 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65  ot specified the
d060: 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73  n.** memcmp() is
d070: 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
d080: 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49   text string.  I
d090: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
d0a0: 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68  e.** numeric, th
d0b0: 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d  en a numeric com
d0c0: 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e  parison is used.
d0d0: 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75   If the two valu
d0e0: 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66  es.** are of dif
d0f0: 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68  ferent types, th
d100: 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  en numbers are c
d110: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
d120: 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61  han.** strings a
d130: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63  nd strings are c
d140: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
d150: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a  han blobs..**.**
d160: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   If the SQLITE_S
d170: 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50 35  TOREP2 bit of P5
d180: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f   is set, then do
d190: 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74   not jump.  Inst
d1a0: 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20  ead,.** store a 
d1b0: 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28  boolean result (
d1c0: 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20  either 0, or 1, 
d1d0: 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69  or NULL) in regi
d1e0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 2f 2a 20 4f  ster P2..*/./* O
d1f0: 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20  pcode: Ne P1 P2 
d200: 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
d210: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
d220: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
d230: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
d240: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
d250: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
d260: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
d270: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f  P1 and P3 are no
d280: 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68  t equal.  See th
d290: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a  e Lt opcode for.
d2a0: 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  ** additional in
d2b0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
d2c0: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
d2d0: 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74  Q is set in P5 t
d2e0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
d2f0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
d300: 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a  always either.**
d310: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61   true or false a
d320: 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c  nd is never NULL
d330: 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61  .  If both opera
d340: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  nds are NULL the
d350: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  n the result.** 
d360: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
d370: 20 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68   false.  If eith
d380: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
d390: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
d3a0: 6c 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49  lt is true..** I
d3b0: 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  f neither operan
d3c0: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 74 68  d is NULL the th
d3d0: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
d3e0: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
d3f0: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
d400: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
d410: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
d420: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
d430: 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33  ode: Eq P1 P2 P3
d440: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
d450: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
d460: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
d470: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
d480: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
d490: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
d4a0: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
d4b0: 20 61 6e 64 20 50 33 20 61 72 65 20 65 71 75 61   and P3 are equa
d4c0: 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74  l..** See the Lt
d4d0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
d4e0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
d4f0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c  on..**.** If SQL
d500: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
d510: 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65  t in P5 then the
d520: 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61   result of compa
d530: 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  rison is always 
d540: 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f  either.** true o
d550: 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e  r false and is n
d560: 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62  ever NULL.  If b
d570: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
d580: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
d590: 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70  esult.** of comp
d5a0: 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20  arison is true. 
d5b0: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
d5c0: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
d5d0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61  the result is fa
d5e0: 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68  lse..** If neith
d5f0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
d600: 4c 4c 20 74 68 65 20 74 68 65 20 72 65 73 75 6c  LL the the resul
d610: 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  t is the same as
d620: 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a   it would be if.
d630: 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55  ** the SQLITE_NU
d640: 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f  LLEQ flag were o
d650: 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a  mitted from P5..
d660: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65  */./* Opcode: Le
d670: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
d680: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
d690: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
d6a0: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
d6b0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
d6c0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
d6d0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
d6e0: 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20  ster P3 is less 
d6f0: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
d700: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
d710: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
d720: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
d730: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
d740: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
d750: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20  /./* Opcode: Gt 
d760: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
d770: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
d780: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
d790: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
d7a0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
d7b0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
d7c0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
d7d0: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
d7e0: 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65  r than the conte
d7f0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
d800: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
d810: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
d820: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
d830: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
d840: 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50  e: Ge P1 P2 P3 P
d850: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
d860: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
d870: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
d880: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
d890: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
d8a0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
d8b0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
d8c0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
d8d0: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
d8e0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
d8f0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
d900: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
d910: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
d920: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
d930: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
d940: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
d950: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
d960: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
d970: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
d980: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d990: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
d9a0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
d9b0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
d9c0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
d9d0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
d9e0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
d9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
da00: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
da10: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
da20: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
da30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
da40: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
da50: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
da60: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
da70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
da80: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
da90: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
daa0: 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
dab0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
dac0: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
dad0: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
dae0: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
daf0: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
db00: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
db10: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
db20: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
db30: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
db40: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
db50: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
db60: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
db70: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
db80: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
db90: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
dba0: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
dbb0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
dbc0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
dbd0: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
dbe0: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
dbf0: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
dc00: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 70  >flags;.  if( (p
dc10: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
dc20: 33 2d 3e 66 6c 61 67 73 29 26 4d 45 4d 5f 4e 75  3->flags)&MEM_Nu
dc30: 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65  ll ){.    /* One
dc40: 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   or both operand
dc50: 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s are NULL */.  
dc60: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
dc70: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b  SQLITE_NULLEQ ){
dc80: 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c  .      /* If SQL
dc90: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
dca0: 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e  t (which will on
dcb0: 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65  ly happen if the
dcc0: 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20   operator is.   
dcd0: 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f     ** OP_Eq or O
dce0: 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20  P_Ne) then take 
dcf0: 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20  the jump or not 
dd00: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
dd10: 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72  ther.      ** or
dd20: 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e   not both operan
dd30: 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20  ds are null..   
dd40: 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
dd50: 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
dd60: 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f  =OP_Eq || pOp->o
dd70: 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
dd80: 20 20 20 20 20 20 72 65 73 20 3d 20 28 70 49 6e        res = (pIn
dd90: 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d  1->flags & pIn3-
dda0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
ddb0: 6c 29 3d 3d 30 3b 0a 20 20 20 20 7d 65 6c 73 65  l)==0;.    }else
ddc0: 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54  {.      /* SQLIT
ddd0: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61  E_NULLEQ is clea
dde0: 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f  r and at least o
ddf0: 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ne operand is NU
de00: 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  LL,.      ** the
de10: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
de20: 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20  always NULL..   
de30: 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69     ** The jump i
de40: 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53  s taken if the S
de50: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
de60: 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20   bit is set..   
de70: 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
de80: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
de90: 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
dea0: 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
deb0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
dec0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
ded0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
dee0: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
def0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
df00: 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  2, pOut);.      
df10: 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
df20: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
df30: 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20  FNULL ){.       
df40: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
df50: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
df60: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  reak;.    }.  }e
df70: 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74  lse{.    /* Neit
df80: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
df90: 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61  ULL.  Do a compa
dfa0: 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66  rison. */.    af
dfb0: 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
dfc0: 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
dfd0: 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69  SK;.    if( affi
dfe0: 6e 69 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70  nity ){.      ap
dff0: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
e000: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f  , affinity, enco
e010: 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 70 70  ding);.      app
e020: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  lyAffinity(pIn3,
e030: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 6f 64   affinity, encod
e040: 69 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ing);.      if( 
e050: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
e060: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
e070: 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72      }..    asser
e080: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
e090: 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
e0a0: 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
e0b0: 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  ;.    ExpandBlob
e0c0: 28 70 49 6e 31 29 3b 0a 20 20 20 20 45 78 70 61  (pIn1);.    Expa
e0d0: 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
e0e0: 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d    res = sqlite3M
e0f0: 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20  emCompare(pIn3, 
e100: 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43  pIn1, pOp->p4.pC
e110: 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74  oll);.  }.  swit
e120: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
e130: 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45  ){.    case OP_E
e140: 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d  q:    res = res=
e150: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
e160: 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20     case OP_Ne:  
e170: 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20    res = res!=0; 
e180: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
e190: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65  ase OP_Lt:    re
e1a0: 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20  s = res<0;      
e1b0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
e1c0: 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20  OP_Le:    res = 
e1d0: 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61  res<=0;     brea
e1e0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47  k;.    case OP_G
e1f0: 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e  t:    res = res>
e200: 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  0;      break;. 
e210: 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20     default:     
e220: 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20    res = res>=0; 
e230: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
e240: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
e250: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
e260: 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d  {.    pOut = &aM
e270: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
e280: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
e290: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
e2a0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
e2b0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
e2c0: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
e2d0: 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  es;.    REGISTER
e2e0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
e2f0: 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69  pOut);.  }else i
e300: 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
e310: 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
e320: 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79  }..  /* Undo any
e330: 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
e340: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29   applyAffinity()
e350: 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65   to the input re
e360: 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49  gisters. */.  pI
e370: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e  n1->flags = (pIn
e380: 31 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79  1->flags&~MEM_Ty
e390: 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
e3a0: 31 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b  1&MEM_TypeMask);
e3b0: 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d  .  pIn3->flags =
e3c0: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d   (pIn3->flags&~M
e3d0: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
e3e0: 66 6c 61 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d  flags3&MEM_TypeM
e3f0: 61 73 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ask);.  break;.}
e400: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72  ../* Opcode: Per
e410: 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50  mutation * * * P
e420: 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  4 *.**.** Set th
e430: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73  e permutation us
e440: 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d  ed by the OP_Com
e450: 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f  pare operator to
e460: 20 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a   be the array.**
e470: 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20   of integers in 
e480: 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65  P4..**.** The pe
e490: 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c  rmutation is onl
e4a0: 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68  y valid until th
e4b0: 65 20 6e 65 78 74 20 4f 50 5f 50 65 72 6d 75 74  e next OP_Permut
e4c0: 61 74 69 6f 6e 2c 20 4f 50 5f 43 6f 6d 70 61 72  ation, OP_Compar
e4d0: 65 2c 0a 2a 2a 20 4f 50 5f 48 61 6c 74 2c 20 6f  e,.** OP_Halt, o
e4e0: 72 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2e 20  r OP_ResultRow. 
e4f0: 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f   Typically the O
e500: 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68  P_Permutation sh
e510: 6f 75 6c 64 20 6f 63 63 75 72 0a 2a 2a 20 69 6d  ould occur.** im
e520: 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20  mediately prior 
e530: 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  to the OP_Compar
e540: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65  e..*/.case OP_Pe
e550: 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61  rmutation: {.  a
e560: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
e570: 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20  pe==P4_INTARRAY 
e580: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
e590: 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65  ->p4.ai );.  aPe
e5a0: 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  rmute = pOp->p4.
e5b0: 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ai;.  break;.}..
e5c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61  /* Opcode: Compa
e5d0: 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  re P1 P2 P3 P4 *
e5e0: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
e5f0: 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65  wo vectors of re
e600: 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50  gisters in reg(P
e610: 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29  1)..reg(P1+P3-1)
e620: 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76   (call this.** v
e630: 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69  ector "A") and i
e640: 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50  n reg(P2)..reg(P
e650: 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20  2+P3-1) ("B").  
e660: 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20  Save the result 
e670: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  of.** the compar
e680: 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20  ison for use by 
e690: 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70  the next OP_Jump
e6a0: 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a   instruct..**.**
e6b0: 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f   P4 is a KeyInfo
e6c0: 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
e6d0: 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e  defines collatin
e6e0: 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20  g sequences and 
e6f0: 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66  sort.** orders f
e700: 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  or the compariso
e710: 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74  n.  The permutat
e720: 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72  ion applies to r
e730: 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79  egisters.** only
e740: 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65  .  The KeyInfo e
e750: 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64  lements are used
e760: 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a   sequentially..*
e770: 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69  *.** The compari
e780: 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f  son is a sort co
e790: 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c  mparison, so NUL
e7a0: 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  Ls compare equal
e7b0: 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c  ,.** NULLs are l
e7c0: 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73  ess than numbers
e7d0: 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65  , numbers are le
e7e0: 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c  ss than strings,
e7f0: 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20  .** and strings 
e800: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  are less than bl
e810: 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  obs..*/.case OP_
e820: 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74  Compare: {.  int
e830: 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69   n;.  int i;.  i
e840: 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b  nt p1;.  int p2;
e850: 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f  .  const KeyInfo
e860: 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
e870: 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71  t idx;.  CollSeq
e880: 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43   *pColl;    /* C
e890: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
e8a0: 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73  e to use on this
e8b0: 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62   term */.  int b
e8c0: 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Rev;          /*
e8d0: 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e   True for DESCEN
e8e0: 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20  DING sort order 
e8f0: 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  */..  n = pOp->p
e900: 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  3;.  pKeyInfo = 
e910: 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
e920: 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
e930: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65  );.  assert( pKe
e940: 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31  yInfo!=0 );.  p1
e950: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
e960: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20   = pOp->p2;.#if 
e970: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
e980: 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
e990: 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
e9a0: 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
e9b0: 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
e9c0: 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
e9d0: 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
e9e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
e9f0: 20 26 26 20 70 31 2b 6d 78 3c 3d 70 2d 3e 6e 4d   && p1+mx<=p->nM
ea00: 65 6d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  em+1 );.    asse
ea10: 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6d  rt( p2>0 && p2+m
ea20: 78 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  x<=p->nMem+1 );.
ea30: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
ea40: 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b  ert( p1>0 && p1+
ea50: 6e 3c 3d 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a  n<=p->nMem+1 );.
ea60: 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
ea70: 20 26 26 20 70 32 2b 6e 3c 3d 70 2d 3e 6e 4d 65   && p2+n<=p->nMe
ea80: 6d 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  m+1 );.  }.#endi
ea90: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
eaa0: 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20  G */.  for(i=0; 
eab0: 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<n; i++){.    i
eac0: 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20  dx = aPermute ? 
ead0: 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b  aPermute[i] : i;
eae0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
eaf0: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31  IsValid(&aMem[p1
eb00: 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73  +idx]) );.    as
eb10: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
eb20: 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20  (&aMem[p2+idx]) 
eb30: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
eb40: 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61  TRACE(p1+idx, &a
eb50: 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p1+idx]);.  
eb60: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
eb70: 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p2+idx, &aMem[p
eb80: 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73  2+idx]);.    ass
eb90: 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d  ert( i<pKeyInfo-
eba0: 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70  >nField );.    p
ebb0: 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  Coll = pKeyInfo-
ebc0: 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62  >aColl[i];.    b
ebd0: 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  Rev = pKeyInfo->
ebe0: 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20  aSortOrder[i];. 
ebf0: 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71     iCompare = sq
ec00: 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
ec10: 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26  &aMem[p1+idx], &
ec20: 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43  aMem[p2+idx], pC
ec30: 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43  oll);.    if( iC
ec40: 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20  ompare ){.      
ec50: 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70  if( bRev ) iComp
ec60: 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b  are = -iCompare;
ec70: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
ec80: 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75    }.  }.  aPermu
ec90: 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  te = 0;.  break;
eca0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  .}../* Opcode: J
ecb0: 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ump P1 P2 P3 * *
ecc0: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
ecd0: 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  he instruction a
ece0: 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32  t address P1, P2
ecf0: 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e  , or P3 dependin
ed00: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
ed10: 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  in the most rece
ed20: 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e  nt OP_Compare in
ed30: 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31  struction the P1
ed40: 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73   vector was less
ed50: 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74   than.** equal t
ed60: 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  o, or greater th
ed70: 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72  an the P2 vector
ed80: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a  , respectively..
ed90: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a  */.case OP_Jump:
eda0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
edb0: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
edc0: 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20  iCompare<0 ){.  
edd0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d    pc = pOp->p1 -
ede0: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
edf0: 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20  iCompare==0 ){. 
ee00: 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
ee10: 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
ee20: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d    pc = pOp->p3 -
ee30: 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
ee40: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
ee50: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
ee60: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
ee70: 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
ee80: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
ee90: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
eea0: 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
eeb0: 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
eec0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
eed0: 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
eee0: 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
eef0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
ef00: 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
ef10: 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
ef20: 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
ef30: 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
ef40: 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
ef50: 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
ef60: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
ef70: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
ef80: 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
ef90: 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  al OR of the val
efa0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
efb0: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
efc0: 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65   store the answe
efd0: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  r in register P3
efe0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
eff0: 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f  r P1 or P2 is no
f000: 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65  nzero (true) the
f010: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
f020: 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e  1 (true).** even
f030: 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e   if the other in
f040: 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
f050: 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f  NULL and false o
f060: 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67  r two NULLs.** g
f070: 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  ive a NULL outpu
f080: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e  t..*/.case OP_An
f090: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
f0a0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e  /* same as TK_AN
f0b0: 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
f0c0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a  3 */.case OP_Or:
f0d0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
f0e0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c  * same as TK_OR,
f0f0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
f100: 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20  */.  int v1;    
f110: 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a  /* Left operand:
f120: 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54    0==FALSE, 1==T
f130: 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
f140: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
f150: 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74   v2;    /* Right
f160: 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c   operand: 0==FAL
f170: 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
f180: 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
f190: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
f1a0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
f1b0: 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
f1c0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
f1d0: 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65   v1 = 2;.  }else
f1e0: 7b 0a 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74  {.    v1 = sqlit
f1f0: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
f200: 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70  In1)!=0;.  }.  p
f210: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
f220: 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32  >p2];.  if( pIn2
f230: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
f240: 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32  ll ){.    v2 = 2
f250: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
f260: 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  2 = sqlite3VdbeI
f270: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30  ntValue(pIn2)!=0
f280: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
f290: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
f2a0: 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
f2b0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
f2c0: 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
f2d0: 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
f2e0: 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
f2f0: 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
f300: 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
f310: 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
f320: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
f330: 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
f340: 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
f350: 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
f360: 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
f370: 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
f380: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
f390: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76  Op->p3];.  if( v
f3a0: 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53  1==2 ){.    MemS
f3b0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
f3c0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65   MEM_Null);.  }e
f3d0: 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
f3e0: 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d  .i = v1;.    Mem
f3f0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
f400: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a  , MEM_Int);.  }.
f410: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
f420: 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32  pcode: Not P1 P2
f430: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74   * * *.**.** Int
f440: 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65  erpret the value
f450: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
f460: 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  as a boolean val
f470: 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a  ue.  Store the.*
f480: 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65  * boolean comple
f490: 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72  ment in register
f4a0: 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c   P2.  If the val
f4b0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
f4c0: 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  1 is .** NULL, t
f4d0: 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74  hen a NULL is st
f4e0: 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  ored in P2..*/.c
f4f0: 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20  ase OP_Not: {   
f500: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f510: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20  same as TK_NOT, 
f520: 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
f530: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
f540: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
f550: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
f560: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
f570: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
f580: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
f590: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
f5a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
f5b0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
f5c0: 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74  t64(pOut, !sqlit
f5d0: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
f5e0: 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65  In1));.  }.  bre
f5f0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
f600: 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a  : BitNot P1 P2 *
f610: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72   * *.**.** Inter
f620: 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  pret the content
f630: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
f640: 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  as an integer.  
f650: 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65  Store the.** one
f660: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20  s-complement of 
f670: 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74  the P1 value int
f680: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  o register P2.  
f690: 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61  If P1 holds.** a
f6a0: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
f6b0: 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a   a NULL in P2..*
f6c0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74  /.case OP_BitNot
f6d0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
f6e0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
f6f0: 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  TNOT, in1, out2 
f700: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
f710: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
f720: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
f730: 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p2];.  if( pIn1-
f740: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
f750: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
f760: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
f770: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
f780: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
f790: 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20  mSetInt64(pOut, 
f7a0: 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  ~sqlite3VdbeIntV
f7b0: 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20 7d  alue(pIn1));.  }
f7c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
f7d0: 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32  Opcode: If P1 P2
f7e0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
f7f0: 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
f800: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
f810: 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54  r P1 is true.  T
f820: 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 69  he value is.** i
f830: 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
f840: 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
f850: 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
f860: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
f870: 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
f880: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
f890: 6d 70 20 69 66 20 50 33 20 69 73 20 74 72 75 65  mp if P3 is true
f8a0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f8b0: 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a  IfNot P1 P2 P3 *
f8c0: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
f8d0: 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
f8e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
f8f0: 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76  is False.  The v
f900: 61 6c 75 65 20 69 73 0a 2a 2a 20 69 73 20 63 6f  alue is.** is co
f910: 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66  nsidered true if
f920: 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
f930: 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
f940: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
f950: 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
f960: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
f970: 6d 70 20 69 66 20 50 33 20 69 73 20 74 72 75 65  mp if P3 is true
f980: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
f990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9a0: 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
f9b0: 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20  .case OP_IfNot: 
f9c0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
f9d0: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
f9e0: 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26  nt c;.  pIn1 = &
f9f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
fa00: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
fa10: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
fa20: 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a     c = pOp->p3;.
fa30: 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20    }else{.#ifdef 
fa40: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
fa50: 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63  TING_POINT.    c
fa60: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
fa70: 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
fa80: 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73  .#else.    c = s
fa90: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
faa0: 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a  lue(pIn1)!=0.0;.
fab0: 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
fac0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
fad0: 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20  fNot ) c = !c;. 
fae0: 20 7d 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20   }.  if( c ){.  
faf0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
fb00: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
fb10: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e  ../* Opcode: IsN
fb20: 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
fb30: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
fb40: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
fb50: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
fb60: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
fb70: 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  _IsNull: {      
fb80: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
fb90: 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70   TK_ISNULL, jump
fba0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
fbb0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
fbc0: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
fbd0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
fbe0: 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  !=0 ){.    pc = 
fbf0: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
fc00: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
fc10: 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20  Opcode: NotNull 
fc20: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
fc30: 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
fc40: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
fc50: 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20  ister P1 is not 
fc60: 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  NULL.  .*/.case 
fc70: 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20  OP_NotNull: {   
fc80: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
fc90: 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20   as TK_NOTNULL, 
fca0: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
fcb0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
fcc0: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
fcd0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
fce0: 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
fcf0: 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
fd00: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
fd10: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
fd20: 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  mn P1 P2 P3 P4 P
fd30: 35 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  5.**.** Interpre
fd40: 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
fd50: 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
fd60: 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75   to as a structu
fd70: 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a  re built using.*
fd80: 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  * the MakeRecord
fd90: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28   instruction.  (
fda0: 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  See the MakeReco
fdb0: 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  rd opcode for ad
fdc0: 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f  ditional.** info
fdd0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
fde0: 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
fdf0: 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20  data.)  Extract 
fe00: 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
fe10: 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65  .** from this re
fe20: 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20  cord.  If there 
fe30: 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50  are less that (P
fe40: 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20  2+1) .** values 
fe50: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65  in the record, e
fe60: 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a  xtract a NULL..*
fe70: 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65  *.** The value e
fe80: 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72  xtracted is stor
fe90: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
fea0: 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
feb0: 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
fec0: 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69  fewer than P2 fi
fed0: 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61  elds, then extra
fee0: 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a  ct a NULL.  Or,.
fef0: 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67  ** if the P4 arg
ff00: 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45  ument is a P4_ME
ff10: 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  M use the value 
ff20: 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  of the P4 argume
ff30: 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  nt as.** the res
ff40: 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ult..**.** If th
ff50: 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  e OPFLAG_CLEARCA
ff60: 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  CHE bit is set o
ff70: 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61  n P5 and P1 is a
ff80: 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
ff90: 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  rsor,.** then th
ffa0: 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63  e cache of the c
ffb0: 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70  ursor is reset p
ffc0: 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69  rior to extracti
ffd0: 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  ng the column..*
ffe0: 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43  * The first OP_C
fff0: 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20  olumn against a 
10000 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74  pseudo-table aft
10010 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  er the value of 
10020 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72  the content.** r
10030 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e  egister has chan
10040 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20  ged should have 
10050 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2f  this bit set..*/
10060 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a  .case OP_Column:
10070 20 7b 0a 20 20 75 33 32 20 70 61 79 6c 6f 61 64   {.  u32 payload
10080 53 69 7a 65 3b 20 20 20 2f 2a 20 4e 75 6d 62 65  Size;   /* Numbe
10090 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
100a0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36  e record */.  i6
100b0 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  4 payloadSize64;
100c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
100d0 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
100e0 64 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20  d */.  int p1;  
100f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 31 20            /* P1 
10100 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63  value of the opc
10110 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  ode */.  int p2;
10120 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63              /* c
10130 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20  olumn number to 
10140 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64  retrieve */.  Vd
10150 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
10160 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
10170 73 6f 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  sor */.  char *z
10180 52 65 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  Rec;        /* P
10190 6f 69 6e 74 65 72 20 74 6f 20 63 6f 6d 70 6c 65  ointer to comple
101a0 74 65 20 72 65 63 6f 72 64 2d 64 61 74 61 20 2a  te record-data *
101b0 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
101c0 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54  rsr;   /* The BT
101d0 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ree cursor */.  
101e0 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20  u32 *aType;     
101f0 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68     /* aType[i] h
10200 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63  olds the numeric
10210 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74   type of the i-t
10220 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  h column */.  u3
10230 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20  2 *aOffset;     
10240 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69   /* aOffset[i] i
10250 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72  s offset to star
10260 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d  t of data for i-
10270 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  th column */.  i
10280 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
10290 20 20 2f 2a 20 6e 75 6d 62 65 72 20 6f 66 20 66    /* number of f
102a0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
102b0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  ord */.  int len
102c0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
102d0 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
102e0 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
102f0 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
10300 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
10310 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
10320 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 63 68 61  counter */.  cha
10330 72 20 2a 7a 44 61 74 61 3b 20 20 20 20 20 20 20  r *zData;       
10340 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
10350 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
10360 64 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  ded */.  Mem *pD
10370 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57  est;        /* W
10380 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68  here to write th
10390 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75  e extracted valu
103a0 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e */.  Mem sMem;
103b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
103c0 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
103d0 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
103e0 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 49 64 78 3b  d */.  u8 *zIdx;
103f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
10400 65 78 20 69 6e 74 6f 20 68 65 61 64 65 72 20 2a  ex into header *
10410 2f 0a 20 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b  /.  u8 *zEndHdr;
10420 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
10430 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
10440 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
10450 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74   */.  u32 offset
10460 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73  ;        /* Offs
10470 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  et into the data
10480 20 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c   */.  u32 szFiel
10490 64 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  d;       /* Numb
104a0 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
104b0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
104c0 66 69 65 6c 64 20 2a 2f 0a 20 20 69 6e 74 20 73  field */.  int s
104d0 7a 48 64 72 3b 20 20 20 20 20 20 20 20 20 2f 2a  zHdr;         /*
104e0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   Size of the hea
104f0 64 65 72 20 73 69 7a 65 20 66 69 65 6c 64 20 61  der size field a
10500 74 20 73 74 61 72 74 20 6f 66 20 72 65 63 6f 72  t start of recor
10510 64 20 2a 2f 0a 20 20 69 6e 74 20 61 76 61 69 6c  d */.  int avail
10520 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
10530 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
10540 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a  available data *
10550 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20  /.  Mem *pReg;  
10560 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f         /* Pseudo
10570 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69  Table input regi
10580 73 74 65 72 20 2a 2f 0a 0a 0a 20 20 70 31 20 3d  ster */...  p1 =
10590 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
105a0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 20 3d   pOp->p2;.  pC =
105b0 20 30 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d   0;.  memset(&sM
105c0 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
105d0 65 6d 29 29 3b 0a 20 20 61 73 73 65 72 74 28 20  em));.  assert( 
105e0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
105f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
10600 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
10610 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 70 44  =p->nMem );.  pD
10620 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
10630 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
10640 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
10650 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  t);.  MemSetType
10660 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
10670 4e 75 6c 6c 29 3b 0a 20 20 7a 52 65 63 20 3d 20  Null);.  zRec = 
10680 30 3b 0a 0a 20 20 2f 2a 20 54 68 69 73 20 62 6c  0;..  /* This bl
10690 6f 63 6b 20 73 65 74 73 20 74 68 65 20 76 61 72  ock sets the var
106a0 69 61 62 6c 65 20 70 61 79 6c 6f 61 64 53 69 7a  iable payloadSiz
106b0 65 20 74 6f 20 62 65 20 74 68 65 20 74 6f 74 61  e to be the tota
106c0 6c 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  l number of.  **
106d0 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72 65   bytes in the re
106e0 63 6f 72 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  cord..  **.  ** 
106f0 7a 52 65 63 20 69 73 20 73 65 74 20 74 6f 20 62  zRec is set to b
10700 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 74  e the complete t
10710 65 78 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ext of the recor
10720 64 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c  d if it is avail
10730 61 62 6c 65 2e 0a 20 20 2a 2a 20 54 68 65 20 63  able..  ** The c
10740 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 20 74  omplete record t
10750 65 78 74 20 69 73 20 61 6c 77 61 79 73 20 61 76  ext is always av
10760 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 73 65 75  ailable for pseu
10770 64 6f 2d 74 61 62 6c 65 73 0a 20 20 2a 2a 20 49  do-tables.  ** I
10780 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 20  f the record is 
10790 73 74 6f 72 65 64 20 69 6e 20 61 20 63 75 72 73  stored in a curs
107a0 6f 72 2c 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  or, the complete
107b0 20 72 65 63 6f 72 64 20 74 65 78 74 0a 20 20 2a   record text.  *
107c0 2a 20 6d 69 67 68 74 20 62 65 20 61 76 61 69 6c  * might be avail
107d0 61 62 6c 65 20 69 6e 20 74 68 65 20 20 70 43 2d  able in the  pC-
107e0 3e 61 52 6f 77 20 63 61 63 68 65 2e 20 20 4f 72  >aRow cache.  Or
107f0 20 69 74 20 6d 69 67 68 74 20 6e 6f 74 20 62 65   it might not be
10800 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 64 61  ..  ** If the da
10810 74 61 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  ta is unavailabl
10820 65 2c 20 20 7a 52 65 63 20 69 73 20 73 65 74 20  e,  zRec is set 
10830 74 6f 20 4e 55 4c 4c 2e 0a 20 20 2a 2a 0a 20 20  to NULL..  **.  
10840 2a 2a 20 57 65 20 61 6c 73 6f 20 63 6f 6d 70 75  ** We also compu
10850 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
10860 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
10870 72 65 63 6f 72 64 2e 20 20 46 6f 72 20 63 75 72  record.  For cur
10880 73 6f 72 73 2c 0a 20 20 2a 2a 20 74 68 65 20 6e  sors,.  ** the n
10890 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
108a0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
108b0 65 20 56 64 62 65 43 75 72 73 6f 72 2e 6e 46 69  e VdbeCursor.nFi
108c0 65 6c 64 20 65 6c 65 6d 65 6e 74 2e 0a 20 20 2a  eld element..  *
108d0 2f 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  /.  pC = p->apCs
108e0 72 5b 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  r[p1];.  assert(
108f0 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 6e 64 65   pC!=0 );.#ifnde
10900 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
10910 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73 73  RTUALTABLE.  ass
10920 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43 75  ert( pC->pVtabCu
10930 72 73 6f 72 3d 3d 30 20 29 3b 0a 23 65 6e 64 69  rsor==0 );.#endi
10940 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  f.  pCrsr = pC->
10950 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
10960 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f  Crsr!=0 ){.    /
10970 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20  * The record is 
10980 73 74 6f 72 65 64 20 69 6e 20 61 20 42 2d 54 72  stored in a B-Tr
10990 65 65 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  ee */.    rc = s
109a0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
109b0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20  Moveto(pC);.    
109c0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
109d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
109e0 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  ;.    if( pC->nu
109f0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70  llRow ){.      p
10a00 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30 3b 0a  ayloadSize = 0;.
10a10 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43      }else if( pC
10a20 2d 3e 63 61 63 68 65 53 74 61 74 75 73 3d 3d 70  ->cacheStatus==p
10a30 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20  ->cacheCtr ){.  
10a40 20 20 20 20 70 61 79 6c 6f 61 64 53 69 7a 65 20      payloadSize 
10a50 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  = pC->payloadSiz
10a60 65 3b 0a 20 20 20 20 20 20 7a 52 65 63 20 3d 20  e;.      zRec = 
10a70 28 63 68 61 72 2a 29 70 43 2d 3e 61 52 6f 77 3b  (char*)pC->aRow;
10a80 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70  .    }else if( p
10a90 43 2d 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20  C->isIndex ){.  
10aa0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
10ab0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
10ac0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
10ad0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
10ae0 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
10af0 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69  Crsr, &payloadSi
10b00 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 61 73 73  ze64);.      ass
10b10 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
10b20 4f 4b 20 29 3b 20 20 20 2f 2a 20 54 72 75 65 20  OK );   /* True 
10b30 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
10b40 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61  rMoveto() call a
10b50 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 2f 2a  bove */.      /*
10b60 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72   sqlite3BtreePar
10b70 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73  seCellPtr() uses
10b80 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74   getVarint32() t
10b90 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20  o extract the.  
10ba0 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73      ** payload s
10bb0 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d  ize, so it is im
10bc0 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79  possible for pay
10bd0 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65  loadSize64 to be
10be0 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72  .      ** larger
10bf0 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a   than 32 bits. *
10c00 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
10c10 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26  (payloadSize64 &
10c20 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29   SQLITE_MAX_U32)
10c30 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69  ==(u64)payloadSi
10c40 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 70 61  ze64 );.      pa
10c50 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32  yloadSize = (u32
10c60 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a  )payloadSize64;.
10c70 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10c80 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
10c90 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
10ca0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
10cb0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
10cc0 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
10cd0 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
10ce0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
10cf0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
10d00 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28  ;   /* DataSize(
10d10 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
10d20 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
10d30 66 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  f( pC->pseudoTab
10d40 6c 65 52 65 67 3e 30 20 29 7b 0a 20 20 20 20 70  leReg>0 ){.    p
10d50 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e  Reg = &aMem[pC->
10d60 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
10d70 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65  .    assert( pRe
10d80 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  g->flags & MEM_B
10d90 6c 6f 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  lob );.    asser
10da0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
10db0 65 67 29 20 29 3b 0a 20 20 20 20 70 61 79 6c 6f  eg) );.    paylo
10dc0 61 64 53 69 7a 65 20 3d 20 70 52 65 67 2d 3e 6e  adSize = pReg->n
10dd0 3b 0a 20 20 20 20 7a 52 65 63 20 3d 20 70 52 65  ;.    zRec = pRe
10de0 67 2d 3e 7a 3b 0a 20 20 20 20 70 43 2d 3e 63 61  g->z;.    pC->ca
10df0 63 68 65 53 74 61 74 75 73 20 3d 20 28 70 4f 70  cheStatus = (pOp
10e00 2d 3e 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41  ->p5&OPFLAG_CLEA
10e10 52 43 41 43 48 45 29 20 3f 20 43 41 43 48 45 5f  RCACHE) ? CACHE_
10e20 53 54 41 4c 45 20 3a 20 70 2d 3e 63 61 63 68 65  STALE : p->cache
10e30 43 74 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Ctr;.    assert(
10e40 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20   payloadSize==0 
10e50 7c 7c 20 7a 52 65 63 21 3d 30 20 29 3b 0a 20 20  || zRec!=0 );.  
10e60 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 43 6f  }else{.    /* Co
10e70 6e 73 69 64 65 72 20 74 68 65 20 72 6f 77 20 74  nsider the row t
10e80 6f 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20  o be NULL */.   
10e90 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 30   payloadSize = 0
10ea0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 70  ;.  }..  /* If p
10eb0 61 79 6c 6f 61 64 53 69 7a 65 20 69 73 20 30 2c  ayloadSize is 0,
10ec0 20 74 68 65 6e 20 6a 75 73 74 20 73 74 6f 72 65   then just store
10ed0 20 61 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 66 28   a NULL */.  if(
10ee0 20 70 61 79 6c 6f 61 64 53 69 7a 65 3d 3d 30 20   payloadSize==0 
10ef0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
10f00 44 65 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  Dest->flags&MEM_
10f10 4e 75 6c 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f  Null );.    goto
10f20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
10f30 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 64 62    }.  assert( db
10f40 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
10f50 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 3e 3d 30  LIMIT_LENGTH]>=0
10f60 20 29 3b 0a 20 20 69 66 28 20 70 61 79 6c 6f 61   );.  if( payloa
10f70 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d  dSize > (u32)db-
10f80 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
10f90 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
10fa0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
10fb0 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
10fc0 3d 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 20 20  = pC->nField;.  
10fd0 61 73 73 65 72 74 28 20 70 32 3c 6e 46 69 65 6c  assert( p2<nFiel
10fe0 64 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20  d );..  /* Read 
10ff0 61 6e 64 20 70 61 72 73 65 20 74 68 65 20 74 61  and parse the ta
11000 62 6c 65 20 68 65 61 64 65 72 2e 20 20 53 74 6f  ble header.  Sto
11010 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  re the results o
11020 66 20 74 68 65 20 70 61 72 73 65 0a 20 20 2a 2a  f the parse.  **
11030 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
11040 20 68 65 61 64 65 72 20 63 61 63 68 65 20 66 69   header cache fi
11050 65 6c 64 73 20 6f 66 20 74 68 65 20 63 75 72 73  elds of the curs
11060 6f 72 2e 0a 20 20 2a 2f 0a 20 20 61 54 79 70 65  or..  */.  aType
11070 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20   = pC->aType;.  
11080 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61  if( pC->cacheSta
11090 74 75 73 3d 3d 70 2d 3e 63 61 63 68 65 43 74 72  tus==p->cacheCtr
110a0 20 29 7b 0a 20 20 20 20 61 4f 66 66 73 65 74 20   ){.    aOffset 
110b0 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20  = pC->aOffset;. 
110c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
110d0 72 74 28 61 54 79 70 65 29 3b 0a 20 20 20 20 61  rt(aType);.    a
110e0 76 61 69 6c 20 3d 20 30 3b 0a 20 20 20 20 70 43  vail = 0;.    pC
110f0 2d 3e 61 4f 66 66 73 65 74 20 3d 20 61 4f 66 66  ->aOffset = aOff
11100 73 65 74 20 3d 20 26 61 54 79 70 65 5b 6e 46 69  set = &aType[nFi
11110 65 6c 64 5d 3b 0a 20 20 20 20 70 43 2d 3e 70 61  eld];.    pC->pa
11120 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 61 79 6c  yloadSize = payl
11130 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 70 43 2d  oadSize;.    pC-
11140 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70  >cacheStatus = p
11150 2d 3e 63 61 63 68 65 43 74 72 3b 0a 0a 20 20 20  ->cacheCtr;..   
11160 20 2f 2a 20 46 69 67 75 72 65 20 6f 75 74 20 68   /* Figure out h
11170 6f 77 20 6d 61 6e 79 20 62 79 74 65 73 20 61 72  ow many bytes ar
11180 65 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20  e in the header 
11190 2a 2f 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20  */.    if( zRec 
111a0 29 7b 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d  ){.      zData =
111b0 20 7a 52 65 63 3b 0a 20 20 20 20 7d 65 6c 73 65   zRec;.    }else
111c0 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  {.      if( pC->
111d0 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20 20  isIndex ){.     
111e0 20 20 20 7a 44 61 74 61 20 3d 20 28 63 68 61 72     zData = (char
111f0 2a 29 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  *)sqlite3BtreeKe
11200 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  yFetch(pCrsr, &a
11210 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c  vail);.      }el
11220 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74  se{.        zDat
11230 61 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74  a = (char*)sqlit
11240 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68  e3BtreeDataFetch
11250 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
11260 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f  .      }.      /
11270 2a 20 49 66 20 4b 65 79 46 65 74 63 68 28 29 2f  * If KeyFetch()/
11280 44 61 74 61 46 65 74 63 68 28 29 20 6d 61 6e 61  DataFetch() mana
11290 67 65 64 20 74 6f 20 67 65 74 20 74 68 65 20 65  ged to get the e
112a0 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 2c 0a 20  ntire payload,. 
112b0 20 20 20 20 20 2a 2a 20 73 61 76 65 20 74 68 65       ** save the
112c0 20 70 61 79 6c 6f 61 64 20 69 6e 20 74 68 65 20   payload in the 
112d0 70 43 2d 3e 61 52 6f 77 20 63 61 63 68 65 2e 20  pC->aRow cache. 
112e0 20 54 68 61 74 20 77 69 6c 6c 20 73 61 76 65 20   That will save 
112f0 75 73 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a  us from.      **
11300 20 68 61 76 69 6e 67 20 74 6f 20 6d 61 6b 65 20   having to make 
11310 61 64 64 69 74 69 6f 6e 61 6c 20 63 61 6c 6c 73  additional calls
11320 20 74 6f 20 66 65 74 63 68 20 74 68 65 20 63 6f   to fetch the co
11330 6e 74 65 6e 74 20 70 6f 72 74 69 6f 6e 20 6f 66  ntent portion of
11340 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 72 65  .      ** the re
11350 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  cord..      */. 
11360 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61       assert( ava
11370 69 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  il>=0 );.      i
11380 66 28 20 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c  f( payloadSize <
11390 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a  = (u32)avail ){.
113a0 20 20 20 20 20 20 20 20 7a 52 65 63 20 3d 20 7a          zRec = z
113b0 44 61 74 61 3b 0a 20 20 20 20 20 20 20 20 70 43  Data;.        pC
113c0 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 7a 44  ->aRow = (u8*)zD
113d0 61 74 61 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ata;.      }else
113e0 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  {.        pC->aR
113f0 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ow = 0;.      }.
11400 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 54 68 65      }.    /* The
11410 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72   following asser
11420 74 20 69 73 20 74 72 75 65 20 69 6e 20 61 6c 6c  t is true in all
11430 20 63 61 73 65 73 20 61 63 63 65 70 74 20 77 68   cases accept wh
11440 65 6e 0a 20 20 20 20 2a 2a 20 74 68 65 20 64 61  en.    ** the da
11450 74 61 62 61 73 65 20 66 69 6c 65 20 68 61 73 20  tabase file has 
11460 62 65 65 6e 20 63 6f 72 72 75 70 74 65 64 20 65  been corrupted e
11470 78 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 20 20 2a  xternally..    *
11480 2a 20 20 20 20 61 73 73 65 72 74 28 20 7a 52 65  *    assert( zRe
11490 63 21 3d 30 20 7c 7c 20 61 76 61 69 6c 3e 3d 70  c!=0 || avail>=p
114a0 61 79 6c 6f 61 64 53 69 7a 65 20 7c 7c 20 61 76  ayloadSize || av
114b0 61 69 6c 3e 3d 39 20 29 3b 20 2a 2f 0a 20 20 20  ail>=9 ); */.   
114c0 20 73 7a 48 64 72 20 3d 20 67 65 74 56 61 72 69   szHdr = getVari
114d0 6e 74 33 32 28 28 75 38 2a 29 7a 44 61 74 61 2c  nt32((u8*)zData,
114e0 20 6f 66 66 73 65 74 29 3b 0a 0a 20 20 20 20 2f   offset);..    /
114f0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f  * Make sure a co
11500 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68  rrupt database h
11510 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20  as not given us 
11520 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64  an oversize head
11530 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68  er..    ** Do th
11540 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20  is now to avoid 
11550 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f  an oversize memo
11560 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20  ry allocation.. 
11570 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70     **.    ** Typ
11580 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65  e entries can be
11590 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35   between 1 and 5
115a0 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75   bytes each.  Bu
115b0 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20  t 4 and 5 byte. 
115c0 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20     ** types use 
115d0 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61  so much data spa
115e0 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61  ce that there ca
115f0 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61  n only be 4096 a
11600 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20  nd 32 of.    ** 
11610 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65  them, respective
11620 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69  ly.  So the maxi
11630 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74  mum header lengt
11640 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61  h results from a
11650 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74  .    ** 3-byte t
11660 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20  ype for each of 
11670 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33  the maximum of 3
11680 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75  2768 columns plu
11690 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65  s three.    ** e
116a0 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74  xtra bytes for t
116b0 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  he header length
116c0 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a   itself.  32768*
116d0 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20  3 + 3 = 98307.. 
116e0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66     */.    if( of
116f0 66 73 65 74 20 3e 20 39 38 33 30 37 20 29 7b 0a  fset > 98307 ){.
11700 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
11710 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
11720 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
11730 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
11740 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74 65 20  .    /* Compute 
11750 69 6e 20 6c 65 6e 20 74 68 65 20 6e 75 6d 62 65  in len the numbe
11760 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
11770 74 61 20 77 65 20 6e 65 65 64 20 74 6f 20 72 65  ta we need to re
11780 61 64 20 69 6e 20 6f 72 64 65 72 0a 20 20 20 20  ad in order.    
11790 2a 2a 20 74 6f 20 67 65 74 20 6e 46 69 65 6c 64  ** to get nField
117a0 20 74 79 70 65 20 76 61 6c 75 65 73 2e 20 20 6f   type values.  o
117b0 66 66 73 65 74 20 69 73 20 61 6e 20 75 70 70 65  ffset is an uppe
117c0 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 69 73 2e  r bound on this.
117d0 20 20 42 75 74 0a 20 20 20 20 2a 2a 20 6e 46 69    But.    ** nFi
117e0 65 6c 64 20 6d 69 67 68 74 20 62 65 20 73 69 67  eld might be sig
117f0 6e 69 66 69 63 61 6e 74 6c 79 20 6c 65 73 73 20  nificantly less 
11800 74 68 61 6e 20 74 68 65 20 74 72 75 65 20 6e 75  than the true nu
11810 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a  mber of columns.
11820 20 20 20 20 2a 2a 20 69 6e 20 74 68 65 20 74 61      ** in the ta
11830 62 6c 65 2c 20 61 6e 64 20 69 6e 20 74 68 61 74  ble, and in that
11840 20 63 61 73 65 2c 20 35 2a 6e 46 69 65 6c 64 2b   case, 5*nField+
11850 33 20 6d 69 67 68 74 20 62 65 20 73 6d 61 6c 6c  3 might be small
11860 65 72 20 74 68 61 6e 20 6f 66 66 73 65 74 2e 0a  er than offset..
11870 20 20 20 20 2a 2a 20 57 65 20 77 61 6e 74 20 74      ** We want t
11880 6f 20 6d 69 6e 69 6d 69 7a 65 20 6c 65 6e 20 69  o minimize len i
11890 6e 20 6f 72 64 65 72 20 74 6f 20 6c 69 6d 69 74  n order to limit
118a0 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
118b0 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 61   memory.    ** a
118c0 6c 6c 6f 63 61 74 69 6f 6e 2c 20 65 73 70 65 63  llocation, espec
118d0 69 61 6c 6c 79 20 69 66 20 61 20 63 6f 72 72 75  ially if a corru
118e0 70 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  pt database file
118f0 20 68 61 73 20 63 61 75 73 65 64 20 6f 66 66 73   has caused offs
11900 65 74 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20  et.    ** to be 
11910 6f 76 65 72 73 69 7a 65 64 2e 20 4f 66 66 73 65  oversized. Offse
11920 74 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20  t is limited to 
11930 39 38 33 30 37 20 61 62 6f 76 65 2e 20 20 42 75  98307 above.  Bu
11940 74 20 39 38 33 30 37 20 6d 69 67 68 74 0a 20 20  t 98307 might.  
11950 20 20 2a 2a 20 73 74 69 6c 6c 20 65 78 63 65 65    ** still excee
11960 64 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79 20  d Robson memory 
11970 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69 74  allocation limit
11980 73 20 6f 6e 20 73 6f 6d 65 20 63 6f 6e 66 69 67  s on some config
11990 75 72 61 74 69 6f 6e 73 2e 0a 20 20 20 20 2a 2a  urations..    **
119a0 20 4f 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74   On systems that
119b0 20 63 61 6e 6e 6f 74 20 74 6f 6c 65 72 61 74 65   cannot tolerate
119c0 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c   large memory al
119d0 6c 6f 63 61 74 69 6f 6e 73 2c 20 6e 46 69 65 6c  locations, nFiel
119e0 64 2a 35 2b 33 0a 20 20 20 20 2a 2a 20 77 69 6c  d*5+3.    ** wil
119f0 6c 20 6c 69 6b 65 6c 79 20 62 65 20 6d 75 63 68  l likely be much
11a00 20 73 6d 61 6c 6c 65 72 20 73 69 6e 63 65 20 6e   smaller since n
11a10 46 69 65 6c 64 20 77 69 6c 6c 20 6c 69 6b 65 6c  Field will likel
11a20 79 20 62 65 20 6c 65 73 73 20 74 68 61 6e 0a 20  y be less than. 
11a30 20 20 20 2a 2a 20 32 30 20 6f 72 20 73 6f 2e 20     ** 20 or so. 
11a40 20 54 68 69 73 20 69 6e 73 75 72 65 73 20 74 68   This insures th
11a50 61 74 20 52 6f 62 73 6f 6e 20 6d 65 6d 6f 72 79  at Robson memory
11a60 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6c 69 6d 69   allocation limi
11a70 74 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 6e 6f  ts are.    ** no
11a80 74 20 65 78 63 65 65 64 65 64 20 65 76 65 6e 20  t exceeded even 
11a90 66 6f 72 20 63 6f 72 72 75 70 74 20 64 61 74 61  for corrupt data
11aa0 62 61 73 65 20 66 69 6c 65 73 2e 0a 20 20 20 20  base files..    
11ab0 2a 2f 0a 20 20 20 20 6c 65 6e 20 3d 20 6e 46 69  */.    len = nFi
11ac0 65 6c 64 2a 35 20 2b 20 33 3b 0a 20 20 20 20 69  eld*5 + 3;.    i
11ad0 66 28 20 6c 65 6e 20 3e 20 28 69 6e 74 29 6f 66  f( len > (int)of
11ae0 66 73 65 74 20 29 20 6c 65 6e 20 3d 20 28 69 6e  fset ) len = (in
11af0 74 29 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f  t)offset;..    /
11b00 2a 20 54 68 65 20 4b 65 79 46 65 74 63 68 28 29  * The KeyFetch()
11b10 20 6f 72 20 44 61 74 61 46 65 74 63 68 28 29 20   or DataFetch() 
11b20 61 62 6f 76 65 20 61 72 65 20 66 61 73 74 20 61  above are fast a
11b30 6e 64 20 77 69 6c 6c 20 67 65 74 20 74 68 65 20  nd will get the 
11b40 65 6e 74 69 72 65 0a 20 20 20 20 2a 2a 20 72 65  entire.    ** re
11b50 63 6f 72 64 20 68 65 61 64 65 72 20 69 6e 20 6d  cord header in m
11b60 6f 73 74 20 63 61 73 65 73 2e 20 20 42 75 74 20  ost cases.  But 
11b70 74 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 20 74  they will fail t
11b80 6f 20 67 65 74 20 74 68 65 20 63 6f 6d 70 6c 65  o get the comple
11b90 74 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72 64  te.    ** record
11ba0 20 68 65 61 64 65 72 20 69 66 20 74 68 65 20 72   header if the r
11bb0 65 63 6f 72 64 20 68 65 61 64 65 72 20 64 6f 65  ecord header doe
11bc0 73 20 6e 6f 74 20 66 69 74 20 6f 6e 20 61 20 73  s not fit on a s
11bd0 69 6e 67 6c 65 20 70 61 67 65 0a 20 20 20 20 2a  ingle page.    *
11be0 2a 20 69 6e 20 74 68 65 20 42 2d 54 72 65 65 2e  * in the B-Tree.
11bf0 20 20 57 68 65 6e 20 74 68 61 74 20 68 61 70 70    When that happ
11c00 65 6e 73 2c 20 75 73 65 20 73 71 6c 69 74 65 33  ens, use sqlite3
11c10 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
11c20 28 29 20 74 6f 0a 20 20 20 20 2a 2a 20 61 63 71  () to.    ** acq
11c30 75 69 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74  uire the complet
11c40 65 20 68 65 61 64 65 72 20 74 65 78 74 2e 0a 20  e header text.. 
11c50 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 21 7a     */.    if( !z
11c60 52 65 63 20 26 26 20 61 76 61 69 6c 3c 6c 65 6e  Rec && avail<len
11c70 20 29 7b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 66   ){.      sMem.f
11c80 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  lags = 0;.      
11c90 73 4d 65 6d 2e 64 62 20 3d 20 30 3b 0a 20 20 20  sMem.db = 0;.   
11ca0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
11cb0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
11cc0 70 43 72 73 72 2c 20 30 2c 20 6c 65 6e 2c 20 70  pCrsr, 0, len, p
11cd0 43 2d 3e 69 73 49 6e 64 65 78 2c 20 26 73 4d 65  C->isIndex, &sMe
11ce0 6d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  m);.      if( rc
11cf0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
11d00 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
11d10 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20  olumn_out;.     
11d20 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d   }.      zData =
11d30 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a 20   sMem.z;.    }. 
11d40 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 28 75 38     zEndHdr = (u8
11d50 20 2a 29 26 7a 44 61 74 61 5b 6c 65 6e 5d 3b 0a   *)&zData[len];.
11d60 20 20 20 20 7a 49 64 78 20 3d 20 28 75 38 20 2a      zIdx = (u8 *
11d70 29 26 7a 44 61 74 61 5b 73 7a 48 64 72 5d 3b 0a  )&zData[szHdr];.
11d80 0a 20 20 20 20 2f 2a 20 53 63 61 6e 20 74 68 65  .    /* Scan the
11d90 20 68 65 61 64 65 72 20 61 6e 64 20 75 73 65 20   header and use 
11da0 69 74 20 74 6f 20 66 69 6c 6c 20 69 6e 20 74 68  it to fill in th
11db0 65 20 61 54 79 70 65 5b 5d 20 61 6e 64 20 61 4f  e aType[] and aO
11dc0 66 66 73 65 74 5b 5d 0a 20 20 20 20 2a 2a 20 61  ffset[].    ** a
11dd0 72 72 61 79 73 2e 20 20 61 54 79 70 65 5b 69 5d  rrays.  aType[i]
11de0 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68   will contain th
11df0 65 20 74 79 70 65 20 69 6e 74 65 67 65 72 20 66  e type integer f
11e00 6f 72 20 74 68 65 20 69 2d 74 68 0a 20 20 20 20  or the i-th.    
11e10 2a 2a 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 61 4f  ** column and aO
11e20 66 66 73 65 74 5b 69 5d 20 77 69 6c 6c 20 63 6f  ffset[i] will co
11e30 6e 74 61 69 6e 20 74 68 65 20 6f 66 66 73 65 74  ntain the offset
11e40 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
11e50 69 6e 67 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ing.    ** of th
11e60 65 20 72 65 63 6f 72 64 20 74 6f 20 74 68 65 20  e record to the 
11e70 73 74 61 72 74 20 6f 66 20 74 68 65 20 64 61 74  start of the dat
11e80 61 20 66 6f 72 20 74 68 65 20 69 2d 74 68 20 63  a for the i-th c
11e90 6f 6c 75 6d 6e 0a 20 20 20 20 2a 2f 0a 20 20 20  olumn.    */.   
11ea0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 46 69 65   for(i=0; i<nFie
11eb0 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ld; i++){.      
11ec0 69 66 28 20 7a 49 64 78 3c 7a 45 6e 64 48 64 72  if( zIdx<zEndHdr
11ed0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 4f 66 66   ){.        aOff
11ee0 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b  set[i] = offset;
11ef0 0a 20 20 20 20 20 20 20 20 7a 49 64 78 20 2b 3d  .        zIdx +=
11f00 20 67 65 74 56 61 72 69 6e 74 33 32 28 7a 49 64   getVarint32(zId
11f10 78 2c 20 61 54 79 70 65 5b 69 5d 29 3b 0a 20 20  x, aType[i]);.  
11f20 20 20 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20        szField = 
11f30 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
11f40 6c 54 79 70 65 4c 65 6e 28 61 54 79 70 65 5b 69  lTypeLen(aType[i
11f50 5d 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73  ]);.        offs
11f60 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20  et += szField;. 
11f70 20 20 20 20 20 20 20 69 66 28 20 6f 66 66 73 65         if( offse
11f80 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a  t<szField ){  /*
11f90 20 54 72 75 65 20 69 66 20 6f 66 66 73 65 74 20   True if offset 
11fa0 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20  overflows */.   
11fb0 20 20 20 20 20 20 20 7a 49 64 78 20 3d 20 26 7a         zIdx = &z
11fc0 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46  EndHdr[1];  /* F
11fd0 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52  orces SQLITE_COR
11fe0 52 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f  RUPT return belo
11ff0 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62  w */.          b
12000 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
12010 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
12020 20 20 20 20 20 2f 2a 20 49 66 20 69 20 69 73 20       /* If i is 
12030 6c 65 73 73 20 74 68 61 74 20 6e 46 69 65 6c 64  less that nField
12040 2c 20 74 68 65 6e 20 74 68 65 72 65 20 61 72 65  , then there are
12050 20 6c 65 73 73 20 66 69 65 6c 64 73 20 69 6e 20   less fields in 
12060 74 68 69 73 0a 20 20 20 20 20 20 20 20 2a 2a 20  this.        ** 
12070 72 65 63 6f 72 64 20 74 68 61 6e 20 53 65 74 4e  record than SetN
12080 75 6d 43 6f 6c 75 6d 6e 73 20 69 6e 64 69 63 61  umColumns indica
12090 74 65 64 20 74 68 65 72 65 20 61 72 65 20 63 6f  ted there are co
120a0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20 20  lumns in the.   
120b0 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 2e 20 53       ** table. S
120c0 65 74 20 74 68 65 20 6f 66 66 73 65 74 20 66 6f  et the offset fo
120d0 72 20 61 6e 79 20 65 78 74 72 61 20 63 6f 6c 75  r any extra colu
120e0 6d 6e 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20  mns not present 
120f0 69 6e 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  in.        ** th
12100 65 20 72 65 63 6f 72 64 20 74 6f 20 30 2e 20 54  e record to 0. T
12110 68 69 73 20 74 65 6c 6c 73 20 63 6f 64 65 20 62  his tells code b
12120 65 6c 6f 77 20 74 6f 20 73 74 6f 72 65 20 61 20  elow to store a 
12130 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 2a 2a 20  NULL.        ** 
12140 69 6e 73 74 65 61 64 20 6f 66 20 64 65 73 65 72  instead of deser
12150 69 61 6c 69 7a 69 6e 67 20 61 20 76 61 6c 75 65  ializing a value
12160 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
12170 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
12180 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20       aOffset[i] 
12190 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
121a0 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
121b0 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
121c0 65 6d 29 3b 0a 20 20 20 20 73 4d 65 6d 2e 66 6c  em);.    sMem.fl
121d0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
121e0 0a 20 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61  .    /* If we ha
121f0 76 65 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61  ve read more hea
12200 64 65 72 20 64 61 74 61 20 74 68 61 6e 20 77 61  der data than wa
12210 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  s contained in t
12220 68 65 20 68 65 61 64 65 72 2c 0a 20 20 20 20 2a  he header,.    *
12230 2a 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20  * or if the end 
12240 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c  of the last fiel
12250 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20  d appears to be 
12260 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
12270 74 68 65 0a 20 20 20 20 2a 2a 20 72 65 63 6f 72  the.    ** recor
12280 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64  d, or if the end
12290 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65   of the last fie
122a0 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ld appears to be
122b0 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e 64 0a   before the end.
122c0 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65      ** of the re
122d0 63 6f 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66  cord (when all f
122e0 69 65 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20  ields present), 
122f0 74 68 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20  then we must be 
12300 64 65 61 6c 69 6e 67 20 0a 20 20 20 20 2a 2a 20  dealing .    ** 
12310 77 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64  with a corrupt d
12320 61 74 61 62 61 73 65 2e 0a 20 20 20 20 2a 2f 0a  atabase..    */.
12330 20 20 20 20 69 66 28 20 28 7a 49 64 78 20 3e 20      if( (zIdx > 
12340 7a 45 6e 64 48 64 72 29 20 7c 7c 20 28 6f 66 66  zEndHdr) || (off
12350 73 65 74 20 3e 20 70 61 79 6c 6f 61 64 53 69 7a  set > payloadSiz
12360 65 29 0a 20 20 20 20 20 20 20 20 20 7c 7c 20 28  e).         || (
12370 7a 49 64 78 3d 3d 7a 45 6e 64 48 64 72 20 26 26  zIdx==zEndHdr &&
12380 20 6f 66 66 73 65 74 21 3d 70 61 79 6c 6f 61 64   offset!=payload
12390 53 69 7a 65 29 20 29 7b 0a 20 20 20 20 20 20 72  Size) ){.      r
123a0 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
123b0 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67  PT_BKPT;.      g
123c0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
123d0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  t;.    }.  }..  
123e0 2f 2a 20 47 65 74 20 74 68 65 20 63 6f 6c 75 6d  /* Get the colum
123f0 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 49  n information. I
12400 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73  f aOffset[p2] is
12410 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
12420 0a 20 20 2a 2a 20 64 65 73 65 72 69 61 6c 69 7a  .  ** deserializ
12430 65 20 74 68 65 20 76 61 6c 75 65 20 66 72 6f 6d  e the value from
12440 20 74 68 65 20 72 65 63 6f 72 64 2e 20 49 66 20   the record. If 
12450 61 4f 66 66 73 65 74 5b 70 32 5d 20 69 73 20 7a  aOffset[p2] is z
12460 65 72 6f 2c 0a 20 20 2a 2a 20 74 68 65 6e 20 74  ero,.  ** then t
12470 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f  here are not eno
12480 75 67 68 20 66 69 65 6c 64 73 20 69 6e 20 74 68  ugh fields in th
12490 65 20 72 65 63 6f 72 64 20 74 6f 20 73 61 74 69  e record to sati
124a0 73 66 79 20 74 68 65 0a 20 20 2a 2a 20 72 65 71  sfy the.  ** req
124b0 75 65 73 74 2e 20 20 49 6e 20 74 68 69 73 20 63  uest.  In this c
124c0 61 73 65 2c 20 73 65 74 20 74 68 65 20 76 61 6c  ase, set the val
124d0 75 65 20 4e 55 4c 4c 20 6f 72 20 74 6f 20 50 34  ue NULL or to P4
124e0 20 69 66 20 50 34 20 69 73 0a 20 20 2a 2a 20 61   if P4 is.  ** a
124f0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4d 65   pointer to a Me
12500 6d 20 6f 62 6a 65 63 74 2e 0a 20 20 2a 2f 0a 20  m object..  */. 
12510 20 69 66 28 20 61 4f 66 66 73 65 74 5b 70 32 5d   if( aOffset[p2]
12520 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
12530 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
12540 0a 20 20 20 20 69 66 28 20 7a 52 65 63 20 29 7b  .    if( zRec ){
12550 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
12560 62 65 4d 65 6d 52 65 6c 65 61 73 65 45 78 74 65  beMemReleaseExte
12570 72 6e 61 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  rnal(pDest);.   
12580 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
12590 72 69 61 6c 47 65 74 28 28 75 38 20 2a 29 26 7a  rialGet((u8 *)&z
125a0 52 65 63 5b 61 4f 66 66 73 65 74 5b 70 32 5d 5d  Rec[aOffset[p2]]
125b0 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44 65  , aType[p2], pDe
125c0 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  st);.    }else{.
125d0 20 20 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69        len = sqli
125e0 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
125f0 65 4c 65 6e 28 61 54 79 70 65 5b 70 32 5d 29 3b  eLen(aType[p2]);
12600 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
12610 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c  beMemMove(&sMem,
12620 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72   pDest);.      r
12630 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
12640 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
12650 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20  r, aOffset[p2], 
12660 6c 65 6e 2c 20 70 43 2d 3e 69 73 49 6e 64 65 78  len, pC->isIndex
12670 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20  , &sMem);.      
12680 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
12690 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
126a0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
126b0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
126c0 44 61 74 61 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20  Data = sMem.z;. 
126d0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
126e0 53 65 72 69 61 6c 47 65 74 28 28 75 38 2a 29 7a  SerialGet((u8*)z
126f0 44 61 74 61 2c 20 61 54 79 70 65 5b 70 32 5d 2c  Data, aType[p2],
12700 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 0a 20   pDest);.    }. 
12710 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
12720 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 7d 65 6c 73  encoding;.  }els
12730 65 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  e{.    if( pOp->
12740 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29  p4type==P4_MEM )
12750 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
12760 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
12770 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
12780 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
12790 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  c);.    }else{. 
127a0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 44 65       assert( pDe
127b0 73 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  st->flags&MEM_Nu
127c0 6c 6c 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ll );.    }.  }.
127d0 0a 20 20 2f 2a 20 49 66 20 77 65 20 64 79 6e 61  .  /* If we dyna
127e0 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
127f0 64 20 73 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  d space to hold 
12800 74 68 65 20 64 61 74 61 20 28 69 6e 20 74 68 65  the data (in the
12810 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
12820 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20  eMemFromBtree() 
12830 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68 65 6e  call above) then
12840 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f   transfer contro
12850 6c 20 6f 66 20 74 68 61 74 0a 20 20 2a 2a 20 64  l of that.  ** d
12860 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
12870 61 74 65 64 20 73 70 61 63 65 20 6f 76 65 72 20  ated space over 
12880 74 6f 20 74 68 65 20 70 44 65 73 74 20 73 74 72  to the pDest str
12890 75 63 74 75 72 65 2e 0a 20 20 2a 2a 20 54 68 69  ucture..  ** Thi
128a0 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d 65 6d  s prevents a mem
128b0 6f 72 79 20 63 6f 70 79 2e 0a 20 20 2a 2f 0a 20  ory copy..  */. 
128c0 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f   if( sMem.zMallo
128d0 63 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  c ){.    assert(
128e0 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d   sMem.z==sMem.zM
128f0 61 6c 6c 6f 63 20 29 3b 0a 20 20 20 20 61 73 73  alloc );.    ass
12900 65 72 74 28 20 21 28 70 44 65 73 74 2d 3e 66 6c  ert( !(pDest->fl
12910 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  ags & MEM_Dyn) )
12920 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28  ;.    assert( !(
12930 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28  pDest->flags & (
12940 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
12950 29 29 20 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d  )) || pDest->z==
12960 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20 20 70 44  sMem.z );.    pD
12970 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28  est->flags &= ~(
12980 4d 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74  MEM_Ephem|MEM_St
12990 61 74 69 63 29 3b 0a 20 20 20 20 70 44 65 73 74  atic);.    pDest
129a0 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
129b0 65 72 6d 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  erm;.    pDest->
129c0 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  z = sMem.z;.    
129d0 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d  pDest->zMalloc =
129e0 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20   sMem.zMalloc;. 
129f0 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   }..  rc = sqlit
12a00 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69  e3VdbeMemMakeWri
12a10 74 65 61 62 6c 65 28 70 44 65 73 74 29 3b 0a 0a  teable(pDest);..
12a20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20  op_column_out:. 
12a30 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
12a40 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52  SIZE(pDest);.  R
12a50 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
12a60 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20  p->p3, pDest);. 
12a70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12a80 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50  code: Affinity P
12a90 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  1 P2 * P4 *.**.*
12aa0 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69  * Apply affiniti
12ab0 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66  es to a range of
12ac0 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74   P2 registers st
12ad0 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a  arting with P1..
12ae0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74  **.** P4 is a st
12af0 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
12b00 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
12b10 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74   The nth charact
12b20 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
12b30 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
12b40 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
12b50 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
12b60 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74   used for the nt
12b70 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  h.** memory cell
12b80 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a   in the range..*
12b90 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69  /.case OP_Affini
12ba0 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ty: {.  const ch
12bb0 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20  ar *zAffinity;  
12bc0 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
12bd0 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a   to be applied *
12be0 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b 20 20  /.  char cAff;  
12bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12c00 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74  A single charact
12c10 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a  er of affinity *
12c20 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  /..  zAffinity =
12c30 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
12c40 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21  sert( zAffinity!
12c50 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
12c60 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70  zAffinity[pOp->p
12c70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20  2]==0 );.  pIn1 
12c80 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
12c90 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41 66 66  ;.  while( (cAff
12ca0 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b   = *(zAffinity++
12cb0 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  ))!=0 ){.    ass
12cc0 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d  ert( pIn1 <= &p-
12cd0 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 20 29  >aMem[p->nMem] )
12ce0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
12cf0 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
12d00 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  ;.    ExpandBlob
12d10 28 70 49 6e 31 29 3b 0a 20 20 20 20 61 70 70 6c  (pIn1);.    appl
12d20 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
12d30 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  cAff, encoding);
12d40 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
12d50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12d60 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f  Opcode: MakeReco
12d70 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  rd P1 P2 P3 P4 *
12d80 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50  .**.** Convert P
12d90 32 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69  2 registers begi
12da0 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69 6e  nning with P1 in
12db0 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66  to the [record f
12dc0 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73  ormat].** use as
12dd0 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69   a data record i
12de0 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62  n a database tab
12df0 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a  le or as a key.*
12e00 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20  * in an index.  
12e10 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  The OP_Column op
12e20 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20  code can decode 
12e30 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72  the record later
12e40 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  ..**.** P4 may b
12e50 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  e a string that 
12e60 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
12e70 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20   long.  The nth 
12e80 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
12e90 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
12ea0 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
12eb0 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
12ec0 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
12ed0 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c   the nth.** fiel
12ee0 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
12ef0 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61  ey..**.** The ma
12f00 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61  pping from chara
12f10 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79  cter to affinity
12f20 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65   is given by the
12f30 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20   SQLITE_AFF_.** 
12f40 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69  macros defined i
12f50 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a  n sqliteInt.h..*
12f60 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55  *.** If P4 is NU
12f70 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65  LL then all inde
12f80 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68  x fields have th
12f90 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e  e affinity NONE.
12fa0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65  .*/.case OP_Make
12fb0 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a  Record: {.  u8 *
12fc0 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20  zNewRecord;     
12fd0 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74     /* A buffer t
12fe0 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20  o hold the data 
12ff0 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
13000 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65  rd */.  Mem *pRe
13010 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
13020 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * The new record
13030 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b   */.  u64 nData;
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13050 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
13060 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
13070 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20  .  int nHdr;    
13080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13090 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
130a0 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a  header space */.
130b0 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20    i64 nByte;    
130c0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
130d0 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
130e0 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64 20  for this record 
130f0 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20  */.  int nZero; 
13100 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13110 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
13120 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
13130 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
13140 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20    int nVarint;  
13150 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13160 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
13170 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32   varint */.  u32
13180 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20   serial_type;   
13190 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c      /* Type fiel
131a0 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74  d */.  Mem *pDat
131b0 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  a0;           /*
131c0 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20   First field to 
131d0 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f  be combined into
131e0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
131f0 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20   Mem *pLast;    
13200 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
13210 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63  field of the rec
13220 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  ord */.  int nFi
13230 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eld;            
13240 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65  /* Number of fie
13250 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
13260 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66  d */.  char *zAf
13270 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a  finity;       /*
13280 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73 74   The affinity st
13290 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63  ring for the rec
132a0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c  ord */.  int fil
132b0 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20  e_format;       
132c0 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74  /* File format t
132d0 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69  o use for encodi
132e0 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20  ng */.  int i;  
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13300 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20  * Space used in 
13310 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 2a 2f 0a  zNewRecord[] */.
13320 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20    int len;      
13330 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
13340 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f  th of a field */
13350 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20  ..  /* Assuming 
13360 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61  the record conta
13370 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68  ins N fields, th
13380 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
13390 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20  looks.  ** like 
133a0 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20  this:.  **.  ** 
133b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
133c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
133d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
133e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
133f0 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20  --------.  ** | 
13400 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20  hdr-size | type 
13410 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e  0 | type 1 | ...
13420 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61   | type N-1 | da
13430 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61  ta0 | ... | data
13440 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d   N-1 | .  ** ---
13450 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13460 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13470 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13480 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13490 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20  -----.  **.  ** 
134a0 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e  Data(0) is taken
134b0 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
134c0 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65  1.  Data(1) come
134d0 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  s from register 
134e0 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f  P1+1.  ** and so
134f0 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a   froth..  **.  *
13500 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c  * Each type fiel
13510 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65  d is a varint re
13520 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73  presenting the s
13530 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68  erial type of th
13540 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f  e .  ** correspo
13550 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65  nding data eleme
13560 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56  nt (see sqlite3V
13570 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29  dbeSerialType())
13580 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73  . The.  ** hdr-s
13590 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73  ize field is als
135a0 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68  o a varint which
135b0 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66   is the offset f
135c0 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
135d0 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65  g.  ** of the re
135e0 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20  cord to data0.. 
135f0 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b   */.  nData = 0;
13600 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13610 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
13620 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  ata space */.  n
13630 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Hdr = 0;        
13640 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
13650 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
13660 70 61 63 65 20 2a 2f 0a 20 20 6e 42 79 74 65 20  pace */.  nByte 
13670 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
13680 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
13690 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
136a0 6f 72 64 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d  ord */.  nZero =
136b0 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
136c0 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
136d0 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
136e0 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
136f0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
13700 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  p1;.  zAffinity 
13710 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
13720 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
13730 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  && pOp->p2>0 && 
13740 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d  pOp->p2+nField<=
13750 70 2d 3e 6e 4d 65 6d 2b 31 20 29 3b 0a 20 20 70  p->nMem+1 );.  p
13760 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46  Data0 = &aMem[nF
13770 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20  ield];.  nField 
13780 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61  = pOp->p2;.  pLa
13790 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69  st = &pData0[nFi
137a0 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66  eld-1];.  file_f
137b0 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72  ormat = p->minWr
137c0 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a  iteFileFormat;..
137d0 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68    /* Identify th
137e0 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
137f0 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  r */.  assert( p
13800 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c  Op->p3<pOp->p1 |
13810 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
13820 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  p1+pOp->p2 );.  
13830 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
13840 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
13850 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
13860 74 29 3b 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74  t);..  /* Loop t
13870 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65  hrough the eleme
13880 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61  nts that will ma
13890 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64  ke up the record
138a0 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20   to figure.  ** 
138b0 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61  out how much spa
138c0 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66  ce is required f
138d0 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  or the new recor
138e0 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 70 52  d..  */.  for(pR
138f0 65 63 3d 70 44 61 74 61 30 3b 20 70 52 65 63 3c  ec=pData0; pRec<
13900 3d 70 4c 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b  =pLast; pRec++){
13910 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
13920 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b  IsValid(pRec) );
13930 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69 6e 69  .    if( zAffini
13940 74 79 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c  ty ){.      appl
13950 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20  yAffinity(pRec, 
13960 7a 41 66 66 69 6e 69 74 79 5b 70 52 65 63 2d 70  zAffinity[pRec-p
13970 44 61 74 61 30 5d 2c 20 65 6e 63 6f 64 69 6e 67  Data0], encoding
13980 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
13990 20 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d   pRec->flags&MEM
139a0 5f 5a 65 72 6f 20 26 26 20 70 52 65 63 2d 3e 6e  _Zero && pRec->n
139b0 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
139c0 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
139d0 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20 20  Blob(pRec);.    
139e0 7d 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  }.    serial_typ
139f0 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
13a00 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
13a10 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20  file_format);.  
13a20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56    len = sqlite3V
13a30 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
13a40 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
13a50 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b     nData += len;
13a60 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c  .    nHdr += sql
13a70 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65  ite3VarintLen(se
13a80 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
13a90 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  if( pRec->flags 
13aa0 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
13ab0 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 70 75 72 65      /* Only pure
13ac0 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f   zero-filled BLO
13ad0 42 73 20 63 61 6e 20 62 65 20 69 6e 70 75 74 20  Bs can be input 
13ae0 74 6f 20 74 68 69 73 20 4f 70 63 6f 64 65 2e 0a  to this Opcode..
13af0 20 20 20 20 20 20 2a 2a 20 57 65 20 64 6f 20 6e        ** We do n
13b00 6f 74 20 61 6c 6c 6f 77 20 62 6c 6f 62 73 20 77  ot allow blobs w
13b10 69 74 68 20 61 20 70 72 65 66 69 78 20 61 6e 64  ith a prefix and
13b20 20 61 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 74   a zero-filled t
13b30 61 69 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 6e 5a  ail. */.      nZ
13b40 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e  ero += pRec->u.n
13b50 5a 65 72 6f 3b 0a 20 20 20 20 7d 65 6c 73 65 20  Zero;.    }else 
13b60 69 66 28 20 6c 65 6e 20 29 7b 0a 20 20 20 20 20  if( len ){.     
13b70 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20   nZero = 0;.    
13b80 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 64 64 20  }.  }..  /* Add 
13b90 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64  the initial head
13ba0 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f  er varint and to
13bb0 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a  tal the size */.
13bc0 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e    nHdr += nVarin
13bd0 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e  t = sqlite3Varin
13be0 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 69 66  tLen(nHdr);.  if
13bf0 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65  ( nVarint<sqlite
13c00 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
13c10 20 29 7b 0a 20 20 20 20 6e 48 64 72 2b 2b 3b 0a   ){.    nHdr++;.
13c20 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48    }.  nByte = nH
13c30 64 72 2b 6e 44 61 74 61 2d 6e 5a 65 72 6f 3b 0a  dr+nData-nZero;.
13c40 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e    if( nByte>db->
13c50 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
13c60 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
13c70 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
13c80 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
13c90 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20  sure the output 
13ca0 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62  register has a b
13cb0 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75  uffer large enou
13cc0 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a  gh to store .  *
13cd0 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * the new record
13ce0 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67  . The output reg
13cf0 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20  ister (pOp->p3) 
13d00 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74  is not allowed t
13d10 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66  o.  ** be one of
13d20 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
13d30 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68  ters (because th
13d40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
13d50 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
13d60 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f  VdbeMemGrow() co
13d70 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20  uld clobber the 
13d80 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20  value before it 
13d90 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20  is used)..  */. 
13da0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
13db0 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
13dc0 6e 74 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a  nt)nByte, 0) ){.
13dd0 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
13de0 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72  .  }.  zNewRecor
13df0 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e  d = (u8 *)pOut->
13e00 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74  z;..  /* Write t
13e10 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
13e20 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a   = putVarint32(z
13e30 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29  NewRecord, nHdr)
13e40 3b 0a 20 20 66 6f 72 28 70 52 65 63 3d 70 44 61  ;.  for(pRec=pDa
13e50 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c 61 73 74  ta0; pRec<=pLast
13e60 3b 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20 73  ; pRec++){.    s
13e70 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c  erial_type = sql
13e80 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
13e90 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f  pe(pRec, file_fo
13ea0 72 6d 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20  rmat);.    i += 
13eb0 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65  putVarint32(&zNe
13ec0 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69  wRecord[i], seri
13ed0 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 2f  al_type);      /
13ee0 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f  * serial type */
13ef0 0a 20 20 7d 0a 20 20 66 6f 72 28 70 52 65 63 3d  .  }.  for(pRec=
13f00 70 44 61 74 61 30 3b 20 70 52 65 63 3c 3d 70 4c  pData0; pRec<=pL
13f10 61 73 74 3b 20 70 52 65 63 2b 2b 29 7b 20 20 2f  ast; pRec++){  /
13f20 2a 20 73 65 72 69 61 6c 20 64 61 74 61 20 2a 2f  * serial data */
13f30 0a 20 20 20 20 69 20 2b 3d 20 73 71 6c 69 74 65  .    i += sqlite
13f40 33 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26  3VdbeSerialPut(&
13f50 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 28  zNewRecord[i], (
13f60 69 6e 74 29 28 6e 42 79 74 65 2d 69 29 2c 20 70  int)(nByte-i), p
13f70 52 65 63 2c 66 69 6c 65 5f 66 6f 72 6d 61 74 29  Rec,file_format)
13f80 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
13f90 69 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61  i==nByte );..  a
13fa0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
13fb0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
13fc0 6e 4d 65 6d 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  nMem );.  pOut->
13fd0 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
13fe0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
13ff0 4d 45 4d 5f 42 6c 6f 62 20 7c 20 4d 45 4d 5f 44  MEM_Blob | MEM_D
14000 79 6e 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c  yn;.  pOut->xDel
14010 20 3d 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72   = 0;.  if( nZer
14020 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  o ){.    pOut->u
14030 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a  .nZero = nZero;.
14040 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
14050 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d  |= MEM_Zero;.  }
14060 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
14070 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20  QLITE_UTF8;  /* 
14080 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62  In case the blob
14090 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74   is ever convert
140a0 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  ed to text */.  
140b0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
140c0 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
140d0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
140e0 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
140f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
14100 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a  e: Count P1 P2 *
14110 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65   * *.**.** Store
14120 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
14130 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67  ntries (an integ
14140 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65  er value) in the
14150 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
14160 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75  .** opened by cu
14170 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73  rsor P1 in regis
14180 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65  ter P2.*/.#ifnde
14190 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
141a0 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50  REECOUNT.case OP
141b0 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  _Count: {       
141c0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
141d0 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45  ease */.  i64 nE
141e0 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72  ntry;.  BtCursor
141f0 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73   *pCrsr;..  pCrs
14200 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
14210 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a  ->p1]->pCursor;.
14220 20 20 69 66 28 20 70 43 72 73 72 20 29 7b 0a 20    if( pCrsr ){. 
14230 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
14240 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c  treeCount(pCrsr,
14250 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 7d 65 6c   &nEntry);.  }el
14260 73 65 7b 0a 20 20 20 20 6e 45 6e 74 72 79 20 3d  se{.    nEntry =
14270 20 30 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e   0;.  }.  pOut->
14280 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
14290 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
142a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
142b0 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
142c0 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
142d0 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
142e0 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
142f0 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
14300 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
14310 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
14320 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
14330 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
14340 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
14350 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
14360 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
14370 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
14380 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
14390 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
143a0 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
143b0 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
143c0 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143e0 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
143f0 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
14400 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
14410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14420 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
14430 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
14440 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
14450 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
14460 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
14470 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
14480 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
14490 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
144a0 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
144b0 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
144c0 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
144d0 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
144e0 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
144f0 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
14500 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
14510 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
14520 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
14530 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
14540 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
14550 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
14560 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
14570 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
14580 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
14590 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
145a0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
145b0 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
145c0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
145d0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
145e0 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
145f0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
14600 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
14610 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
14620 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
14630 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41  );..  if( p1==SA
14640 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b  VEPOINT_BEGIN ){
14650 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 77 72 69  .    if( db->wri
14660 74 65 56 64 62 65 43 6e 74 3e 30 20 29 7b 0a 20  teVdbeCnt>0 ){. 
14670 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61       /* A new sa
14680 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62  vepoint cannot b
14690 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65  e created if the
146a0 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
146b0 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74  ite .      ** st
146c0 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f  atements (i.e. o
146d0 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69  pen read/write i
146e0 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20  ncremental blob 
146f0 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20  handles)..      
14700 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
14710 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
14720 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
14730 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e  ot open savepoin
14740 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  t - ".        "S
14750 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
14760 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
14770 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
14780 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
14790 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71        nName = sq
147a0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e  lite3Strlen30(zN
147b0 61 6d 65 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  ame);..      /* 
147c0 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76  Create a new sav
147d0 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65  epoint structure
147e0 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20  . */.      pNew 
147f0 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
14800 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
14810 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65  Savepoint)+nName
14820 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  +1);.      if( p
14830 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70  New ){.        p
14840 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68  New->zName = (ch
14850 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20  ar *)&pNew[1];. 
14860 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e         memcpy(pN
14870 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  ew->zName, zName
14880 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  , nName+1);.    
14890 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
148a0 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20  here is no open 
148b0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
148c0 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61  n mark this as a
148d0 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20   special.       
148e0 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e   ** "transaction
148f0 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a   savepoint". */.
14900 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
14910 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
14920 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
14930 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
14940 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
14950 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
14960 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
14970 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64  lse{.          d
14980 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b  b->nSavepoint++;
14990 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 0a  .        }.    .
149a0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20          /* Link 
149b0 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  the new savepoin
149c0 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  t into the datab
149d0 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73  ase handle's lis
149e0 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e  t. */.        pN
149f0 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e  ew->pNext = db->
14a00 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
14a10 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
14a20 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20  nt = pNew;.     
14a30 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72     pNew->nDeferr
14a40 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  edCons = db->nDe
14a50 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
14a60 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
14a70 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e  e{.    iSavepoin
14a80 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46  t = 0;..    /* F
14a90 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61  ind the named sa
14aa0 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72  vepoint. If ther
14ab0 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76  e is no such sav
14ac0 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a  epoint, then an.
14ad0 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20      ** an error 
14ae0 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
14af0 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20  he user.  */.   
14b00 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76   for(.      pSav
14b10 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61  epoint = db->pSa
14b20 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20  vepoint; .      
14b30 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71  pSavepoint && sq
14b40 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61  lite3StrICmp(pSa
14b50 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20  vepoint->zName, 
14b60 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53  zName);.      pS
14b70 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
14b80 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20  point->pNext.   
14b90 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70   ){.      iSavep
14ba0 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  oint++;.    }.  
14bb0 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e    if( !pSavepoin
14bc0 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
14bd0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
14be0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f  zErrMsg, db, "no
14bf0 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a   such savepoint:
14c00 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20   %s", zName);.  
14c10 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
14c20 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65  ERROR;.    }else
14c30 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 64 62   if( .        db
14c40 2d 3e 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30  ->writeVdbeCnt>0
14c50 20 7c 7c 20 28 70 31 3d 3d 53 41 56 45 50 4f 49   || (p1==SAVEPOI
14c60 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20 64  NT_ROLLBACK && d
14c70 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
14c80 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >1) .    ){.    
14c90 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70    /* It is not p
14ca0 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61  ossible to relea
14cb0 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61  se (commit) a sa
14cc0 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65  vepoint if there
14cd0 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61   are .      ** a
14ce0 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74  ctive write stat
14cf0 65 6d 65 6e 74 73 2e 20 49 74 20 69 73 20 6e 6f  ements. It is no
14d00 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 6f  t possible to ro
14d10 6c 6c 62 61 63 6b 20 61 20 73 61 76 65 70 6f 69  llback a savepoi
14d20 6e 74 0a 20 20 20 20 20 20 2a 2a 20 69 66 20 74  nt.      ** if t
14d30 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
14d40 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61  ive statements a
14d50 74 20 61 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a  t all..      */.
14d60 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
14d70 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
14d80 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20  sg, db, .       
14d90 20 22 63 61 6e 6e 6f 74 20 25 73 20 73 61 76 65   "cannot %s save
14da0 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74  point - SQL stat
14db0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
14dc0 73 73 22 2c 0a 20 20 20 20 20 20 20 20 28 70 31  ss",.        (p1
14dd0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
14de0 42 41 43 4b 20 3f 20 22 72 6f 6c 6c 62 61 63 6b  BACK ? "rollback
14df0 22 3a 20 22 72 65 6c 65 61 73 65 22 29 0a 20 20  ": "release").  
14e00 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20      );.      rc 
14e10 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
14e20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
14e30 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
14e40 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
14e50 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
14e60 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
14e70 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
14e80 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
14e90 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
14ea0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
14eb0 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
14ec0 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
14ed0 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
14ee0 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
14ef0 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
14f00 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
14f10 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
14f20 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
14f30 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
14f40 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
14f50 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
14f60 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
14f70 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
14f80 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
14f90 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
14fa0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
14fb0 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
14fc0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
14fd0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
14fe0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
14ff0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
15000 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
15010 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
15020 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
15030 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
15040 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
15050 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
15060 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
15070 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
15080 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
15090 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
150a0 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20  Savepoint = 0;. 
150b0 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72         rc = p->r
150c0 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
150d0 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69          iSavepoi
150e0 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
150f0 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74  int - iSavepoint
15100 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 66 6f   - 1;.        fo
15110 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
15120 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
15130 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
15140 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28  3BtreeSavepoint(
15150 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
15160 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
15170 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
15180 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
15190 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
151a0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
151b0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
151c0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
151d0 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
151e0 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26  POINT_ROLLBACK &
151f0 26 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  & (db->flags&SQL
15200 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
15210 73 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  s)!=0 ){.       
15220 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
15230 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
15240 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  ts(db);.        
15250 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
15260 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
15270 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64   0);.          d
15280 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e  b->flags = (db->
15290 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49  flags | SQLITE_I
152a0 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20  nternChanges);. 
152b0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
152c0 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67  .  .      /* Reg
152d0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
152e0 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  er this is a REL
152f0 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  EASE or ROLLBACK
15300 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20  , destroy all . 
15310 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
15320 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65  ts nested inside
15330 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e   of the savepoin
15340 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
15350 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68   on. */.      wh
15360 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ile( db->pSavepo
15370 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20  int!=pSavepoint 
15380 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20  ){.        pTmp 
15390 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
153a0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
153b0 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d  avepoint = pTmp-
153c0 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
153d0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
153e0 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20  , pTmp);.       
153f0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
15400 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
15410 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20    /* If it is a 
15420 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65  RELEASE, then de
15430 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f  stroy the savepo
15440 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
15450 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ed on .      ** 
15460 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20  too. If it is a 
15470 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65  ROLLBACK TO, the
15480 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72  n set the number
15490 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20   of deferred .  
154a0 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e      ** constrain
154b0 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65  t violations pre
154c0 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
154d0 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75  base to the valu
154e0 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a  e stored.      *
154f0 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70  * when the savep
15500 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64  oint was created
15510 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .  */.      if( 
15520 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
15530 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
15540 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f   assert( pSavepo
15550 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f  int==db->pSavepo
15560 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64  int );.        d
15570 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
15580 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
15590 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
155a0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61  e3DbFree(db, pSa
155b0 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
155c0 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
155d0 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  tion ){.        
155e0 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
155f0 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
15600 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15610 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
15620 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
15630 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  t->nDeferredCons
15640 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
15650 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a    }..  break;.}.
15660 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f  ./* Opcode: Auto
15670 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a  Commit P1 P2 * *
15680 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
15690 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63   database auto-c
156a0 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31  ommit flag to P1
156b0 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32   (1 or 0). If P2
156c0 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a   is true, roll.*
156d0 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65  * back any curre
156e0 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65  ntly active btre
156f0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  e transactions. 
15700 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  If there are any
15710 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28   active.** VMs (
15720 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20  apart from this 
15730 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c  one), then a ROL
15740 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20  LBACK fails.  A 
15750 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a  COMMIT fails if.
15760 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74  ** there are act
15770 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20  ive writing VMs 
15780 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68  or active VMs th
15790 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61  at use shared ca
157a0 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  che..**.** This 
157b0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73  instruction caus
157c0 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c  es the VM to hal
157d0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75  t..*/.case OP_Au
157e0 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e  toCommit: {.  in
157f0 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  t desiredAutoCom
15800 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c  mit;.  int iRoll
15810 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e  back;.  int turn
15820 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64  OnAC;..  desired
15830 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70  AutoCommit = pOp
15840 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63  ->p1;.  iRollbac
15850 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74  k = pOp->p2;.  t
15860 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65  urnOnAC = desire
15870 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21  dAutoCommit && !
15880 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a  db->autoCommit;.
15890 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
158a0 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
158b0 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  | desiredAutoCom
158c0 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
158d0 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
158e0 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c  ommit==1 || iRol
158f0 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73  lback==0 );.  as
15900 73 65 72 74 28 20 64 62 2d 3e 61 63 74 69 76 65  sert( db->active
15910 56 64 62 65 43 6e 74 3e 30 20 29 3b 20 20 2f 2a  VdbeCnt>0 );  /*
15920 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f   At least this o
15930 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20  ne VM is active 
15940 2a 2f 0a 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e  */..  if( turnOn
15950 41 43 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20  AC && iRollback 
15960 26 26 20 64 62 2d 3e 61 63 74 69 76 65 56 64 62  && db->activeVdb
15970 65 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 2f 2a  eCnt>1 ){.    /*
15980 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
15990 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20  tion implements 
159a0 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f  a ROLLBACK and o
159b0 74 68 65 72 20 56 4d 73 20 61 72 65 0a 20 20 20  ther VMs are.   
159c0 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e   ** still runnin
159d0 67 2c 20 61 6e 64 20 61 20 74 72 61 6e 73 61 63  g, and a transac
159e0 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 2c 20  tion is active, 
159f0 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
15a00 69 6e 64 69 63 61 74 69 6e 67 0a 20 20 20 20 2a  indicating.    *
15a10 2a 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  * that the other
15a20 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
15a30 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a  te first. .    *
15a40 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  /.    sqlite3Set
15a50 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
15a60 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20  sg, db, "cannot 
15a70 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63  rollback transac
15a80 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
15a90 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
15aa0 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
15ab0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
15ac0 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66  BUSY;.  }else if
15ad0 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69  ( turnOnAC && !i
15ae0 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e  Rollback && db->
15af0 77 72 69 74 65 56 64 62 65 43 6e 74 3e 30 20 29  writeVdbeCnt>0 )
15b00 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
15b10 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
15b20 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
15b30 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
15b40 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a  re writing.    *
15b50 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  * return an erro
15b60 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  r indicating tha
15b70 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
15b80 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
15b90 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
15ba0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
15bb0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
15bc0 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69  b, "cannot commi
15bd0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  t transaction - 
15be0 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
15bf0 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
15c00 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20  gress");.    rc 
15c10 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
15c20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72   }else if( desir
15c30 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62  edAutoCommit!=db
15c40 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
15c50 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63      if( iRollbac
15c60 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  k ){.      asser
15c70 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
15c80 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20  mmit==1 );.     
15c90 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
15ca0 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20 20 20 64  All(db);.      d
15cb0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
15cc0 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
15cd0 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
15ce0 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
15cf0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
15d00 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
15d10 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65  eturn;.    }else
15d20 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  {.      db->auto
15d30 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73  Commit = (u8)des
15d40 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
15d50 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
15d60 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
15d70 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
15d80 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
15d90 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
15da0 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31  oCommit = (u8)(1
15db0 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  -desiredAutoComm
15dc0 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  it);.        p->
15dd0 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
15de0 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 67  _BUSY;.        g
15df0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
15e00 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
15e10 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
15e20 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a  Statement==0 );.
15e30 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65      sqlite3Close
15e40 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a  Savepoints(db);.
15e50 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
15e60 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
15e70 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f    rc = SQLITE_DO
15e80 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  NE;.    }else{. 
15e90 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
15ea0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
15eb0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
15ec0 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rn;.  }else{.   
15ed0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
15ee0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
15ef0 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73  b,.        (!des
15f00 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f  iredAutoCommit)?
15f10 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20  "cannot start a 
15f20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
15f30 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
15f40 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f  ":(.        (iRo
15f50 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20  llback)?"cannot 
15f60 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72  rollback - no tr
15f70 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
15f80 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20  ive":.          
15f90 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
15fa0 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61   commit - no tra
15fb0 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
15fc0 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ve"));.         
15fd0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
15fe0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72  _ERROR;.  }.  br
15ff0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
16000 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50  e: Transaction P
16010 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
16020 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63   Begin a transac
16030 74 69 6f 6e 2e 20 20 54 68 65 20 74 72 61 6e 73  tion.  The trans
16040 61 63 74 69 6f 6e 20 65 6e 64 73 20 77 68 65 6e  action ends when
16050 20 61 20 43 6f 6d 6d 69 74 20 6f 72 20 52 6f 6c   a Commit or Rol
16060 6c 62 61 63 6b 0a 2a 2a 20 6f 70 63 6f 64 65 20  lback.** opcode 
16070 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 20  is encountered. 
16080 20 44 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68   Depending on th
16090 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 73 65  e ON CONFLICT se
160a0 74 74 69 6e 67 2c 20 74 68 65 0a 2a 2a 20 74 72  tting, the.** tr
160b0 61 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20  ansaction might 
160c0 61 6c 73 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  also be rolled b
160d0 61 63 6b 20 69 66 20 61 6e 20 65 72 72 6f 72 20  ack if an error 
160e0 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a  is encountered..
160f0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
16100 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
16110 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68  abase file on wh
16120 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74  ich the transact
16130 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65  ion is.** starte
16140 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74  d.  Index 0 is t
16150 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
16160 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20   file and index 
16170 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65  1 is the.** file
16180 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
16190 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64  ary tables.  Ind
161a0 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72  ices of 2 or mor
161b0 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a  e are used for.*
161c0 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  * attached datab
161d0 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ases..**.** If P
161e0 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  2 is non-zero, t
161f0 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
16200 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
16210 65 64 2e 20 20 41 20 52 45 53 45 52 56 45 44 20  ed.  A RESERVED 
16220 6c 6f 63 6b 20 69 73 0a 2a 2a 20 6f 62 74 61 69  lock is.** obtai
16230 6e 65 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ned on the datab
16240 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20 61 20  ase file when a 
16250 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
16260 6e 20 69 73 20 73 74 61 72 74 65 64 2e 20 20 4e  n is started.  N
16270 6f 0a 2a 2a 20 6f 74 68 65 72 20 70 72 6f 63 65  o.** other proce
16280 73 73 20 63 61 6e 20 73 74 61 72 74 20 61 6e 6f  ss can start ano
16290 74 68 65 72 20 77 72 69 74 65 20 74 72 61 6e 73  ther write trans
162a0 61 63 74 69 6f 6e 20 77 68 69 6c 65 20 74 68 69  action while thi
162b0 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  s transaction is
162c0 0a 2a 2a 20 75 6e 64 65 72 77 61 79 2e 20 20 53  .** underway.  S
162d0 74 61 72 74 69 6e 67 20 61 20 77 72 69 74 65 20  tarting a write 
162e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 73 6f  transaction also
162f0 20 63 72 65 61 74 65 73 20 61 20 72 6f 6c 6c 62   creates a rollb
16300 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 41 0a 2a  ack journal. A.*
16310 2a 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  * write transact
16320 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72  ion must be star
16330 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 63  ted before any c
16340 68 61 6e 67 65 73 20 63 61 6e 20 62 65 20 6d 61  hanges can be ma
16350 64 65 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  de to the.** dat
16360 61 62 61 73 65 2e 20 20 49 66 20 50 32 20 69 73  abase.  If P2 is
16370 20 32 20 6f 72 20 67 72 65 61 74 65 72 20 74 68   2 or greater th
16380 65 6e 20 61 6e 20 45 58 43 4c 55 53 49 56 45 20  en an EXCLUSIVE 
16390 6c 6f 63 6b 20 69 73 20 61 6c 73 6f 20 6f 62 74  lock is also obt
163a0 61 69 6e 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20  ained.** on the 
163b0 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  file..**.** If a
163c0 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
163d0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e  on is started an
163e0 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53  d the Vdbe.usesS
163f0 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20  tmtJournal flag 
16400 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73  is.** true (this
16410 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20   flag is set if 
16420 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64  the Vdbe may mod
16430 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ify more than on
16440 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a  e row and may.**
16450 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
16460 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74  exception), a st
16470 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
16480 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ion may also be 
16490 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20  opened..** More 
164a0 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20  specifically, a 
164b0 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
164c0 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20  ction is opened 
164d0 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65  iff the database
164e0 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  .** connection i
164f0 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20  s currently not 
16500 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f  in autocommit mo
16510 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20  de, or if there 
16520 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74  are other.** act
16530 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  ive statements. 
16540 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  A statement tran
16550 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74  saction allows t
16560 68 65 20 61 66 66 65 63 74 73 20 6f 66 20 74 68  he affects of th
16570 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65  is.** VDBE to be
16580 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74   rolled back aft
16590 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68  er an error with
165a0 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f  out having to ro
165b0 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65  ll back the.** e
165c0 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f  ntire transactio
165d0 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69  n. If no error i
165e0 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74  s encountered, t
165f0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
16600 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c  nsaction.** will
16610 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
16620 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56  ommit when the V
16630 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a  DBE halts..**.**
16640 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20   If P2 is zero, 
16650 74 68 65 6e 20 61 20 72 65 61 64 2d 6c 6f 63 6b  then a read-lock
16660 20 69 73 20 6f 62 74 61 69 6e 65 64 20 6f 6e 20   is obtained on 
16670 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
16680 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  e..*/.case OP_Tr
16690 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42  ansaction: {.  B
166a0 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
166b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
166c0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
166d0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
166e0 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26   (p->btreeMask &
166f0 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d   (1<<pOp->p1))!=
16700 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
16710 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
16720 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b  t;..  if( pBt ){
16730 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
16740 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73  3BtreeBeginTrans
16750 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  (pBt, pOp->p2);.
16760 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
16770 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
16780 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20   p->pc = pc;.   
16790 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
167a0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
167b0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
167c0 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  urn;.    }.    i
167d0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
167e0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
167f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
16800 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  r;.    }..    if
16810 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e  ( pOp->p2 && p->
16820 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
16830 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75  .     && (db->au
16840 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64  toCommit==0 || d
16850 62 2d 3e 61 63 74 69 76 65 56 64 62 65 43 6e 74  b->activeVdbeCnt
16860 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >1) .    ){.    
16870 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
16880 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
16890 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66  pBt) );.      if
168a0 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
168b0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
168c0 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
168d0 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e  ment>=0 && db->n
168e0 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a  Savepoint>=0 );.
168f0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
16900 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20  tement++; .     
16910 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74     p->iStatement
16920 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
16930 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  t + db->nStateme
16940 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  nt;.      }.    
16950 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
16960 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74  reeBeginStmt(pBt
16970 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29  , p->iStatement)
16980 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72  ;..      /* Stor
16990 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  e the current va
169a0 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
169b0 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65  ase handles defe
169c0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a  rred constraint.
169d0 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72        ** counter
169e0 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  . If the stateme
169f0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  nt transaction n
16a00 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
16a10 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a  d back,.      **
16a20 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
16a30 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73  is counter needs
16a40 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20   to be restored 
16a50 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  too.  */.      p
16a60 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d  ->nStmtDefCons =
16a70 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
16a80 6e 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ns;.    }.  }.  
16a90 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
16aa0 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20  ode: ReadCookie 
16ab0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
16ac0 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e  ** Read cookie n
16ad0 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61  umber P3 from da
16ae0 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77 72  tabase P1 and wr
16af0 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69  ite it into regi
16b00 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d  ster P2..** P3==
16b10 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61 20  1 is the schema 
16b20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20  version.  P3==2 
16b30 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
16b40 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33  format..** P3==3
16b50 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e   is the recommen
16b60 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65 20  ded pager cache 
16b70 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
16b80 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a  th.  P1==0 is.**
16b90 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
16ba0 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d  se file and P1==
16bb0 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  1 is the databas
16bc0 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73  e file used to s
16bd0 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  tore.** temporar
16be0 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
16bf0 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 20  There must be a 
16c00 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65  read-lock on the
16c10 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68 65   database (eithe
16c20 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  r a transaction.
16c30 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  ** must be start
16c40 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74  ed or there must
16c50 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73   be an open curs
16c60 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78  or) before.** ex
16c70 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73  ecuting this ins
16c80 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
16c90 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a  e OP_ReadCookie:
16ca0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
16cb0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
16cc0 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65  ase */.  int iMe
16cd0 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  ta;.  int iDb;. 
16ce0 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20   int iCookie;.. 
16cf0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
16d00 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d    iCookie = pOp-
16d10 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
16d20 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f  Op->p3<SQLITE_N_
16d30 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20  BTREE_META );.  
16d40 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
16d50 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
16d60 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
16d70 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29  Db[iDb].pBt!=0 )
16d80 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
16d90 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
16da0 69 44 62 29 29 21 3d 30 20 29 3b 0a 0a 20 20 73  iDb))!=0 );..  s
16db0 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
16dc0 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ta(db->aDb[iDb].
16dd0 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75  pBt, iCookie, (u
16de0 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20  32 *)&iMeta);.  
16df0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74  pOut->u.i = iMet
16e00 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  a;.  break;.}../
16e10 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f  * Opcode: SetCoo
16e20 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
16e30 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
16e40 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
16e50 73 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72  ster P3 (interpr
16e60 65 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67  eted as an integ
16e70 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b  er).** into cook
16e80 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20  ie number P2 of 
16e90 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32  database P1.  P2
16ea0 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
16eb0 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20  a version.  .** 
16ec0 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P2==2 is the dat
16ed0 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32  abase format. P2
16ee0 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
16ef0 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
16f00 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64  he .** size, and
16f10 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
16f20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
16f30 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
16f40 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a  P1==1 is the .**
16f50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
16f60 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d  sed to store tem
16f70 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
16f80 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69  *.** A transacti
16f90 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  on must be start
16fa0 65 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74  ed before execut
16fb0 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
16fc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43  .*/.case OP_SetC
16fd0 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f  ookie: {       /
16fe0 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70  * in3 */.  Db *p
16ff0 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  Db;.  assert( pO
17000 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42  p->p2<SQLITE_N_B
17010 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61  TREE_META );.  a
17020 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
17030 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
17040 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
17050 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20  ( (p->btreeMask 
17060 26 20 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21  & (1<<pOp->p1))!
17070 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
17080 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
17090 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
170a0 70 42 74 21 3d 30 20 29 3b 0a 20 20 70 49 6e 33  pBt!=0 );.  pIn3
170b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
170c0 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
170d0 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
170e0 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f  n3);.  /* See no
170f0 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73  te about index s
17100 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65  hifting on OP_Re
17110 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63  adCookie */.  rc
17120 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55   = sqlite3BtreeU
17130 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70  pdateMeta(pDb->p
17140 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e  Bt, pOp->p2, (in
17150 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  t)pIn3->u.i);.  
17160 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
17170 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
17180 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e  N ){.    /* When
17190 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
171a0 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f  ie changes, reco
171b0 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69  rd the new cooki
171c0 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a  e internally */.
171d0 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
171e0 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
171f0 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  = (int)pIn3->u.i
17200 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  ;.    db->flags 
17210 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  |= SQLITE_Intern
17220 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65  Changes;.  }else
17230 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
17240 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  REE_FILE_FORMAT 
17250 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64  ){.    /* Record
17260 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
17270 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20  file format */. 
17280 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
17290 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28  >file_format = (
172a0 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20  u8)pIn3->u.i;.  
172b0 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  }.  if( pOp->p1=
172c0 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76  =1 ){.    /* Inv
172d0 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70  alidate all prep
172e0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
172f0 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d  whenever the TEM
17300 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a  P database.    *
17310 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e  * schema is chan
17320 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36  ged.  Ticket #16
17330 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  44 */.    sqlite
17340 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
17350 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
17360 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
17370 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
17380 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 65  }../* Opcode: Ve
17390 72 69 66 79 43 6f 6f 6b 69 65 20 50 31 20 50 32  rifyCookie P1 P2
173a0 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74   *.**.** Check t
173b0 68 65 20 76 61 6c 75 65 20 6f 66 20 67 6c 6f 62  he value of glob
173c0 61 6c 20 64 61 74 61 62 61 73 65 20 70 61 72 61  al database para
173d0 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 30 20 28  meter number 0 (
173e0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 76 65  the.** schema ve
173f0 72 73 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 65 20  rsion) and make 
17400 73 75 72 65 20 69 74 20 69 73 20 65 71 75 61 6c  sure it is equal
17410 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 50 31 20   to P2.  .** P1 
17420 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
17430 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20  number which is 
17440 30 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  0 for the main d
17450 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
17460 61 6e 64 20 31 20 66 6f 72 20 74 68 65 20 66 69  and 1 for the fi
17470 6c 65 20 68 6f 6c 64 69 6e 67 20 74 65 6d 70 6f  le holding tempo
17480 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  rary tables and 
17490 73 6f 6d 65 20 68 69 67 68 65 72 20 6e 75 6d 62  some higher numb
174a0 65 72 0a 2a 2a 20 66 6f 72 20 61 75 78 69 6c 69  er.** for auxili
174b0 61 72 79 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  ary databases..*
174c0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20  *.** The cookie 
174d0 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75  changes its valu
174e0 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64  e whenever the d
174f0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
17500 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20  hanges..** This 
17510 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65  operation is use
17520 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e  d to detect when
17530 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65   that the cookie
17540 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20   has changed.** 
17550 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72  and that the cur
17560 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65  rent process nee
17570 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65  ds to reread the
17580 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 45   schema..**.** E
17590 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
175a0 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 68 61 76  ion needs to hav
175b0 65 20 62 65 65 6e 20 73 74 61 72 74 65 64 20 6f  e been started o
175c0 72 20 61 6e 20 4f 50 5f 4f 70 65 6e 20 6e 65 65  r an OP_Open nee
175d0 64 73 0a 2a 2a 20 74 6f 20 62 65 20 65 78 65 63  ds.** to be exec
175e0 75 74 65 64 20 28 74 6f 20 65 73 74 61 62 6c 69  uted (to establi
175f0 73 68 20 61 20 72 65 61 64 20 6c 6f 63 6b 29 20  sh a read lock) 
17600 62 65 66 6f 72 65 20 74 68 69 73 20 6f 70 63 6f  before this opco
17610 64 65 20 69 73 0a 2a 2a 20 69 6e 76 6f 6b 65 64  de is.** invoked
17620 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 65 72  ..*/.case OP_Ver
17630 69 66 79 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 69  ifyCookie: {.  i
17640 6e 74 20 69 4d 65 74 61 3b 0a 20 20 42 74 72 65  nt iMeta;.  Btre
17650 65 20 2a 70 42 74 3b 0a 20 20 61 73 73 65 72 74  e *pBt;.  assert
17660 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
17670 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
17680 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
17690 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
176a0 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b  <pOp->p1))!=0 );
176b0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
176c0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
176d0 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20   if( pBt ){.    
176e0 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
176f0 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53  eta(pBt, BTREE_S
17700 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28  CHEMA_VERSION, (
17710 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
17720 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 4d 65 74   }else{.    iMet
17730 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  a = 0;.  }.  if(
17740 20 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 32 20   iMeta!=pOp->p2 
17750 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  ){.    sqlite3Db
17760 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72  Free(db, p->zErr
17770 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72  Msg);.    p->zEr
17780 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62  rMsg = sqlite3Db
17790 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61  StrDup(db, "data
177a0 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
177b0 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f  changed");.    /
177c0 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d  * If the schema-
177d0 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20  cookie from the 
177e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61  database file ma
177f0 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65  tches the cookie
17800 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20   .    ** stored 
17810 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  with the in-memo
17820 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ry representatio
17830 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c  n of the schema,
17840 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72   do.    ** not r
17850 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61  eload the schema
17860 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
17870 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a  se file..    **.
17880 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61      ** If virtua
17890 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20  l-tables are in 
178a0 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74  use, this is not
178b0 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a   just an optimiz
178c0 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66  ation..    ** Of
178d0 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74  ten, v-tables st
178e0 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69  ore their data i
178f0 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74  n other SQLite t
17900 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20  ables, which.   
17910 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20   ** are queried 
17920 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78  from within xNex
17930 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d  t() and other v-
17940 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73  table methods us
17950 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61  ing.    ** prepa
17960 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20  red queries. If 
17970 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20  such a query is 
17980 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20  out-of-date, we 
17990 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20  do not want to. 
179a0 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68     ** discard th
179b0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
179c0 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63  a, as the user c
179d0 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  ode implementing
179e0 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61   the.    ** v-ta
179f0 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74  ble would have t
17a00 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74  o be ready for t
17a10 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  he sqlite3_vtab 
17a20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66  structure itself
17a30 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e  .    ** to be in
17a40 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76  validated whenev
17a50 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  er sqlite3_step(
17a60 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d  ) is called from
17a70 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20   within .    ** 
17a80 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64  a v-table method
17a90 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
17aa0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
17ab0 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
17ac0 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20  a_cookie!=iMeta 
17ad0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
17ae0 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
17af0 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  ema(db, pOp->p1)
17b00 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
17b10 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
17b20 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
17b30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
17b40 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20  E_SCHEMA;.  }.  
17b50 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
17b60 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31  ode: OpenRead P1
17b70 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
17b80 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f  ** Open a read-o
17b90 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74  nly cursor for t
17ba0 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
17bb0 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  e whose root pag
17bc0 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20  e is.** P2 in a 
17bd0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
17be0 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  The database fil
17bf0 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
17c00 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30  by P3. .** P3==0
17c10 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20   means the main 
17c20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20  database, P3==1 
17c30 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
17c40 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20  se used for .** 
17c50 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
17c60 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73  , and P3>1 means
17c70 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73   used the corres
17c80 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64  ponding attached
17c90 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47  .** database.  G
17ca0 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73  ive the new curs
17cb0 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  or an identifier
17cc0 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a   of P1.  The P1.
17cd0 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e  ** values need n
17ce0 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73  ot be contiguous
17cf0 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75   but all P1 valu
17d00 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61  es should be sma
17d10 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  ll integers..** 
17d20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
17d30 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61  or P1 to be nega
17d40 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tive..**.** If P
17d50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68  5!=0 then use th
17d60 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
17d70 69 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20  ister P2 as the 
17d80 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a  root page, not.*
17d90 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  * the value of P
17da0 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20  2 itself..**.** 
17db0 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20  There will be a 
17dc0 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65  read lock on the
17dd0 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76   database whenev
17de0 65 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a  er there is an.*
17df0 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20  * open cursor.  
17e00 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
17e10 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69  was unlocked pri
17e20 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72  or to this instr
17e30 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61  uction.** then a
17e40 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63   read lock is ac
17e50 71 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f  quired as part o
17e60 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
17e70 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c  on.  A read.** l
17e80 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72  ock allows other
17e90 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65   processes to re
17ea0 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ad the database 
17eb0 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a  but prohibits.**
17ec0 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65   any other proce
17ed0 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e  ss from modifyin
17ee0 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  g the database. 
17ef0 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69   The read lock i
17f00 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68  s.** released wh
17f10 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61  en all cursors a
17f20 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74  re closed.  If t
17f30 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
17f40 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67  attempts.** to g
17f50 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62  et a read lock b
17f60 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63  ut fails, the sc
17f70 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20  ript terminates 
17f80 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54  with an.** SQLIT
17f90 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64  E_BUSY error cod
17fa0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  e..**.** The P4 
17fb0 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
17fc0 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
17fd0 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
17fe0 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
17ff0 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
18000 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
18010 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
18020 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
18030 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68  ** structure, th
18040 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72  en said structur
18050 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f  e defines the co
18060 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74  ntent and collat
18070 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ing .** sequence
18080 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65   of the index be
18090 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65  ing opened. Othe
180a0 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
180b0 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
180c0 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20  alue, it is set 
180d0 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
180e0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
180f0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  table..**.** See
18100 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69 74 65 2e   also OpenWrite.
18110 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
18120 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50  penWrite P1 P2 P
18130 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 4f 70  3 P4 P5.**.** Op
18140 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20  en a read/write 
18150 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20  cursor named P1 
18160 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  on the table or 
18170 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
18180 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20  .** page is P2. 
18190 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65   Or if P5!=0 use
181a0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
181b0 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66  register P2 to f
181c0 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20  ind the.** root 
181d0 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  page..**.** The 
181e0 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
181f0 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
18200 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
18210 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
18220 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
18230 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
18240 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
18250 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
18260 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
18270 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
18280 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
18290 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
182a0 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
182b0 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
182c0 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
182d0 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
182e0 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
182f0 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
18300 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
18310 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
18320 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20  he table, or to 
18330 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69  the.** largest i
18340 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75  ndex of any colu
18350 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  mn of the table 
18360 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79  that is actually
18370 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   used..**.** Thi
18380 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f  s instruction wo
18390 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70  rks just like Op
183a0 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68  enRead except th
183b0 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20  at it opens the 
183c0 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61  cursor.** in rea
183d0 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46  d/write mode.  F
183e0 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65  or a given table
183f0 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f  , there can be o
18400 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d  ne or more read-
18410 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20  only.** cursors 
18420 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64  or a single read
18430 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75  /write cursor bu
18440 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a  t not both..**.*
18450 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52  * See also OpenR
18460 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ead..*/.case OP_
18470 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f  OpenRead:.case O
18480 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20  P_OpenWrite: {. 
18490 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b   int nField;.  K
184a0 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
184b0 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e  ;.  int p2;.  in
184c0 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46  t iDb;.  int wrF
184d0 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58  lag;.  Btree *pX
184e0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
184f0 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b  pCur;.  Db *pDb;
18500 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72  ..  if( p->expir
18510 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  ed ){.    rc = S
18520 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20  QLITE_ABORT;.   
18530 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e   break;.  }..  n
18540 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65  Field = 0;.  pKe
18550 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20  yInfo = 0;.  p2 
18560 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62  = pOp->p2;.  iDb
18570 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
18580 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
18590 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
185a0 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
185b0 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 69 44 62  eeMask & (1<<iDb
185c0 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ))!=0 );.  pDb =
185d0 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a   &db->aDb[iDb];.
185e0 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b    pX = pDb->pBt;
185f0 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30  .  assert( pX!=0
18600 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
18610 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
18620 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61  ite ){.    wrFla
18630 67 20 3d 20 31 3b 0a 20 20 20 20 69 66 28 20 70  g = 1;.    if( p
18640 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
18650 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
18660 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
18670 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
18680 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
18690 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
186a0 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
186b0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
186c0 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
186d0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
186e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
186f0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
18700 20 70 32 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a   p2<=p->nMem );.
18710 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d      pIn2 = &aMem
18720 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  [p2];.    assert
18730 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
18740 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  2) );.    assert
18750 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
18760 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
18770 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
18780 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
18790 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e  2);.    p2 = (in
187a0 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn2->u.i;.   
187b0 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65   /* The p2 value
187c0 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72   always comes fr
187d0 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72  om a prior OP_Cr
187e0 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
187f0 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74   and.    ** that
18800 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
18810 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76  ays set the p2 v
18820 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72  alue to 2 or mor
18830 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a  e or else fail..
18840 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20      ** If there 
18850 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20  were a failure, 
18860 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
18870 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76  tement would hav
18880 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20  e halted.    ** 
18890 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20  before reaching 
188a0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
188b0 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56  . */.    if( NEV
188c0 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20  ER(p2<2) ) {.   
188d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
188e0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
188f0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
18900 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
18910 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  }.  }.  if( pOp-
18920 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
18930 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49  NFO ){.    pKeyI
18940 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
18950 65 79 49 6e 66 6f 3b 0a 20 20 20 20 70 4b 65 79  eyInfo;.    pKey
18960 49 6e 66 6f 2d 3e 65 6e 63 20 3d 20 45 4e 43 28  Info->enc = ENC(
18970 70 2d 3e 64 62 29 3b 0a 20 20 20 20 6e 46 69 65  p->db);.    nFie
18980 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
18990 46 69 65 6c 64 2b 31 3b 0a 20 20 7d 65 6c 73 65  Field+1;.  }else
189a0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
189b0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20  ==P4_INT32 ){.  
189c0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
189d0 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65  p4.i;.  }.  asse
189e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
189f0 3b 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  ;.  pCur = alloc
18a00 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
18a10 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44  ->p1, nField, iD
18a20 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75  b, 1);.  if( pCu
18a30 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  r==0 ) goto no_m
18a40 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  em;.  pCur->null
18a50 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  Row = 1;.  pCur-
18a60 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a  >isOrdered = 1;.
18a70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
18a80 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
18a90 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
18aa0 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f  fo, pCur->pCurso
18ab0 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
18ac0 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
18ad0 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69 74 20  ..  /* Since it 
18ae0 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f  performs no memo
18af0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72  ry allocation or
18b00 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61   IO, the only va
18b10 6c 75 65 73 20 74 68 61 74 0a 20 20 2a 2a 20 73  lues that.  ** s
18b20 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
18b30 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20 61  r() may return a
18b40 72 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  re SQLITE_EMPTY 
18b50 61 6e 64 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 0a  and SQLITE_OK. .
18b60 20 20 2a 2a 20 53 51 4c 49 54 45 5f 45 4d 50 54    ** SQLITE_EMPT
18b70 59 20 69 73 20 6f 6e 6c 79 20 72 65 74 75 72 6e  Y is only return
18b80 65 64 20 77 68 65 6e 20 61 74 74 65 6d 70 74 69  ed when attempti
18b90 6e 67 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 74  ng to open the t
18ba0 61 62 6c 65 0a 20 20 2a 2a 20 72 6f 6f 74 65 64  able.  ** rooted
18bb0 20 61 74 20 70 61 67 65 20 31 20 6f 66 20 61 20   at page 1 of a 
18bc0 7a 65 72 6f 2d 62 79 74 65 20 64 61 74 61 62 61  zero-byte databa
18bd0 73 65 2e 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  se.  */.  assert
18be0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50  ( rc==SQLITE_EMP
18bf0 54 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  TY || rc==SQLITE
18c00 5f 4f 4b 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  _OK );.  if( rc=
18c10 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b  =SQLITE_EMPTY ){
18c20 0a 20 20 20 20 70 43 75 72 2d 3e 70 43 75 72 73  .    pCur->pCurs
18c30 6f 72 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d  or = 0;.    rc =
18c40 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a   SQLITE_OK;.  }.
18c50 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
18c60 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
18c70 20 61 6e 64 20 69 73 49 6e 64 65 78 20 76 61 72   and isIndex var
18c80 69 61 62 6c 65 73 2e 20 50 72 65 76 69 6f 75 73  iables. Previous
18c90 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a   versions of.  *
18ca0 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f  * SQLite used to
18cb0 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f   check if the ro
18cc0 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65  ot-page flags we
18cd0 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20  re sane at this 
18ce0 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72  point.  ** and r
18cf0 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63  eport database c
18d00 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65  orruption if the
18d10 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20  y were not, but 
18d20 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20  this check has. 
18d30 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20   ** since moved 
18d40 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c  into the btree l
18d50 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43  ayer.  */  .  pC
18d60 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f  ur->isTable = pO
18d70 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45  p->p4type!=P4_KE
18d80 59 49 4e 46 4f 3b 0a 20 20 70 43 75 72 2d 3e 69  YINFO;.  pCur->i
18d90 73 49 6e 64 65 78 20 3d 20 21 70 43 75 72 2d 3e  sIndex = !pCur->
18da0 69 73 54 61 62 6c 65 3b 0a 20 20 62 72 65 61 6b  isTable;.  break
18db0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
18dc0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
18dd0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
18de0 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
18df0 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73  or P1 to a trans
18e00 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  ient table..** T
18e10 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77  he cursor is alw
18e20 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f  ays opened read/
18e30 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a  write even if .*
18e40 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
18e50 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79  ase is read-only
18e60 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c  .  The ephemeral
18e70 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c  .** table is del
18e80 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  eted automatical
18e90 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73  ly when the curs
18ea0 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a  or is closed..**
18eb0 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75  .** P2 is the nu
18ec0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
18ed0 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  in the ephemeral
18ee0 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
18ef0 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20  ursor points to 
18f00 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66  a BTree table if
18f10 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20   P4==0 and to a 
18f20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69  BTree index.** i
18f30 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20  f P4 is not 0.  
18f40 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
18f50 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  L, it points to 
18f60 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
18f70 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69  ure.** that defi
18f80 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  nes the format o
18f90 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e  f keys in the in
18fa0 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  dex..**.** This 
18fb0 6f 70 63 6f 64 65 20 77 61 73 20 6f 6e 63 65 20  opcode was once 
18fc0 63 61 6c 6c 65 64 20 4f 70 65 6e 54 65 6d 70 2e  called OpenTemp.
18fd0 20 20 42 75 74 20 74 68 61 74 20 63 72 65 61 74    But that creat
18fe0 65 64 0a 2a 2a 20 63 6f 6e 66 75 73 69 6f 6e 20  ed.** confusion 
18ff0 62 65 63 61 75 73 65 20 74 68 65 20 74 65 72 6d  because the term
19000 20 22 74 65 6d 70 20 74 61 62 6c 65 22 2c 20 6d   "temp table", m
19010 69 67 68 74 20 72 65 66 65 72 20 65 69 74 68 65  ight refer eithe
19020 72 0a 2a 2a 20 74 6f 20 61 20 54 45 4d 50 20 74  r.** to a TEMP t
19030 61 62 6c 65 20 61 74 20 74 68 65 20 53 51 4c 20  able at the SQL 
19040 6c 65 76 65 6c 2c 20 6f 72 20 74 6f 20 61 20 74  level, or to a t
19050 61 62 6c 65 20 6f 70 65 6e 65 64 20 62 79 0a 2a  able opened by.*
19060 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
19070 54 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  Then this opcode
19080 20 77 61 73 20 63 61 6c 6c 20 4f 70 65 6e 56 69   was call OpenVi
19090 72 74 75 61 6c 2e 20 20 42 75 74 0a 2a 2a 20 74  rtual.  But.** t
190a0 68 61 74 20 63 72 65 61 74 65 64 20 63 6f 6e 66  hat created conf
190b0 75 73 69 6f 6e 20 77 69 74 68 20 74 68 65 20 77  usion with the w
190c0 68 6f 6c 65 20 76 69 72 74 75 61 6c 2d 74 61 62  hole virtual-tab
190d0 6c 65 20 69 64 65 61 2e 0a 2a 2f 0a 2f 2a 20 4f  le idea..*/./* O
190e0 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69  pcode: OpenAutoi
190f0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20  ndex P1 P2 * P4 
19100 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
19110 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
19120 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
19130 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
19140 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
19150 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
19160 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
19170 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
19180 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
19190 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
191a0 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
191b0 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
191c0 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
191d0 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
191e0 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
191f0 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
19200 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
19210 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
19220 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
19230 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a  int vfsFlags = .
19240 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
19250 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
19260 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
19270 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
19280 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
19290 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
192a0 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
192b0 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
192c0 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
192d0 49 45 4e 54 5f 44 42 3b 0a 0a 20 20 61 73 73 65  IENT_DB;..  asse
192e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
192f0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
19300 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
19310 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
19320 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
19330 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
19340 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
19350 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
19360 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 30 2c  ite3BtreeOpen(0,
19370 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20   db, &pCx->pBt, 
19380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19390 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f           BTREE_O
193a0 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54  MIT_JOURNAL | BT
193b0 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70  REE_SINGLE | pOp
193c0 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b  ->p5, vfsFlags);
193d0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
193e0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d  E_OK ){.    rc =
193f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
19400 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74  inTrans(pCx->pBt
19410 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 1);.  }.  if( 
19420 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
19430 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61  .    /* If a tra
19440 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20  nsient index is 
19450 72 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65  required, create
19460 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20   it by calling. 
19470 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72     ** sqlite3Btr
19480 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20  eeCreateTable() 
19490 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42  with the BTREE_B
194a0 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f  LOBKEY flag befo
194b0 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e  re.    ** openin
194c0 67 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73  g it. If a trans
194d0 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65  ient table is re
194e0 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65  quired, just use
194f0 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f   the.    ** auto
19500 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
19510 64 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f  d table with roo
19520 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f  t-page 1 (an BLO
19530 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e  B_INTKEY table).
19540 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
19550 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
19560 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67   ){.      int pg
19570 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  no;.      assert
19580 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
19590 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20  4_KEYINFO );.   
195a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
195b0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
195c0 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pCx->pBt, &pgno,
195d0 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 29 3b   BTREE_BLOBKEY);
195e0 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
195f0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
19600 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
19610 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
19620 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   );.        rc =
19630 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
19640 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67  sor(pCx->pBt, pg
19650 6e 6f 2c 20 31 2c 20 0a 20 20 20 20 20 20 20 20  no, 1, .        
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19670 20 20 20 20 20 20 20 20 28 4b 65 79 49 6e 66 6f          (KeyInfo
19680 2a 29 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 78  *)pOp->p4.z, pCx
19690 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
196a0 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
196b0 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
196c0 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 70 43  Info;.        pC
196d0 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  x->pKeyInfo->enc
196e0 20 3d 20 45 4e 43 28 70 2d 3e 64 62 29 3b 0a 20   = ENC(p->db);. 
196f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78       }.      pCx
19700 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20  ->isTable = 0;. 
19710 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
19720 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
19730 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
19740 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31  , MASTER_ROOT, 1
19750 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f  , 0, pCx->pCurso
19760 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69  r);.      pCx->i
19770 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20  sTable = 1;.    
19780 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f  }.  }.  pCx->isO
19790 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70  rdered = (pOp->p
197a0 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52  5!=BTREE_UNORDER
197b0 45 44 29 3b 0a 20 20 70 43 78 2d 3e 69 73 49 6e  ED);.  pCx->isIn
197c0 64 65 78 20 3d 20 21 70 43 78 2d 3e 69 73 54 61  dex = !pCx->isTa
197d0 62 6c 65 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ble;.  break;.}.
197e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
197f0 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
19800 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  * *.**.** Open a
19810 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74   new cursor that
19820 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b   points to a fak
19830 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
19840 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a  tains a single.*
19850 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20  * row of data.  
19860 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  The content of t
19870 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 6e 20 74  hat one row in t
19880 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65  he content of me
19890 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72  mory.** register
198a0 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77   P2.  In other w
198b0 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20  ords, cursor P1 
198c0 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
198d0 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d   for the .** MEM
198e0 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f  _Blob content co
198f0 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73  ntained in regis
19900 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20  ter P2..**.** A 
19910 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
19920 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
19930 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68  ode is used to h
19940 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  old a single.** 
19950 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  row output from 
19960 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68  the sorter so th
19970 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62  at the row can b
19980 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74  e decomposed int
19990 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20  o.** individual 
199a0 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68  columns using th
199b0 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
199c0 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  de.  The OP_Colu
199d0 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  mn opcode.** is 
199e0 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20  the only cursor 
199f0 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b  opcode that work
19a00 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d  s with a pseudo-
19a10 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  table..**.** P3 
19a20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
19a30 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
19a40 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c  ecords that will
19a50 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a   be stored by.**
19a60 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
19a70 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  e..*/.case OP_Op
19a80 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64  enPseudo: {.  Vd
19a90 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
19aa0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
19ab0 31 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  1>=0 );.  pCx = 
19ac0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
19ad0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
19ae0 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66  p3, -1, 0);.  if
19af0 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
19b00 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
19b10 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
19b20 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  x->pseudoTableRe
19b30 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  g = pOp->p2;.  p
19b40 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
19b50 0a 20 20 70 43 78 2d 3e 69 73 49 6e 64 65 78 20  .  pCx->isIndex 
19b60 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
19b70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73  ./* Opcode: Clos
19b80 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
19b90 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f  ** Close a curso
19ba0 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  r previously ope
19bb0 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50  ned as P1.  If P
19bc0 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72  1 is not.** curr
19bd0 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73  ently open, this
19be0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
19bf0 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
19c00 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61   OP_Close: {.  a
19c10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
19c20 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
19c30 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c  nCursor );.  sql
19c40 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
19c50 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70  or(p, p->apCsr[p
19c60 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61  Op->p1]);.  p->a
19c70 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  pCsr[pOp->p1] = 
19c80 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
19c90 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 65  * Opcode: SeekGe
19ca0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
19cb0 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
19cc0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
19cd0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
19ce0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
19cf0 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
19d00 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
19d10 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68  egister P3 as th
19d20 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f  e key.  If curso
19d30 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
19d40 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
19d50 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
19d60 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
19d70 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
19d80 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
19d90 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
19da0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
19db0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
19dc0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
19dd0 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
19de0 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
19df0 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
19e00 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
19e10 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
19e20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
19e30 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a  are no records .
19e40 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ** greater than 
19e50 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
19e60 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
19e70 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
19e80 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  p to P2..**.** S
19e90 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
19ea0 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74 69 6e  NotFound, Distin
19eb0 63 74 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  ct, SeekLt, Seek
19ec0 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Gt, SeekLe.*/./*
19ed0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 74 20   Opcode: SeekGt 
19ee0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
19ef0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
19f00 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
19f10 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
19f20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
19f30 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
19f40 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
19f50 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
19f60 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
19f70 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
19f80 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
19f90 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
19fa0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
19fb0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
19fc0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
19fd0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
19fe0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
19ff0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1a000 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1a010 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1a020 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1a030 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1a040 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
1a050 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1a060 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67  are no records g
1a070 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20  reater than .** 
1a080 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1a090 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1a0a0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1a0b0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1a0c0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
1a0d0 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20  stinct, SeekLt, 
1a0e0 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
1a0f0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1a100 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20  kLt P1 P2 P3 P4 
1a110 2a 20 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  * .**.** If curs
1a120 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1a130 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1a140 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1a150 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1a160 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1a170 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1a180 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1a190 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1a1a0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1a1b0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1a1c0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1a1d0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1a1e0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1a1f0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1a200 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1a210 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1a220 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1a230 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1a240 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1a250 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1a260 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
1a270 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1a280 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1a290 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68  less than .** th
1a2a0 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1a2b0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1a2c0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1a2d0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1a2e0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69 73 74  , NotFound, Dist
1a2f0 69 6e 63 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  inct, SeekGt, Se
1a300 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1a310 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1a320 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1a330 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1a340 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1a350 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1a360 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1a370 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1a380 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1a390 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1a3a0 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1a3b0 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1a3c0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1a3d0 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1a3e0 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1a3f0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1a400 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1a410 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1a420 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1a430 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1a440 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1a450 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1a460 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1a470 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1a480 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1a490 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1a4a0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1a4b0 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
1a4c0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1a4d0 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1a4e0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1a4f0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1a500 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1a510 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1a520 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 47 74  Distinct, SeekGt
1a530 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74  , SeekGe, SeekLt
1a540 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
1a550 4c 74 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Lt:         /* j
1a560 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1a570 20 4f 50 5f 53 65 65 6b 4c 65 3a 20 20 20 20 20   OP_SeekLe:     
1a580 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1a590 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1a5a0 47 65 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  Ge:         /* j
1a5b0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1a5c0 20 4f 50 5f 53 65 65 6b 47 74 3a 20 7b 20 20 20   OP_SeekGt: {   
1a5d0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1a5e0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20   */.  int res;. 
1a5f0 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43   int oc;.  VdbeC
1a600 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70  ursor *pC;.  Unp
1a610 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
1a620 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69   int nField;.  i
1a630 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a  64 iKey;      /*
1a640 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72   The rowid we ar
1a650 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a  e to seek to */.
1a660 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a670 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1a680 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1a690 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1a6a0 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  !=0 );.  pC = p-
1a6b0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1a6c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1a6d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1a6e0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
1a6f0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1a700 20 4f 50 5f 53 65 65 6b 4c 65 20 3d 3d 20 4f 50   OP_SeekLe == OP
1a710 5f 53 65 65 6b 4c 74 2b 31 20 29 3b 0a 20 20 61  _SeekLt+1 );.  a
1a720 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 65  ssert( OP_SeekGe
1a730 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 74 2b 32 20   == OP_SeekLt+2 
1a740 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1a750 53 65 65 6b 47 74 20 3d 3d 20 4f 50 5f 53 65 65  SeekGt == OP_See
1a760 6b 4c 74 2b 33 20 29 3b 0a 20 20 61 73 73 65 72  kLt+3 );.  asser
1a770 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
1a780 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43   );.  if( pC->pC
1a790 75 72 73 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20  ursor!=0 ){.    
1a7a0 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  oc = pOp->opcode
1a7b0 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  ;.    pC->nullRo
1a7c0 77 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 70  w = 0;.    if( p
1a7d0 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
1a7e0 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74      /* The input
1a7f0 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67   value in P3 mig
1a800 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70  ht be of any typ
1a810 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c  e: integer, real
1a820 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 20 20  , string,.      
1a830 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c  ** blob, or NULL
1a840 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20  .  But it needs 
1a850 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
1a860 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64   before we can d
1a870 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 73  o.      ** the s
1a880 65 65 6b 2c 20 73 6f 20 63 6f 76 65 72 74 20 69  eek, so covert i
1a890 74 2e 20 2a 2f 0a 20 20 20 20 20 20 70 49 6e 33  t. */.      pIn3
1a8a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1a8b0 5d 3b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75  ];.      applyNu
1a8c0 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
1a8d0 6e 33 29 3b 0a 20 20 20 20 20 20 69 4b 65 79 20  n3);.      iKey 
1a8e0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1a8f0 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20 20  Value(pIn3);.   
1a900 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1a910 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20  lid = 0;..      
1a920 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1a930 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20  ue could not be 
1a940 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1a950 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75  n integer withou
1a960 74 0a 20 20 20 20 20 20 2a 2a 20 6c 6f 73 73 20  t.      ** loss 
1a970 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  of information, 
1a980 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f  then special pro
1a990 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69  cessing is requi
1a9a0 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  red... */.      
1a9b0 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1a9c0 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
1a9d0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 70  {.        if( (p
1a9e0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1a9f0 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
1aa00 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
1aa10 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74   P3 value cannot
1aa20 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
1aa30 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61  to any kind of a
1aa40 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20   number,.       
1aa50 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73     ** then the s
1aa60 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  eek is not possi
1aa70 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20  ble, so jump to 
1aa80 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  P2 */.          
1aa90 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1aaa0 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
1aab0 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
1aac0 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20 72 65       /* If we re
1aad0 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20  ach this point, 
1aae0 74 68 65 6e 20 74 68 65 20 50 33 20 76 61 6c 75  then the P3 valu
1aaf0 65 20 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61  e must be a floa
1ab00 74 69 6e 67 0a 20 20 20 20 20 20 20 20 2a 2a 20  ting.        ** 
1ab10 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 20 2a 2f  point number. */
1ab20 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1ab30 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1ab40 4d 45 4d 5f 52 65 61 6c 29 21 3d 30 20 29 3b 0a  MEM_Real)!=0 );.
1ab50 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65  .        if( iKe
1ab60 79 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  y==SMALLEST_INT6
1ab70 34 20 26 26 20 28 70 49 6e 33 2d 3e 72 3c 28 64  4 && (pIn3->r<(d
1ab80 6f 75 62 6c 65 29 69 4b 65 79 20 7c 7c 20 70 49  ouble)iKey || pI
1ab90 6e 33 2d 3e 72 3e 30 29 20 29 7b 0a 20 20 20 20  n3->r>0) ){.    
1aba0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 33 20        /* The P3 
1abb0 76 61 6c 75 65 20 69 73 20 74 6f 6f 20 6c 61 72  value is too lar
1abc0 67 65 20 69 6e 20 6d 61 67 6e 69 74 75 64 65 20  ge in magnitude 
1abd0 74 6f 20 62 65 20 65 78 70 72 65 73 73 65 64 20  to be expressed 
1abe0 61 73 20 61 6e 0a 20 20 20 20 20 20 20 20 20 20  as an.          
1abf0 2a 2a 20 69 6e 74 65 67 65 72 2e 20 2a 2f 0a 20  ** integer. */. 
1ac00 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31           res = 1
1ac10 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
1ac20 70 49 6e 33 2d 3e 72 3c 30 20 29 7b 0a 20 20 20  pIn3->r<0 ){.   
1ac30 20 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3e           if( oc>
1ac40 3d 4f 50 5f 53 65 65 6b 47 65 20 29 7b 20 20 61  =OP_SeekGe ){  a
1ac50 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1ac60 65 6b 47 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGe || oc==OP_S
1ac70 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20  eekGt );.       
1ac80 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1ac90 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
1aca0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1acb0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1acc0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1acd0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1ace0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1acf0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1ad00 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1ad10 20 20 20 20 20 20 20 20 69 66 28 20 6f 63 3c 3d          if( oc<=
1ad20 4f 50 5f 53 65 65 6b 4c 65 20 29 7b 20 20 61 73  OP_SeekLe ){  as
1ad30 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1ad40 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLt || oc==OP_Se
1ad50 65 6b 4c 65 20 29 3b 0a 20 20 20 20 20 20 20 20  ekLe );.        
1ad60 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1ad70 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
1ad80 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ada0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1adb0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1adc0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1add0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1ade0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69     }.          i
1adf0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
1ae00 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1ae10 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
1ae20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 62 72    }.          br
1ae30 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  eak;.        }el
1ae40 73 65 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65  se if( oc==OP_Se
1ae50 65 6b 4c 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLt || oc==OP_S
1ae60 65 65 6b 47 65 20 29 7b 0a 20 20 20 20 20 20 20  eekGe ){.       
1ae70 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 63 65     /* Use the ce
1ae80 69 6c 69 6e 67 28 29 20 66 75 6e 63 74 69 6f 6e  iling() function
1ae90 20 74 6f 20 63 6f 6e 76 65 72 74 20 72 65 61 6c   to convert real
1aea0 2d 3e 69 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20  ->int */.       
1aeb0 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3e     if( pIn3->r >
1aec0 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20   (double)iKey ) 
1aed0 69 4b 65 79 2b 2b 3b 0a 20 20 20 20 20 20 20 20  iKey++;.        
1aee0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1aef0 20 2f 2a 20 55 73 65 20 74 68 65 20 66 6c 6f 6f   /* Use the floo
1af00 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  r() function to 
1af10 63 6f 6e 76 65 72 74 20 72 65 61 6c 2d 3e 69 6e  convert real->in
1af20 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 61  t */.          a
1af30 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65  ssert( oc==OP_Se
1af40 65 6b 4c 65 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekLe || oc==OP_S
1af50 65 65 6b 47 74 20 29 3b 0a 20 20 20 20 20 20 20  eekGt );.       
1af60 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 72 20 3c     if( pIn3->r <
1af70 20 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 20   (double)iKey ) 
1af80 69 4b 65 79 2d 2d 3b 0a 20 20 20 20 20 20 20 20  iKey--;.        
1af90 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 20  }.      } .     
1afa0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1afb0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1afc0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
1afd0 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26   (u64)iKey, 0, &
1afe0 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
1aff0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1b000 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
1b010 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1b020 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1b030 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
1b040 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49        pC->rowidI
1b050 73 56 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20  sValid = 1;.    
1b060 20 20 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69      pC->lastRowi
1b070 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20 20 20 20  d = iKey;.      
1b080 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
1b090 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1b0a0 3e 70 34 2e 69 3b 0a 20 20 20 20 20 20 61 73 73  >p4.i;.      ass
1b0b0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1b0c0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1b0d0 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65      assert( nFie
1b0e0 6c 64 3e 30 20 29 3b 0a 20 20 20 20 20 20 72 2e  ld>0 );.      r.
1b0f0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1b100 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 72  KeyInfo;.      r
1b110 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e  .nField = (u16)n
1b120 46 69 65 6c 64 3b 0a 0a 20 20 20 20 20 20 2f 2a  Field;..      /*
1b130 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f   The next line o
1b140 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  f code computes 
1b150 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79  as follows, only
1b160 20 66 61 73 74 65 72 3a 0a 20 20 20 20 20 20 2a   faster:.      *
1b170 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53  *   if( oc==OP_S
1b180 65 65 6b 47 74 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGt || oc==OP_
1b190 53 65 65 6b 4c 65 20 29 7b 0a 20 20 20 20 20 20  SeekLe ){.      
1b1a0 2a 2a 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  **     r.flags =
1b1b0 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45   UNPACKED_INCRKE
1b1c0 59 3b 0a 20 20 20 20 20 20 2a 2a 20 20 20 7d 65  Y;.      **   }e
1b1d0 6c 73 65 7b 0a 20 20 20 20 20 20 2a 2a 20 20 20  lse{.      **   
1b1e0 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b 0a 20    r.flags = 0;. 
1b1f0 20 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20       **   }.    
1b200 20 20 2a 2f 0a 20 20 20 20 20 20 72 2e 66 6c 61    */.      r.fla
1b210 67 73 20 3d 20 28 75 31 36 29 28 55 4e 50 41 43  gs = (u16)(UNPAC
1b220 4b 45 44 5f 49 4e 43 52 4b 45 59 20 2a 20 28 31  KED_INCRKEY * (1
1b230 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b   & (oc - OP_Seek
1b240 4c 74 29 29 29 3b 0a 20 20 20 20 20 20 61 73 73  Lt)));.      ass
1b250 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1b260 47 74 20 7c 7c 20 72 2e 66 6c 61 67 73 3d 3d 55  Gt || r.flags==U
1b270 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
1b280 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1b290 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 65 20 7c   oc!=OP_SeekLe |
1b2a0 7c 20 72 2e 66 6c 61 67 73 3d 3d 55 4e 50 41 43  | r.flags==UNPAC
1b2b0 4b 45 44 5f 49 4e 43 52 4b 45 59 20 29 3b 0a 20  KED_INCRKEY );. 
1b2c0 20 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21       assert( oc!
1b2d0 3d 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 72 2e  =OP_SeekGe || r.
1b2e0 66 6c 61 67 73 3d 3d 30 20 29 3b 0a 20 20 20 20  flags==0 );.    
1b2f0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1b300 5f 53 65 65 6b 4c 74 20 7c 7c 20 72 2e 66 6c 61  _SeekLt || r.fla
1b310 67 73 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 20 20  gs==0 );..      
1b320 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
1b330 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
1b340 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
1b350 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
1b360 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1b370 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
1b380 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1b390 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
1b3a0 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  .      ExpandBlo
1b3b0 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 20  b(r.aMem);.     
1b3c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b3d0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1b3e0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1b3f0 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
1b400 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1b410 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1b420 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1b430 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
1b440 20 7d 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77   }.      pC->row
1b450 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1b460 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
1b470 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1b480 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1b490 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1b4a0 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
1b4b0 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
1b4c0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
1b4d0 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  +;.#endif.    if
1b4e0 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 65 20  ( oc>=OP_SeekGe 
1b4f0 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1b500 4f 50 5f 53 65 65 6b 47 65 20 7c 7c 20 6f 63 3d  OP_SeekGe || oc=
1b510 3d 4f 50 5f 53 65 65 6b 47 74 20 29 3b 0a 20 20  =OP_SeekGt );.  
1b520 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c      if( res<0 ||
1b530 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1b540 4f 50 5f 53 65 65 6b 47 74 29 20 29 7b 0a 20 20  OP_SeekGt) ){.  
1b550 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b560 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
1b570 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1b580 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
1b590 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1b5a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b5b0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ror;.        pC-
1b5c0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1b5d0 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
1b5e0 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
1b5f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
1b600 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
1b610 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 20  ( oc==OP_SeekLt 
1b620 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 65  || oc==OP_SeekLe
1b630 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65   );.      if( re
1b640 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s>0 || (res==0 &
1b650 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 74 29  & oc==OP_SeekLt)
1b660 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
1b670 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
1b680 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f  vious(pC->pCurso
1b690 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1b6a0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1b6b0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1b6c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1b6d0 20 20 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64         pC->rowid
1b6e0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1b6f0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1b700 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
1b710 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
1b720 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
1b730 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
1b740 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65 65 20  .        ** see 
1b750 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63  if this is the c
1b760 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ase..        */.
1b770 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 73 71          res = sq
1b780 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43  lite3BtreeEof(pC
1b790 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1b7a0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
1b7b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
1b7c0 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  );.    if( res )
1b7d0 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
1b7e0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a  ->p2 - 1;.    }.
1b7f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
1b800 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65  This happens whe
1b810 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  n attempting to 
1b820 6f 70 65 6e 20 74 68 65 20 73 71 6c 69 74 65 33  open the sqlite3
1b830 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20  _master table.  
1b840 20 20 2a 2a 20 66 6f 72 20 72 65 61 64 20 61 63    ** for read ac
1b850 63 65 73 73 20 72 65 74 75 72 6e 73 20 53 51 4c  cess returns SQL
1b860 49 54 45 5f 45 4d 50 54 59 2e 20 49 6e 20 74 68  ITE_EMPTY. In th
1b870 69 73 20 63 61 73 65 20 61 6c 77 61 79 73 0a 20  is case always. 
1b880 20 20 20 2a 2a 20 74 61 6b 65 20 74 68 65 20 6a     ** take the j
1b890 75 6d 70 20 28 73 69 6e 63 65 20 74 68 65 72 65  ump (since there
1b8a0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1b8b0 69 6e 20 74 68 65 20 74 61 62 6c 65 29 2e 0a 20  in the table).. 
1b8c0 20 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70     */.    pc = p
1b8d0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1b8e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1b8f0 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50  pcode: Seek P1 P
1b900 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31  2 * * *.**.** P1
1b910 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c   is an open tabl
1b920 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  e cursor and P2 
1b930 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67  is a rowid integ
1b940 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20  er.  Arrange.** 
1b950 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73  for P1 to move s
1b960 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1b970 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69   to the rowid gi
1b980 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a  ven by P2..**.**
1b990 20 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c   This is actuall
1b9a0 79 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  y a deferred see
1b9b0 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
1b9c0 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
1b9d0 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
1b9e0 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
1b9f0 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
1ba00 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
1ba10 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
1ba20 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
1ba30 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20  appens..*/.case 
1ba40 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a  OP_Seek: {    /*
1ba50 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
1ba60 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
1ba70 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1ba80 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1ba90 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1baa0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1bab0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1bac0 3d 30 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  =0 );.  if( ALWA
1bad0 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  YS(pC->pCursor!=
1bae0 30 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  0) ){.    assert
1baf0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1bb00 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
1bb10 20 3d 20 30 3b 0a 20 20 20 20 70 49 6e 32 20 3d   = 0;.    pIn2 =
1bb20 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
1bb30 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  .    pC->movetoT
1bb40 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56  arget = sqlite3V
1bb50 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
1bb60 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  );.    pC->rowid
1bb70 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20  IsValid = 0;.   
1bb80 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1bb90 65 74 6f 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  eto = 1;.  }.  b
1bba0 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f  reak;.}.  ../* O
1bbb0 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
1bbc0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1bbd0 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1bbe0 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1bbf0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1bc00 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1bc10 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1bc20 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1bc30 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1bc40 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1bc50 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1bc60 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1bc70 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
1bc80 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
1bc90 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
1bca0 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
1bcb0 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
1bcc0 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79   a prefix of any
1bcd0 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1bce0 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1bcf0 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31   to P2 and.** P1
1bd00 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
1bd10 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e  g at the matchin
1bd20 67 20 65 6e 74 72 79 2e 0a 2a 2f 0a 2f 2a 20 4f  g entry..*/./* O
1bd30 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20  pcode: NotFound 
1bd40 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1bd50 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1bd60 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1bd70 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1bd80 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1bd90 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1bda0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1bdb0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1bdc0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1bdd0 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1bde0 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1bdf0 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
1be00 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1be10 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1be20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1be30 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1be40 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65  * is not the pre
1be50 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1be60 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1be70 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
1be80 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65  .  If P1 .** doe
1be90 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74  s contain an ent
1bea0 72 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20  ry whose prefix 
1beb0 6d 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50  matches the P3/P
1bec0 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f  4 record then co
1bed0 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74  ntrol.** falls t
1bee0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
1bef0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
1bf00 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  nd P1 is left po
1bf10 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a  inting at the.**
1bf20 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
1bf30 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1bf40 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
1bf50 73 2c 20 49 73 55 6e 69 71 75 65 0a 2a 2f 0a 63  s, IsUnique.*/.c
1bf60 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a  ase OP_NotFound:
1bf70 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1bf80 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  in3 */.case OP_F
1bf90 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
1bfa0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1bfb0 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73   int alreadyExis
1bfc0 74 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ts;.  VdbeCursor
1bfd0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
1bfe0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1bff0 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e  d *pIdxKey;.  Un
1c000 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1c010 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b    char aTempRec[
1c020 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e  ROUND8(sizeof(Un
1c030 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b  packedRecord)) +
1c040 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 33 20 2b   sizeof(Mem)*3 +
1c050 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   7];..#ifdef SQL
1c060 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
1c070 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b  e3_found_count++
1c080 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 6c 72 65  ;.#endif..  alre
1c090 61 64 79 45 78 69 73 74 73 20 3d 20 30 3b 0a 20  adyExists = 0;. 
1c0a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c0b0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1c0c0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1c0d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1c0e0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1c0f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1c100 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1c110 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
1c120 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
1c130 3e 70 33 5d 3b 0a 20 20 69 66 28 20 41 4c 57 41  >p3];.  if( ALWA
1c140 59 53 28 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  YS(pC->pCursor!=
1c150 30 29 20 29 7b 0a 0a 20 20 20 20 61 73 73 65 72  0) ){..    asser
1c160 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
1c170 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  0 );.    if( pOp
1c180 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20  ->p4.i>0 ){.    
1c190 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1c1a0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1c1b0 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
1c1c0 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
1c1d0 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e      r.aMem = pIn
1c1e0 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  3;.#ifdef SQLITE
1c1f0 5f 44 45 42 55 47 0a 20 20 20 20 20 20 7b 20 69  _DEBUG.      { i
1c200 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
1c210 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
1c220 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
1c230 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
1c240 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20  ; }.#endif.     
1c250 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41 43   r.flags = UNPAC
1c260 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48  KED_PREFIX_MATCH
1c270 3b 0a 20 20 20 20 20 20 70 49 64 78 4b 65 79 20  ;.      pIdxKey 
1c280 3d 20 26 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  = &r;.    }else{
1c290 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1c2a0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1c2b0 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 61  _Blob );.      a
1c2c0 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
1c2d0 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d  ags & MEM_Zero)=
1c2e0 3d 30 20 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c  =0 );  /* zerobl
1c2f0 6f 62 73 20 61 6c 72 65 61 64 79 20 65 78 70 61  obs already expa
1c300 6e 64 65 64 20 2a 2f 0a 20 20 20 20 20 20 70 49  nded */.      pI
1c310 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56  dxKey = sqlite3V
1c320 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28  dbeRecordUnpack(
1c330 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49  pC->pKeyInfo, pI
1c340 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 0a  n3->n, pIn3->z,.
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c370 20 20 20 20 20 20 20 20 61 54 65 6d 70 52 65 63          aTempRec
1c380 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65  , sizeof(aTempRe
1c390 63 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  c));.      if( p
1c3a0 49 64 78 4b 65 79 3d 3d 30 20 29 7b 0a 20 20 20  IdxKey==0 ){.   
1c3b0 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
1c3c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1c3d0 70 49 64 78 4b 65 79 2d 3e 66 6c 61 67 73 20 7c  pIdxKey->flags |
1c3e0 3d 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49  = UNPACKED_PREFI
1c3f0 58 5f 4d 41 54 43 48 3b 0a 20 20 20 20 7d 0a 20  X_MATCH;.    }. 
1c400 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1c410 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1c420 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1c430 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26  pIdxKey, 0, 0, &
1c440 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  res);.    if( pO
1c450 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20  p->p4.i==0 ){.  
1c460 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
1c470 65 6c 65 74 65 55 6e 70 61 63 6b 65 64 52 65 63  eleteUnpackedRec
1c480 6f 72 64 28 70 49 64 78 4b 65 79 29 3b 0a 20 20  ord(pIdxKey);.  
1c490 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d    }.    if( rc!=
1c4a0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1c4b0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
1c4c0 20 20 20 20 61 6c 72 65 61 64 79 45 78 69 73 74      alreadyExist
1c4d0 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20  s = (res==0);.  
1c4e0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1c4f0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
1c500 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1c510 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
1c520 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1c530 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
1c540 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
1c550 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70  xists ) pc = pOp
1c560 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
1c570 65 7b 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65  e{.    if( !alre
1c580 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
1c590 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1c5a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1c5b0 20 4f 70 63 6f 64 65 3a 20 49 73 55 6e 69 71 75   Opcode: IsUniqu
1c5c0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
1c5d0 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1c5e0 69 73 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 69 6e  is open on an in
1c5f0 64 65 78 20 62 2d 74 72 65 65 20 2d 20 74 68 61  dex b-tree - tha
1c600 74 20 69 73 20 74 6f 20 73 61 79 2c 20 61 20 62  t is to say, a b
1c610 74 72 65 65 20 77 68 69 63 68 0a 2a 2a 20 6e 6f  tree which.** no
1c620 20 64 61 74 61 20 61 6e 64 20 77 68 65 72 65 20   data and where 
1c630 74 68 65 20 6b 65 79 20 61 72 65 20 72 65 63 6f  the key are reco
1c640 72 64 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  rds generated by
1c650 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 77   OP_MakeRecord w
1c660 69 74 68 0a 2a 2a 20 74 68 65 20 6c 69 73 74 20  ith.** the list 
1c670 66 69 65 6c 64 20 62 65 69 6e 67 20 74 68 65 20  field being the 
1c680 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66  integer ROWID of
1c690 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
1c6a0 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 65 6e 74  the index.** ent
1c6b0 72 79 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a  ry refers to..**
1c6c0 0a 2a 2a 20 54 68 65 20 50 33 20 72 65 67 69 73  .** The P3 regis
1c6d0 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  ter contains an 
1c6e0 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
1c6f0 75 6d 62 65 72 2e 20 43 61 6c 6c 20 74 68 69 73  umber. Call this
1c700 20 72 65 63 6f 72 64 20 0a 2a 2a 20 6e 75 6d 62   record .** numb
1c710 65 72 20 52 2e 20 52 65 67 69 73 74 65 72 20 50  er R. Register P
1c720 34 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  4 is the first i
1c730 6e 20 61 20 73 65 74 20 6f 66 20 4e 20 63 6f 6e  n a set of N con
1c740 74 69 67 75 6f 75 73 20 72 65 67 69 73 74 65 72  tiguous register
1c750 73 0a 2a 2a 20 74 68 61 74 20 6d 61 6b 65 20 75  s.** that make u
1c760 70 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  p an unpacked in
1c770 64 65 78 20 6b 65 79 20 74 68 61 74 20 63 61 6e  dex key that can
1c780 20 62 65 20 75 73 65 64 20 77 69 74 68 20 63 75   be used with cu
1c790 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  rsor P1..** The 
1c7a0 76 61 6c 75 65 20 6f 66 20 4e 20 63 61 6e 20 62  value of N can b
1c7b0 65 20 69 6e 66 65 72 72 65 64 20 66 72 6f 6d 20  e inferred from 
1c7c0 74 68 65 20 63 75 72 73 6f 72 2e 20 4e 20 69 6e  the cursor. N in
1c7d0 63 6c 75 64 65 73 20 74 68 65 20 72 6f 77 69 64  cludes the rowid
1c7e0 0a 2a 2a 20 76 61 6c 75 65 20 61 70 70 65 6e 64  .** value append
1c7f0 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  ed to the end of
1c800 20 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f 72   the index recor
1c810 64 2e 20 54 68 69 73 20 72 6f 77 69 64 20 76 61  d. This rowid va
1c820 6c 75 65 20 6d 61 79 0a 2a 2a 20 6f 72 20 6d 61  lue may.** or ma
1c830 79 20 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d  y not be the sam
1c840 65 20 61 73 20 52 2e 0a 2a 2a 0a 2a 2a 20 49 66  e as R..**.** If
1c850 20 61 6e 79 20 6f 66 20 74 68 65 20 4e 20 72 65   any of the N re
1c860 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
1c870 67 20 77 69 74 68 20 72 65 67 69 73 74 65 72 20  g with register 
1c880 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  P4 contains a NU
1c890 4c 4c 0a 2a 2a 20 76 61 6c 75 65 2c 20 6a 75 6d  LL.** value, jum
1c8a0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1c8b0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72   P2..**.** Other
1c8c0 77 69 73 65 2c 20 74 68 69 73 20 69 6e 73 74 72  wise, this instr
1c8d0 75 63 74 69 6f 6e 20 63 68 65 63 6b 73 20 69 66  uction checks if
1c8e0 20 63 75 72 73 6f 72 20 50 31 20 63 6f 6e 74 61   cursor P1 conta
1c8f0 69 6e 73 20 61 6e 20 65 6e 74 72 79 0a 2a 2a 20  ins an entry.** 
1c900 77 68 65 72 65 20 74 68 65 20 66 69 72 73 74 20  where the first 
1c910 28 4e 2d 31 29 20 66 69 65 6c 64 73 20 6d 61 74  (N-1) fields mat
1c920 63 68 20 62 75 74 20 74 68 65 20 72 6f 77 69 64  ch but the rowid
1c930 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 65 6e   value at the en
1c940 64 0a 2a 2a 20 6f 66 20 74 68 65 20 69 6e 64 65  d.** of the inde
1c950 78 20 65 6e 74 72 79 20 69 73 20 6e 6f 74 20 52  x entry is not R
1c960 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
1c970 20 73 75 63 68 20 65 6e 74 72 79 2c 20 63 6f 6e   such entry, con
1c980 74 72 6f 6c 20 6a 75 6d 70 73 0a 2a 2a 20 74 6f  trol jumps.** to
1c990 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
1c9a0 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20   Otherwise, the 
1c9b0 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63 6f 6e  rowid of the con
1c9c0 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78 0a 2a  flicting index.*
1c9d0 2a 20 65 6e 74 72 79 20 69 73 20 63 6f 70 69 65  * entry is copie
1c9e0 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  d to register P3
1c9f0 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 66 61 6c   and control fal
1ca00 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
1ca10 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
1ca20 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
1ca30 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1ca40 20 4e 6f 74 45 78 69 73 74 73 2c 20 46 6f 75 6e   NotExists, Foun
1ca50 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 55  d.*/.case OP_IsU
1ca60 6e 69 71 75 65 3a 20 7b 20 20 20 20 20 20 20 20  nique: {        
1ca70 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1ca80 20 20 75 31 36 20 69 69 3b 0a 20 20 56 64 62 65    u16 ii;.  Vdbe
1ca90 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 42  Cursor *pCx;.  B
1caa0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
1cab0 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 0a 20 20    u16 nField;.  
1cac0 4d 65 6d 20 2a 61 4d 78 3b 0a 20 20 55 6e 70 61  Mem *aMx;.  Unpa
1cad0 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 20  ckedRecord r;   
1cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1caf0 2a 20 42 2d 54 72 65 65 20 69 6e 64 65 78 20 73  * B-Tree index s
1cb00 65 61 72 63 68 20 6b 65 79 20 2a 2f 0a 20 20 69  earch key */.  i
1cb10 36 34 20 52 3b 20 20 20 20 20 20 20 20 20 20 20  64 R;           
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 20 2f 2a 20 52 6f 77 69 64 20 73 74 6f 72 65    /* Rowid store
1cb40 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
1cb50 20 2a 2f 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61   */..  pIn3 = &a
1cb60 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1cb70 61 4d 78 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  aMx = &aMem[pOp-
1cb80 3e 70 34 2e 69 5d 3b 0a 20 20 2f 2a 20 41 73 73  >p4.i];.  /* Ass
1cb90 65 72 74 20 74 68 61 74 20 74 68 65 20 76 61 6c  ert that the val
1cba0 75 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  ues of parameter
1cbb0 73 20 50 31 20 61 6e 64 20 50 34 20 61 72 65 20  s P1 and P4 are 
1cbc0 69 6e 20 72 61 6e 67 65 2e 20 2a 2f 0a 20 20 61  in range. */.  a
1cbd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1cbe0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1cbf0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1cc00 34 2e 69 3e 30 20 26 26 20 70 4f 70 2d 3e 70 34  4.i>0 && pOp->p4
1cc10 2e 69 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  .i<=p->nMem );. 
1cc20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1cc30 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1cc40 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 0a 20 20  ->nCursor );..  
1cc50 2f 2a 20 46 69 6e 64 20 74 68 65 20 69 6e 64 65  /* Find the inde
1cc60 78 20 63 75 72 73 6f 72 2e 20 2a 2f 0a 20 20 70  x cursor. */.  p
1cc70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  Cx = p->apCsr[pO
1cc80 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1cc90 28 20 70 43 78 2d 3e 64 65 66 65 72 72 65 64 4d  ( pCx->deferredM
1cca0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43  oveto==0 );.  pC
1ccb0 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  x->seekResult = 
1ccc0 30 3b 0a 20 20 70 43 78 2d 3e 63 61 63 68 65 53  0;.  pCx->cacheS
1ccd0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
1cce0 41 4c 45 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  ALE;.  pCrsr = p
1ccf0 43 78 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20  Cx->pCursor;..  
1cd00 2f 2a 20 49 66 20 61 6e 79 20 6f 66 20 74 68 65  /* If any of the
1cd10 20 76 61 6c 75 65 73 20 61 72 65 20 4e 55 4c 4c   values are NULL
1cd20 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  , take the jump.
1cd30 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
1cd40 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  Cx->pKeyInfo->nF
1cd50 69 65 6c 64 3b 0a 20 20 66 6f 72 28 69 69 3d 30  ield;.  for(ii=0
1cd60 3b 20 69 69 3c 6e 46 69 65 6c 64 3b 20 69 69 2b  ; ii<nField; ii+
1cd70 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 4d 78 5b  +){.    if( aMx[
1cd80 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
1cd90 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 70 63  Null ){.      pc
1cda0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1cdb0 20 20 20 20 20 20 70 43 72 73 72 20 3d 20 30 3b        pCrsr = 0;
1cdc0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
1cdd0 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74    }.  }.  assert
1cde0 28 20 28 61 4d 78 5b 6e 46 69 65 6c 64 5d 2e 66  ( (aMx[nField].f
1cdf0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
1ce00 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 43  ==0 );..  if( pC
1ce10 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  rsr!=0 ){.    /*
1ce20 20 50 6f 70 75 6c 61 74 65 20 74 68 65 20 69 6e   Populate the in
1ce30 64 65 78 20 73 65 61 72 63 68 20 6b 65 79 2e 20  dex search key. 
1ce40 2a 2f 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  */.    r.pKeyInf
1ce50 6f 20 3d 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  o = pCx->pKeyInf
1ce60 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
1ce70 3d 20 6e 46 69 65 6c 64 20 2b 20 31 3b 0a 20 20  = nField + 1;.  
1ce80 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
1ce90 43 4b 45 44 5f 50 52 45 46 49 58 5f 53 45 41 52  CKED_PREFIX_SEAR
1cea0 43 48 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  CH;.    r.aMem =
1ceb0 20 61 4d 78 3b 0a 23 69 66 64 65 66 20 53 51 4c   aMx;.#ifdef SQL
1cec0 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
1ced0 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
1cee0 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
1cef0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1cf00 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
1cf10 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ); }.#endif..   
1cf20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20   /* Extract the 
1cf30 76 61 6c 75 65 20 6f 66 20 52 20 66 72 6f 6d 20  value of R from 
1cf40 72 65 67 69 73 74 65 72 20 50 33 2e 20 2a 2f 0a  register P3. */.
1cf50 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1cf60 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
1cf70 33 29 3b 0a 20 20 20 20 52 20 3d 20 70 49 6e 33  3);.    R = pIn3
1cf80 2d 3e 75 2e 69 3b 0a 0a 20 20 20 20 2f 2a 20 53  ->u.i;..    /* S
1cf90 65 61 72 63 68 20 74 68 65 20 42 2d 54 72 65 65  earch the B-Tree
1cfa0 20 69 6e 64 65 78 2e 20 49 66 20 6e 6f 20 63 6f   index. If no co
1cfb0 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72 64  nflicting record
1cfc0 20 69 73 20 66 6f 75 6e 64 2c 20 6a 75 6d 70 0a   is found, jump.
1cfd0 20 20 20 20 2a 2a 20 74 6f 20 50 32 2e 20 4f 74      ** to P2. Ot
1cfe0 68 65 72 77 69 73 65 2c 20 63 6f 70 79 20 74 68  herwise, copy th
1cff0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 63  e rowid of the c
1d000 6f 6e 66 6c 69 63 74 69 6e 67 20 72 65 63 6f 72  onflicting recor
1d010 64 20 74 6f 0a 20 20 20 20 2a 2a 20 72 65 67 69  d to.    ** regi
1d020 73 74 65 72 20 50 33 20 61 6e 64 20 66 61 6c 6c  ster P3 and fall
1d030 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1d040 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1d050 2e 20 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  .  */.    rc = s
1d060 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1d070 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
1d080 20 26 72 2c 20 30 2c 20 30 2c 20 26 70 43 78 2d   &r, 0, 0, &pCx-
1d090 3e 73 65 65 6b 52 65 73 75 6c 74 29 3b 0a 20 20  >seekResult);.  
1d0a0 20 20 69 66 28 20 28 72 2e 66 6c 61 67 73 20 26    if( (r.flags &
1d0b0 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46 49 58   UNPACKED_PREFIX
1d0c0 5f 53 45 41 52 43 48 29 20 7c 7c 20 72 2e 72 6f  _SEARCH) || r.ro
1d0d0 77 69 64 3d 3d 52 20 29 7b 0a 20 20 20 20 20 20  wid==R ){.      
1d0e0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1d0f0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1d100 20 20 20 70 49 6e 33 2d 3e 75 2e 69 20 3d 20 72     pIn3->u.i = r
1d110 2e 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20  .rowid;.    }.  
1d120 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1d130 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73   Opcode: NotExis
1d140 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ts P1 P2 P3 * *.
1d150 2a 2a 0a 2a 2a 20 55 73 65 20 74 68 65 20 63 6f  **.** Use the co
1d160 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1d170 72 20 50 33 20 61 73 20 61 20 69 6e 74 65 67 65  r P3 as a intege
1d180 72 20 6b 65 79 2e 20 20 49 66 20 61 20 72 65 63  r key.  If a rec
1d190 6f 72 64 20 0a 2a 2a 20 77 69 74 68 20 74 68 61  ord .** with tha
1d1a0 74 20 6b 65 79 20 64 6f 65 73 20 6e 6f 74 20 65  t key does not e
1d1b0 78 69 73 74 20 69 6e 20 74 61 62 6c 65 20 6f 66  xist in table of
1d1c0 20 50 31 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74   P1, then jump t
1d1d0 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65  o P2. .** If the
1d1e0 20 72 65 63 6f 72 64 20 64 6f 65 73 20 65 78 69   record does exi
1d1f0 73 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  st, then fall th
1d200 72 6f 75 67 68 2e 20 20 54 68 65 20 63 75 72 73  rough.  The curs
1d210 6f 72 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20 70  or is left .** p
1d220 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 72  ointing to the r
1d230 65 63 6f 72 64 20 69 66 20 69 74 20 65 78 69 73  ecord if it exis
1d240 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69  ts..**.** The di
1d250 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
1d260 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   this operation 
1d270 61 6e 64 20 4e 6f 74 46 6f 75 6e 64 20 69 73 20  and NotFound is 
1d280 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 6f 70 65  that this.** ope
1d290 72 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74  ration assumes t
1d2a0 68 65 20 6b 65 79 20 69 73 20 61 6e 20 69 6e 74  he key is an int
1d2b0 65 67 65 72 20 61 6e 64 20 74 68 61 74 20 50 31  eger and that P1
1d2c0 20 69 73 20 61 20 74 61 62 6c 65 20 77 68 65 72   is a table wher
1d2d0 65 61 73 0a 2a 2a 20 4e 6f 74 46 6f 75 6e 64 20  eas.** NotFound 
1d2e0 61 73 73 75 6d 65 73 20 6b 65 79 20 69 73 20 61  assumes key is a
1d2f0 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
1d300 64 20 66 72 6f 6d 20 4d 61 6b 65 52 65 63 6f 72  d from MakeRecor
1d310 64 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 61  d and.** P1 is a
1d320 6e 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 53  n index..**.** S
1d330 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1d340 4e 6f 74 46 6f 75 6e 64 2c 20 49 73 55 6e 69 71  NotFound, IsUniq
1d350 75 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ue.*/.case OP_No
1d360 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20 20 20  tExists: {      
1d370 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1d380 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1d390 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
1d3a0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
1d3b0 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20  ;.  u64 iKey;.. 
1d3c0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1d3d0 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
1d3e0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
1d3f0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
1d400 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d410 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1d420 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1d430 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1d440 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1d450 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1d460 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1d470 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
1d480 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
1d490 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
1d4a0 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20 70  pCursor;.  if( p
1d4b0 43 72 73 72 21 3d 30 20 29 7b 0a 20 20 20 20 72  Crsr!=0 ){.    r
1d4c0 65 73 20 3d 20 30 3b 0a 20 20 20 20 69 4b 65 79  es = 0;.    iKey
1d4d0 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20   = pIn3->u.i;.  
1d4e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d4f0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1d500 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79  d(pCrsr, 0, iKey
1d510 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  , 0, &res);.    
1d520 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  pC->lastRowid = 
1d530 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 70  pIn3->u.i;.    p
1d540 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1d550 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20  = res==0 ?1:0;. 
1d560 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
1d570 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
1d580 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1d590 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e 64  STALE;.    pC->d
1d5a0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1d5b0 30 3b 0a 20 20 20 20 69 66 28 20 72 65 73 21 3d  0;.    if( res!=
1d5c0 30 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  0 ){.      pc = 
1d5d0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
1d5e0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72     assert( pC->r
1d5f0 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29  owidIsValid==0 )
1d600 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1d610 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
1d620 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
1d630 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 77  * This happens w
1d640 68 65 6e 20 61 6e 20 61 74 74 65 6d 70 74 20 74  hen an attempt t
1d650 6f 20 6f 70 65 6e 20 61 20 72 65 61 64 20 63 75  o open a read cu
1d660 72 73 6f 72 20 6f 6e 20 74 68 65 20 0a 20 20 20  rsor on the .   
1d670 20 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   ** sqlite_maste
1d680 72 20 74 61 62 6c 65 20 72 65 74 75 72 6e 73 20  r table returns 
1d690 53 51 4c 49 54 45 5f 45 4d 50 54 59 2e 0a 20 20  SQLITE_EMPTY..  
1d6a0 20 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f    */.    pc = pO
1d6b0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61  p->p2 - 1;.    a
1d6c0 73 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64  ssert( pC->rowid
1d6d0 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20  IsValid==0 );.  
1d6e0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1d6f0 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 0;.  }.  brea
1d700 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1d710 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20   Sequence P1 P2 
1d720 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 69 6e 64  * * *.**.** Find
1d730 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61   the next availa
1d740 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  ble sequence num
1d750 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ber for cursor P
1d760 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  1..** Write the 
1d770 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
1d780 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
1d790 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63  ..** The sequenc
1d7a0 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20  e number on the 
1d7b0 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d  cursor is increm
1d7c0 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73  ented after this
1d7d0 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
1d7e0 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65    .*/.case OP_Se
1d7f0 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  quence: {       
1d800 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
1d810 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
1d820 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1d830 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1d840 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1d850 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
1d860 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  p1]!=0 );.  pOut
1d870 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72  ->u.i = p->apCsr
1d880 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f  [pOp->p1]->seqCo
1d890 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a  unt++;.  break;.
1d8a0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  }.../* Opcode: N
1d8b0 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33  ewRowid P1 P2 P3
1d8c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61   * *.**.** Get a
1d8d0 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
1d8e0 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
1d8f0 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
1d900 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
1d910 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
1d920 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
1d930 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
1d940 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
1d950 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
1d960 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
1d970 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
1d980 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
1d990 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
1d9a0 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
1d9b0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1d9c0 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
1d9d0 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
1d9e0 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
1d9f0 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74  e of this VDBE t
1da00 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68  hat holds .** th
1da10 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
1da20 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72  usly generated r
1da30 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f  ecord number. No
1da40 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1da50 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77  ers are.** allow
1da60 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
1da70 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57  an this value. W
1da80 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
1da90 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
1daa0 75 6d 2c 20 0a 2a 2a 20 61 20 53 51 4c 49 54 45  um, .** a SQLITE
1dab0 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67  _FULL error is g
1dac0 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33  enerated. The P3
1dad0 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64   register is upd
1dae0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a  ated with the '.
1daf0 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ** generated rec
1db00 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73  ord number. This
1db10 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73   P3 mechanism is
1db20 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d   used to help im
1db30 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41  plement the.** A
1db40 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61  UTOINCREMENT fea
1db50 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
1db60 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20  _NewRowid: {    
1db70 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
1db80 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
1db90 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
1dba0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
1dbb0 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65   rowid */.  Vdbe
1dbc0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
1dbd0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20     /* Cursor of 
1dbe0 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65  table to get the
1dbf0 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
1dc00 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
1dc10 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
1dc20 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74   of an sqlite3Bt
1dc30 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69  reeLast() */.  i
1dc40 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20  nt cnt;         
1dc50 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
1dc60 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
1dc70 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73  mber of searches
1dc80 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
1dc90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dca0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1dcb0 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66   largest rowid f
1dcc0 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
1dcd0 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
1dce0 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20  *pFrame;     /* 
1dcf0 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44  Root frame of VD
1dd00 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a  BE */..  v = 0;.
1dd10 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
1dd20 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1dd30 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1dd40 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1dd50 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1dd60 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1dd70 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  =0 );.  if( NEVE
1dd80 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30  R(pC->pCursor==0
1dd90 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  ) ){.    /* The 
1dda0 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74  zero initializat
1ddb0 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c  ion above is all
1ddc0 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64 20   that is needed 
1ddd0 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
1dde0 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69  /* The next rowi
1ddf0 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  d or record numb
1de00 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65  er (different te
1de10 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65  rms for the same
1de20 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69  .    ** thing) i
1de30 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20  s obtained in a 
1de40 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74  two-step algorit
1de50 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  hm..    **.    *
1de60 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d  * First we attem
1de70 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  pt to find the l
1de80 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
1de90 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e  rowid and add on
1dea0 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74  e.    ** to that
1deb0 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61  .  But if the la
1dec0 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
1ded0 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20  owid is already 
1dee0 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20  the maximum.    
1def0 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ** positive inte
1df00 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20  ger, we have to 
1df10 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
1df20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a  the second.    *
1df30 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20  * probabilistic 
1df40 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a  algorithm.    **
1df50 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f  .    ** The seco
1df60 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  nd algorithm is 
1df70 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69  to select a rowi
1df80 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
1df90 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74  see if.    ** it
1dfa0 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
1dfb0 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  in the table.  I
1dfc0 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
1dfd0 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20  ist, we have.   
1dfe0 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20   ** succeeded.  
1dff0 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f  If the random ro
1e000 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20  wid does exist, 
1e010 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20  we select a new 
1e020 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74  one.    ** and t
1e030 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20  ry again, up to 
1e040 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a  100 times..    *
1e050 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  /.    assert( pC
1e060 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
1e070 20 63 6e 74 20 3d 20 30 3b 0a 0a 23 69 66 64 65   cnt = 0;..#ifde
1e080 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52  f SQLITE_32BIT_R
1e090 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20  OWID.#   define 
1e0a0 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66  MAX_ROWID 0x7fff
1e0b0 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f  ffff.#else.    /
1e0c0 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  * Some compilers
1e0d0 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
1e0e0 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65  constants of the
1e0f0 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66   form 0x7fffffff
1e100 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a  ffffffff..    **
1e110 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e   Others complain
1e120 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66   about 0x7ffffff
1e130 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54  ffffffffffLL.  T
1e140 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1e150 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20  ro seems.    ** 
1e160 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63  to provide the c
1e170 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61  onstant while ma
1e180 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  king all compile
1e190 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f  rs happy..    */
1e1a0 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
1e1b0 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28  ROWID  (i64)( ((
1e1c0 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29  (u64)0x7fffffff)
1e1d0 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66  <<32) | (u64)0xf
1e1e0 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66  fffffff ).#endif
1e1f0 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75  ..    if( !pC->u
1e200 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
1e210 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74  .      v = sqlit
1e220 65 33 42 74 72 65 65 47 65 74 43 61 63 68 65 64  e3BtreeGetCached
1e230 52 6f 77 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Rowid(pC->pCurso
1e240 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 76 3d  r);.      if( v=
1e250 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
1e260 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
1e270 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ast(pC->pCursor,
1e280 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
1e290 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1e2a0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
1e2b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1e2c0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
1e2d0 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 65  }.        if( re
1e2e0 73 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 76  s ){.          v
1e2f0 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
1e300 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
1e310 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1e320 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
1e330 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
1e340 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e  rsorIsValid(pC->
1e350 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  pCursor) );.    
1e360 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1e370 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
1e380 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b  C->pCursor, &v);
1e390 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
1e3a0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
1e3b0 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20   );   /* Cannot 
1e3c0 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42  fail following B
1e3d0 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
1e3e0 20 20 20 20 20 20 20 20 69 66 28 20 76 3d 3d 4d          if( v==M
1e3f0 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
1e400 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
1e410 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
1e420 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
1e430 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 2b 2b  .            v++
1e440 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
1e450 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
1e460 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1e470 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 23 69 66 6e   }.      }..#ifn
1e480 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1e490 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
1e4a0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
1e4b0 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  ){.        /* As
1e4c0 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
1e4d0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
1e4e0 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
1e4f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1e500 30 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  0 );.        if(
1e510 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
1e520 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
1e530 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
1e540 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
1e550 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
1e560 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
1e570 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
1e580 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
1e590 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
1e5a0 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1e5b0 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65   pOp->p3<=pFrame
1e5c0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
1e5d0 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61      pMem = &pFra
1e5e0 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  me->aMem[pOp->p3
1e5f0 5d 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  ];.        }else
1e600 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  {.          /* A
1e610 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
1e620 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
1e630 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
1e640 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1e650 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  p3<=p->nMem );. 
1e660 20 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20           pMem = 
1e670 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1e680 20 20 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f            memAbo
1e690 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d  utToChange(p, pM
1e6a0 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  em);.        }. 
1e6b0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
1e6c0 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
1e6d0 29 3b 0a 0a 20 20 20 20 20 20 20 20 52 45 47 49  );..        REGI
1e6e0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
1e6f0 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
1e700 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1e710 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
1e720 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1e730 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
1e740 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
1e750 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
1e760 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
1e770 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4d 65  .        if( pMe
1e780 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
1e790 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
1e7a0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
1e7b0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1e7c0 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
1e7d0 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a   R-12275-61338 *
1e7e0 2f 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  /.          goto
1e7f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1e800 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
1e810 20 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65         if( v<pMe
1e820 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
1e830 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
1e840 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  u.i + 1;.       
1e850 20 7d 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 2d   }.        pMem-
1e860 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 20 20  >u.i = v;.      
1e870 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  }.#endif..      
1e880 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
1e890 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d 3e 70  achedRowid(pC->p
1e8a0 43 75 72 73 6f 72 2c 20 76 3c 4d 41 58 5f 52 4f  Cursor, v<MAX_RO
1e8b0 57 49 44 20 3f 20 76 2b 31 20 3a 20 30 29 3b 0a  WID ? v+1 : 0);.
1e8c0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43      }.    if( pC
1e8d0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
1e8e0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50   ){.      /* IMP
1e8f0 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
1e900 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66  R-07677-41881 If
1e910 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57   the largest ROW
1e920 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74  ID is equal to t
1e930 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  he.      ** larg
1e940 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  est possible int
1e950 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36  eger (9223372036
1e960 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
1e970 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
1e980 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61     ** engine sta
1e990 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69  rts picking posi
1e9a0 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52  tive candidate R
1e9b0 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20  OWIDs at random 
1e9c0 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69  until.      ** i
1e9d0 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74  t finds one that
1e9e0 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
1e9f0 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20  ly used. */.    
1ea00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ea10 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
1ea20 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
1ea30 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
1ea40 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea60 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
1ea70 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
1ea80 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20   */.      /* on 
1ea90 74 68 65 20 66 69 72 73 74 20 61 74 74 65 6d 70  the first attemp
1eaa0 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65  t, simply do one
1eab0 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65 76 69   more than previ
1eac0 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d  ous */.      v =
1ead0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
1eae0 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
1eaf0 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
1eb00 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
1eb10 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
1eb20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65    v++; /* ensure
1eb30 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20   non-zero */.   
1eb40 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20     cnt = 0;.    
1eb50 20 20 77 68 69 6c 65 28 20 20 20 28 28 72 63 20    while(   ((rc 
1eb60 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1eb70 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1eb80 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
1eb90 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20  4)v,.           
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebc0 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d        0, &res))=
1ebd0 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20  =SQLITE_OK).    
1ebe0 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d          && (res=
1ebf0 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  =0).            
1ec00 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b  && (++cnt<100)){
1ec10 0a 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c  .        /* coll
1ec20 69 73 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74  ision - try anot
1ec30 68 65 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  her random rowid
1ec40 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
1ec50 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73  te3_randomness(s
1ec60 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20  izeof(v), &v);. 
1ec70 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35         if( cnt<5
1ec80 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
1ec90 20 74 72 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e   try "small" ran
1eca0 64 6f 6d 20 72 6f 77 69 64 73 20 66 6f 72 20 74  dom rowids for t
1ecb0 68 65 20 69 6e 69 74 69 61 6c 20 61 74 74 65 6d  he initial attem
1ecc0 70 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  pts */.         
1ecd0 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a   v &= 0xffffff;.
1ece0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1ecf0 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d           v &= (M
1ed00 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a  AX_ROWID>>1); /*
1ed10 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20   ensure doesn't 
1ed20 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20  go negative */. 
1ed30 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1ed40 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20   v++; /* ensure 
1ed50 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  non-zero */.    
1ed60 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63    }.      if( rc
1ed70 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
1ed80 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
1ed90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
1eda0 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
1edb0 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
1edc0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1edd0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1ede0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
1edf0 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
1ee00 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
1ee10 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
1ee20 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1ee30 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
1ee40 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1ee50 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
1ee60 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
1ee70 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
1ee80 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
1ee90 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1eea0 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
1eeb0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 57 72 69 74  P4 P5.**.** Writ
1eec0 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20  e an entry into 
1eed0 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72  the table of cur
1eee0 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65  sor P1.  A new e
1eef0 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74  ntry is.** creat
1ef00 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  ed if it doesn't
1ef10 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f   already exist o
1ef20 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61  r the data for a
1ef30 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e  n existing.** en
1ef40 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74  try is overwritt
1ef50 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73  en.  The data is
1ef60 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42   the value MEM_B
1ef70 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lob stored in re
1ef80 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  gister.** number
1ef90 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20   P2. The key is 
1efa0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1efb0 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d  er P3. The key m
1efc0 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f  ust.** be a MEM_
1efd0 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  Int..**.** If th
1efe0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
1eff0 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
1f000 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
1f010 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
1f020 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
1f030 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
1f040 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
1f050 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
1f060 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
1f070 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
1f080 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
1f090 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
1f0a0 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
1f0b0 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1f0c0 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
1f0d0 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
1f0e0 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ified)..**.** If
1f0f0 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
1f100 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f  EEKRESULT flag o
1f110 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
1f120 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
1f130 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65  .** the last see
1f140 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f  k operation (OP_
1f150 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61  NotExists) was a
1f160 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74   success, then t
1f170 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
1f180 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70   will not attemp
1f190 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70  t to find the ap
1f1a0 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65  propriate row be
1f1b0 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68  fore doing.** th
1f1c0 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c  e insert but wil
1f1d0 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72  l instead overwr
1f1e0 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74  ite the row that
1f1f0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1f200 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  * currently poin
1f210 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d  ting to.  Presum
1f220 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20  ably, the prior 
1f230 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
1f240 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61  ode.** has alrea
1f250 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  dy positioned th
1f260 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74  e cursor correct
1f270 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ly.  This is an 
1f280 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20  optimization.** 
1f290 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66  that boosts perf
1f2a0 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64  ormance by avoid
1f2b0 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65  ing redundant se
1f2c0 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  eks..**.** If th
1f2d0 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
1f2e0 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  E flag is set, t
1f2f0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
1f300 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a  is part of an.**
1f310 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
1f320 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69  n.  Otherwise (i
1f330 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c  f the flag is cl
1f340 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f  ear) then this o
1f350 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74  pcode.** is part
1f360 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70   of an INSERT op
1f370 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69  eration.  The di
1f380 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79  fference is only
1f390 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a   important to.**
1f3a0 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
1f3b0 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ..**.** Paramete
1f3c0 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74  r P4 may point t
1f3d0 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  o a string conta
1f3e0 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d  ining the table-
1f3f0 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20  name, or.** may 
1f400 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
1f410 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
1f420 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
1f430 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55   .** (sqlite3.xU
1f440 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
1f450 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77  s invoked follow
1f460 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c  ing a successful
1f470 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28   insert..**.** (
1f480 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66  WARNING/TODO: If
1f490 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
1f4a0 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
1f4b0 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20   dynamically.** 
1f4c0 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20  allocated, then 
1f4d0 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20  ownership of P2 
1f4e0 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74  is transferred t
1f4f0 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72  o the pseudo-cur
1f500 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73  sor.** and regis
1f510 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65  ter P2 becomes e
1f520 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68  phemeral.  If th
1f530 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e  e cursor is chan
1f540 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75  ged, the.** valu
1f550 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  e of register P2
1f560 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67   will then chang
1f570 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  e.  Make sure th
1f580 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63  is does not.** c
1f590 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d  ause any problem
1f5a0 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  s.).**.** This i
1f5b0 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
1f5c0 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e  works on tables.
1f5d0 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
1f5e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
1f5f0 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f  for indices is O
1f600 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a  P_IdxInsert..*/.
1f610 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
1f620 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34  tInt P1 P2 P3 P4
1f630 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P5.**.** This w
1f640 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
1f650 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65  e OP_Insert exce
1f660 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  pt that the key 
1f670 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  is the.** intege
1f680 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20  r value P3, not 
1f690 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1f6a0 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20   integer stored 
1f6b0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
1f6c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  */.case OP_Inser
1f6d0 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  t: .case OP_Inse
1f6e0 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a  rtInt: {.  Mem *
1f6f0 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20  pData;       /* 
1f700 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
1f710 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65   data for the re
1f720 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
1f730 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b  ted */.  Mem *pK
1f740 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45  ey;        /* ME
1f750 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b  M cell holding k
1f760 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ey  for the reco
1f770 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79  rd */.  i64 iKey
1f780 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1f790 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f   integer ROWID o
1f7a0 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65  r key for the re
1f7b0 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
1f7c0 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ted */.  VdbeCur
1f7d0 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75  sor *pC;   /* Cu
1f7e0 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e  rsor to table in
1f7f0 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20  to which insert 
1f800 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  is written */.  
1f810 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  int nZero;      
1f820 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
1f830 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70  ero-bytes to app
1f840 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65  end */.  int see
1f850 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65  kResult;   /* Re
1f860 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65  sult of prior se
1f870 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53  ek or 0 if no US
1f880 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
1f890 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1f8a0 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62   *zDb;  /* datab
1f8b0 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ase name - used 
1f8c0 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  by the update ho
1f8d0 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ok */.  const ch
1f8e0 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62  ar *zTbl; /* Tab
1f8f0 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62  le name - used b
1f900 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f 6f  y the opdate hoo
1f910 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20  k */.  int op;  
1f920 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f           /* Opco
1f930 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f  de for update ho
1f940 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ok: SQLITE_UPDAT
1f950 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45  E or SQLITE_INSE
1f960 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d  RT */..  pData =
1f970 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
1f980 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1f990 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1f9a0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1f9b0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1f9c0 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20  lid(pData) );.  
1f9d0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1f9e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1f9f0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1fa00 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1fa10 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1fa20 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1fa30 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Reg==0 );.  asse
1fa40 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1fa50 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
1fa60 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61  ACE(pOp->p2, pDa
1fa70 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ta);..  if( pOp-
1fa80 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
1fa90 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d  rt ){.    pKey =
1faa0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1fab0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1fac0 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  y->flags & MEM_I
1fad0 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  nt );.    assert
1fae0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65  ( memIsValid(pKe
1faf0 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  y) );.    REGIST
1fb00 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
1fb10 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65  , pKey);.    iKe
1fb20 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  y = pKey->u.i;. 
1fb30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1fb40 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1fb50 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b  =OP_InsertInt );
1fb60 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d  .    iKey = pOp-
1fb70 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  >p3;.  }..  if( 
1fb80 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1fb90 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
1fba0 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
1fbb0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1fbc0 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
1fbd0 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79  lastRowid = iKey
1fbe0 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
1fbf0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
1fc00 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20  ){.    pData->z 
1fc10 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e  = 0;.    pData->
1fc20 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  n = 0;.  }else{.
1fc30 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74      assert( pDat
1fc40 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  a->flags & (MEM_
1fc50 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b  Blob|MEM_Str) );
1fc60 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c  .  }.  seekResul
1fc70 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  t = ((pOp->p5 & 
1fc80 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
1fc90 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
1fca0 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69  Result : 0);.  i
1fcb0 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
1fcc0 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
1fcd0 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d    nZero = pData-
1fce0 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73  >u.nZero;.  }els
1fcf0 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30  e{.    nZero = 0
1fd00 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42  ;.  }.  sqlite3B
1fd10 74 72 65 65 53 65 74 43 61 63 68 65 64 52 6f 77  treeSetCachedRow
1fd20 69 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  id(pC->pCursor, 
1fd30 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  0);.  rc = sqlit
1fd40 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
1fd50 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b  ->pCursor, 0, iK
1fd60 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
1fd80 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e  ata->z, pData->n
1fd90 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20  , nZero,.       
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46     pOp->p5 & OPF
1fdc0 4c 41 47 5f 41 50 50 45 4e 44 2c 20 73 65 65 6b  LAG_APPEND, seek
1fdd0 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43  Result.  );.  pC
1fde0 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1fdf0 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   0;.  pC->deferr
1fe00 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1fe10 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1fe20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
1fe30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
1fe40 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
1fe50 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
1fe60 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1fe70 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
1fe80 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
1fe90 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d  4.z ){.    zDb =
1fea0 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
1feb0 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62  ].zName;.    zTb
1fec0 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
1fed0 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70     op = ((pOp->p
1fee0 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
1fef0 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
1ff00 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e  DATE : SQLITE_IN
1ff10 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72  SERT);.    asser
1ff20 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1ff30 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  ;.    db->xUpdat
1ff40 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
1ff50 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44  pdateArg, op, zD
1ff60 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
1ff70 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1ff80 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
1ff90 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1ffa0 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50  ode: Delete P1 P
1ffb0 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 * P4 *.**.** D
1ffc0 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64  elete the record
1ffd0 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31   at which the P1
1ffe0 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65   cursor is curre
1fff0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
20000 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  *.** The cursor 
20010 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
20020 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65 72 20  nting at either 
20030 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
20040 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
20050 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
20060 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
20070 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
20080 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
20090 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
200a0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
200b0 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 20  ll be a no-op.  
200c0 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20 74  Hence it is OK t
200d0 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72 65  o delete.** a re
200e0 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  cord from within
200f0 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a 2a   an Next loop..*
20100 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
20110 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
20120 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74 68  of P2 is set, th
20130 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
20140 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
20150 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
20160 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a  wise not)..**.**
20170 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P1 must not be 
20180 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
20190 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65  t has to be a re
201a0 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a  al table with.**
201b0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a   multiple rows..
201c0 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
201d0 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69 74  ot NULL, then it
201e0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
201f0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 50  the table that P
20200 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67  1 is.** pointing
20210 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74 65   to.  The update
20220 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e   hook will be in
20230 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78 69  voked, if it exi
20240 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69 73  sts..** If P4 is
20250 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74   not NULL then t
20260 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
20270 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69  t have been posi
20280 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67 20  tioned.** using 
20290 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f  OP_NotFound prio
202a0 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68  r to invoking th
202b0 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  is opcode..*/.ca
202c0 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a  se OP_Delete: {.
202d0 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20 56 64    i64 iKey;.  Vd
202e0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
202f0 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 61 73 73   iKey = 0;.  ass
20300 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
20310 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
20320 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
20330 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
20340 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
20350 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
20360 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
20370 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64  ;  /* Only valid
20380 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73   for real tables
20390 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65  , no pseudotable
203a0 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68  s */..  /* If th
203b0 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e update-hook wi
203c0 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
203d0 65 74 20 69 4b 65 79 20 74 6f 20 74 68 65 20 72  et iKey to the r
203e0 6f 77 69 64 20 6f 66 20 74 68 65 0a 20 20 2a 2a  owid of the.  **
203f0 20 72 6f 77 20 62 65 69 6e 67 20 64 65 6c 65 74   row being delet
20400 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ed..  */.  if( d
20410 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
20420 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
20430 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
20440 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
20450 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
20460 77 69 64 49 73 56 61 6c 69 64 20 29 3b 20 20 2f  widIsValid );  /
20470 2a 20 6c 61 73 74 52 6f 77 69 64 20 73 65 74 20  * lastRowid set 
20480 62 79 20 70 72 65 76 69 6f 75 73 20 4f 50 5f 4e  by previous OP_N
20490 6f 74 46 6f 75 6e 64 20 2a 2f 0a 20 20 20 20 69  otFound */.    i
204a0 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f  Key = pC->lastRo
204b0 77 69 64 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54  wid;.  }..  /* T
204c0 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63  he OP_Delete opc
204d0 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  ode always follo
204e0 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73  ws an OP_NotExis
204f0 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72  ts or OP_Last or
20500 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  .  ** OP_Column 
20510 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  on the same tabl
20520 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e  e without any in
20530 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72 61 74  tervening operat
20540 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d  ions that.  ** m
20550 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76  ight move or inv
20560 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73  alidate the curs
20570 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72 73 6f  or.  Hence curso
20580 72 20 70 43 20 69 73 20 61 6c 77 61 79 73 20 70  r pC is always p
20590 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20  ointing.  ** to 
205a0 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20 64 65  the row to be de
205b0 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
205c0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
205d0 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74 69 6f  oveto() operatio
205e0 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20  n.  ** below is 
205f0 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61  always a no-op a
20600 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20  nd cannot fail. 
20610 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69 74 20   We will run it 
20620 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a  anyhow, though,.
20630 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20 61 67    ** to guard ag
20640 61 69 6e 73 74 20 66 75 74 75 72 65 20 63 68 61  ainst future cha
20650 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f 64 65  nges to the code
20660 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a   generator..  **
20670 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
20680 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
20690 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
206a0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
206b0 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e  eto(pC);.  if( N
206c0 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
206d0 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  OK) ) goto abort
206e0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
206f0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
20700 74 43 61 63 68 65 64 52 6f 77 69 64 28 70 43 2d  tCachedRowid(pC-
20710 3e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20  >pCursor, 0);.  
20720 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
20730 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72  eDelete(pC->pCur
20740 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  sor);.  pC->cach
20750 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
20760 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
20770 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
20780 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
20790 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
207a0 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
207b0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
207c0 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  & pOp->p4.z ){. 
207d0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
207e0 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
207f0 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20  >iDb].zName;.   
20800 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
20810 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
20820 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
20830 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
20840 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45  teArg, SQLITE_DE
20850 4c 45 54 45 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  LETE, zDb, zTbl,
20860 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65   iKey);.    asse
20870 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
20880 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
20890 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p2 & OPFLAG_NCH
208a0 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
208b0 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  e++;.  break;.}.
208c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
208d0 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a  Count * * * * *.
208e0 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
208f0 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  of the change co
20900 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20  unter is copied 
20910 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
20920 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65  handle.** change
20930 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e   counter (return
20940 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
20950 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65   calls to sqlite
20960 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a  3_changes())..**
20970 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e   Then the VMs in
20980 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f  ternal change co
20990 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20  unter resets to 
209a0 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73  0..** This is us
209b0 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
209c0 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20  ograms..*/.case 
209d0 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b  OP_ResetCount: {
209e0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
209f0 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
20a00 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e  nChange);.  p->n
20a10 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72  Change = 0;.  br
20a20 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
20a30 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32  e: RowData P1 P2
20a40 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
20a50 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
20a60 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   P2 the complete
20a70 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75   row data for cu
20a80 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
20a90 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
20aa0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
20ab0 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a  ta.  .** It is j
20ac0 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20  ust copied onto 
20ad0 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
20ae0 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
20af0 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
20b00 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
20b10 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
20b20 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
20b30 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
20b40 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
20b50 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
20b60 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
20b70 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
20b80 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
20b90 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20  owKey P1 P2 * * 
20ba0 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  *.**.** Write in
20bb0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
20bc0 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
20bd0 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50  key for cursor P
20be0 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e  1..** There is n
20bf0 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  o interpretation
20c00 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a   of the data.  .
20c10 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f  ** The key is co
20c20 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 33  pied onto the P3
20c30 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c   register exactl
20c40 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66  y as .** it is f
20c50 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61  ound in the data
20c60 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
20c70 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
20c80 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
20c90 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
20ca0 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
20cb0 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
20cc0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
20cd0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
20ce0 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61  se OP_RowKey:.ca
20cf0 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b  se OP_RowData: {
20d00 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
20d10 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
20d20 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20  Crsr;.  u32 n;. 
20d30 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75   i64 n64;..  pOu
20d40 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
20d50 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  2];.  memAboutTo
20d60 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
20d70 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74  ..  /* Note that
20d80 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44   RowKey and RowD
20d90 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65  ata are really e
20da0 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
20db0 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20  instruction */. 
20dc0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
20dd0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
20de0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
20df0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
20e00 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
20e10 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20   pC->isTable || 
20e20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
20e30 52 6f 77 4b 65 79 20 29 3b 0a 20 20 61 73 73 65  RowKey );.  asse
20e40 72 74 28 20 70 43 2d 3e 69 73 49 6e 64 65 78 20  rt( pC->isIndex 
20e50 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
20e60 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20  OP_RowData );.  
20e70 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
20e80 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e  .  assert( pC->n
20e90 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61  ullRow==0 );.  a
20ea0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
20eb0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
20ec0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
20ed0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43  ursor!=0 );.  pC
20ee0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
20ef0 72 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  r;.  assert( sql
20f00 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
20f10 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
20f20 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f  ..  /* The OP_Ro
20f30 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44  wKey and OP_RowD
20f40 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61  ata opcodes alwa
20f50 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74  ys follow OP_Not
20f60 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f  Exists or.  ** O
20f70 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74  P_Rewind/Op_Next
20f80 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65   with no interve
20f90 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  ning instruction
20fa0 73 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76  s that might inv
20fb0 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68 65  alidate.  ** the
20fc0 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20   cursor.  Hence 
20fd0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71  the following sq
20fe0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
20ff0 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 69 73 20  oveto() call is 
21000 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f  always.  ** a no
21010 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65 76 65  -op and can neve
21020 72 20 66 61 69 6c 2e 20 20 42 75 74 20 77 65 20  r fail.  But we 
21030 6c 65 61 76 65 20 69 74 20 69 6e 20 70 6c 61 63  leave it in plac
21040 65 20 61 73 20 61 20 73 61 66 65 74 79 2e 0a 20  e as a safety.. 
21050 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
21060 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
21070 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
21080 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
21090 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
210a0 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
210b0 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
210c0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
210d0 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 49 6e  ..  if( pC->isIn
210e0 64 65 78 20 29 7b 0a 20 20 20 20 61 73 73 65 72  dex ){.    asser
210f0 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20  t( !pC->isTable 
21100 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
21110 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
21120 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20  pCrsr, &n64);.  
21130 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
21140 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a  LITE_OK );    /*
21150 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
21160 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
21170 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
21180 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c    if( n64>db->aL
21190 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
211a0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
211b0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
211c0 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28  .    }.    n = (
211d0 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65  u32)n64;.  }else
211e0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
211f0 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
21200 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20  pCrsr, &n);.    
21210 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
21220 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44  TE_OK );    /* D
21230 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74  ataSize() cannot
21240 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28   fail */.    if(
21250 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   n>(u32)db->aLim
21260 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
21270 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
21280 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
21290 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 73     }.  }.  if( s
212a0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
212b0 77 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20 29 7b  w(pOut, n, 0) ){
212c0 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
212d0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20  ;.  }.  pOut->n 
212e0 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  = n;.  MemSetTyp
212f0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
21300 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d  Blob);.  if( pC-
21310 3e 69 73 49 6e 64 65 78 20 29 7b 0a 20 20 20 20  >isIndex ){.    
21320 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
21330 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e  eKey(pCrsr, 0, n
21340 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65  , pOut->z);.  }e
21350 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  lse{.    rc = sq
21360 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70  lite3BtreeData(p
21370 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
21380 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->z);.  }.  pOut
21390 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
213a0 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
213b0 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
213c0 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a  r cast to text *
213d0 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  /.  UPDATE_MAX_B
213e0 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
213f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
21400 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50  code: Rowid P1 P
21410 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74  2 * * *.**.** St
21420 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  ore in register 
21430 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
21440 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ich is the key o
21450 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
21460 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20  y that.** P1 is 
21470 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
21480 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e  to..**.** P1 can
21490 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72   be either an or
214a0 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20  dinary table or 
214b0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
214c0 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a    There used to.
214d0 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65  ** be a separate
214e0 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64   OP_VRowid opcod
214f0 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76  e for use with v
21500 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62  irtual tables, b
21510 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f  ut this.** one o
21520 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20  pcode now works 
21530 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74  for both table t
21540 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ypes..*/.case OP
21550 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  _Rowid: {       
21560 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
21570 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
21580 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
21590 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
215a0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
215b0 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
215c0 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
215d0 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  e;..  assert( pO
215e0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
215f0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21600 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21610 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21620 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
21630 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
21640 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
21650 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c  ;.  if( pC->null
21660 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  Row ){.    pOut-
21670 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
21680 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  l;.    break;.  
21690 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65  }else if( pC->de
216a0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a  ferredMoveto ){.
216b0 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65      v = pC->move
216c0 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65  toTarget;.#ifnde
216d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
216e0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c  RTUALTABLE.  }el
216f0 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62  se if( pC->pVtab
21700 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56  Cursor ){.    pV
21710 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43  tab = pC->pVtabC
21720 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
21730 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
21740 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
21750 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
21760 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72  >xRowid );.    r
21770 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  c = pModule->xRo
21780 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72  wid(pC->pVtabCur
21790 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 69 6d  sor, &v);.    im
217a0 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70  portVtabErrMsg(p
217b0 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66  , pVtab);.#endif
217c0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
217d0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
217e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
217f0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
21800 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
21810 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
21820 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20  rMoveto(pC);.   
21830 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
21840 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
21850 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72  r;.    if( pC->r
21860 6f 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20  owidIsValid ){. 
21870 20 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73       v = pC->las
21880 74 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73  tRowid;.    }els
21890 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
218a0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
218b0 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
218c0 76 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  v);.      assert
218d0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
218e0 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f  );  /* Always so
218f0 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73   because of Curs
21900 6f 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65  orMoveto() above
21910 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   */.    }.  }.  
21920 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
21930 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
21940 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
21950 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
21960 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
21970 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
21980 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
21990 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
219a0 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
219b0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
219c0 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
219d0 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
219e0 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
219f0 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
21a00 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
21a10 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
21a20 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21a30 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
21a40 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21a50 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21a60 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21a70 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
21a80 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
21a90 6c 69 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  lid = 0;.  if( p
21aa0 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20  C->pCursor ){.  
21ab0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
21ac0 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  earCursor(pC->pC
21ad0 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
21ae0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21af0 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20  e: Last P1 P2 * 
21b00 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
21b10 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
21b20 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
21b30 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
21b40 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
21b50 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c  l refer to the l
21b60 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
21b70 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
21b80 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
21b90 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
21ba0 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
21bb0 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
21bc0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
21bd0 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
21be0 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
21bf0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
21c00 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
21c10 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
21c20 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
21c30 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
21c40 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
21c50 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
21c60 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
21c70 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
21c80 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
21c90 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
21ca0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
21cb0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
21cc0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21cd0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
21ce0 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
21cf0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
21d00 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a  if( pCrsr==0 ){.
21d10 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d      res = 1;.  }
21d20 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
21d30 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
21d40 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
21d50 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
21d60 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
21d70 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
21d80 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 0;.  pC->rowid
21d90 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
21da0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
21db0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
21dc0 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  if( pOp->p2>0 &&
21dd0 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
21de0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
21df0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
21e00 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
21e10 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
21e20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
21e30 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
21e40 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
21e50 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
21e60 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
21e70 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
21e80 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
21e90 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
21ea0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
21eb0 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
21ec0 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
21ed0 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
21ee0 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
21ef0 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
21f00 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
21f10 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
21f20 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
21f30 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
21f40 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
21f50 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
21f60 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
21f70 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
21f80 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
21f90 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
21fa0 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
21fb0 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
21fc0 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
21fd0 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
21fe0 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
21ff0 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
22000 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
22010 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
22020 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
22030 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
22040 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
22050 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
22060 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
22070 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
22080 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
22090 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
220a0 54 53 54 41 54 55 53 5f 53 4f 52 54 2d 31 5d 2b  TSTATUS_SORT-1]+
220b0 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
220c0 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
220d0 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
220e0 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
220f0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
22100 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
22110 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
22120 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
22130 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
22140 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
22150 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
22160 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
22170 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
22180 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
22190 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
221a0 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a  and P2>0, then j
221b0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
221c0 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20  to P2..** If P2 
221d0 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74  is 0 or if the t
221e0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
221f0 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
22200 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
22210 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
22220 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
22230 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20  e OP_Rewind: {  
22240 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
22250 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
22260 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
22270 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
22280 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
22290 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
222a0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
222b0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
222c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
222d0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 72  rt( pC!=0 );.  r
222e0 65 73 20 3d 20 31 3b 0a 20 20 69 66 28 20 28 70  es = 1;.  if( (p
222f0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
22300 6f 72 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63  or)!=0 ){.    rc
22310 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
22320 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  irst(pCrsr, &res
22330 29 3b 0a 20 20 20 20 70 43 2d 3e 61 74 46 69 72  );.    pC->atFir
22340 73 74 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30  st = res==0 ?1:0
22350 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
22360 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
22370 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
22380 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
22390 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
223a0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  Valid = 0;.  }. 
223b0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
223c0 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
223d0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
223e0 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
223f0 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
22400 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
22410 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
22420 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
22430 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 50 35  ext P1 P2 * * P5
22440 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63  .**.** Advance c
22450 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
22460 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
22470 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20  e next key/data 
22480 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
22490 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
224a0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
224b0 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70  more key/value p
224c0 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
224d0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
224e0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
224f0 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
22500 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e  the cursor advan
22510 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75  ce was successfu
22520 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
22530 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
22540 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
22550 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
22560 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
22570 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
22580 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
22590 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
225a0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
225b0 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
225c0 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
225d0 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
225e0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
225f0 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
22600 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a   See also: Prev.
22610 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
22620 65 76 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a  ev P1 P2 * * P5.
22630 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75  **.** Back up cu
22640 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
22650 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
22660 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61   previous key/da
22670 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
22680 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
22690 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  .  If there is n
226a0 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76  o previous key/v
226b0 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
226c0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
226d0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
226e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
226f0 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
22700 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63   backup was succ
22710 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
22720 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
22730 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  2..**.** The P1 
22740 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
22750 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
22760 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
22770 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ble..**.** If P5
22780 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
22790 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
227a0 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
227b0 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
227c0 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
227d0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
227e0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
227f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
22800 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
22810 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
22820 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
22830 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
22840 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
22850 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
22860 74 20 72 65 73 3b 0a 0a 20 20 43 48 45 43 4b 5f  t res;..  CHECK_
22870 46 4f 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  FOR_INTERRUPT;. 
22880 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22890 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
228a0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
228b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d  ssert( pOp->p5<=
228c0 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f  ArraySize(p->aCo
228d0 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d  unter) );.  pC =
228e0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
228f0 31 5d 3b 0a 20 20 69 66 28 20 70 43 3d 3d 30 20  1];.  if( pC==0 
22900 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 20 20 2f  ){.    break;  /
22910 2a 20 53 65 65 20 74 69 63 6b 65 74 20 23 32 32  * See ticket #22
22920 37 33 20 2a 2f 0a 20 20 7d 0a 20 20 70 43 72 73  73 */.  }.  pCrs
22930 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
22940 0a 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20  .  if( pCrsr==0 
22950 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  ){.    pC->nullR
22960 6f 77 20 3d 20 31 3b 0a 20 20 20 20 62 72 65 61  ow = 1;.    brea
22970 6b 3b 0a 20 20 7d 0a 20 20 72 65 73 20 3d 20 31  k;.  }.  res = 1
22980 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22990 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
229a0 30 20 29 3b 0a 20 20 72 63 20 3d 20 70 4f 70 2d  0 );.  rc = pOp-
229b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 78 74  >opcode==OP_Next
229c0 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e   ? sqlite3BtreeN
229d0 65 78 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ext(pCrsr, &res)
229e0 20 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   :.             
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a00 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
22a10 76 69 6f 75 73 28 70 43 72 73 72 2c 20 26 72 65  vious(pCrsr, &re
22a20 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  s);.  pC->nullRo
22a30 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70  w = (u8)res;.  p
22a40 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
22a50 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
22a60 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
22a70 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
22a80 20 31 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   1;.    if( pOp-
22a90 3e 70 35 20 29 20 70 2d 3e 61 43 6f 75 6e 74 65  >p5 ) p->aCounte
22aa0 72 5b 70 4f 70 2d 3e 70 35 2d 31 5d 2b 2b 3b 0a  r[pOp->p5-1]++;.
22ab0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
22ac0 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  ST.    sqlite3_s
22ad0 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
22ae0 65 6e 64 69 66 0a 20 20 7d 0a 20 20 70 43 2d 3e  endif.  }.  pC->
22af0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
22b00 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
22b10 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
22b20 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  rt P1 P2 P3 * P5
22b30 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
22b40 50 32 20 68 6f 6c 64 73 20 61 20 53 51 4c 20 69  P2 holds a SQL i
22b50 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
22b60 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
22b70 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
22b80 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
22b90 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
22ba0 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
22bb0 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
22bc0 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
22bd0 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61  l..**.** P3 is a
22be0 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69   flag that provi
22bf0 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68  des a hint to th
22c00 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74  e b-tree layer t
22c10 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65  hat this.** inse
22c20 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
22c30 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
22c40 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
22c50 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
22c60 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68  for indices.  Th
22c70 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
22c80 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
22c90 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73  tables is OP_Ins
22ca0 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ert..*/.case OP_
22cb0 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
22cc0 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
22cd0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22ce0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
22cf0 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  r;.  int nKey;. 
22d00 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
22d10 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  y;..  assert( pO
22d20 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22d30 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22d40 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22d50 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22d60 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
22d70 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
22d80 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
22d90 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
22da0 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43  MEM_Blob );.  pC
22db0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
22dc0 72 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  r;.  if( ALWAYS(
22dd0 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
22de0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
22df0 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 20 20 72  able==0 );.    r
22e00 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
22e10 49 6e 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63  In2);.    if( rc
22e20 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
22e30 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32       nKey = pIn2
22e40 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20  ->n;.      zKey 
22e50 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20  = pIn2->z;.     
22e60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
22e70 65 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20  eeInsert(pCrsr, 
22e80 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20  zKey, nKey, "", 
22e90 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a  0, 0, pOp->p3, .
22ea0 20 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d            ((pOp-
22eb0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
22ec0 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
22ed0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
22ee0 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ).      );.     
22ef0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
22f00 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
22f10 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68  ;.      pC->cach
22f20 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
22f30 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d  STALE;.    }.  }
22f40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
22f50 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
22f60 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
22f70 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
22f80 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
22f90 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
22fa0 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
22fb0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
22fc0 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
22fd0 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
22fe0 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
22ff0 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
23000 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
23010 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
23020 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
23030 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
23040 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
23050 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
23060 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
23070 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
23080 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
23090 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
230a0 32 2b 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d  2+pOp->p3<=p->nM
230b0 65 6d 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  em+1 );.  assert
230c0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
230d0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
230e0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
230f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23100 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23110 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
23120 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66 28 20  >pCursor;.  if( 
23130 41 4c 57 41 59 53 28 70 43 72 73 72 21 3d 30 29  ALWAYS(pCrsr!=0)
23140 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
23150 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
23160 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
23170 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
23180 20 20 20 20 72 2e 66 6c 61 67 73 20 3d 20 30 3b      r.flags = 0;
23190 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
231a0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69  Mem[pOp->p2];.#i
231b0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
231c0 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
231d0 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
231e0 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
231f0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
23200 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
23210 64 69 66 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  dif.    rc = sql
23220 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
23230 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
23240 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
23250 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
23260 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
23270 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
23280 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
23290 28 70 43 72 73 72 29 3b 0a 20 20 20 20 7d 0a 20  (pCrsr);.    }. 
232a0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
232b0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
232c0 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   );.    pC->cach
232d0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
232e0 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 62 72 65  STALE;.  }.  bre
232f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
23300 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
23310 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
23320 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
23330 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
23340 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74  hich is the last
23350 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65   entry in the re
23360 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65  cord at.** the e
23370 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  nd of the index 
23380 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  key pointed to b
23390 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68  y cursor P1.  Th
233a0 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c  is integer shoul
233b0 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69  d be.** the rowi
233c0 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  d of the table e
233d0 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68  ntry to which th
233e0 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70  is index entry p
233f0 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  oints..**.** See
23400 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61   also: Rowid, Ma
23410 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73  keRecord..*/.cas
23420 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b  e OP_IdxRowid: {
23430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23440 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
23450 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
23460 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72  pCrsr;.  VdbeCur
23470 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72  sor *pC;.  i64 r
23480 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28  owid;..  assert(
23490 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
234a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
234b0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
234c0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
234d0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
234e0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
234f0 70 43 75 72 73 6f 72 3b 0a 20 20 70 4f 75 74 2d  pCursor;.  pOut-
23500 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
23510 6c 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  l;.  if( ALWAYS(
23520 70 43 72 73 72 21 3d 30 29 20 29 7b 0a 20 20 20  pCrsr!=0) ){.   
23530 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
23540 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
23550 29 3b 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  );.    if( NEVER
23560 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  (rc) ) goto abor
23570 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
23580 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
23590 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
235a0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
235b0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
235c0 29 3b 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  );.    if( !pC->
235d0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
235e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
235f0 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43  eIdxRowid(db, pC
23600 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  rsr, &rowid);.  
23610 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
23620 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
23630 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
23640 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
23650 7d 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e  }.      pOut->u.
23660 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20  i = rowid;.     
23670 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
23680 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  EM_Int;.    }.  
23690 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
236a0 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50   Opcode: IdxGE P
236b0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
236c0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
236d0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
236e0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
236f0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
23700 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
23710 20 6f 6d 69 74 73 20 74 68 65 20 52 4f 57 49 44   omits the ROWID
23720 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
23730 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
23740 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
23750 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
23760 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
23770 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 52  , ignoring the R
23780 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
23790 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
237a0 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
237b0 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
237c0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
237d0 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
237e0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
237f0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
23800 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
23810 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
23820 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
23830 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 74 68  non-zero then th
23840 65 20 6b 65 79 20 76 61 6c 75 65 20 69 73 20 69  e key value is i
23850 6e 63 72 65 61 73 65 64 20 62 79 20 61 6e 20 65  ncreased by an e
23860 70 73 69 6c 6f 6e 20 0a 2a 2a 20 70 72 69 6f 72  psilon .** prior
23870 20 74 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   to the comparis
23880 6f 6e 2e 20 20 54 68 69 73 20 6d 61 6b 65 20 74  on.  This make t
23890 68 65 20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c  he opcode work l
238a0 69 6b 65 20 49 64 78 47 54 20 65 78 63 65 70 74  ike IdxGT except
238b0 0a 2a 2a 20 74 68 61 74 20 69 66 20 74 68 65 20  .** that if the 
238c0 6b 65 79 20 66 72 6f 6d 20 72 65 67 69 73 74 65  key from registe
238d0 72 20 50 33 20 69 73 20 61 20 70 72 65 66 69 78  r P3 is a prefix
238e0 20 6f 66 20 74 68 65 20 6b 65 79 20 69 6e 20 74   of the key in t
238f0 68 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68  he cursor,.** th
23900 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
23910 65 20 77 68 65 72 65 61 73 20 69 74 20 77 6f 75  e whereas it wou
23920 6c 64 20 62 65 20 74 72 75 65 20 77 69 74 68 20  ld be true with 
23930 49 64 78 47 54 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  IdxGT..*/./* Opc
23940 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32  ode: IdxLT P1 P2
23950 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
23960 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
23970 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
23980 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
23990 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
239a0 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
239b0 74 73 20 74 68 65 20 52 4f 57 49 44 2e 20 20 43  ts the ROWID.  C
239c0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
239d0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
239e0 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
239f0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
23a00 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
23a10 6e 6f 72 69 6e 67 20 74 68 65 20 52 4f 57 49 44  noring the ROWID
23a20 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
23a30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
23a40 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
23a50 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
23a60 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
23a70 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
23a80 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
23a90 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
23aa0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
23ab0 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
23ac0 7a 65 72 6f 20 74 68 65 6e 20 74 68 65 20 6b 65  zero then the ke
23ad0 79 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  y value is incre
23ae0 61 73 65 64 20 62 79 20 61 6e 20 65 70 73 69 6c  ased by an epsil
23af0 6f 6e 20 70 72 69 6f 72 20 0a 2a 2a 20 74 6f 20  on prior .** to 
23b00 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
23b10 20 54 68 69 73 20 6d 61 6b 65 73 20 74 68 65 20   This makes the 
23b20 6f 70 63 6f 64 65 20 77 6f 72 6b 20 6c 69 6b 65  opcode work like
23b30 20 49 64 78 4c 45 2e 0a 2a 2f 0a 63 61 73 65 20   IdxLE..*/.case 
23b40 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
23b50 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
23b60 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 7b 20 20  se OP_IdxGE: {  
23b70 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
23b80 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
23b90 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
23ba0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
23bb0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
23bc0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23bd0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
23be0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
23bf0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
23c00 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
23c10 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
23c20 64 65 72 65 64 20 29 3b 0a 20 20 69 66 28 20 41  dered );.  if( A
23c30 4c 57 41 59 53 28 70 43 2d 3e 70 43 75 72 73 6f  LWAYS(pC->pCurso
23c40 72 21 3d 30 29 20 29 7b 0a 20 20 20 20 61 73 73  r!=0) ){.    ass
23c50 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
23c60 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
23c70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23c80 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
23c90 3d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =1 );.    assert
23ca0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
23cb0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 72  4_INT32 );.    r
23cc0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
23cd0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
23ce0 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
23cf0 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 69 66 28  p->p4.i;.    if(
23d00 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
23d10 20 20 72 2e 66 6c 61 67 73 20 3d 20 55 4e 50 41    r.flags = UNPA
23d20 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20 7c 20 55  CKED_INCRKEY | U
23d30 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45 5f 52  NPACKED_IGNORE_R
23d40 4f 57 49 44 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OWID;.    }else{
23d50 0a 20 20 20 20 20 20 72 2e 66 6c 61 67 73 20 3d  .      r.flags =
23d60 20 55 4e 50 41 43 4b 45 44 5f 49 47 4e 4f 52 45   UNPACKED_IGNORE
23d70 5f 52 4f 57 49 44 3b 0a 20 20 20 20 7d 0a 20 20  _ROWID;.    }.  
23d80 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
23d90 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
23da0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
23db0 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
23dc0 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
23dd0 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
23de0 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
23df0 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
23e00 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
23e10 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
23e20 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29  re(pC, &r, &res)
23e30 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  ;.    if( pOp->o
23e40 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
23e50 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 2d  ){.      res = -
23e60 72 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  res;.    }else{.
23e70 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
23e80 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
23e90 78 47 45 20 29 3b 0a 20 20 20 20 20 20 72 65 73  xGE );.      res
23ea0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
23eb0 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20 20  ( res>0 ){.     
23ec0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
23ed0 31 20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1 ;.    }.  }.  
23ee0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23ef0 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
23f00 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
23f10 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
23f20 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
23f30 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
23f40 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
23f50 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
23f60 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
23f70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
23f80 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
23f90 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
23fa0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
23fb0 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
23fc0 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
23fd0 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
23fe0 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
23ff0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
24000 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
24010 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
24020 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
24030 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
24040 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
24050 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
24060 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
24070 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
24080 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
24090 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
240a0 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
240b0 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
240c0 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
240d0 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
240e0 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
240f0 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
24100 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
24110 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
24120 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
24130 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
24140 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
24150 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
24160 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
24170 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
24180 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
24190 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
241a0 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
241b0 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
241c0 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
241d0 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
241e0 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
241f0 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
24200 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
24210 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
24220 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
24230 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
24240 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
24250 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
24260 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
24270 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
24280 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
24290 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70   {     /* out2-p
242a0 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
242b0 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
242c0 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70   iCnt;.  Vdbe *p
242d0 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Vdbe;.  int iDb;
242e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
242f0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
24300 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20  E.  iCnt = 0;.  
24310 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56  for(pVdbe=db->pV
24320 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62  dbe; pVdbe; pVdb
24330 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74  e = pVdbe->pNext
24340 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62 65  ){.    if( pVdbe
24350 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
24360 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65  GIC_RUN && pVdbe
24370 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32  ->inVtabMethod<2
24380 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30   && pVdbe->pc>=0
24390 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b   ){.      iCnt++
243a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73  ;.    }.  }.#els
243b0 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 61  e.  iCnt = db->a
243c0 63 74 69 76 65 56 64 62 65 43 6e 74 3b 0a 23 65  ctiveVdbeCnt;.#e
243d0 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ndif.  pOut->fla
243e0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
243f0 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a 20   if( iCnt>1 ){. 
24400 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
24410 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72  OCKED;.    p->er
24420 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41  rorAction = OE_A
24430 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  bort;.  }else{. 
24440 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33     iDb = pOp->p3
24450 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 43  ;.    assert( iC
24460 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73 73  nt==1 );.    ass
24470 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
24480 73 6b 20 26 20 28 31 3c 3c 69 44 62 29 29 21 3d  sk & (1<<iDb))!=
24490 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 );.    rc = sq
244a0 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61  lite3BtreeDropTa
244b0 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  ble(db->aDb[iDb]
244c0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26  .pBt, pOp->p1, &
244d0 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75  iMoved);.    pOu
244e0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
244f0 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
24500 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e  i = iMoved;.#ifn
24510 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
24520 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69  AUTOVACUUM.    i
24530 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
24540 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b   && iMoved!=0 ){
24550 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
24560 6f 74 50 61 67 65 4d 6f 76 65 64 28 26 64 62 2d  otPageMoved(&db-
24570 3e 61 44 62 5b 69 44 62 5d 2c 20 69 4d 6f 76 65  >aDb[iDb], iMove
24580 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  d, pOp->p1);.   
24590 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e     resetSchemaOn
245a0 46 61 75 6c 74 20 3d 20 31 3b 0a 20 20 20 20 7d  Fault = 1;.    }
245b0 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
245c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
245d0 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50  e: Clear P1 P2 P
245e0 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  3.**.** Delete a
245f0 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  ll contents of t
24600 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
24610 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
24620 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e   root page.** in
24630 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
24640 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
24650 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20  1.  But, unlike 
24660 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a  Destroy, do not.
24670 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61  ** remove the ta
24680 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f  ble or index fro
24690 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
246a0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  ile..**.** The t
246b0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
246c0 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
246d0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
246e0 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P2==0.  If.** P
246f0 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  2==1 then the ta
24700 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
24710 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
24720 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
24730 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
24740 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
24750 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
24760 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
24770 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
24780 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  the P3 value is 
24790 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
247a0 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65  he table referre
247b0 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a  d to must be an.
247c0 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20  ** intkey table 
247d0 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e  (an SQL table, n
247e0 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e  ot an index). In
247f0 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72   this case the r
24800 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f  ow change .** co
24810 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
24820 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
24830 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
24840 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
24850 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69  red. .** If P3 i
24860 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
24870 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ero, then the va
24880 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lue stored in re
24890 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
248a0 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64  also incremented
248b0 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
248c0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
248d0 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
248e0 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
248f0 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61  o: Destroy.*/.ca
24900 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20  se OP_Clear: {. 
24910 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a   int nChange;. .
24920 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20    nChange = 0;. 
24930 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72   assert( (p->btr
24940 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c 70 4f 70  eeMask & (1<<pOp
24950 2d 3e 70 32 29 29 21 3d 30 20 29 3b 0a 20 20 72  ->p2))!=0 );.  r
24960 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24970 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
24980 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
24990 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
249a0 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
249b0 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
249c0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
249d0 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
249e0 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
249f0 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
24a00 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
24a10 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
24a20 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
24a30 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
24a40 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
24a50 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65  >p3]);.      aMe
24a60 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
24a70 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
24a80 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
24a90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
24aa0 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20  teTable P1 P2 * 
24ab0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  * *.**.** Alloca
24ac0 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
24ad0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
24ae0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
24af0 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
24b00 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
24b10 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
24b20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
24b30 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
24b40 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
24b50 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
24b60 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
24b70 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
24b80 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
24b90 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
24ba0 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
24bb0 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
24bc0 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
24bd0 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
24be0 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
24bf0 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
24c00 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
24c10 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
24c20 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
24c30 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
24c40 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
24c50 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
24c60 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
24c70 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
24c80 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
24c90 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61   index in the ma
24ca0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
24cb0 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
24cc0 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79  the.** auxiliary
24cd0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
24ce0 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e  f P1==1 or in an
24cf0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
24d00 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20  se if.** P1>1.  
24d10 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70  Write the root p
24d20 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
24d30 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f  e new table into
24d40 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
24d50 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d  .**.** See docum
24d60 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43  entation on OP_C
24d70 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61  reateTable for a
24d80 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
24d90 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
24da0 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20  P_CreateIndex:  
24db0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
24dc0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
24dd0 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
24de0 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
24df0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
24e00 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f  se */.  int pgno
24e10 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20  ;.  int flags;. 
24e20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e   Db *pDb;..  pgn
24e30 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
24e40 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24e50 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
24e60 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e  ;.  assert( (p->
24e70 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c 3c  btreeMask & (1<<
24e80 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29 3b 0a  pOp->p1))!=0 );.
24e90 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
24ea0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24eb0 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
24ec0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   );.  if( pOp->o
24ed0 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65  pcode==OP_Create
24ee0 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
24ef0 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
24f00 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61  TKEY; */.    fla
24f10 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
24f20 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  Y;.  }else{.    
24f30 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c  flags = BTREE_BL
24f40 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20  OBKEY;.  }.  rc 
24f50 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
24f60 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70  eateTable(pDb->p
24f70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73  Bt, &pgno, flags
24f80 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
24f90 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a   pgno;.  break;.
24fa0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
24fb0 72 73 65 53 63 68 65 6d 61 20 50 31 20 50 32 20  rseSchema P1 P2 
24fc0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
24fd0 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
24fe0 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
24ff0 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
25000 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
25010 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
25020 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
25030 73 65 20 50 34 2e 20 20 50 32 20 69 73 20 74 68  se P4.  P2 is th
25040 65 20 22 66 6f 72 63 65 22 20 66 6c 61 67 2e 20  e "force" flag. 
25050 20 20 41 6c 77 61 79 73 20 64 6f 0a 2a 2a 20 74    Always do.** t
25060 68 65 20 70 61 72 73 69 6e 67 20 69 66 20 50 32  he parsing if P2
25070 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 50 32   is true.  If P2
25080 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20   is false, then 
25090 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
250a0 61 0a 2a 2a 20 6e 6f 2d 6f 70 20 69 66 20 74 68  a.** no-op if th
250b0 65 20 73 63 68 65 6d 61 20 69 73 20 6e 6f 74 20  e schema is not 
250c0 63 75 72 72 65 6e 74 6c 79 20 6c 6f 61 64 65 64  currently loaded
250d0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
250e0 73 2c 20 69 66 20 50 32 0a 2a 2a 20 69 73 20 66  s, if P2.** is f
250f0 61 6c 73 65 2c 20 74 68 65 20 53 51 4c 49 54 45  alse, the SQLITE
25100 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 69 73  _MASTER table is
25110 20 6f 6e 6c 79 20 70 61 72 73 65 64 20 69 66 20   only parsed if 
25120 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 0a  the rest of the.
25130 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 61 6c 72  ** schema is alr
25140 65 61 64 79 20 6c 6f 61 64 65 64 20 69 6e 74 6f  eady loaded into
25150 20 74 68 65 20 73 79 6d 62 6f 6c 20 74 61 62 6c   the symbol tabl
25160 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
25170 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
25180 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74   parser to creat
25190 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
251a0 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e  machine,.** then
251b0 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69   runs the new vi
251c0 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
251d0 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d  It is thus a re-
251e0 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a  entrant opcode..
251f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65  */.case OP_Parse
25200 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20  Schema: {.  int 
25210 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  iDb;.  const cha
25220 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68  r *zMaster;.  ch
25230 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74  ar *zSql;.  Init
25240 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a  Data initData;..
25250 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
25260 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
25270 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
25280 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 70 4f 70   );..  /* If pOp
25290 2d 3e 70 32 20 69 73 20 30 2c 20 74 68 65 6e 20  ->p2 is 0, then 
252a0 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 62  this opcode is b
252b0 65 69 6e 67 20 65 78 65 63 75 74 65 64 20 74 6f  eing executed to
252c0 20 72 65 61 64 20 61 0a 20 20 2a 2a 20 73 69 6e   read a.  ** sin
252d0 67 6c 65 20 72 6f 77 2c 20 66 6f 72 20 65 78 61  gle row, for exa
252e0 6d 70 6c 65 20 74 68 65 20 72 6f 77 20 63 6f 72  mple the row cor
252f0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20  responding to a 
25300 6e 65 77 20 69 6e 64 65 78 0a 20 20 2a 2a 20 63  new index.  ** c
25310 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 56  reated by this V
25320 44 42 45 2c 20 66 72 6f 6d 20 74 68 65 20 73 71  DBE, from the sq
25330 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
25340 65 2e 20 49 74 20 6f 6e 6c 79 0a 20 20 2a 2a 20  e. It only.  ** 
25350 64 6f 65 73 20 74 68 69 73 20 69 66 20 74 68 65  does this if the
25360 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 69   corresponding i
25370 6e 2d 6d 65 6d 6f 72 79 20 73 63 68 65 6d 61 20  n-memory schema 
25380 69 73 20 63 75 72 72 65 6e 74 6c 79 0a 20 20 2a  is currently.  *
25390 2a 20 6c 6f 61 64 65 64 2e 20 4f 74 68 65 72 77  * loaded. Otherw
253a0 69 73 65 2c 20 74 68 65 20 6e 65 77 20 69 6e 64  ise, the new ind
253b0 65 78 20 64 65 66 69 6e 69 74 69 6f 6e 20 63 61  ex definition ca
253c0 6e 20 62 65 20 6c 6f 61 64 65 64 20 61 6c 6f 6e  n be loaded alon
253d0 67 0a 20 20 2a 2a 20 77 69 74 68 20 74 68 65 20  g.  ** with the 
253e0 72 65 73 74 20 6f 66 20 74 68 65 20 73 63 68 65  rest of the sche
253f0 6d 61 20 77 68 65 6e 20 69 74 20 69 73 20 72 65  ma when it is re
25400 71 75 69 72 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  quired..  **.  *
25410 2a 20 41 6c 74 68 6f 75 67 68 20 74 68 65 20 6d  * Although the m
25420 75 74 65 78 20 6f 6e 20 74 68 65 20 42 74 53 68  utex on the BtSh
25430 61 72 65 64 20 6f 62 6a 65 63 74 20 74 68 61 74  ared object that
25440 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a   corresponds to.
25450 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 69 44    ** database iD
25460 62 20 28 74 68 65 20 64 61 74 61 62 61 73 65 20  b (the database 
25470 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73  containing the s
25480 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
25490 6c 65 0a 20 20 2a 2a 20 72 65 61 64 20 62 79 20  le.  ** read by 
254a0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
254b0 29 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 68  ) is currently h
254c0 65 6c 64 2c 20 69 74 20 69 73 20 6e 65 63 65 73  eld, it is neces
254d0 73 61 72 79 20 74 6f 0a 20 20 2a 2a 20 6f 62 74  sary to.  ** obt
254e0 61 69 6e 20 74 68 65 20 6d 75 74 65 78 65 73 20  ain the mutexes 
254f0 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  on all attached 
25500 64 61 74 61 62 61 73 65 73 20 62 65 66 6f 72 65  databases before
25510 20 63 68 65 63 6b 69 6e 67 20 69 66 0a 20 20 2a   checking if.  *
25520 2a 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20  * the schema of 
25530 69 44 62 20 69 73 20 6c 6f 61 64 65 64 2e 20 54  iDb is loaded. T
25540 68 69 73 20 69 73 20 62 65 63 61 75 73 65 2c 20  his is because, 
25550 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 0a  at the start of.
25560 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33    ** the sqlite3
25570 5f 65 78 65 63 28 29 20 63 61 6c 6c 20 62 65 6c  _exec() call bel
25580 6f 77 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20  ow, SQLite will 
25590 69 6e 76 6f 6b 65 20 0a 20 20 2a 2a 20 73 71 6c  invoke .  ** sql
255a0 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c  ite3BtreeEnterAl
255b0 6c 28 29 2e 20 49 66 20 61 6c 6c 20 6d 75 74 65  l(). If all mute
255c0 78 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 72 65  xes are not alre
255d0 61 64 79 20 68 65 6c 64 2c 20 74 68 65 0a 20 20  ady held, the.  
255e0 2a 2a 20 69 44 62 20 6d 75 74 65 78 20 6d 61 79  ** iDb mutex may
255f0 20 62 65 20 74 65 6d 70 6f 72 61 72 69 6c 79 20   be temporarily 
25600 72 65 6c 65 61 73 65 64 20 74 6f 20 61 76 6f 69  released to avoi
25610 64 20 64 65 61 64 6c 6f 63 6b 2e 20 49 66 20 0a  d deadlock. If .
25620 20 20 2a 2a 20 74 68 69 73 20 68 61 70 70 65 6e    ** this happen
25630 73 2c 20 74 68 65 6e 20 73 6f 6d 65 20 6f 74 68  s, then some oth
25640 65 72 20 74 68 72 65 61 64 20 6d 61 79 20 64 65  er thread may de
25650 6c 65 74 65 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  lete the in-memo
25660 72 79 20 0a 20 20 2a 2a 20 73 63 68 65 6d 61 20  ry .  ** schema 
25670 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62 20  of database iDb 
25680 62 65 66 6f 72 65 20 74 68 65 20 53 51 4c 20 73  before the SQL s
25690 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2e 20 54  tatement runs. T
256a0 68 65 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20 77  he schema.  ** w
256b0 69 6c 6c 20 6e 6f 74 20 62 65 20 72 65 6c 6f 61  ill not be reloa
256c0 64 65 64 20 62 65 63 75 61 73 65 20 74 68 65 20  ded becuase the 
256d0 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 66 6c  db->init.busy fl
256e0 61 67 20 69 73 20 73 65 74 2e 20 54 68 69 73 0a  ag is set. This.
256f0 20 20 2a 2a 20 63 61 6e 20 72 65 73 75 6c 74 20    ** can result 
25700 69 6e 20 61 20 22 6e 6f 20 73 75 63 68 20 74 61  in a "no such ta
25710 62 6c 65 3a 20 73 71 6c 69 74 65 5f 6d 61 73 74  ble: sqlite_mast
25720 65 72 22 20 6f 72 20 22 6d 61 6c 66 6f 72 6d 65  er" or "malforme
25730 64 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  d.  ** database 
25740 73 63 68 65 6d 61 22 20 65 72 72 6f 72 20 62 65  schema" error be
25750 69 6e 67 20 72 65 74 75 72 6e 65 64 20 74 6f 20  ing returned to 
25760 74 68 65 20 75 73 65 72 2e 0a 20 20 2a 2f 0a 20  the user..  */. 
25770 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
25780 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28  BtreeHoldsMutex(
25790 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
257a0 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74  ) );.  sqlite3Bt
257b0 72 65 65 45 6e 74 65 72 41 6c 6c 28 64 62 29 3b  reeEnterAll(db);
257c0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 7c  .  if( pOp->p2 |
257d0 7c 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  | DbHasProperty(
257e0 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65  db, iDb, DB_Sche
257f0 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20 20  maLoaded) ){.   
25800 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d   zMaster = SCHEM
25810 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20  A_TABLE(iDb);.  
25820 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20    initData.db = 
25830 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  db;.    initData
25840 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .iDb = pOp->p1;.
25850 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45      initData.pzE
25860 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72  rrMsg = &p->zErr
25870 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20  Msg;.    zSql = 
25880 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
25890 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43  b,.       "SELEC
258a0 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65  T name, rootpage
258b0 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e  , sql FROM '%q'.
258c0 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45  %s WHERE %s ORDE
258d0 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20  R BY rowid",.   
258e0 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d      db->aDb[iDb]
258f0 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c  .zName, zMaster,
25900 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
25910 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a   if( zSql==0 ){.
25920 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
25930 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c  E_NOMEM;.    }el
25940 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
25950 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d  ( db->init.busy=
25960 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 );.      db->
25970 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20  init.busy = 1;. 
25980 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63       initData.rc
25990 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
259a0 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d      assert( !db-
259b0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
259c0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
259d0 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
259e0 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  l, sqlite3InitCa
259f0 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74  llback, &initDat
25a00 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  a, 0);.      if(
25a10 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
25a20 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72   rc = initData.r
25a30 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  c;.      sqlite3
25a40 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29  DbFree(db, zSql)
25a50 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
25a60 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d  .busy = 0;.    }
25a70 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74  .  }.  sqlite3Bt
25a80 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b  reeLeaveAll(db);
25a90 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
25aa0 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67  E_NOMEM ){.    g
25ab0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
25ac0 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69    break;  .}..#i
25ad0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
25ae0 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a  E_OMIT_ANALYZE).
25af0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41  /* Opcode: LoadA
25b00 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a  nalysis P1 * * *
25b10 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68   *.**.** Read th
25b20 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
25b30 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  able for databas
25b40 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68  e P1 and load th
25b50 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20  e content.** of 
25b60 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20  that table into 
25b70 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64  the internal ind
25b80 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ex hash table.  
25b90 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a  This will cause.
25ba0 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  ** the analysis 
25bb0 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
25bc0 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75  preparing all su
25bd0 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73  bsequent queries
25be0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61  ..*/.case OP_Loa
25bf0 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61  dAnalysis: {.  a
25c00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25c10 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
25c20 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73  >nDb );.  rc = s
25c30 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
25c40 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ad(db, pOp->p1);
25c50 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
25c60 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
25c70 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
25c80 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
25c90 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
25ca0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
25cb0 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
25cc0 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
25cd0 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
25ce0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
25cf0 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
25d00 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
25d10 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
25d20 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
25d30 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
25d40 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
25d50 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
25d60 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
25d70 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
25d80 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
25d90 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
25da0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
25db0 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  able: {.  sqlite
25dc0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
25dd0 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70  Table(db, pOp->p
25de0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
25df0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25e00 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20  code: DropIndex 
25e10 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
25e20 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
25e30 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
25e40 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
25e50 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
25e60 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d  ** the index nam
25e70 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
25e80 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
25e90 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69  alled after an i
25ea0 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70  ndex.** is dropp
25eb0 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
25ec0 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
25ed0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
25ee0 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
25ef0 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
25f00 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
25f10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
25f20 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69  pIndex: {.  sqli
25f30 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
25f40 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d  teIndex(db, pOp-
25f50 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
25f60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
25f70 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67  Opcode: DropTrig
25f80 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ger P1 * * P4 *.
25f90 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
25fa0 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
25fb0 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
25fc0 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
25fd0 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67  ibe.** the trigg
25fe0 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  er named P4 in d
25ff0 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
26000 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
26010 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69  r a trigger.** i
26020 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f 72 64  s dropped in ord
26030 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
26040 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
26050 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
26060 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
26070 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
26080 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
26090 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a   OP_DropTrigger:
260a0 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
260b0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
260c0 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  er(db, pOp->p1, 
260d0 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
260e0 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
260f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
26100 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20  EGRITY_CHECK./* 
26110 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74  Opcode: Integrit
26120 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50  yCk P1 P2 P3 * P
26130 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e  5.**.** Do an an
26140 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75  alysis of the cu
26150 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74  rrently open dat
26160 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e  abase.  Store in
26170 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
26180 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65  the text of an e
26190 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73  rror message des
261a0 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62  cribing any prob
261b0 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70  lems..** If no p
261c0 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e  roblems are foun
261d0 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  d, store a NULL 
261e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
261f0 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
26200 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
26210 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
26220 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72  r of allowed err
26230 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20  ors..** At most 
26240 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77  reg(P3) errors w
26250 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e  ill be reported.
26260 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
26270 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73  ds, the analysis
26280 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61   stops as soon a
26290 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73  s reg(P1) errors
262a0 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20   are .** seen.  
262b0 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74  Reg(P1) is updat
262c0 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62  ed with the numb
262d0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d  er of errors rem
262e0 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  aining..**.** Th
262f0 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
26300 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65  ers of all table
26310 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
26320 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a  e are integer.**
26330 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50   stored in reg(P
26340 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72  1), reg(P1+1), r
26350 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20  eg(P1+2), ....  
26360 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62  There are P2 tab
26370 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a  les.** total..**
26380 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
26390 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b   zero, the check
263a0 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20   is done on the 
263b0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
263c0 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20  se.** file, not 
263d0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
263e0 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
263f0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
26400 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
26410 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  he integrity_che
26420 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61  ck pragma..*/.ca
26430 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43  se OP_IntegrityC
26440 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74  k: {.  int nRoot
26450 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
26460 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68   of tables to ch
26470 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66  eck.  (Number of
26480 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f   root pages.) */
26490 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20  .  int *aRoot;  
264a0 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72     /* Array of r
264b0 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ootpage numbers 
264c0 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65  for tables to be
264d0 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e   checked */.  in
264e0 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  t j;          /*
264f0 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
26500 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
26510 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
26520 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20  errors reported 
26530 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20  */.  char *z;   
26540 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
26550 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74  the error report
26560 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72   */.  Mem *pnErr
26570 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  ;     /* Registe
26580 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  r keeping track 
26590 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
265a0 69 6e 67 20 2a 2f 0a 20 20 0a 20 20 6e 52 6f 6f  ing */.  .  nRoo
265b0 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  t = pOp->p2;.  a
265c0 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29  ssert( nRoot>0 )
265d0 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69  ;.  aRoot = sqli
265e0 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
265f0 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28  b, sizeof(int)*(
26600 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66  nRoot+1) );.  if
26610 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74  ( aRoot==0 ) got
26620 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65  o no_mem;.  asse
26630 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
26640 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65   pOp->p3<=p->nMe
26650 6d 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  m );.  pnErr = &
26660 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
26670 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
26680 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
26690 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
266a0 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
266b0 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
266c0 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
266d0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
266e0 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20  p1];.  for(j=0; 
266f0 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20  j<nRoot; j++){. 
26700 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69     aRoot[j] = (i
26710 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e  nt)sqlite3VdbeIn
26720 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29  tValue(&pIn1[j])
26730 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d  ;.  }.  aRoot[j]
26740 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
26750 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
26760 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 2d  );.  assert( (p-
26770 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28 31 3c  >btreeMask & (1<
26780 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20 29 3b  <pOp->p5))!=0 );
26790 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
267a0 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
267b0 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
267c0 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e  5].pBt, aRoot, n
267d0 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267f0 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72         (int)pnEr
26800 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a  r->u.i, &nErr);.
26810 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
26820 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e  db, aRoot);.  pn
26830 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
26840 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
26850 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
26860 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
26870 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
26880 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
26890 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
268a0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
268b0 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
268c0 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
268d0 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
268e0 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
268f0 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
26900 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
26910 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
26920 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
26930 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
26940 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
26950 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
26960 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
26970 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
26980 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
26990 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
269a0 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
269b0 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
269c0 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
269d0 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
269e0 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
269f0 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
26a00 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
26a10 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
26a20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
26a30 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
26a40 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
26a50 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
26a60 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
26a70 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
26a80 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
26a90 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
26aa0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
26ab0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
26ac0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
26ad0 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
26ae0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
26af0 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
26b00 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
26b10 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
26b20 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
26b30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
26b40 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
26b50 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
26b60 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
26b70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26b80 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
26b90 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 78   P3 * *.**.** Ex
26ba0 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
26bb0 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f  st value from bo
26bc0 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61  olean index P1 a
26bd0 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
26be0 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
26bf0 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62  er P3.  Or, if b
26c00 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
26c10 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70  is initially emp
26c20 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20  ty, leave P3.** 
26c30 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75  unchanged and ju
26c40 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
26c50 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
26c60 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20  _RowSetRead: {  
26c70 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
26c80 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  1, out3 */.  i64
26c90 20 76 61 6c 3b 0a 20 20 43 48 45 43 4b 5f 46 4f   val;.  CHECK_FO
26ca0 52 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70  R_INTERRUPT;.  p
26cb0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
26cc0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
26cd0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
26ce0 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c  owSet)==0 .   ||
26cf0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
26d00 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  xt(pIn1->u.pRowS
26d10 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29  et, &val)==0.  )
26d20 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f  {.    /* The boo
26d30 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d  lean index is em
26d40 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  pty */.    sqlit
26d50 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
26d60 28 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d  (pIn1);.    pc =
26d70 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
26d80 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
26d90 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
26da0 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
26db0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
26dc0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
26dd0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
26de0 6c 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  l);.  }.  break;
26df0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
26e00 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20  owSetTest P1 P2 
26e10 50 33 20 50 34 0a 2a 2a 0a 2a 2a 20 52 65 67 69  P3 P4.**.** Regi
26e20 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d  ster P3 is assum
26e30 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d  ed to hold a 64-
26e40 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
26e50 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50  e. If register P
26e60 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20  1.** contains a 
26e70 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e  RowSet object an
26e80 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62  d that RowSet ob
26e90 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  ject contains.**
26ea0 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20   the value held 
26eb0 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72  in P3, jump to r
26ec0 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65  egister P2. Othe
26ed0 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68  rwise, insert th
26ee0 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20  e.** integer in 
26ef0 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53  P3 into the RowS
26f00 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  et and continue 
26f10 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78  on to the.** nex
26f20 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  t opcode..**.** 
26f30 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  The RowSet objec
26f40 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66  t is optimized f
26f50 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72  or the case wher
26f60 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74  e successive set
26f70 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  s.** of integers
26f80 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74  , where each set
26f90 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70   contains no dup
26fa0 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65  licates. Each se
26fb0 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69  t.** of values i
26fc0 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
26fd0 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75  a unique P4 valu
26fe0 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74  e. The first set
26ff0 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34  .** must have P4
27000 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73  ==0, the final s
27010 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75  et P4=-1.  P4 mu
27020 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20  st be either -1 
27030 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69  or.** non-negati
27040 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67  ve.  For non-neg
27050 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20  ative values of 
27060 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65  P4 only the lowe
27070 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20  r 4.** bits are 
27080 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a  significant..**.
27090 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f  ** This allows o
270a0 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61  ptimizations: (a
270b0 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65  ) when P4==0 the
270c0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
270d0 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77   test.** the row
270e0 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50  set object for P
270f0 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72  3, as it is guar
27100 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f  anteed not to co
27110 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29  ntain it,.** (b)
27120 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65   when P4==-1 the
27130 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
27140 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75   insert the valu
27150 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a  e, as it will.**
27160 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64   never be tested
27170 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68   for, and (c) wh
27180 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  en a value that 
27190 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  is part of set X
271a0 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c   is.** inserted,
271b0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
271c0 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73  d to search to s
271d0 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76  ee if the same v
271e0 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76  alue was.** prev
271f0 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20  iously inserted 
27200 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  as part of set X
27210 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73   (only if it was
27220 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69   previously.** i
27230 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
27240 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65  of some other se
27250 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  t)..*/.case OP_R
27260 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20  owSetTest: {    
27270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27280 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69   /* jump, in1, i
27290 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74  n3 */.  int iSet
272a0 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a  ;.  int exists;.
272b0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
272c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
272d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
272e0 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d  ];.  iSet = pOp-
272f0 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  >p4.i;.  assert(
27300 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn3->flags&MEM
27310 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  _Int );..  /* If
27320 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69   there is anythi
27330 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  ng other than a 
27340 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e  rowset object in
27350 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c   memory cell P1,
27360 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20  .  ** delete it 
27370 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  now and initiali
27380 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d  ze P1 with an em
27390 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a  pty rowset.  */.
273a0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
273b0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
273c0 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
273d0 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
273e0 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
273f0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
27400 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
27410 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
27420 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
27430 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
27440 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
27450 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65   iSet==-1 || iSe
27460 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53  t>=0 );.  if( iS
27470 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73  et ){.    exists
27480 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
27490 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Test(pIn1->u.pRo
274a0 77 53 65 74 2c 20 0a 20 20 20 20 20 20 20 20 20  wSet, .         
274b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274c0 20 20 20 20 20 20 28 75 38 29 28 69 53 65 74 3e        (u8)(iSet>
274d0 3d 30 20 3f 20 69 53 65 74 20 26 20 30 78 66 20  =0 ? iSet & 0xf 
274e0 3a 20 30 78 66 66 29 2c 0a 20 20 20 20 20 20 20  : 0xff),.       
274f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27500 20 20 20 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e          pIn3->u.
27510 69 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  i);.    if( exis
27520 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d  ts ){.      pc =
27530 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
27540 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
27550 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
27560 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
27570 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
27580 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
27590 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
275a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
275b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
275c0 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
275d0 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
275e0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
275f0 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
27600 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
27610 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
27620 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
27630 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
27640 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
27650 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
27660 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
27670 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
27680 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
27690 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
276a0 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
276b0 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
276c0 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
276d0 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
276e0 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
276f0 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
27700 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
27710 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
27720 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
27730 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
27740 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
27750 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
27760 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
27770 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
27780 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
27790 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
277a0 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
277b0 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
277c0 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
277d0 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
277e0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
277f0 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
27800 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
27810 72 61 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ram..*/.case OP_
27820 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20  Program: {      
27830 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
27840 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
27850 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
27860 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73   of memory regis
27870 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f  ters for sub-pro
27880 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  gram */.  int nB
27890 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
278a0 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75    /* Bytes of ru
278b0 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75  ntime space requ
278c0 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f  ired for sub-pro
278d0 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  gram */.  Mem *p
278e0 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Rt;             
278f0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
27900 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d   allocate runtim
27910 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d  e space */.  Mem
27920 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
27930 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
27940 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
27950 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a  memory cells */.
27960 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20    Mem *pEnd;    
27970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
27980 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  t memory cell in
27990 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20   new array */.  
279a0 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
279b0 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76  e;      /* New v
279c0 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65  dbe frame to exe
279d0 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62  cute in */.  Sub
279e0 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
279f0 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67  m;   /* Sub-prog
27a00 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a  ram to execute *
27a10 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20  /.  void *t;    
27a20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
27a30 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67  oken identifying
27a40 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70   trigger */..  p
27a50 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70  Program = pOp->p
27a60 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52  4.pProgram;.  pR
27a70 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
27a80 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65  3];.  assert( me
27a90 6d 49 73 56 61 6c 69 64 28 70 52 74 29 20 29 3b  mIsValid(pRt) );
27aa0 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67  .  assert( pProg
27ab0 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20  ram->nOp>0 );.  
27ac0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20  .  /* If the p5 
27ad0 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74  flag is clear, t
27ae0 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e  hen recursive in
27af0 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
27b00 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69  gers is .  ** di
27b10 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77  sabled for backw
27b20 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  ards compatibili
27b30 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66  ty (p5 is set if
27b40 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61   this sub-progra
27b50 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79  m.  ** is really
27b60 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20   a trigger, not 
27b70 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63  a foreign key ac
27b80 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c  tion, and the fl
27b90 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20  ag set.  ** and 
27ba0 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22  cleared by the "
27bb0 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65  PRAGMA recursive
27bc0 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61  _triggers" comma
27bd0 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20  nd is clear)..  
27be0 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72  ** .  ** It is r
27bf0 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
27c00 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c  ion of triggers,
27c10 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
27c20 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a  l, that is .  **
27c30 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f   disabled. In so
27c40 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c  me cases a singl
27c50 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65  e trigger may ge
27c60 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e  nerate more than
27c70 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72   one .  ** SubPr
27c80 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72  ogram (if the tr
27c90 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65  igger may be exe
27ca0 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20  cuted with more 
27cb0 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65  than one differe
27cc0 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46  nt .  ** ON CONF
27cd0 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e  LICT algorithm).
27ce0 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75   SubProgram stru
27cf0 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65  ctures associate
27d00 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69  d with a.  ** si
27d10 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c  ngle trigger all
27d20 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
27d30 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62  alue for the Sub
27d40 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20  Program.token . 
27d50 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a   ** variable.  *
27d60 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  /.  if( pOp->p5 
27d70 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67  ){.    t = pProg
27d80 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
27d90 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
27da0 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20  rame; pFrame && 
27db0 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74  pFrame->token!=t
27dc0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
27dd0 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69  >pParent);.    i
27de0 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61  f( pFrame ) brea
27df0 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d  k;.  }..  if( p-
27e00 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69  >nFrame>=db->aLi
27e10 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
27e20 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20  _TRIGGER_DEPTH] 
27e30 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
27e40 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71  TE_ERROR;.    sq
27e50 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
27e60 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
27e70 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73  "too many levels
27e80 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75   of trigger recu
27e90 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65  rsion");.    bre
27ea0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  ak;.  }..  /* Re
27eb0 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73  gister pRt is us
27ec0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
27ed0 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
27ee0 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74  to save the stat
27ef0 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75  e.  ** of the cu
27f00 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61  rrent program, a
27f10 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  nd the memory re
27f20 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d  quired at runtim
27f30 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a  e to execute.  *
27f40 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  * the trigger pr
27f50 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74  ogram. If this t
27f60 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20  rigger has been 
27f70 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68  fired before, th
27f80 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20  en pRt .  ** is 
27f90 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
27fa0 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74  d. Otherwise, it
27fb0 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c   must be initial
27fc0 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20  ized.  */.  if( 
27fd0 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  (pRt->flags&MEM_
27fe0 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20  Frame)==0 ){.   
27ff0 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e   /* SubProgram.n
28000 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68  Mem is set to th
28010 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
28020 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79  ry cells used by
28030 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f   the .    ** pro
28040 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53  gram stored in S
28050 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41  ubProgram.aOp. A
28060 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c  s well as these,
28070 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20   one memory.    
28080 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69  ** cell is requi
28090 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72  red for each cur
280a0 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20  sor used by the 
280b0 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63  program. Set loc
280c0 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62  al.    ** variab
280d0 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74  le nMem (and lat
280e0 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43  er, VdbeFrame.nC
280f0 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73  hildMem) to this
28100 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
28110 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72     nMem = pProgr
28120 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67  am->nMem + pProg
28130 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e  ram->nCsr;.    n
28140 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69  Byte = ROUND8(si
28150 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29  zeof(VdbeFrame))
28160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
28170 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d   nMem * sizeof(M
28180 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  em).            
28190 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43    + pProgram->nC
281a0 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65  sr * sizeof(Vdbe
281b0 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20 70  Cursor *);.    p
281c0 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
281d0 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
281e0 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
281f0 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
28200 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
28210 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
28220 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
28230 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
28240 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a  gs = MEM_Frame;.
28250 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d      pRt->u.pFram
28260 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20  e = pFrame;..   
28270 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a   pFrame->v = p;.
28280 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
28290 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20  ldMem = nMem;.  
282a0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
282b0 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Csr = pProgram->
282c0 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  nCsr;.    pFrame
282d0 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70  ->pc = pc;.    p
282e0 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d  Frame->aMem = p-
282f0 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >aMem;.    pFram
28300 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65  e->nMem = p->nMe
28310 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  m;.    pFrame->a
28320 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b  pCsr = p->apCsr;
28330 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75  .    pFrame->nCu
28340 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f  rsor = p->nCurso
28350 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  r;.    pFrame->a
28360 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
28370 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70   pFrame->nOp = p
28380 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->nOp;.    pFram
28390 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67  e->token = pProg
283a0 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 0a 20 20 20  ram->token;..   
283b0 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61   pEnd = &VdbeFra
283c0 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46  meMem(pFrame)[pF
283d0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d  rame->nChildMem]
283e0 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56  ;.    for(pMem=V
283f0 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
28400 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b  me); pMem!=pEnd;
28410 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20   pMem++){.      
28420 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
28430 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 70 4d  M_Null;.      pM
28440 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20  em->db = db;.   
28450 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
28460 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e  pFrame = pRt->u.
28470 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65  pFrame;.    asse
28480 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  rt( pProgram->nM
28490 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  em+pProgram->nCs
284a0 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
284b0 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65  dMem );.    asse
284c0 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  rt( pProgram->nC
284d0 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
284e0 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73  ldCsr );.    ass
284f0 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d  ert( pc==pFrame-
28500 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d  >pc );.  }..  p-
28510 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72  >nFrame++;.  pFr
28520 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70  ame->pParent = p
28530 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61  ->pFrame;.  pFra
28540 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  me->lastRowid = 
28550 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  db->lastRowid;. 
28560 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65   pFrame->nChange
28570 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20   = p->nChange;. 
28580 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
28590 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70  .  p->pFrame = p
285a0 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d  Frame;.  p->aMem
285b0 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46   = aMem = &VdbeF
285c0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
285d0 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d  -1];.  p->nMem =
285e0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
285f0 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72  em;.  p->nCursor
28600 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e   = (u16)pFrame->
28610 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e  nChildCsr;.  p->
28620 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72  apCsr = (VdbeCur
28630 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e  sor **)&aMem[p->
28640 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f  nMem+1];.  p->aO
28650 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72  p = aOp = pProgr
28660 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f  am->aOp;.  p->nO
28670 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  p = pProgram->nO
28680 70 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 0a 20  p;.  pc = -1;.. 
28690 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
286a0 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50  code: Param P1 P
286b0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
286c0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  is opcode is onl
286d0 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69  y ever present i
286e0 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63  n sub-programs c
286f0 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a  alled via the .*
28700 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  * OP_Program ins
28710 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61  truction. Copy a
28720 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79   value currently
28730 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d   stored in a mem
28740 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20  ory .** cell of 
28750 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72  the calling (par
28760 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65  ent) frame to ce
28770 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72  ll P2 in the cur
28780 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20  rent frames .** 
28790 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54  address space. T
287a0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
287b0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20  rigger programs 
287c0 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65  to access the ne
287d0 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e  w.* .** and old.
287e0 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20  * values..**.** 
287f0 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  The address of t
28800 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70  he cell in the p
28810 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64  arent frame is d
28820 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64  etermined by add
28830 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ing.** the value
28840 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
28850 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ent to the value
28860 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
28870 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61  ent to the.** ca
28880 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
28890 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
288a0 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20  .case OP_Param: 
288b0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
288c0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
288d0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
288e0 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49  Frame;.  Mem *pI
288f0 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d  n;.  pFrame = p-
28900 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d  >pFrame;.  pIn =
28910 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
28920 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d  Op->p1 + pFrame-
28930 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d  >aOp[pFrame->pc]
28940 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74  .p1];   .  sqlit
28950 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
28960 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20  Copy(pOut, pIn, 
28970 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72  MEM_Ephem);.  br
28980 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  eak;.}..#endif /
28990 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
289a0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f  _OMIT_TRIGGER */
289b0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
289c0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
289d0 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43  Y./* Opcode: FkC
289e0 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a  ounter P1 P2 * *
289f0 20 2a 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65   *.**.** Increme
28a00 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
28a10 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
28a20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
28a30 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
28a40 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
28a50 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
28a60 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
28a70 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
28a80 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
28a90 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
28aa0 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
28ab0 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
28ac0 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
28ad0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
28ae0 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
28af0 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
28b00 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
28b10 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
28b20 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
28b30 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
28b40 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
28b50 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
28b60 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
28b70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
28b80 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
28b90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28ba0 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
28bb0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
28bc0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65  * This opcode te
28bd0 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e  sts if a foreign
28be0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d   key constraint-
28bf0 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
28c00 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66  ntly zero..** If
28c10 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73   so, jump to ins
28c20 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68  truction P2. Oth
28c30 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72  erwise, fall thr
28c40 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
28c50 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
28c60 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
28c70 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
28c80 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
28c90 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  n if the databas
28ca0 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  e constraint-cou
28cb0 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20  nter.** is zero 
28cc0 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f  (the one that co
28cd0 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f  unts deferred co
28ce0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
28cf0 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a  ons). If P1 is.*
28d00 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70  * zero, the jump
28d10 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
28d20 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74   statement const
28d30 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
28d40 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69   zero.** (immedi
28d50 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
28d60 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
28d70 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  tions)..*/.case 
28d80 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20  OP_FkIfZero: {  
28d90 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
28da0 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  /.  if( pOp->p1 
28db0 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  ){.    if( db->n
28dc0 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
28dd0 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31  ) pc = pOp->p2-1
28de0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
28df0 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  f( p->nFkConstra
28e00 69 6e 74 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f  int==0 ) pc = pO
28e10 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62  p->p2-1;.  }.  b
28e20 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
28e30 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
28e40 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
28e50 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  Y */..#ifndef SQ
28e60 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
28e70 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
28e80 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
28e90 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 31 20 69  * * *.**.** P1 i
28ea0 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
28eb0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
28ec0 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72  f this VM (the r
28ed0 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20  oot frame is.** 
28ee0 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
28ef0 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
28f00 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   if this instruc
28f10 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78  tion is being ex
28f20 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e  ecuted.** within
28f30 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e   a sub-program).
28f40 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   Set the value o
28f50 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  f register P1 to
28f60 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
28f70 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20  .** its current 
28f80 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61  value and the va
28f90 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
28fa0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
28fb0 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77  nstruction throw
28fc0 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
28fd0 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73  e memory cell is
28fe0 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a   not initially.*
28ff0 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  * an integer..*/
29000 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a  .case OP_MemMax:
29010 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
29020 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 3b   */.  Mem *pIn1;
29030 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
29040 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70  rame;.  if( p->p
29050 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72  Frame ){.    for
29060 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
29070 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
29080 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
29090 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
290a0 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d   pIn1 = &pFrame-
290b0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  >aMem[pOp->p1];.
290c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e    }else{.    pIn
290d0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
290e0 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  1];.  }.  assert
290f0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
29100 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  1) );.  sqlite3V
29110 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
29120 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
29130 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
29140 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
29150 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
29160 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
29170 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20  .i<pIn2->u.i){. 
29180 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70     pIn1->u.i = p
29190 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20  In2->u.i;.  }.  
291a0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
291b0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  /* SQLITE_OMIT_A
291c0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
291d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f  ./* Opcode: IfPo
291e0 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  s P1 P2 * * *.**
291f0 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
29200 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
29210 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
29220 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
29230 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
29240 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
29250 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
29260 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
29270 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
29280 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
29290 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
292a0 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
292b0 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
292c0 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
292d0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
292e0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
292f0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
29300 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
29310 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
29320 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
29330 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  {.     pc = pOp-
29340 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
29350 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29360 64 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20  de: IfNeg P1 P2 
29370 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74  * * *.**.** If t
29380 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
29390 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
293a0 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20  than zero, jump 
293b0 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74  to P2. .**.** It
293c0 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
293d0 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
293e0 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
293f0 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
29400 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
29410 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
29420 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
29430 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
29440 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
29450 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Neg: {        /*
29460 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
29470 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
29480 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
29490 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
294a0 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
294b0 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20  n1->u.i<0 ){.   
294c0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
294d0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
294e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
294f0 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a  fZero P1 P2 P3 *
29500 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67   *.**.** The reg
29510 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
29520 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
29530 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50  .  Add literal P
29540 33 20 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75  3 to the.** valu
29550 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
29560 2e 20 20 49 66 20 74 68 65 20 72 65 73 75 6c 74  .  If the result
29570 20 69 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a   is exactly 0, j
29580 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a  ump to P2. .**.*
29590 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
295a0 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
295b0 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
295c0 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
295d0 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
295e0 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
295f0 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
29600 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
29610 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
29620 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20  P_IfZero: {     
29630 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
29640 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
29650 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
29660 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
29670 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  s&MEM_Int );.  p
29680 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
29690 3e 70 33 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  >p3;.  if( pIn1-
296a0 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20  >u.i==0 ){.     
296b0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
296c0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
296d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
296e0 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20  Step * P2 P3 P4 
296f0 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P5.**.** Execute
29700 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
29710 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
29720 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e  ate.  The.** fun
29730 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67  ction has P5 arg
29740 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20  uments.   P4 is 
29750 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
29760 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75   FuncDef.** stru
29770 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69  cture that speci
29780 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  fies the functio
29790 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74 65 72  n.  Use register
297a0 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61 63  .** P3 as the ac
297b0 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
297c0 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
297d0 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
297e0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
297f0 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
29800 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  rs..*/.case OP_A
29810 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20  ggStep: {.  int 
29820 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65  n;.  int i;.  Me
29830 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a  m *pMem;.  Mem *
29840 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pRec;.  sqlite3_
29850 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
29860 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
29870 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  pVal;..  n = pOp
29880 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p5;.  assert( 
29890 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d  n>=0 );.  pRec =
298a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
298b0 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
298c0 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
298d0 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
298e0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
298f0 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20  i++, pRec++){.  
29900 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
29910 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20  alid(pRec) );.  
29920 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65    apVal[i] = pRe
29930 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  c;.    memAboutT
29940 6f 43 68 61 6e 67 65 28 70 2c 20 70 52 65 63 29  oChange(p, pRec)
29950 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
29960 65 4d 65 6d 53 74 6f 72 65 54 79 70 65 28 70 52  eMemStoreType(pR
29970 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70  ec);.  }.  ctx.p
29980 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
29990 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20  Func;.  assert( 
299a0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
299b0 2d 3e 70 33 3c 3d 70 2d 3e 6e 4d 65 6d 20 29 3b  ->p3<=p->nMem );
299c0 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d  .  ctx.pMem = pM
299d0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
299e0 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  p3];.  pMem->n++
299f0 3b 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20  ;.  ctx.s.flags 
29a00 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74  = MEM_Null;.  ct
29a10 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78  x.s.z = 0;.  ctx
29a20 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  .s.zMalloc = 0;.
29a30 20 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30    ctx.s.xDel = 0
29a40 3b 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64  ;.  ctx.s.db = d
29a50 62 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72  b;.  ctx.isError
29a60 20 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c   = 0;.  ctx.pCol
29a70 6c 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78  l = 0;.  if( ctx
29a80 2e 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 26 20  .pFunc->flags & 
29a90 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
29aa0 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
29ab0 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29  rt( pOp>p->aOp )
29ac0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
29ad0 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
29ae0 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
29af0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
29b00 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
29b10 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
29b20 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
29b30 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63  .pColl;.  }.  (c
29b40 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29  tx.pFunc->xStep)
29b50 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
29b60 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
29b70 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28  5-23230 */.  if(
29b80 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
29b90 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
29ba0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
29bb0 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
29bc0 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
29bd0 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20  ctx.s));.    rc 
29be0 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20  = ctx.isError;. 
29bf0 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
29c00 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e  MemRelease(&ctx.
29c10 73 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  s);.  break;.}..
29c20 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69  /* Opcode: AggFi
29c30 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a  nal P1 P2 * P4 *
29c40 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
29c50 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e  he finalizer fun
29c60 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
29c70 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a  regate.  P1 is.*
29c80 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  * the memory loc
29c90 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ation that is th
29ca0 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f  e accumulator fo
29cb0 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e  r the aggregate.
29cc0 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
29cd0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
29ce0 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74  ents that the st
29cf0 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  ep function take
29d00 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61  s and.** P4 is a
29d10 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
29d20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73  FuncDef for this
29d30 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
29d40 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69  P2.** argument i
29d50 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68  s not used by th
29d60 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69  is opcode.  It i
29d70 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20  s only there to 
29d80 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20  disambiguate.** 
29d90 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63  functions that c
29da0 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20  an take varying 
29db0 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d  numbers of argum
29dc0 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34  ents.  The.** P4
29dd0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c   argument is onl
29de0 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  y needed for the
29df0 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65   degenerate case
29e00 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74   where.** the st
29e10 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ep function was 
29e20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63  not previously c
29e30 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alled..*/.case O
29e40 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20  P_AggFinal: {.  
29e50 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73  Mem *pMem;.  ass
29e60 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
29e70 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 4d  & pOp->p1<=p->nM
29e80 65 6d 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  em );.  pMem = &
29e90 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
29ea0 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
29eb0 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75  flags & ~(MEM_Nu
29ec0 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20  ll|MEM_Agg))==0 
29ed0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
29ee0 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65  3VdbeMemFinalize
29ef0 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70  (pMem, pOp->p4.p
29f00 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20  Func);.  if( rc 
29f10 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
29f20 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
29f30 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
29f40 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
29f50 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20  t(pMem));.  }.  
29f60 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
29f70 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
29f80 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
29f90 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
29fa0 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
29fb0 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
29fc0 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
29fd0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
29fe0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
29ff0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a000 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
2a010 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 2a   Checkpoint P1 *
2a020 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65   * * *.**.** Che
2a030 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65  ckpoint database
2a040 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e   P1. This is a n
2a050 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f  o-op if P1 is no
2a060 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a  t currently in.*
2a070 2a 20 57 41 4c 20 6d 6f 64 65 2e 0a 2a 2f 0a 63  * WAL mode..*/.c
2a080 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e  ase OP_Checkpoin
2a090 74 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69  t: {.  rc = sqli
2a0a0 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62  te3Checkpoint(db
2a0b0 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72  , pOp->p1);.  br
2a0c0 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66  eak;.};  .#endif
2a0d0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2a0e0 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20  _OMIT_PRAGMA./* 
2a0f0 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
2a100 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 50  ode P1 P2 P3 * P
2a110 35 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  5.**.** Change t
2a120 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  he journal mode 
2a130 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74  of database P1 t
2a140 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65  o P3. P3 must be
2a150 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50   one of the.** P
2a160 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2a170 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20  _XXX values. If 
2a180 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e  changing between
2a190 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c   the various rol
2a1a0 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28  lback.** modes (
2a1b0 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65  delete, truncate
2a1c0 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61  , persist, off a
2a1d0 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73  nd memory), this
2a1e0 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20   is a simple.** 
2a1f0 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f  operation. No IO
2a200 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a   is required..**
2a210 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20  .** If changing 
2a220 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57  into or out of W
2a230 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63  AL mode the proc
2a240 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f  edure is more co
2a250 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  mplicated..**.**
2a260 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20   Write a string 
2a270 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66  containing the f
2a280 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64  inal journal-mod
2a290 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  e to register P2
2a2a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75  ..*/.case OP_Jou
2a2b0 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f  rnalMode: {    /
2a2c0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
2a2d0 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  e */.  Btree *pB
2a2e0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2a2f0 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20         /* Btree 
2a300 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61  to change journa
2a310 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50  l mode of */.  P
2a320 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20  ager *pPager;   
2a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2a340 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74  * Pager associat
2a350 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20  ed with pBt */. 
2a360 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20   int eNew;      
2a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a380 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20   /* New journal 
2a390 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f  mode */.  int eO
2a3a0 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ld;             
2a3b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2a3c0 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   old journal mod
2a3d0 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
2a3e0 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20  r *zFilename;   
2a3f0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
2a400 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  f database file 
2a410 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 0a 20  for pPager */.. 
2a420 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b   eNew = pOp->p3;
2a430 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d  .  assert( eNew=
2a440 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2a450 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20  DE_DELETE .     
2a460 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2a470 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55  _JOURNALMODE_TRU
2a480 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  NCATE .       ||
2a490 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2a4a0 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54  RNALMODE_PERSIST
2a4b0 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
2a4c0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2a4d0 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c  ODE_OFF.       |
2a4e0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2a4f0 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
2a500 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2a510 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2a520 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c  DE_WAL.       ||
2a530 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2a540 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20  RNALMODE_QUERY. 
2a550 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2a560 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2a570 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a  >p1<db->nDb );..
2a580 20 20 2f 2a 20 54 68 69 73 20 6f 70 63 6f 64 65    /* This opcode
2a590 20 69 73 20 75 73 65 64 20 69 6e 20 74 77 6f 20   is used in two 
2a5a0 70 6c 61 63 65 73 3a 20 50 52 41 47 4d 41 20 6a  places: PRAGMA j
2a5b0 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 61 6e 64 20  ournal_mode and 
2a5c0 41 54 54 41 43 48 2e 0a 20 20 2a 2a 20 49 6e 20  ATTACH..  ** In 
2a5d0 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
2a5e0 6f 64 65 2c 20 74 68 65 20 73 71 6c 69 74 65 33  ode, the sqlite3
2a5f0 56 64 62 65 55 73 65 73 42 74 72 65 65 28 29 20  VdbeUsesBtree() 
2a600 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c 65  routine is calle
2a610 64 0a 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20  d.  ** when the 
2a620 73 74 61 74 6d 65 6e 74 20 69 73 20 70 72 65 70  statment is prep
2a630 61 72 65 64 20 61 6e 64 20 73 6f 20 70 2d 3e 61  ared and so p->a
2a640 4d 75 74 65 78 2e 6e 4d 75 74 65 78 3e 30 2e 20  Mutex.nMutex>0. 
2a650 20 41 6c 6c 20 6d 75 74 65 78 65 73 0a 20 20 2a   All mutexes.  *
2a660 2a 20 61 72 65 20 61 6c 72 65 61 64 79 20 61 63  * are already ac
2a670 71 75 69 72 65 64 2e 20 20 42 75 74 20 77 68 65  quired.  But whe
2a680 6e 20 75 73 65 64 20 69 6e 20 41 54 54 41 43 48  n used in ATTACH
2a690 2c 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65  , sqlite3VdbeUse
2a6a0 73 42 74 72 65 65 28 29 0a 20 20 2a 2a 20 69 73  sBtree().  ** is
2a6b0 20 6e 6f 74 20 63 61 6c 6c 65 64 20 77 68 65 6e   not called when
2a6c0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   the statement i
2a6d0 73 20 70 72 65 70 61 72 65 64 20 62 65 63 61 75  s prepared becau
2a6e0 73 65 20 69 74 20 72 65 71 75 69 72 65 73 20 74  se it requires t
2a6f0 68 65 0a 20 20 2a 2a 20 69 44 62 20 69 6e 64 65  he.  ** iDb inde
2a700 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
2a710 65 20 61 73 20 61 20 70 61 72 61 6d 65 74 65 72  e as a parameter
2a720 2c 20 61 6e 64 20 74 68 65 20 64 61 74 61 62 61  , and the databa
2a730 73 65 20 68 61 73 20 6e 6f 74 0a 20 20 2a 2a 20  se has not.  ** 
2a740 79 65 74 20 62 65 65 6e 20 61 74 74 61 63 68 65  yet been attache
2a750 64 20 73 6f 20 74 68 61 74 20 69 6e 64 65 78 20  d so that index 
2a760 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2e 20  is unavailable. 
2a770 20 57 65 20 68 61 76 65 20 74 6f 20 77 61 69 74   We have to wait
2a780 0a 20 20 2a 2a 20 75 6e 74 69 6c 20 72 75 6e 74  .  ** until runt
2a790 69 6d 65 20 28 6e 6f 77 29 20 74 6f 20 67 65 74  ime (now) to get
2a7a0 20 74 68 65 20 6d 75 74 65 78 20 6f 6e 20 74 68   the mutex on th
2a7b0 65 20 6e 65 77 6c 79 20 61 74 74 61 63 68 65 64  e newly attached
2a7c0 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2a 20   database..  ** 
2a7d0 4e 6f 20 6f 74 68 65 72 20 6d 75 74 65 78 65 73  No other mutexes
2a7e0 20 61 72 65 20 72 65 71 75 69 72 65 64 20 62 79   are required by
2a7f0 20 74 68 65 20 41 54 54 41 43 48 20 63 6f 6d 6d   the ATTACH comm
2a800 61 6e 64 20 73 6f 20 74 68 69 73 20 69 73 20 73  and so this is s
2a810 61 66 65 0a 20 20 2a 2a 20 74 6f 20 64 6f 2e 0a  afe.  ** to do..
2a820 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28    */.  assert( (
2a830 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20 28  p->btreeMask & (
2a840 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20  1<<pOp->p1))!=0 
2a850 7c 7c 20 70 2d 3e 61 4d 75 74 65 78 2e 6e 4d 75  || p->aMutex.nMu
2a860 74 65 78 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  tex==0 );.  if( 
2a870 70 2d 3e 61 4d 75 74 65 78 2e 6e 4d 75 74 65 78  p->aMutex.nMutex
2a880 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  ==0 ){.    /* Th
2a890 69 73 20 6f 63 63 75 72 73 20 72 69 67 68 74 20  is occurs right 
2a8a0 61 66 74 65 72 20 41 54 54 41 43 48 2e 20 20 47  after ATTACH.  G
2a8b0 65 74 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  et a mutex on th
2a8c0 65 20 6e 65 77 6c 79 20 41 54 54 41 43 48 65 64  e newly ATTACHed
2a8d0 0a 20 20 20 20 2a 2a 20 64 61 74 61 62 61 73 65  .    ** database
2a8e0 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  . */.    sqlite3
2a8f0 56 64 62 65 55 73 65 73 42 74 72 65 65 28 70 2c  VdbeUsesBtree(p,
2a900 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 73   pOp->p1);.    s
2a910 71 6c 69 74 65 33 56 64 62 65 4d 75 74 65 78 41  qlite3VdbeMutexA
2a920 72 72 61 79 45 6e 74 65 72 28 70 29 3b 0a 20 20  rrayEnter(p);.  
2a930 7d 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  }..  pBt = db->a
2a940 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
2a950 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69  .  pPager = sqli
2a960 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
2a970 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c  t);.  eOld = sql
2a980 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72  ite3PagerGetJour
2a990 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b  nalMode(pPager);
2a9a0 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
2a9b0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2a9c0 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f  UERY ) eNew = eO
2a9d0 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  ld;.  if( !sqlit
2a9e0 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67  e3PagerOkToChang
2a9f0 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  eJournalMode(pPa
2aa00 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f  ger) ) eNew = eO
2aa10 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ld;..#ifndef SQL
2aa20 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a  ITE_OMIT_WAL.  z
2aa30 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74  Filename = sqlit
2aa40 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28  e3PagerFilename(
2aa50 70 50 61 67 65 72 29 3b 0a 0a 20 20 2f 2a 20 44  pPager);..  /* D
2aa60 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72  o not allow a tr
2aa70 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72  ansition to jour
2aa80 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72  nal_mode=WAL for
2aa90 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a   a database.  **
2aaa0 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74   in temporary st
2aab0 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20  orage or if the 
2aac0 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  VFS does not sup
2aad0 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f  port shared memo
2aae0 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  ry .  */.  if( e
2aaf0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2ab00 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26  ALMODE_WAL.   &&
2ab10 20 28 7a 46 69 6c 65 6e 61 6d 65 5b 30 5d 3d 3d   (zFilename[0]==
2ab20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
2ab30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d            /* Tem
2ab40 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20  p file */.      
2ab50 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65   || !sqlite3Page
2ab60 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50  rWalSupported(pP
2ab70 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73  ager))   /* No s
2ab80 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70  hared-memory sup
2ab90 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20  port */.  ){.   
2aba0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2abb0 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d  }..  if( (eNew!=
2abc0 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c  eOld).   && (eOl
2abd0 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
2abe0 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77  MODE_WAL || eNew
2abf0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2ac00 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20  ODE_WAL).  ){.  
2ac10 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43    if( !db->autoC
2ac20 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 61 63 74  ommit || db->act
2ac30 69 76 65 56 64 62 65 43 6e 74 3e 31 20 29 7b 0a  iveVdbeCnt>1 ){.
2ac40 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
2ac50 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73  E_ERROR;.      s
2ac60 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2ac70 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2ac80 20 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e   .          "can
2ac90 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61  not change %s wa
2aca0 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68  l mode from with
2acb0 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
2acc0 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e  ",.          (eN
2acd0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2ace0 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74  LMODE_WAL ? "int
2acf0 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20  o" : "out of"). 
2ad00 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72       );.      br
2ad10 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  eak;.    }else{.
2ad20 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64   .      if( eOld
2ad30 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2ad40 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20  ODE_WAL ){.     
2ad50 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67     /* If leaving
2ad60 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65   WAL mode, close
2ad70 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49   the log file. I
2ad80 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68  f successful, th
2ad90 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a  e call.        *
2ada0 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57  * to PagerCloseW
2adb0 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73  al() checkpoints
2adc0 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65   and deletes the
2add0 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67   write-ahead-log
2ade0 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c   .        ** fil
2adf0 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20  e. An EXCLUSIVE 
2ae00 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62  lock may still b
2ae10 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61  e held on the da
2ae20 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20  tabase file .   
2ae30 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20       ** after a 
2ae40 73 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72  successful retur
2ae50 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  n. .        */. 
2ae60 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
2ae70 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c  te3PagerCloseWal
2ae80 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20  (pPager);.      
2ae90 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2aea0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
2aeb0 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
2aec0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
2aed0 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20  er, eNew);.     
2aee0 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
2aef0 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52   if( eOld==PAGER
2af00 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d  _JOURNALMODE_MEM
2af10 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ORY ){.        /
2af20 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74  * Cannot transit
2af30 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f  ion directly fro
2af40 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e  m MEMORY to WAL.
2af50 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20    Use mode OFF. 
2af60 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20         ** as an 
2af70 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a  intermediate */.
2af80 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
2af90 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
2afa0 64 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52  de(pPager, PAGER
2afb0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
2afc0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20  );.      }.  .  
2afd0 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72      /* Open a tr
2afe0 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65  ansaction on the
2aff0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
2b000 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  Regardless of th
2b010 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20  e journal.      
2b020 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72  ** mode, this tr
2b030 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73  ansaction always
2b040 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b   uses a rollback
2b050 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20   journal..      
2b060 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
2b070 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
2b080 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29  nTrans(pBt)==0 )
2b090 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
2b0a0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2b0b0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
2b0c0 33 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e  3BtreeSetVersion
2b0d0 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47  (pBt, (eNew==PAG
2b0e0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2b0f0 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20  AL ? 2 : 1));.  
2b100 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
2b110 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66  #endif /* ifndef
2b120 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
2b130 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b   */..  if( rc ){
2b140 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64  .    eNew = eOld
2b150 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73  ;.  }.  eNew = s
2b160 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
2b170 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2b180 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74  , eNew);..  pOut
2b190 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2b1a0 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ];.  pOut->flags
2b1b0 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
2b1c0 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
2b1d0 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61    pOut->z = (cha
2b1e0 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e  r *)sqlite3Journ
2b1f0 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29  alModename(eNew)
2b200 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71  ;.  pOut->n = sq
2b210 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
2b220 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e  ut->z);.  pOut->
2b230 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
2b240 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  8;.  sqlite3Vdbe
2b250 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
2b260 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Out, encoding);.
2b270 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64    break;.};.#end
2b280 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2b290 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66  T_PRAGMA */..#if
2b2a0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2b2b0 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26  _OMIT_VACUUM) &&
2b2c0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2b2d0 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a  _OMIT_ATTACH)./*
2b2e0 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20   Opcode: Vacuum 
2b2f0 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
2b300 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72  Vacuum the entir
2b310 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69  e database.  Thi
2b320 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61  s opcode will ca
2b330 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75 61  use other virtua
2b340 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f  l.** machines to
2b350 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64 20   be created and 
2b360 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74  run.  It may not
2b370 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   be called from 
2b380 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e  within.** a tran
2b390 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  saction..*/.case
2b3a0 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20   OP_Vacuum: {.  
2b3b0 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56  rc = sqlite3RunV
2b3c0 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73  acuum(&p->zErrMs
2b3d0 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b  g, db);.  break;
2b3e0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21  .}.#endif..#if !
2b3f0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2b400 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
2b410 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56  /* Opcode: IncrV
2b420 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20  acuum P1 P2 * * 
2b430 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20  *.**.** Perform 
2b440 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66  a single step of
2b450 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c   the incremental
2b460 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72   vacuum procedur
2b470 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64  e on.** the P1 d
2b480 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
2b490 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73  vacuum has finis
2b4a0 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  hed, jump to ins
2b4b0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20  truction.** P2. 
2b4c0 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
2b4d0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2b4e0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2b4f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72  .*/.case OP_Incr
2b500 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20  Vacuum: {       
2b510 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74   /* jump */.  Bt
2b520 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73  ree *pBt;..  ass
2b530 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2b540 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2b550 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2b560 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
2b570 28 31 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  (1<<pOp->p1))!=0
2b580 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   );.  pBt = db->
2b590 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
2b5a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2b5b0 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28  BtreeIncrVacuum(
2b5c0 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  pBt);.  if( rc==
2b5d0 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20  SQLITE_DONE ){. 
2b5e0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2b5f0 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  - 1;.    rc = SQ
2b600 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62  LITE_OK;.  }.  b
2b610 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
2b620 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72  /* Opcode: Expir
2b630 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
2b640 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70  ** Cause precomp
2b650 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  iled statements 
2b660 74 6f 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65  to become expire
2b670 64 2e 20 41 6e 20 65 78 70 69 72 65 64 20 73 74  d. An expired st
2b680 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 61 69 6c 73  atement.** fails
2b690 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 63   with an error c
2b6a0 6f 64 65 20 6f 66 20 53 51 4c 49 54 45 5f 53 43  ode of SQLITE_SC
2b6b0 48 45 4d 41 20 69 66 20 69 74 20 69 73 20 65 76  HEMA if it is ev
2b6c0 65 72 20 65 78 65 63 75 74 65 64 20 0a 2a 2a 20  er executed .** 
2b6d0 28 76 69 61 20 73 71 6c 69 74 65 33 5f 73 74 65  (via sqlite3_ste
2b6e0 70 28 29 29 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20  p())..** .** If 
2b6f0 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c  P1 is 0, then al
2b700 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  l SQL statements
2b710 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e   become expired.
2b720 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
2b730 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79  ro,.** then only
2b740 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65   the currently e
2b750 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65  xecuting stateme
2b760 6e 74 20 69 73 20 61 66 66 65 63 74 65 64 2e 20  nt is affected. 
2b770 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69  .*/.case OP_Expi
2b780 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70  re: {.  if( !pOp
2b790 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p1 ){.    sqli
2b7a0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
2b7b0 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
2b7c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d  .  }else{.    p-
2b7d0 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
2b7e0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
2b7f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2b800 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f  T_SHARED_CACHE./
2b810 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c  * Opcode: TableL
2b820 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20  ock P1 P2 P3 P4 
2b830 2a 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61  *.**.** Obtain a
2b840 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69   lock on a parti
2b850 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69  cular table. Thi
2b860 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2b870 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a   only used when.
2b880 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  ** the shared-ca
2b890 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65  che feature is e
2b8a0 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50  nabled. .**.** P
2b8b0 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
2b8c0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
2b8d0 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
2b8e0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
2b8f0 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  ** on which the 
2b900 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
2b910 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73  .  A readlock is
2b920 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d   obtained if P3=
2b930 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65  =0 or.** a write
2b940 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a   lock if P3==1..
2b950 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e  **.** P2 contain
2b960 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  s the root-page 
2b970 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
2b980 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63  lock..**.** P4 c
2b990 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
2b9a0 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
2b9b0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2b9c0 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73   locked. This is
2b9d0 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f   only.** used to
2b9e0 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72   generate an err
2b9f0 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68  or message if th
2ba00 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65  e lock cannot be
2ba10 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61   obtained..*/.ca
2ba20 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a  se OP_TableLock:
2ba30 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c   {.  u8 isWriteL
2ba40 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ock = (u8)pOp->p
2ba50 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65  3;.  if( isWrite
2ba60 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e  Lock || 0==(db->
2ba70 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61  flags&SQLITE_Rea
2ba80 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b  dUncommitted) ){
2ba90 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f  .    int p1 = pO
2baa0 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65  p->p1; .    asse
2bab0 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c  rt( p1>=0 && p1<
2bac0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61  db->nDb );.    a
2bad0 73 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65  ssert( (p->btree
2bae0 4d 61 73 6b 20 26 20 28 31 3c 3c 70 31 29 29 21  Mask & (1<<p1))!
2baf0 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
2bb00 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30  ( isWriteLock==0
2bb10 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d   || isWriteLock=
2bb20 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =1 );.    rc = s
2bb30 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54  qlite3BtreeLockT
2bb40 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d  able(db->aDb[p1]
2bb50 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69  .pBt, pOp->p2, i
2bb60 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20  sWriteLock);.   
2bb70 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d   if( (rc&0xFF)==
2bb80 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b  SQLITE_LOCKED ){
2bb90 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
2bba0 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
2bbb0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
2bbc0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2bbd0 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61 62  rMsg, db, "datab
2bbe0 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
2bbf0 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20  ked: %s", z);.  
2bc00 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
2bc10 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2bc20 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2bc30 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
2bc40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2bc50 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2bc60 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
2bc70 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2bc80 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
2bc90 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
2bca0 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
2bcb0 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
2bcc0 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
2bcd0 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
2bce0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
2bcf0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
2bd00 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
2bd10 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
2bd20 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
2bd30 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
2bd40 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
2bd50 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
2bd60 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
2bd70 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
2bd80 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
2bd90 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
2bda0 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
2bdb0 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65  egin: {.  VTable
2bdc0 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62   *pVTab;.  pVTab
2bdd0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
2bde0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2bdf0 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
2be00 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61  Tab);.  if( pVTa
2be10 62 20 29 20 69 6d 70 6f 72 74 56 74 61 62 45 72  b ) importVtabEr
2be20 72 4d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70  rMsg(p, pVTab->p
2be30 56 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Vtab);.  break;.
2be40 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2be50 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2be60 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
2be70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2be80 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
2be90 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20  ode: VCreate P1 
2bea0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
2beb0 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
2bec0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2bed0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2bee0 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74   Call the xCreat
2bef0 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20  e method.** for 
2bf00 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
2bf10 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20  ase OP_VCreate: 
2bf20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  {.  rc = sqlite3
2bf30 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64  VtabCallCreate(d
2bf40 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2bf50 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d  >p4.z, &p->zErrM
2bf60 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  sg);.  break;.}.
2bf70 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2bf80 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2bf90 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2bfa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2bfb0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2bfc0 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a  e: VDestroy P1 *
2bfd0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2bfe0 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
2bff0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2c000 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2c010 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72   Call the xDestr
2c020 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20  oy method.** of 
2c030 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
2c040 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a  ase OP_VDestroy:
2c050 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65   {.  p->inVtabMe
2c060 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d  thod = 2;.  rc =
2c070 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2c080 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d  Destroy(db, pOp-
2c090 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2c0a0 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2c0b0 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  od = 0;.  break;
2c0c0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2c0d0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2c0e0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
2c0f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2c100 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2c110 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a  code: VOpen P1 *
2c120 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
2c130 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2c140 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
2c150 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
2c160 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
2c170 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  re..** P1 is a c
2c180 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54  ursor number.  T
2c190 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73  his opcode opens
2c1a0 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65   a cursor to the
2c1b0 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
2c1c0 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  e and stores tha
2c1d0 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a  t cursor in P1..
2c1e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e  */.case OP_VOpen
2c1f0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2c200 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65   *pCur;.  sqlite
2c210 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
2c220 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
2c230 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
2c240 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  b;.  sqlite3_mod
2c250 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
2c260 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74   pCur = 0;.  pVt
2c270 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20  abCursor = 0;.  
2c280 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
2c290 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
2c2a0 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74  pModule = (sqlit
2c2b0 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61  e3_module *)pVta
2c2c0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
2c2d0 73 65 72 74 28 70 56 74 61 62 20 26 26 20 70 4d  sert(pVtab && pM
2c2e0 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70  odule);.  rc = p
2c2f0 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56  Module->xOpen(pV
2c300 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f  tab, &pVtabCurso
2c310 72 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74 61 62  r);.  importVtab
2c320 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61 62 29  ErrMsg(p, pVtab)
2c330 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  ;.  if( SQLITE_O
2c340 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20  K==rc ){.    /* 
2c350 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74  Initialize sqlit
2c360 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62  e3_vtab_cursor b
2c370 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20  ase class */.   
2c380 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56   pVtabCursor->pV
2c390 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20  tab = pVtab;..  
2c3a0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 73 65 20    /* Initialise 
2c3b0 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65  vdbe cursor obje
2c3c0 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d  ct */.    pCur =
2c3d0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
2c3e0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d  p, pOp->p1, 0, -
2c3f0 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70  1, 0);.    if( p
2c400 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75  Cur ){.      pCu
2c410 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d  r->pVtabCursor =
2c420 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20   pVtabCursor;.  
2c430 20 20 20 20 70 43 75 72 2d 3e 70 4d 6f 64 75 6c      pCur->pModul
2c440 65 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d  e = pVtabCursor-
2c450 3e 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b  >pVtab->pModule;
2c460 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2c470 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
2c480 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d  ed = 1;.      pM
2c490 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56  odule->xClose(pV
2c4a0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  tabCursor);.    
2c4b0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
2c4c0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2c4d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2c4e0 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2c4f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2c500 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2c510 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50  de: VFilter P1 P
2c520 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
2c530 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
2c540 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
2c550 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
2c560 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
2c570 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
2c580 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
2c590 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
2c5a0 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
2c5b0 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
2c5c0 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
2c5d0 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
2c5e0 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
2c5f0 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
2c600 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
2c610 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
2c620 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
2c630 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
2c640 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
2c650 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2c660 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
2c670 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
2c680 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
2c690 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
2c6a0 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
2c6b0 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
2c6c0 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
2c6d0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2c6e0 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
2c6f0 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
2c700 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
2c710 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
2c720 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
2c730 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
2c740 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
2c750 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
2c760 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
2c770 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
2c780 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
2c790 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
2c7a0 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
2c7b0 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
2c7c0 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
2c7d0 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
2c7e0 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
2c7f0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
2c800 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
2c810 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
2c820 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
2c830 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
2c840 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
2c850 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
2c860 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2c870 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2c880 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
2c890 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
2c8a0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2c8b0 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
2c8c0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2c8d0 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
2c8e0 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
2c8f0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
2c900 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
2c910 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d    pQuery = &aMem
2c920 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72  [pOp->p3];.  pAr
2c930 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b  gc = &pQuery[1];
2c940 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
2c950 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2c960 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2c970 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52  d(pQuery) );.  R
2c980 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
2c990 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
2c9a0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
2c9b0 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
2c9c0 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70   pVtabCursor = p
2c9d0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2c9e0 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61  ;.  pVtab = pVta
2c9f0 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
2ca00 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
2ca10 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
2ca20 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
2ca30 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
2ca40 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
2ca50 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
2ca60 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
2ca70 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
2ca80 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
2ca90 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
2caa0 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
2cab0 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
2cac0 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
2cad0 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
2cae0 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20  method */.  {.  
2caf0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61    res = 0;.    a
2cb00 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
2cb10 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  .    for(i = 0; 
2cb20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2cb30 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
2cb40 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20  pArgc[i+1];.    
2cb50 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2cb60 53 74 6f 72 65 54 79 70 65 28 61 70 41 72 67 5b  StoreType(apArg[
2cb70 69 5d 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  i]);.    }..    
2cb80 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2cb90 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  = 1;.    rc = pM
2cba0 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70  odule->xFilter(p
2cbb0 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65  VtabCursor, iQue
2cbc0 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e  ry, pOp->p4.z, n
2cbd0 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 20  Arg, apArg);.   
2cbe0 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2cbf0 20 3d 20 30 3b 0a 20 20 20 20 69 6d 70 6f 72 74   = 0;.    import
2cc00 56 74 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56  VtabErrMsg(p, pV
2cc10 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  tab);.    if( rc
2cc20 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2cc30 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75       res = pModu
2cc40 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75  le->xEof(pVtabCu
2cc50 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  rsor);.    }..  
2cc60 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
2cc70 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2cc80 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  - 1;.    }.  }. 
2cc90 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
2cca0 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a   0;..  break;.}.
2ccb0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2ccc0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ccd0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2cce0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2ccf0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2cd00 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32  e: VColumn P1 P2
2cd10 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 74   P3 * *.**.** St
2cd20 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ore the value of
2cd30 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
2cd40 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20  n of.** the row 
2cd50 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74  of the virtual-t
2cd60 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a  able that the .*
2cd70 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70  * P1 cursor is p
2cd80 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20  ointing to into 
2cd90 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
2cda0 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a  case OP_VColumn:
2cdb0 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
2cdc0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
2cdd0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
2cde0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
2cdf0 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74   *pDest;.  sqlit
2ce00 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74  e3_context sCont
2ce10 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73  ext;..  VdbeCurs
2ce20 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70  or *pCur = p->ap
2ce30 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2ce40 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
2ce50 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  tabCursor );.  a
2ce60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2ce70 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 70 2d 3e   && pOp->p3<=p->
2ce80 6e 4d 65 6d 20 29 3b 0a 20 20 70 44 65 73 74 20  nMem );.  pDest 
2ce90 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2cea0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
2ceb0 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
2cec0 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
2ced0 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Row ){.    sqlit
2cee0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
2cef0 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65  (pDest);.    bre
2cf00 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
2cf10 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  = pCur->pVtabCur
2cf20 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  sor->pVtab;.  pM
2cf30 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
2cf40 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
2cf50 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  ( pModule->xColu
2cf60 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26  mn );.  memset(&
2cf70 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a  sContext, 0, siz
2cf80 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a  eof(sContext));.
2cf90 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74  .  /* The output
2cfa0 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64   cell may alread
2cfb0 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72 20  y have a buffer 
2cfc0 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a  allocated. Move.
2cfd0 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74    ** the current
2cfe0 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f   contents to sCo
2cff0 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61  ntext.s so in ca
2d000 73 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63  se the user-func
2d010 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75  tion .  ** can u
2d020 73 65 20 74 68 65 20 61 6c 72 65 61 64 79 20 61  se the already a
2d030 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 20  llocated buffer 
2d040 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63  instead of alloc
2d050 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65  ating a .  ** ne
2d060 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71  w one..  */.  sq
2d070 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
2d080 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44  (&sContext.s, pD
2d090 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79  est);.  MemSetTy
2d0a0 70 65 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74  peFlag(&sContext
2d0b0 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a  .s, MEM_Null);..
2d0c0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
2d0d0 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56  xColumn(pCur->pV
2d0e0 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e  tabCursor, &sCon
2d0f0 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  text, pOp->p2);.
2d100 20 20 69 6d 70 6f 72 74 56 74 61 62 45 72 72 4d    importVtabErrM
2d110 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
2d120 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  if( sContext.isE
2d130 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d  rror ){.    rc =
2d140 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
2d150 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70  r;.  }..  /* Cop
2d160 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  y the result of 
2d170 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
2d180 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e  the P3 register.
2d190 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73   We.  ** do this
2d1a0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
2d1b0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
2d1c0 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
2d1d0 74 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20  to ensure any.  
2d1e0 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63  ** dynamic alloc
2d1f0 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78  ation in sContex
2d200 74 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63  t.s (a Mem struc
2d210 74 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e  t) is  released.
2d220 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  .  */.  sqlite3V
2d230 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2d240 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65  g(&sContext.s, e
2d250 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69  ncoding);.  sqli
2d260 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
2d270 44 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e  Dest, &sContext.
2d280 73 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  s);.  REGISTER_T
2d290 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
2d2a0 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  est);.  UPDATE_M
2d2b0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
2d2c0 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  t);..  if( sqlit
2d2d0 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
2d2e0 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f  pDest) ){.    go
2d2f0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
2d300 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2d310 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2d320 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2d330 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2d340 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2d350 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e  LE./* Opcode: VN
2d360 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ext P1 P2 * * *.
2d370 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69  **.** Advance vi
2d380 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74  rtual table P1 t
2d390 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69  o the next row i
2d3a0 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  n its result set
2d3b0 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20   and.** jump to 
2d3c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
2d3d0 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74   Or, if the virt
2d3e0 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65  ual table has re
2d3f0 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64  ached.** the end
2d400 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73   of its result s
2d410 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  et, then fall th
2d420 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2d430 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2d440 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a  /.case OP_VNext:
2d450 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
2d460 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
2d470 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
2d480 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
2d490 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65  Module;.  int re
2d4a0 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  s;.  VdbeCursor 
2d4b0 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20  *pCur;..  res = 
2d4c0 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  0;.  pCur = p->a
2d4d0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2d4e0 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
2d4f0 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
2d500 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
2d510 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  w ){.    break;.
2d520 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
2d530 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
2d540 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
2d550 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
2d560 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
2d570 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a  odule->xNext );.
2d580 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
2d590 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20   xNext() method 
2d5a0 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54  of the module. T
2d5b0 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66  here is no way f
2d5c0 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65  or the.  ** unde
2d5d0 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74  rlying implement
2d5e0 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20  ation to return 
2d5f0 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20  an error if one 
2d600 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20  occurs during.  
2d610 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74  ** xNext(). Inst
2d620 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72  ead, if an error
2d630 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73   occurs, true is
2d640 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63   returned (indic
2d650 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a  ating that .  **
2d660 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62   data is availab
2d670 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f  le) and the erro
2d680 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  r code returned 
2d690 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a  when xColumn or.
2d6a0 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20    ** some other 
2d6b0 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69  method is next i
2d6c0 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61  nvoked on the sa
2d6d0 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ve virtual table
2d6e0 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
2d6f0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
2d700 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  = 1;.  rc = pMod
2d710 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d  ule->xNext(pCur-
2d720 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
2d730 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2d740 20 3d 20 30 3b 0a 20 20 69 6d 70 6f 72 74 56 74   = 0;.  importVt
2d750 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
2d760 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  b);.  if( rc==SQ
2d770 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
2d780 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
2d790 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  of(pCur->pVtabCu
2d7a0 72 73 6f 72 29 3b 0a 20 20 7d 0a 0a 20 20 69 66  rsor);.  }..  if
2d7b0 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a  ( !res ){.    /*
2d7c0 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74   If there is dat
2d7d0 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  a, jump to P2 */
2d7e0 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
2d7f0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2d800 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2d810 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2d820 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
2d830 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2d840 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
2d850 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
2d860 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2d870 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2d880 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
2d890 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
2d8a0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
2d8b0 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
2d8c0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
2d8d0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
2d8e0 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
2d8f0 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
2d900 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
2d910 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
2d920 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
2d930 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
2d940 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
2d950 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
2d960 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
2d970 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a  ;.  Mem *pName;.
2d980 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
2d990 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
2d9a0 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d  .  pName = &aMem
2d9b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2d9c0 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64  ert( pVtab->pMod
2d9d0 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a  ule->xRename );.
2d9e0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2d9f0 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20  alid(pName) );. 
2da00 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
2da10 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
2da20 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65  .  assert( pName
2da30 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2da40 72 20 29 3b 0a 20 20 72 63 20 3d 20 70 56 74 61  r );.  rc = pVta
2da50 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
2da60 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65  ame(pVtab, pName
2da70 2d 3e 7a 29 3b 0a 20 20 69 6d 70 6f 72 74 56 74  ->z);.  importVt
2da80 61 62 45 72 72 4d 73 67 28 70 2c 20 70 56 74 61  abErrMsg(p, pVta
2da90 62 29 3b 0a 20 20 70 2d 3e 65 78 70 69 72 65 64  b);.  p->expired
2daa0 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a   = 0;..  break;.
2dab0 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
2dac0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2dad0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
2dae0 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31  code: VUpdate P1
2daf0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
2db00 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2db10 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
2db20 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
2db30 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
2db40 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
2db50 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
2db60 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
2db70 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e   xUpdate method.
2db80 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72   P2 values.** ar
2db90 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d  e contiguous mem
2dba0 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69  ory cells starti
2dbb0 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73 73  ng at P3 to pass
2dbc0 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20   to the xUpdate 
2dbd0 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20  .** invocation. 
2dbe0 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  The value in reg
2dbf0 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20  ister (P3+P2-1) 
2dc00 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
2dc10 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d  he .** p2th elem
2dc20 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76 20  ent of the argv 
2dc30 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f 20  array passed to 
2dc40 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54  xUpdate..**.** T
2dc50 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  he xUpdate metho
2dc60 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45  d will do a DELE
2dc70 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20  TE or an INSERT 
2dc80 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20  or both..** The 
2dc90 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20  argv[0] element 
2dca0 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e  (which correspon
2dcb0 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  ds to memory cel
2dcc0 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20  l P3).** is the 
2dcd0 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74  rowid of a row t
2dce0 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72  o delete.  If ar
2dcf0 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68  gv[0] is NULL th
2dd00 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69  en no .** deleti
2dd10 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20  on occurs.  The 
2dd20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20  argv[1] element 
2dd30 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
2dd40 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e  the new .** row.
2dd50 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55    This can be NU
2dd60 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20 76  LL to have the v
2dd70 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c  irtual table sel
2dd80 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20  ect the new .** 
2dd90 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66  rowid for itself
2dda0 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65 6e  .  The subsequen
2ddb0 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68  t elements in th
2ddc0 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20  e array are .** 
2ddd0 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f  the values of co
2dde0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77  lumns in the new
2ddf0 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50   row..**.** If P
2de00 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73  2==1 then no ins
2de10 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64  ert is performed
2de20 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68  .  argv[0] is th
2de30 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20  e rowid of.** a 
2de40 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a  row to delete..*
2de50 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f  *.** P1 is a boo
2de60 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74  lean flag. If it
2de70 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65 20   is set to true 
2de80 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65 20  and the xUpdate 
2de90 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65  call.** is succe
2dea0 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20  ssful, then the 
2deb0 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
2dec0 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  y sqlite3_last_i
2ded0 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a  nsert_rowid() .*
2dee0 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  * is set to the 
2def0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77  value of the row
2df00 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a  id for the row j
2df10 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f  ust inserted..*/
2df20 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65  .case OP_VUpdate
2df30 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
2df40 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c  ab *pVtab;.  sql
2df50 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
2df60 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67  dule;.  int nArg
2df70 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  ;.  int i;.  sql
2df80 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b  ite_int64 rowid;
2df90 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
2dfa0 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 70 56    Mem *pX;..  pV
2dfb0 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
2dfc0 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  tab->pVtab;.  pM
2dfd0 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33  odule = (sqlite3
2dfe0 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d  _module *)pVtab-
2dff0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67  >pModule;.  nArg
2e000 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
2e010 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2e020 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20  e==P4_VTAB );.  
2e030 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75  if( ALWAYS(pModu
2e040 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a  le->xUpdate) ){.
2e050 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61      apArg = p->a
2e060 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26  pArg;.    pX = &
2e070 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2e080 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
2e090 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
2e0a0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2e0b0 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20  id(pX) );.      
2e0c0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
2e0d0 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 73  (p, pX);.      s
2e0e0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 6f  qlite3VdbeMemSto
2e0f0 72 65 54 79 70 65 28 70 58 29 3b 0a 20 20 20 20  reType(pX);.    
2e100 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b    apArg[i] = pX;
2e110 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20  .      pX++;.   
2e120 20 7d 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64   }.    rc = pMod
2e130 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74  ule->xUpdate(pVt
2e140 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c  ab, nArg, apArg,
2e150 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 6d   &rowid);.    im
2e160 70 6f 72 74 56 74 61 62 45 72 72 4d 73 67 28 70  portVtabErrMsg(p
2e170 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
2e180 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2e190 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  && pOp->p1 ){.  
2e1a0 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
2e1b0 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26  >1 && apArg[0] &
2e1c0 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61  & (apArg[0]->fla
2e1d0 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a  gs&MEM_Null) );.
2e1e0 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f        db->lastRo
2e1f0 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  wid = rowid;.   
2e200 20 7d 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67   }.    p->nChang
2e210 65 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  e++;.  }.  break
2e220 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2e230 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2e240 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
2e250 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ef  SQLITE_OMIT_
2e260 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a  PAGER_PRAGMAS./*
2e270 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75   Opcode: Pagecou
2e280 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
2e290 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
2e2a0 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  urrent number of
2e2b0 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61   pages in databa
2e2c0 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20  se P1 to memory 
2e2d0 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  cell P2..*/.case
2e2e0 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b   OP_Pagecount: {
2e2f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
2e300 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
2e310 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  /.  pOut->u.i = 
2e320 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
2e330 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70  Page(db->aDb[pOp
2e340 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72  ->p1].pBt);.  br
2e350 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
2e360 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  #ifndef  SQLITE_
2e370 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
2e380 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61  AS./* Opcode: Ma
2e390 78 50 67 63 6e 74 20 50 31 20 50 32 20 50 33 20  xPgcnt P1 P2 P3 
2e3a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f  * *.**.** Try to
2e3b0 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   set the maximum
2e3c0 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20   page count for 
2e3d0 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 74  database P1 to t
2e3e0 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a  he value in P3..
2e3f0 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68  ** Do not let th
2e400 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
2e410 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20  ount fall below 
2e420 74 68 65 20 63 75 72 72 65 6e 74 20 70 61 67 65  the current page
2e430 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f   count and.** do
2e440 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20   not change the 
2e450 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
2e460 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d  nt value if P3==
2e470 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  0..**.** Store t
2e480 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
2e490 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65 20  count after the 
2e4a0 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74  change in regist
2e4b0 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
2e4c0 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20  P_MaxPgcnt: {   
2e4d0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2e4e0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
2e4f0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65   unsigned int ne
2e500 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70  wMax;.  Btree *p
2e510 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d  Bt;..  pBt = db-
2e520 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
2e530 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b  t;.  newMax = 0;
2e540 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
2e550 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73  {.    newMax = s
2e560 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50  qlite3BtreeLastP
2e570 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66  age(pBt);.    if
2e580 28 20 70 4f 70 2d 3e 70 33 3e 6e 65 77 4d 61 78  ( pOp->p3>newMax
2e590 20 29 20 6e 65 77 4d 61 78 20 3d 20 70 4f 70 2d   ) newMax = pOp-
2e5a0 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >p3;.  }.  pOut-
2e5b0 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
2e5c0 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28  reeMaxPageCount(
2e5d0 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20  pBt, newMax);.  
2e5e0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
2e5f0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2e600 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 20 4f  _OMIT_TRACE./* O
2e610 70 63 6f 64 65 3a 20 54 72 61 63 65 20 2a 20 2a  pcode: Trace * *
2e620 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 49 66   * P4 *.**.** If
2e630 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62   tracing is enab
2e640 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69  led (by the sqli
2e650 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74  te3_trace()) int
2e660 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20  erface, then.** 
2e670 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
2e680 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34   contained in P4
2e690 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74   is emitted on t
2e6a0 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
2e6b0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  k..*/.case OP_Tr
2e6c0 61 63 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ace: {.  char *z
2e6d0 54 72 61 63 65 3b 0a 0a 20 20 7a 54 72 61 63 65  Trace;..  zTrace
2e6e0 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
2e6f0 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
2e700 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61  Sql);.  if( zTra
2e710 63 65 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  ce ){.    if( db
2e720 2d 3e 78 54 72 61 63 65 20 29 7b 0a 20 20 20 20  ->xTrace ){.    
2e730 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69    char *z = sqli
2e740 74 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c  te3VdbeExpandSql
2e750 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  (p, zTrace);.   
2e760 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
2e770 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b  ->pTraceArg, z);
2e780 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
2e790 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 20  Free(db, z);.   
2e7a0 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
2e7b0 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28  _DEBUG.    if( (
2e7c0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
2e7d0 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 20  TE_SqlTrace)!=0 
2e7e0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2e7f0 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c  DebugPrintf("SQL
2e800 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a  -trace: %s\n", z
2e810 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 23 65  Trace);.    }.#e
2e820 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
2e830 45 42 55 47 20 2a 2f 0a 20 20 7d 0a 20 20 62 72  EBUG */.  }.  br
2e840 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
2e850 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20  /* Opcode: Noop 
2e860 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
2e870 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69  Do nothing.  Thi
2e880 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2e890 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73   often useful as
2e8a0 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69   a jump.** desti
2e8b0 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a  nation..*/./*.**
2e8c0 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61   The magic Expla
2e8d0 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e  in opcode are on
2e8e0 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e  ly inserted when
2e8f0 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69   explain==2 (whi
2e900 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20  ch.** is to say 
2e910 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  when the EXPLAIN
2e920 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74   QUERY PLAN synt
2e930 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20  ax is used.).** 
2e940 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f  This opcode reco
2e950 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  rds information 
2e960 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a  from the optimiz
2e970 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a  er.  It is the.*
2e980 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20  * the same as a 
2e990 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63  no-op.  This opc
2e9a0 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72  odesnever appear
2e9b0 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70  s in a real VM p
2e9c0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75  rogram..*/.defau
2e9d0 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  lt: {          /
2e9e0 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79  * This is really
2e9f0 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f   OP_Noop and OP_
2ea00 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73  Explain */.  ass
2ea10 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2ea20 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70  ==OP_Noop || pOp
2ea30 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70  ->opcode==OP_Exp
2ea40 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b  lain );.  break;
2ea50 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .}../***********
2ea60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ea90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2eaa0 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20  **.** The cases 
2eab0 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74  of the switch st
2eac0 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68  atement above th
2ead0 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61  is line should a
2eae0 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a  ll be indented.*
2eaf0 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  * by 6 spaces.  
2eb00 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  But the left-mos
2eb10 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20  t 6 spaces have 
2eb20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20  been removed to 
2eb30 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72  improve the.** r
2eb40 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f  eadability.  Fro
2eb50 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20  m this point on 
2eb60 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c  down, the normal
2eb70 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c   indentation rul
2eb80 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72  es are.** restor
2eb90 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ed..************
2eba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ebb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ebc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ebd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
2ebe0 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66  */.    }..#ifdef
2ebf0 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
2ec00 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6c    {.      u64 el
2ec10 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33 48  apsed = sqlite3H
2ec20 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74 3b  wtime() - start;
2ec30 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63 6c  .      pOp->cycl
2ec40 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a 20  es += elapsed;. 
2ec50 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b       pOp->cnt++;
2ec60 0a 23 69 66 20 30 0a 20 20 20 20 20 20 20 20 66  .#if 0.        f
2ec70 70 72 69 6e 74 66 28 73 74 64 6f 75 74 2c 20 22  printf(stdout, "
2ec80 25 31 30 6c 6c 75 20 22 2c 20 65 6c 61 70 73 65  %10llu ", elapse
2ec90 64 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  d);.        sqli
2eca0 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
2ecb0 74 64 6f 75 74 2c 20 6f 72 69 67 50 63 2c 20 26  tdout, origPc, &
2ecc0 61 4f 70 5b 6f 72 69 67 50 63 5d 29 3b 0a 23 65  aOp[origPc]);.#e
2ecd0 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69  ndif.    }.#endi
2ece0 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  f..    /* The fo
2ecf0 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64  llowing code add
2ed00 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65  s nothing to the
2ed10 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e   actual function
2ed20 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  ality.    ** of 
2ed30 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74  the program.  It
2ed40 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f   is only here fo
2ed50 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65  r testing and de
2ed60 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20  bugging..    ** 
2ed70 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e  On the other han
2ed80 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20  d, it does burn 
2ed90 43 50 55 20 63 79 63 6c 65 73 20 65 76 65 72 79  CPU cycles every
2eda0 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20   time through.  
2edb0 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74    ** the evaluat
2edc0 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20  or loop.  So we 
2edd0 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74  can leave it out
2ede0 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20   when NDEBUG is 
2edf0 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
2ee00 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20  #ifndef NDEBUG. 
2ee10 20 20 20 61 73 73 65 72 74 28 20 70 63 3e 3d 2d     assert( pc>=-
2ee20 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29  1 && pc<p->nOp )
2ee30 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
2ee40 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
2ee50 2d 3e 74 72 61 63 65 20 29 7b 0a 20 20 20 20 20  ->trace ){.     
2ee60 20 69 66 28 20 72 63 21 3d 30 20 29 20 66 70 72   if( rc!=0 ) fpr
2ee70 69 6e 74 66 28 70 2d 3e 74 72 61 63 65 2c 22 72  intf(p->trace,"r
2ee80 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20  c=%d\n",rc);.   
2ee90 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c     if( pOp->opfl
2eea0 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54  ags & (OPFLG_OUT
2eeb0 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46  2_PRERELEASE|OPF
2eec0 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20  LG_OUT2) ){.    
2eed0 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
2eee0 65 28 70 2d 3e 74 72 61 63 65 2c 20 70 4f 70 2d  e(p->trace, pOp-
2eef0 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
2ef00 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
2ef10 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66      if( pOp->opf
2ef20 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
2ef30 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  3 ){.        reg
2ef40 69 73 74 65 72 54 72 61 63 65 28 70 2d 3e 74 72  isterTrace(p->tr
2ef50 61 63 65 2c 20 70 4f 70 2d 3e 70 33 2c 20 26 61  ace, pOp->p3, &a
2ef60 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
2ef70 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
2ef80 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44  dif  /* SQLITE_D
2ef90 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20  EBUG */.#endif  
2efa0 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d  /* NDEBUG */.  }
2efb0 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20    /* The end of 
2efc0 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70  the for(;;) loop
2efd0 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75   the loops throu
2efe0 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20  gh opcodes */.. 
2eff0 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20   /* If we reach 
2f000 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d  this point, it m
2f010 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75 74  eans that execut
2f020 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20  ion is finished 
2f030 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72  with.  ** an err
2f040 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e  or of some kind.
2f050 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72  .  */.vdbe_error
2f060 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28  _halt:.  assert(
2f070 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d   rc );.  p->rc =
2f080 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28   rc;.  testcase(
2f090 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
2f0a0 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a  nfig.xLog!=0 );.
2f0b0 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63    sqlite3_log(rc
2f0c0 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  , "statement abo
2f0d0 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20  rts at %d: [%s] 
2f0e0 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20  %s", .          
2f0f0 20 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e           pc, p->
2f100 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  zSql, p->zErrMsg
2f110 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
2f120 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72  Halt(p);.  if( r
2f130 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  c==SQLITE_IOERR_
2f140 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c  NOMEM ) db->mall
2f150 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
2f160 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
2f170 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53 63  R;.  if( resetSc
2f180 68 65 6d 61 4f 6e 46 61 75 6c 74 20 29 20 73 71  hemaOnFault ) sq
2f190 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
2f1a0 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b  alSchema(db, 0);
2f1b0 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ..  /* This is t
2f1c0 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20  he only way out 
2f1d0 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  of this procedur
2f1e0 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a 20  e.  We have to. 
2f1f0 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65 20   ** release the 
2f200 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65 65  mutexes on btree
2f210 73 20 74 68 61 74 20 77 65 72 65 20 61 63 71 75  s that were acqu
2f220 69 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a 2a  ired at the.  **
2f230 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65   top. */.vdbe_re
2f240 74 75 72 6e 3a 0a 20 20 73 71 6c 69 74 65 33 42  turn:.  sqlite3B
2f250 74 72 65 65 4d 75 74 65 78 41 72 72 61 79 4c 65  treeMutexArrayLe
2f260 61 76 65 28 26 70 2d 3e 61 4d 75 74 65 78 29 3b  ave(&p->aMutex);
2f270 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20  .  return rc;.. 
2f280 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
2f290 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72 20   if a string or 
2f2a0 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61 6e  blob larger than
2f2b0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
2f2c0 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75  TH.  ** is encou
2f2d0 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f  ntered..  */.too
2f2e0 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33 53  _big:.  sqlite3S
2f2f0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2f300 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69 6e  rMsg, db, "strin
2f310 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
2f320 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  g");.  rc = SQLI
2f330 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74  TE_TOOBIG;.  got
2f340 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
2f350 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
2f360 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f   here if a mallo
2f370 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a  c() fails..  */.
2f380 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61  no_mem:.  db->ma
2f390 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
2f3a0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
2f3b0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
2f3c0 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  db, "out of memo
2f3d0 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ry");.  rc = SQL
2f3e0 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74  ITE_NOMEM;.  got
2f3f0 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
2f400 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
2f410 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74   here for any ot
2f420 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61  her kind of fata
2f430 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72  l error.  The "r
2f440 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a  c" variable.  **
2f450 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65   should hold the
2f460 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20   error number.. 
2f470 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
2f480 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74  _error:.  assert
2f490 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20  ( p->zErrMsg==0 
2f4a0 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  );.  if( db->mal
2f4b0 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d  locFailed ) rc =
2f4c0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
2f4d0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2f4e0 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  IOERR_NOMEM ){. 
2f4f0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
2f500 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2f510 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
2f520 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
2f530 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65   }.  goto vdbe_e
2f540 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
2f550 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
2f560 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74   the sqlite3_int
2f570 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65 74  errupt() API set
2f580 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a  s the interrupt.
2f590 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a    ** flag..  */.
2f5a0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
2f5b0 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74  errupt:.  assert
2f5c0 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
2f5d0 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d  rupted );.  rc =
2f5e0 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
2f5f0 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  T;.  p->rc = rc;
2f600 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
2f610 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2f620 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
2f630 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
2f640 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
2f650 5f 68 61 6c 74 3b 0a 7d 0a                       _halt;.}.